تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تعلم كيفية تغير حجم النافذة و الادوات التى عليها بتغير دقة عرض الشاشة screen resolut
#1
المصدر الاصلى للموضوع 


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

1 _ تغيير حجم النافذة أستنادا على دقة عرض الشاشة .
2_ تغيير حجم عناصر التحكم على النافذة استنادا إلى حجم النافذة
3_تغير موضع عناصر التحكم على النافذة أستنادا الى حجم النافذة 
4_ تغيير حجم الخط لعناصر التحكم استنادا إلى حجم العناصر أعلاه

الخطوة الاولى :قم بفتح مشروع جديد فى الفجوال بيسك 6 ....ثم اضف للمشروع Module وقم بتسميتها باسم FormControl 

الخطوة الثانية : نقوم بفتح الموديل لتعريف المتغيرات اللازمة بأستخدام الكود التالى :

كود :
Private List() As Control
Private curr_obj As Object
Private iHeight As Integer
Private iWidth As Integer
Private x_size As Double
Private y_size As Double


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

كود :
Private Type Control
  Index As Integer
  Name As String
  Left As Integer
  Top As Integer
  width As Integer
  height As Integer
End Type


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



1 _ 
تغيير حجم النافذة أستنادا على دقة عرض الشاشة....ولكى نستيطع تغير حجم النافذة بتغير دقة عرض الشاشة فأننا سنتخدم خصائص العرض والارتفاع لتلك النافذة مع الكائن Screen Object و الذى سيتيح لنا الوصول إلى دقة عرض الشاشة المتوفرة لدى المستخدم ....لذلك سنقوم بإنشاء اجراء لتغير حجم النافذة مع دقة عرض الشاشة و ذلك على النحو التالى :



كود :
Public Sub ResizeForm(frm As Form)
  'Set the forms height
  frm.height = Screen.height / 2
  'Set the forms width
  frm.width = Screen.width / 2
 
End Sub

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

الان سنقوم بعمل أجراء يسمى ResizeControls وذلك لاستخدامة فى تغير جميع أدوات التحكم جميعها الموجودة على النافذة و ذلك على النحو التالى :

كود :
Public Sub ResizeControls(frm As Form)
Dim i As Integer

x_size = frm.height / iHeight
y_size = frm.width / iWidth


For i = 0 To UBound(List)
 
  For Each curr_obj In frm
     
     If curr_obj.TabIndex = List(i).Index Then
       
         With curr_obj
           .Left = List(i).Left * y_size
           .width = List(i).width * y_size
           .height = List(i).height * x_size
           .Top = List(i).Top * x_size
         End With
     End If
 
  Next curr_obj
Next i
End Sub

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



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



السطر الثانى و الثالث : الحصول على نسبة من حجم النافذة الاولى (قبل التعديل ) لحجم النافذة الحالية ...لكى يتم تغير حجم الادوات بنفس تلك النسبة .



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



لذلك فى بداية الدرس قمنا بالاعلان عن المتغير curr_obj على انه كائن Object و بأستخدام الامر For Each curr_obj In frm نستطيع الحصول على كافة عناصر التحكم الموجودة على النافذة ...وقد أستخدمنا الدالةUBound للحصول على أعلى رقم Index على النافذة و التى سيتوقف عندها الحلقة التكرارية ومن ثم نحصل على جميع العناصر الموجودة فى النافذة ....ثم بعد ذلك حددنا عرض و طول و مكان عناصر التحكم على الفورم 


3_تغير موضع عناصر التحكم على النافذة أستنادا الى حجم النافذة...معظم الاخوة يريدون عند تغير حجم النافذة يتم تغير موضع عناصر التحكم بها بما يتناسب مع الوضع الجديد للنافذة و يتعبرون أن تغير حجم تلك العناصر هو الحل فى ذلك لكن ذلك ليس بصحيح ....فلكى تتمكن من تغير موضع عناصر التحكم سنتخدم الكود التالى : 

كود :
Public Sub GetLocation(frm As Form)

Dim i As Integer

For Each curr_obj In frm
'Resize the Array by 1, and preserve
'the original objects in the array
  ReDim Preserve List(i)
  With List(i)
     .Name = curr_obj
     .Index = curr_obj.TabIndex
     .Left = curr_obj.Left
     .Top = curr_obj.Top
     .width = curr_obj.width
     .height = curr_obj.height
  End With
  i = i + 1
Next curr_obj
 
'   This is what the object sizes will be compared to on rescaling.
  iHeight = frm.height
  iWidth = frm.width
End Sub

شرح الكود :



السطر الاول : الاعلان عن المتغير i لاستخدامه فى الحلقة التكرارية فيما بعد 



من السطر الثانى حتى الثانى عشر :عمل حلقة تكرارية لتحديد الموضع الحالى لجميع عناصر التحكم الموجودة على النافذة و حفظ تلك البيانات فى المصفوفة list 


4_ تغيير حجم الخط لعناصر التحكم استنادا إلى حجم العناصر أعلاه...وذلك بأستخدام الكود التالى :

كود :
Public Function SetFontSize() As Integer
 
  If Int(x_size) > 0 Then
 
     SetFontSize = Int(x_size * 8)
  End If
End Function

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



1 _ قم بإضافة الموديول Module الى مشروعك 


2_ فى حدث التحميل للفورم قم بكتابة الكود التالى :

كود :
Private Sub Form_Load()
  GetLocation Me
  ResizeForm Me
 
  lblInstructions.Font = SetFontSize()
End Sub

3 _ فى حدث تغير النافذة Form_Resize قم بإضافة الكود التالى :
كود :
Private Sub Form_Resize()
   ResizeControls Me
   lblInstructions.FontSize = SetFontSize()
End Sub


فى النهاية أرجوا أن يكون الدرس واضح للجميع و شكرا لمن علمنى هذا الدرس

الرد }}}
تم الشكر بواسطة:
#2
مجهود يستحق الشكر
الرد }}}
تم الشكر بواسطة: next


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  دوال الوقت و التاريخ و العمليات عليها المبرمج الطموح vb6 2 9,125 18-01-24, 11:31 AM
آخر رد: علي جابر
  تعلم كيفية حفظ و أسترجاع الصورة فى قاعدة بيانات أكسس باستخدام الكائن Stream object أحمد مناع 12 17,099 06-11-21, 02:16 PM
آخر رد: Sawsaw
  كيفية التعامل مع دوال الوقت و التاريخ و كيفية تنسيقهما فى الفجوال بيسك 6 the viper 9 11,286 22-11-18, 01:13 PM
آخر رد: next
  كيفية عمل امتداد خاص بك و جعل برنامجك الافتراضي لهذا الامتداد-ادخل وشوف المزيد بالصور Aly El-Haddad 7 5,974 10-09-17, 01:27 AM
آخر رد: تنمية المعرفة
  كيفية حساب الزكاة - خاص بالمبرمجين (فقه برمجية) السندبااد 9 10,279 19-11-14, 01:29 PM
آخر رد: Amir_Alzubidy
  كيفية حساب الزكاة - خاص بالمبرمجين (فقه برمجية) السندبااد 3 3,335 22-08-13, 04:36 PM
آخر رد: السندبااد
  تعلم كيف تصنع ادواتك الخاصة mohdsader 3 3,718 19-07-13, 02:56 AM
آخر رد: ellhadi39
  طريقة اضافة الادوات برمجياً Ahmad Jawad 0 2,391 28-10-12, 12:01 PM
آخر رد: Ahmad Jawad
  للمبتدئين - كيفية عمل Setup بالبرنامج المرفق مع الفيجوال بيسك RaggiTech 0 8,318 14-10-12, 02:00 PM
آخر رد: RaggiTech
  من المنتدى القديم - كيفية عمل Setup باستخدام Setup Factory RaggiTech 0 2,837 14-10-12, 01:43 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم