Twips and Pixels وحدات قياس الشاشة ونقاط شاشة العرض س : ما هي Twips و Pixels ج : الـ Twips هي عبارة عن وحدات قياسية لانظمة العرض وتعرف الوحدة Twip على انها 1/1440 بوصة . اما الـ Pixels هي عبارة عن نقاط الشاشة القياسية المعتمدة لوحدة قياس الصوره . والـ Pixel هي عبارة عن اي نقطة على شاشة العرض . مثال : نرغب في نموذج مقاس 400 × 300 وهذا يعني ان عرضه هو 400 بيكسل وطوله 300 بيكسل الان نريد استخدام هذا المقاس لتحديد طول وعرض النموذج اذا الامر سهل جدا نقوم بعرض النموذج في وضع التصميم ونختار حدث عند التحميل او الفتح ونضع هذا الكود plain text Private Sub Form_Load()Me.Form.InsideHeight = 300Me.Form.InsideWidth = 400End Sub ونقوم بعرض النموذج ماذا نلاحظ نلاحظ ان النموذج صغير وليس هو المطلوب كما توقعنا فما هو الخلل او المشكلة في ذلك ؟ الاجابة : المشكلة ان برنامج الاكسيس لا يوجد به وحدة قياس اسمها Pixel ولكن يوجد به وحدة قياس Twip . س : يعني هذا اننا لابد من تحويل الـ Pixel الى Twip ؟ نعم لابد من التحويل لكي يتم التعرف عليها ووضعها سواء للعرض او الارتفاع . س : حسنا عرفنا ان الـ Twip الواحده تساوي 1/1440 بوصة فكم تساوي الـ Pixel ؟ ج : سؤال اكثر من رائع وسوف يوصلنا للحل كما ذكرنا سابقا ان البكسل Pixel عبارة عن نقطه على الشاشة لهذا لابد ان يكون لها طول وعرض لذا يكون طولها 88 وعرضها 90 وهذه ثابته لجميع مقاسات الشاشات . س : هذا يدل انها ليست مربعة الشكل ؟ ج : بالتأكيد والا لما حصلنا على دقة شاشة مقاس 480 × 640 او 600 × 800 او 768 × 1024 آه يعتي الموضوع صار بهذه الطريقه كلها حسابات في حسابات . طيب كيف نحسب كل هذه الامور من اجل تحويل الـ Pixel الى Twip او العكس لكي نستخدمه في النموذج . الاجابه : بما اننا في قسم البرمجه اذا لابد من استخدام دوال الـ API واستخدامها مع الكود لهذا نقوم بإضافة هذه الوظيفة Convert وتشمل على دالتين الدالة الاولى هي التحويل من التويب الى البيسكل ConvertTwipsToPixels والدالة الثانية هي عكسها التحويل من البيكسل الى التويب ConvertPixelsToTwips حسب الكود التالي التحويل من التويب الى البيكسل expand |plain text Option Compare DatabaseOption ExplicitPrivate Declare Function apiGetDC Lib "user32" Alias "GetDC" _ (ByVal hwnd As Long) As LongPrivate Declare Function apiReleaseDC Lib "user32" Alias "ReleaseDC" _ (ByVal hwnd As Long, ByVal hdc As Long) As LongPrivate Declare Function apiGetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" _ (ByVal hdc As Long, ByVal nIndex As Long) As LongPrivate Const LOGPIXELSX = 88Private Const LOGPIXELSY = 90Public Const DIRECTION_VERTICAL = 1Public Const DIRECTION_HORIZONTAL = 0Function 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 * lngPixelsPerInchfExit: On Error Resume Next Exit FunctionE_Handle: MsgBox Err.Description, vbOKOnly + vbCritical, "Error: " & Err.Number Resume fExitEnd FunctionFunction 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 / lngPixelsPerInchfExit: On Error Resume Next Exit FunctionE_Handle: MsgBox Err.Description, vbOKOnly + vbCritical, "Error: " & Err.Number Resume fExitEnd Function ولاستخدامها نقوم بإستدعاؤها من خلال النموذج ليتم التحويل حسب الرقم المعطى لها مثال : حول الرقم التالي 400 من بيكسل الى تويب الاجابة : نستخدم دالة التحويل من البيسكل الى التويب بهذه الطريقة دالة التحويل من بيكسل الى تويب plain text fPixelsToTwips(400,0) وسيكون الناتج هو 6000 تويب بالامكان وضع مربعي نص غير منضمين - في النموذج - مربع النص الاول نسميه مثلا N وهو يمثل الرقم الذي نكتبه فيه والاخر نسميه ConTwips وهو ناتج التحويل الى تويب لهذا نضع مصدر عنصر تحكم مربع النص ConTwips هو plain text =fPixelsToTwips(nz([N];0);0) انظر المثال المرفق وللتحويل من تويب Twip الى بيكسل Pixel نستخدم الدالة الخاصة بالتحويل من تويب الى بكسل مثال : حول الرقم 9200 من تويب الى بيكسل الاجابة : نستخدم دالة التحويل من التويب الى البيكسل بهذه الطريقة دالة التحويل من تويب الى بكسل plain text fTwipsToPixels(9200,0) وسيكون الناتج هو 613 بيكسل بالامكان وضع مربعي نص غير منضمين - في النموذج - مربع النص الاول نسميه مثلا N وهو يمثل الرقم الذي نكتبه فيه والاخر نسميه ConPixels وهو ناتج التحويل الى بيكسل لهذا نضع مصدر عنصر تحكم مربع النص ConPixels هو plain text =fTwipsToPixels(nz([N];0);0) انظر المثال المرفق ملاحظة : جميع وحدات القياس تعتمد على دقة الشاشة فكلما زادت دقة الشاشة كلما صغرت مقاسات النقاط وزاد عددها في البوصة الواحده الخلاصة : 1. بواسطة هذه الدالة نسنطيع التحويل من البيكسل الى التويب والعكس 2. الغرض من هذه الدالة هو توحيد جميع مقاسات النموذج برقم محدد وثابت لا يتغير مهما تغيرت مقاس الشاشات فبعض الاشخاص لديهم مقاسات كبيرة الحجم والبعض الاخر لديهم مقاسات صغيره للشاشات ويفضل دائما هو استخدام المقاس الموحد 800 بيسكل × 600 بيكسل . 3. بعد الحصول على الرقم المطلوب وخاصة التويب نقوم بوضعه في الكود الاول السايق في اول المشاركه ليصبح بعد التعديل هو plain text Private Sub Form_Load()Me.Form.InsideHeight = 4500Me.Form.InsideWidth = 6000End Sub المثال المرفق مع دالة التحويل ConvertTwipsToPixels.rar (19.04كيلو ) عدد مرات التحميل : 714 اختكم زهره
Private Sub Form_Load()Me.Form.InsideHeight = 300Me.Form.InsideWidth = 400End Sub
Option Compare DatabaseOption ExplicitPrivate Declare Function apiGetDC Lib "user32" Alias "GetDC" _ (ByVal hwnd As Long) As LongPrivate Declare Function apiReleaseDC Lib "user32" Alias "ReleaseDC" _ (ByVal hwnd As Long, ByVal hdc As Long) As LongPrivate Declare Function apiGetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" _ (ByVal hdc As Long, ByVal nIndex As Long) As LongPrivate Const LOGPIXELSX = 88Private Const LOGPIXELSY = 90Public Const DIRECTION_VERTICAL = 1Public Const DIRECTION_HORIZONTAL = 0Function 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 * lngPixelsPerInchfExit: On Error Resume Next Exit FunctionE_Handle: MsgBox Err.Description, vbOKOnly + vbCritical, "Error: " & Err.Number Resume fExitEnd FunctionFunction 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 / lngPixelsPerInchfExit: On Error Resume Next Exit FunctionE_Handle: MsgBox Err.Description, vbOKOnly + vbCritical, "Error: " & Err.Number Resume fExitEnd Function
fPixelsToTwips(400,0)
=fPixelsToTwips(nz([N];0);0)
fTwipsToPixels(9200,0)
=fTwipsToPixels(nz([N];0);0)
Private Sub Form_Load()Me.Form.InsideHeight = 4500Me.Form.InsideWidth = 6000End Sub