الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

خربشات في الأكسس

مثبّترائج
بدأه أحمد الحربي في 12 يناير 2006 · 81 رد · 59,842 مشاهدة · في قسم الأرشيف و المواضيع المميزه
مشاركة: واتساب X فيسبوك تيليجرام
#51

اخي مصلح الحريصي

بارك الله فيك ونفع بك اللهم آمين

حقيقة ان من البيان لسحرا وان من البرمجة لجنون وفنون

كل يوم اخي مصلح اكتشف لديك خبايا وخفايا واسرار فأين كانت هذه الاسرار والكنوز مدفونه

واصل بارك الله فيك لا استطيع ان اقاطع حديثك فأنا مستمعة جيده لمثل هذه السنفونيات الرائعة التي تتحفنا وتجعلنا في دهشة من امرنا كل يوم . ويبقى لزاما علينا ان نضع دروس متقدمة جدا جدا حتى نواكب هذه المسيرة البرمجية العطرة ولتكون لنا ذكرى خالده في المنتدى .

ولا ننسى استاذنا ومعلمنا فهد الدوسري سعودي 31 "SAUDI 31 " سابقا الذي له صولات وجولات وما زال وسيظل شامخا فوق قواعد البيانات .

بارك الله فيكم جميعا وما انا الا نقطة في بحركم والعين ما تعلى على الحاجب .

#52

شكراً للأساتذة الكبار جداً

بالنسبة للمثال قريباً جداً ولكن لا زلنا في بداية الطريق وأود أن تجربوا عمل مثال على ما سبق فالمحاولات مفيدة جداً في ترسخ المعلومات وسوف إرفق مثال بلا شك ولكن أعذروني ليس الآن .

#53
مصلح الحريصي كتب:
شكراً للأساتذة الكبار جداً

بالنسبة للمثال قريباً جداً ولكن لا زلنا في بداية الطريق وأود أن تجربوا عمل مثال على ما سبق فالمحاولات مفيدة جداً في ترسخ المعلومات وسوف إرفق مثال بلا شك ولكن أعذروني ليس الآن .

الاساتذه الافاضل والله كلكم مبدعين ولقد اعجبتني طريقة العمل الجماعي وروح الفريق التى يتعامل بها الكل فى هذا المنتدي وارجو ان يكون كل العرب والمسلمين على هذه الروح

تم تعديل هذه المشاركة بواسطة سلمى ابوذيد في 7 فبراير 2006 في 13:46

#54

البحث

الآن وبعد أن أخذنا قسطاً من الراحة سنواصل موضوعنا السابق .

بعد أن أضفنا البيانات إلى الجدول نريد أن نقوم بالبحث عن معلومات موظف ما .

أولاً : نذهب إلى زر البحث والذ سميناه (CmdSearch ) ومن خصائص هذا الزر نختار حدث ( عند النقر ) ( On Klick ) ونكتب الكود التالي:

  If TxtEmpNo = "" Or Not IsNumeric(TxtEmpNo) Then
        MsgBox "يوجد خطأ في الادخال"
        TxtEmpNo.SetFocus
    Exit Sub
    End If
        Opdatabase
        MySQL = "select * from Employees "
        MySQL = MySQL & "Where EmpNo = " & TxtEmpNo & ""
        Set MyTable = MyDatabase.OpenRecordset(MySQL(
        If MyTable.RecordCount > 0 Then
        TxtEmpName = MyTable!EmpName
        names = MyTable!EmpName
        TxtEmpTel.Format = ""
              
        TxtEmpTel = MyTable!EmpTel
        TxtEmpCity = MyTable!EmpCity
    Else
    
    End If
    MyTable.Clone
    MyDatabase.Close

نشرح الكود السابق :

السطر الأول : نفحص مربع النص الخاص برقم الموظف هل يحتوي على قيمة أم لا وإذا كان فارغاً ،خبر المستخدم بضرورة تسجيل رقم الموظف الذي نريد البحث عنه ثم نخرج من الإجراء.

إذا لم يكن مربع النص فارغاً نقوم بفتح قاعدة البيانات الخاصة بالجداول في الذاكرة ونقوم بإسناد سجلات جدول الموظفين إلى المتغير (MySQL ) بشرط أن يخزن في المتغير السجل المطابق فيه رقم الموظف للرقم الذي قمنا بتسجيله في مربع النص الخاص برقم الموظف على النموذج ( كما هو مبين في السطر الثامن ).

في السطر رقم ( 9 ) نقوم بإسناد السجل المخزن في المتغير MySQL إلى المتغير (MyTable ) بواسطة الكلمة Set .

السطر رقم ( 10 ) نختبر قيمة المتغير MyTable هل يحتوي على بيانات أم لا فإذا كان المتغير يحتوي على بيانات نقوم بإسناد الحقول الجدول المرتجعة في مربعات النصوص على النموذج.

تم تعديل هذه المشاركة بواسطة مصلح الحريصي في 14 فبراير 2006 في 17:43

#55

بسم الله الرحمن الرحيم

والله ما قصرت

واسال الله ان يجعلة في ميزان حسناتك

وبانتضار المزيد

"لا دار للمرء بعد الموت يسكنــها الا التي كان قبل الموت يبنيهـا"

"فان بناها بخـير طــاب مسكنــــه وان بناها بشـر خـاب بانيهـا"

#56

بصراحة فن وهندسه

وفى انتظار المزيد وكفاية علينا نشاهد ابداع المبدعين الله يكون فى عونكم وفى ميزان حسناتكم

مر الكلام زى الحسام يقطع ما كان ما يمر، أما المديح سهل ومريح يخدع لكين بيضر، والكلمة دين من غير إيدين بس الوفا ع الحر

#57

تحديث البيانات

قد نحتاج أحياناً لتعديل بيانات الموظف وحتى يتم ذلك لا بد أن نبحث عن الموظف الذي نريد تعديل بياناته ثم نختار زر تحديث المسمى (cmdUpDate ) وفي حدث عند النقر في صفحة الكود نكتب الكود التالي:

If MsgBox("سوف يتم تحديث بيانات هذا الموظف بناء على طلبك ، هل تريد ذلك فعلاً ؟", vbMsgBoxRight & _vbInformation + vbYesNo + vbDefaultButton2, "") = vbYes Then
Opdatabase
If names <> TxtEmpName Then
' تحديث الحقو في الجدول بالقيم المغيرة على التكستات
    MySQL = " UPDATE Employees "
    MySQL = MySQL & "SET EmpName= '" & Me![TxtEmpName]
    MySQL = MySQL & "', EmpTel= '" & Me![TxtEmpTel]
    MySQL = MySQL & "', EmpCity= '" & Me![TxtEmpCity]
    MySQL = MySQL & "' WHERE EmpNo=" & [TxtEmpNo] & ""
    MyDatabase.Execute MySQL
    MsgBox "تم تعديل البيانات بنجاح", vbMsgBoxRight, ""
End If
Else
End If

في السطر الأول نخبر المستخدم بأنه أختار تحديث البيانات ونسأله عما إذا كان يريد فعلاً تحديث البيانات فإذا وافق على التعديل يتم تنفيذ الكود الخاص بالتحديث.

السطر التالي :

   MySQL = MySQL & "' WHERE EmpNo=" & [TxtEmpNo] & ""

يعني أن لا يتم تحديث البيانات إلا للشخص المطابق رقمه للرقم الموضح على النافذة0

حذف سجل

قد نحتاج أحياناً لحذف بيانات موظف ما ولعمل ذلك نقوم بالتالي .

نختار زر تحديث المسمى (cmdDeleteRc) وفي حدث عند النقر في صفحة الكود نكتب الكود التالي:

   Dim sure As String
        sure = MsgBox("هل بالتأكيد تريد حذف هذا السجل؟", vbMsgBoxRight + vbCritical + vbYesNo + vbDefaultButton2, "")
    If sure = vbYes Then
        Opdatabase
    
        MySQL = "Delete * from Employees "
        MySQL = MySQL & "where EmpNo=" & Me!TxtEmpNo & ""
        
        MyDatabase.Execute MySQL
        MsgBox "تم حذف البيانات بنجاح", vbMsgBoxRight + vbInformation, ""
    End If

الكود بسيط جداً وأغلب أوامره سبق شرحها أغلب التغيير في لغة sql والسطر التالي يختص بحذف الموظف المحدد رقمه

     MySQL = MySQL & "where EmpNo=" & Me!TxtEmpNo & ""

عرض البيانات من جدولين

الآن سنقوم بإضافة جدول رواتب الموظفين في قاعدة بيانات الجداول:

اسم الجدول (Salary )

الحقول هي :

رقم العميل (EmpNo ) نوعه رقم

مقدار الراتب (Salary ) نوعه عملة

الزيادة (Increase ) نوعه عملة

إجمالي الراتب (Total ) نوعه عملة

نقوم بإضافة رواتب الموظفين

في القاعدة الواجة في نموذج (EmployeesFrm ) نضيف مربعات النصوص التالية :

أعلى راتب (TxtMax )

أقل راتب (TxtMin )

الوسط الحسابي (TxtAvg )

مجموع الرواتب (TxtSum )

والآن نريد كتابة لغة sql تعرض لنا أعلى راتب وأقل راتب والوسط الحسابي ومجموع الرواتب من جدول الرواتب ولذلك نقوم بإنشاء وحدة نمطية على مستوى النموذج ونسميها (sqlSalary ) ونكتب داخل هذه الوحدة النمطية الكود التالي :

Opdatabase
MySQL = "Select Sum(Salary)As SumSalary ,Avg(Salary) As AvgtSalary,Max(Salary)As MaxSalary,Min(Salary)As MinSalary  From Salary"
Set MyTable = MyDatabase.OpenRecordset(MySQL)
    Me.TxtMax = MyTable!MaxSalary
    Me.TxtMin = MyTable!MinSalary
    Me.TxtAvg = MyTable!AvgtSalary
    Me.TxtSum = MyTable!SumSalary

في السطر الثاني من الكود قمنا بإختيار قيم جدول الرواتب وأسندنها للمتغير MySQL وأنشئنا اسماء مستعارة للدوال في السطر نفسه حتى نستخدم الاسماء المستعارة في عرض القيم في مربعات النصوص وفي الأسطر الأربعة ألخيرة عرضنا القيم في مربعات النصوص.

تم تعديل هذه المشاركة بواسطة مصلح الحريصي في 19 فبراير 2006 في 17:12

#58

السلام عليكم

أخي الكريم أحمد الحربي صاحب المبادرة

أخواني و أساتذتي (مصلح .. فهد ...زهرة ..)

جزاكم الله خير الجزاء عن هذا العلم الذي تقدمونه لنا و نسأل الله العظيم أن يأجركم على هذا العمل و

يرزقكم العلم النافع

أخوكم

أبو رحمة

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#59

ارجو من الاخ احمد الحربي شرح اكثر عن تزامن النماذج او وضع مثال للتحميل مع الشكر للصبركم علينا

#60

اشعر وكأنني اتهامل مع عالم اخر لهم لغة اخرى

ما شاء الله

ارجو لكم التوفيق والتقدم

#61
أحمد الحربي كتب:
مرحباً بكم يا سادة يا كرام وسلام من الله عليكم ورحمة منه وبركات

سيداتي أنساتي سادتي ..

لقد كنت أثناء القراءة في الكتب غالباً وفي المنتديات قليلاً ، أقيّد ما أراه فائدة لي في الآكسس وفي البرمجة عموماً وفي قواعد البيانات منطقياً ، المهم تجمّع لدي مجموعة من الفوائد ، فقلت في نفسي لماذا أجعلها حبيسة الأوراق لا أجر ولا حسنة .

لذا فكرتُ أن أضعها هنا فربما استفاد منها عابر سبيل فاهتبلنا منه دعوة في ظهر الغيب نسعد بها في الدنيا والأخرى .

وإليكم هذه الفوائد غير مرتبة ، ومرة فوق ومرة تحت .

---------------------------------------------

* عند إجراء علميات حسابية وكان أحد الحقول فارغاً ، فستكون النتيجة Null ، ولتلافي ذلك استخدم دالة ()Nz لتحويل القيمة في الحقل الفارغ إلى (صفر)

Me.TXT3 = Nz(Me.TXT1, 0) + Nz(Me.TXT2, 0)

* لتعبئة حقول أخرى بعد الخروج من حقل معين ، نستخدم إجراء (قبل التحديث) للحقل المعين

* لإخفاء السجل الخالي (الجديد) في نهاية كل مجموعة سجلات ، ضع الخاصية Allow Additions (السماحة بالإضافة) على No ، لا .

* الإكثار من علامات التعجب (!) والنقط (.) في الإجراء ، يؤدي إلى بطء تنفيذ العمليات البرمجية ، وكلما قلّت كلما كان أسرع ، ومن وسائل تقليلها استخدام المتغيرات ، فمثلاً الإشارة إلى حقل في نموذج فرعي كالتالي :

Me.form2.Form!pathDB

فهنا استخدمنا نقطتان وعلامة تعجب واحدة ، فلو استخدمناها بهذه الطريقة مرة ثانية في نفس الإجراء لكانت أربع نقاط وعلامتان للتعجب ، وهذا يبطء التنفيذ ، لذلك ضعها في متغير واحد ثم استخدم المتغير كما تشاء

* فتح نموذج أو تقرير على سجلات معينة ، بثلاثة طرق :

1- خاصية RecordSource

Me.RecordSource = "select * from Customer Where Country='جدة' "

2- خاصية Filter

Me.Filter = "Country='جدة' "
Me.FilterOn = True

3- من الكائن DoCmd

DoCmd.OpenForm "form1", , , "Country='جدة' "

دمتم بخير ورضا

#62

مشكوووووووووووووووووووور يا أحمد الحربي وجزاك الله خير كثيرا

#63

ما زال أستاذنا مصلح يخربش ويخربش ويخربش .. حتى ملأ الموضوع علماً وفناً وإبداعا

أخي الموقر .. moner alie الشكر موصول لك ، ومبتدأ ومختتم للأساتذة الذين أتحفونا

#64

كيف تصنع ترقيم عشوائي خاص

طبعا كما نعلم ان الترقيم العشوائي يتم تحديده من قبل الاكسيس ولا يمكن التحكم به الا برمجيا لهذا تم عمل دالة الترقيم العشوائي تجدها في الوحدات النمطية

طريقة استخدام الدالة

1. انشىء جدول وضع به الحقول المطلوبه ومن ضمنها الحقل المراد ان يكون ترقيم عشوائي سنختار مثلا حقل اسمه txtRandomNumber

ونوعه نص ( يجب ان يكون نص فقط لا تحاول جعله رقم او ترقيم تلقائي )

2. انشىء نموذج مبني على الجدول

3. في النموذج ضع في حدث الحالي هذا الكود

Private Sub Form_Current()
If Me.NewRecord = True Then
Me!txtRandomNumber = fnAutoField()
End If
End Sub

4. انشىء وحدة نمطية جديده وضع بها هذه الوظيفة

Function fnAutoField() As String
 Dim strRndNo As String
10:
 strRndNo = Format((999999 * Rnd) + 1, "000000")
 If DCount("*", "tblTable", "txtRandomNumber='" & strRndNo & "'") > 0 Then GoTo 10
 fnAutoField = strRndNo
End Function

شرح الكود في النموذج

في الكود الموجود في النموذج في حدث الحالي نلاحظ انه عند اضافة سجل جديد يتم استدعاء الوظيفة من الوحدة النمطية بحيث ان قيمة الحقل المطلوب وهو txtRandomNumber يصبح مساويا لما ستنتجه الوظيفة من رقم عشوائي مكون من ستة ارقام ( تستطيع زيادة عدد الارقام حسب اختيارك ) وتم اظهاره مباشرة في النموذج وتخزينه في الجدول .

شرح الوظيفة في الوحدة النمطية

مهمة هذه الوظيفة انتاج عدد لا نهائي من الارقام العشوائية فيما لو لم نقم بالتحكم بها ( حصر العددين بين ارقام معينه ) فقد تم التحكم بعدد محصور بين 000000 ( ستة اصفار ) و 999999 ( ستة تسعات ) طبعا لك ان تتخيل الارقام الناتجة بين هذين العددين وطبعا تستطيع ايصال عدد السجلات الى مائة مليار لو قمت بزيادة الارقام في الاعداد في كلا الطرفين لهذا فإن المسئول عن هذه العملية هي دالة Rnd اختصارا لكلمة Random اي عشوائي كما ان الدالة DCount الخاصة بالعد وقعت تحت شرط معين هي وجوب ان يكون الرقم العشوائي اكبر من الصفر لهذا فإنه يتم تفعيل الوظيفة بحيث ان الصيغة strRndNo تساوي الوظيفة fnAutoField

وهذا مثال على ذلك

zaRandomAutoNumber.rar

اختكم

زهره

تم تعديل هذه المشاركة بواسطة zahrah في 16 أبريل 2006 في 05:10

#65

جزاك الله خير

#66

الله يبارك فيكم جميعا

ولا تحرمونا من الخربشات

#67

السلام عليكم

أخي أحمد ربي يعطيك الصحة على الجواهر الثمينة

ويبارك فيك على مجهوداتك الرائعة

#68

السلام عليكم

اخواني اعضاء المنتدي

فى بعض الاحيان يكون ناتج عملية حسابية رقم موجب او سالب او صفر او Null

ويحتاج المبرمجين الي اظهار تعليق علي الرقم مثل مسدد / مستحق / مدين / دائن / تخطي الحد الإئتماني / كبير / قوي .........

فيذهبون الي البرمجة او التنسيق الشرطي

انا عندي حل من الاكسس نفسه

كلنا نعلم ان كل مربع نص له خصائص ومن ضمن هذه الخصائص توجد خاصية تنسيق format

لو كتبنا فيها "فاضي";"zero";"سالب";"موجب"

وكان مصدر بيانتها حقل رقمي هنا يقوم الاكسس باظهار كلمة موجب اذا كان الرقم موجب او كلمة سالب اذا كان الرقم سالب او كلمة zero اذا كانت القيمة صفر او كلمة فاضي اذا كانت القيمة null

وممكن تتحكم بالالوان بك سهولة - شوف المرفق

db4u.rar

2

Microsoft Certified DataBase Administrator MCDBA

#69

الأخت الكريمة زهرة

شكر الله لك مجهودك الرائع

قرأت موضوعك عن كيفية عمل ترقيم عشوائى ولم أستفد منه وكنت أتمنى أن أجد فى الموضوع ما كنت أبحث عنه منذ فترة طويلة عن كيفية عمل كود للحسابات فى شجرة الحسابات يكون نصى وغير رقمى كى يسمح لأن يكون بداية الرقم او الكود 01000000 مثلا وعند فتح حساب جديد يضيف الرقم التالى فى حساب الدليل مهما إختلفت الأرقام

مثلا حساب الأصول 0100000 يندرج تحته الأراضى والآلات وحساب الخصوم 0200000 يندرج تحته رأس المال وهكذا أتمنى أن أجد حلا لهذه المسألة والله يحفظك ويحفظ بنتيك اللهم آمين

أخوك إبراهيم _ إسكندرية

الأخ الكريم ahamied

تابعت موضوعك عن الأرقام السالبة والموجبة وأعجبت جدا بالفكرة الرائعة

أخوك

إبراهيم _إسكندرية

#70

مشكووووووووووووووووووووووووووووووووووووووووووووووووووووووور

#71

هذه ليست خربشات هذه ابداعات , فنون , روائع

ارجوا اعادة تسمية المشاركة

تحية ملئها الاعجاب والتقدير لكل الموهوبين

وعلى رأسهم مشرفوا المنتدى العباقرة

اخوكم ZAHOF

#72

Twips and Pixels

وحدات قياس الشاشة ونقاط شاشة العرض

س : ما هي Twips و Pixels

ج : الـ Twips هي عبارة عن وحدات قياسية لانظمة العرض وتعرف الوحدة Twip على انها 1/1440 بوصة .

اما الـ Pixels هي عبارة عن نقاط الشاشة القياسية المعتمدة لوحدة قياس الصوره . والـ Pixel هي عبارة عن اي نقطة على شاشة العرض .

مثال : نرغب في نموذج مقاس 400 × 300 وهذا يعني ان عرضه هو 400 بيكسل وطوله 300 بيكسل

الان نريد استخدام هذا المقاس لتحديد طول وعرض النموذج اذا الامر سهل جدا نقوم بعرض النموذج في وضع التصميم ونختار حدث عند التحميل او الفتح ونضع هذا الكود

Private Sub Form_Load()
Me.Form.InsideHeight = 300
Me.Form.InsideWidth = 400
End Sub

ونقوم بعرض النموذج

ماذا نلاحظ

نلاحظ ان النموذج صغير وليس هو المطلوب كما توقعنا فما هو الخلل او المشكلة في ذلك ؟

الاجابة : المشكلة ان برنامج الاكسيس لا يوجد به وحدة قياس اسمها Pixel ولكن يوجد به وحدة قياس Twip .

س : يعني هذا اننا لابد من تحويل الـ Pixel الى Twip ؟

نعم لابد من التحويل لكي يتم التعرف عليها ووضعها سواء للعرض او الارتفاع .

س : حسنا عرفنا ان الـ Twip الواحده تساوي 1/1440 بوصة فكم تساوي الـ Pixel ؟

ج : سؤال اكثر من رائع وسوف يوصلنا للحل

كما ذكرنا سابقا ان البكسل Pixel عبارة عن نقطه على الشاشة لهذا لابد ان يكون لها طول وعرض لذا يكون طولها 88 وعرضها 90 وهذه ثابته لجميع مقاسات الشاشات .

س : هذا يدل انها ليست مربعة الشكل ؟

ج : بالتأكيد والا لما حصلنا على دقة شاشة مقاس 480 × 640 او 600 × 800 او 768 × 1024

آه يعتي الموضوع صار بهذه الطريقه كلها حسابات في حسابات . طيب كيف نحسب كل هذه الامور من اجل تحويل الـ Pixel الى Twip او العكس لكي نستخدمه في النموذج .

الاجابه : بما اننا في قسم البرمجه اذا لابد من استخدام دوال الـ API واستخدامها مع الكود لهذا نقوم بإضافة هذه الوظيفة Convert وتشمل على دالتين الدالة الاولى هي التحويل من التويب الى البيسكل ConvertTwipsToPixels والدالة الثانية هي عكسها التحويل من البيكسل الى التويب ConvertPixelsToTwips حسب الكود التالي

التحويل من التويب الى البيكسل

Option Compare Database
Option Explicit

Private Declare Function apiGetDC Lib "user32" Alias "GetDC" _
	(ByVal hwnd As Long) As Long
Private Declare Function apiReleaseDC Lib "user32" Alias "ReleaseDC" _
	(ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function apiGetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" _
	(ByVal hdc As Long, ByVal nIndex As Long) As Long

Private Const LOGPIXELSX = 88
Private Const LOGPIXELSY = 90

Public Const DIRECTION_VERTICAL = 1
Public Const DIRECTION_HORIZONTAL = 0

Function fTwipsToPixels(lngTwips As Long, lngDirection As Long) As Long
'دالة التحويل من تويب الى بيكسل
'   Function to convert Twips to pixels for the current screen resolution
'   Accepts:
'	   lngTwips - the number of twips to be converted
'	   lngDirection - direction (x or y - use either DIRECTION_VERTICAL or DIRECTION_HORIZONTAL)
'   Returns:
'	   the number of pixels corresponding to the given twips
	On Error GoTo E_Handle
	Dim lngDeviceHandle As Long
	Dim lngPixelsPerInch As Long
	lngDeviceHandle = apiGetDC(0)
	If lngDirection = DIRECTION_HORIZONTAL Then
		lngPixelsPerInch = apiGetDeviceCaps(lngDeviceHandle, LOGPIXELSX)
	Else
		lngPixelsPerInch = apiGetDeviceCaps(lngDeviceHandle, LOGPIXELSY)
	End If
	lngDeviceHandle = apiReleaseDC(0, lngDeviceHandle)
	fTwipsToPixels = lngTwips / 1440 * lngPixelsPerInch
fExit:
	On Error Resume Next
	Exit Function
E_Handle:
	MsgBox Err.Description, vbOKOnly + vbCritical, "Error: " & Err.Number
	Resume fExit
End Function

Function fPixelsToTwips(lngPixels As Long, lngDirection As Long) As Long
دالة التحويل من بيكسل الى تويب
'   Function to convert pixels to twips for the current screen resolution
'   Accepts:
'	   lngPixels - the number of pixels to be converted
'	   lngDirection - direction (x or y - use either DIRECTION_VERTICAL or DIRECTION_HORIZONTAL)
'   Returns:

'	   the number of twips corresponding to the given pixels
	On Error GoTo E_Handle
	Dim lngDeviceHandle As Long
	Dim lngPixelsPerInch As Long
	lngDeviceHandle = apiGetDC(0)
	If lngDirection = DIRECTION_HORIZONTAL Then
		lngPixelsPerInch = apiGetDeviceCaps(lngDeviceHandle, LOGPIXELSX)
	Else
	lngPixelsPerInch = apiGetDeviceCaps(lngDeviceHandle, LOGPIXELSY)
	End If
	lngDeviceHandle = apiReleaseDC(0, lngDeviceHandle)
	fPixelsToTwips = lngPixels * 1440 / lngPixelsPerInch
fExit:
	On Error Resume Next
	Exit Function
E_Handle:
	MsgBox Err.Description, vbOKOnly + vbCritical, "Error: " & Err.Number
	Resume fExit
End Function

ولاستخدامها نقوم بإستدعاؤها من خلال النموذج ليتم التحويل حسب الرقم المعطى لها

مثال : حول الرقم التالي 400 من بيكسل الى تويب

الاجابة : نستخدم دالة التحويل من البيسكل الى التويب بهذه الطريقة

دالة التحويل من بيكسل الى تويب

fPixelsToTwips(400,0)

وسيكون الناتج هو 6000 تويب

بالامكان وضع مربعي نص غير منضمين - في النموذج - مربع النص الاول نسميه مثلا N وهو يمثل الرقم الذي نكتبه فيه والاخر نسميه ConTwips وهو ناتج التحويل الى تويب

لهذا نضع مصدر عنصر تحكم مربع النص ConTwips هو

=fPixelsToTwips(nz([N];0);0)

انظر المثال المرفق

وللتحويل من تويب Twip الى بيكسل Pixel نستخدم الدالة الخاصة بالتحويل من تويب الى بكسل

مثال : حول الرقم 9200 من تويب الى بيكسل

الاجابة : نستخدم دالة التحويل من التويب الى البيكسل بهذه الطريقة

دالة التحويل من تويب الى بكسل

fTwipsToPixels(9200,0)

وسيكون الناتج هو 613 بيكسل

بالامكان وضع مربعي نص غير منضمين - في النموذج - مربع النص الاول نسميه مثلا N وهو يمثل الرقم الذي نكتبه فيه والاخر نسميه ConPixels وهو ناتج التحويل الى بيكسل

لهذا نضع مصدر عنصر تحكم مربع النص ConPixels هو

=fTwipsToPixels(nz([N];0);0)

انظر المثال المرفق

ملاحظة : جميع وحدات القياس تعتمد على دقة الشاشة فكلما زادت دقة الشاشة كلما صغرت مقاسات النقاط وزاد عددها في البوصة الواحده

الخلاصة :

1. بواسطة هذه الدالة نسنطيع التحويل من البيكسل الى التويب والعكس

2. الغرض من هذه الدالة هو توحيد جميع مقاسات النموذج برقم محدد وثابت لا يتغير مهما تغيرت مقاس الشاشات فبعض الاشخاص لديهم مقاسات كبيرة الحجم والبعض الاخر لديهم مقاسات صغيره للشاشات ويفضل دائما هو استخدام المقاس الموحد 800 بيسكل × 600 بيكسل .

3. بعد الحصول على الرقم المطلوب وخاصة التويب نقوم بوضعه في الكود الاول السايق في اول المشاركه ليصبح بعد التعديل هو

Private Sub Form_Load()
Me.Form.InsideHeight = 4500
Me.Form.InsideWidth = 600
End Sub

المثال المرفق مع دالة التحويل

ConvertTwipsToPixels.rar

تم تعديل هذه المشاركة بواسطة zahrah في 16 أكتوبر 2006 في 21:01

1
#73

شكرا لهذه الابداعات

هذه الخربشات تساعدنا على الابداع وعلى التواصل

شكرا لكم جميعا

#74

الأخ الفاضل ... أود أن اضيف خربشتين :) أخريين فى الأكسس

الأولى بعنوان ترقيم تلقائى مسلسل واحد عبر عدة جداول فى قواعد بيانات مختلفة : فى /index.ph...16&t=118581

الثانية بعنوان تحميل بيانات من قاعدة البيانات (بعيدة) إلى الذاكرة (Cache) : فى /index.ph...16&t=118582

شكراً

1

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#75

بيض الله وجهك وجزاك الله خير

مواضيع مشابهة