• 0
zahrah

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

سؤال

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 = 6000
End Sub

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

ConvertTwipsToPixels.rar

اختكم

زهره

تم تعديل بواسطه zahrah
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

8 إجابة على هذا السؤال .

  • 0

تبارك الله استاذه زهره

كل يوم تطلع علينا شمسه تطل علينا الاستاذه زهره بالروائع الثمينة

تمنياتي لك بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يعطيك العافية اختنا الفاضلة زهرة على هذا الموضوع الرائع

بارك الله فيك وفي عمرك ومالك وولدك يا زهرة منتدانا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الله يزيدك من علمه ويحفظك من كل شر ويجعل لك في كل خطوة حسنة في الدنيا والاخرة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مثال رائع ولكن كيف يمكن الاستفاده منه . هل المقصود هو أن يتم فنح النموذج على حسب مقاس الشاشة مثلا سواء كانت 480 × 640 او 600 × 800 او 768 × 1024

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لا يا أخي الكريم kiko11

ليس هذا القصد من هذا الشرح والبرنامج

دعني اوضح لك اكثر

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

مثال : نريد ان نجعل مقاس جميع النماذج 640 × 480 ( كيف ستكتب هذا المقاس لجميع النماذج ) بالتأكيد لن تستطيع الا بدالة التحويل

اذا بعد استخدام الدالة سنجد ان 640 = 9600

وكذلك سنجد ان الرقم الاخر ... 480 = 7200

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

Private Sub Form_Load()
Me.Form.InsideHeight = 7200
Me.Form.InsideWidth = 9600
End Sub

ويوضع هذا الكود في جميع النماذج

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

هذه العملية لها اكواد خاصة تختلف عن ما نتحدث عنه .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وصلت الفكرة وكل سنة وانتي طيبة وعيد سعيد .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

هذه العملية لها اكواد خاصة تختلف عن ما نتحدث عنه .

انا هذا ما فهمته سابقا ..... ونشكر استاذتنا زهرة على هذا التواصل والمتابعه والايضاح ............ ونتمنى منها ان تلقي الضوء على اعادة تحجيم النماذج ReSize مشكورة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

مشكورة أخت زهرة

زادك الله وإيانا علما نافعا

وبارك الله فيك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .