تعلم كيفية تغير حجم النافذة و الادوات التى عليها بتغير دقة عرض الشاشة screen resolution

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

تعلم كيفية تغير حجم النافذة و الادوات التى عليها بتغير دقة عرض الشاشة screen resolution

مُساهمة من طرف أحمد مناع في الإثنين فبراير 11, 2013 1:18 pm

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




أهلا وسهلا بكم أخوانى الكرام فى درس جديد من دروس منتدى مصر التقنى و هو عن كيفية تغير حجم نوافذ برنامج عندما تتغير دقة عرض الشاشة 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



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



[/center]
المرفقات
FormControl.zip لا تتوفر على صلاحيات كافية لتحميل هذه المرفقات.(2 Ko) عدد مرات التنزيل 139

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

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

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 810
النقاط : 1479
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف جورج صبحى في الأربعاء فبراير 13, 2013 10:52 am

شكرا استاذ أحمد على هذا الموضوع الشيق ....لكن بتظهر بعض الاخطاء عند استخدام هذا الكود ؟

جورج صبحى
.....
.....

تاريخ التسجيل : 18/02/2011
المساهمات : 98
النقاط : 211
التقيم : 3
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف torky1985 في السبت مايو 25, 2013 8:29 pm

ياريت الرد هناك خطء انا قدرت احدده لك ياريت الرد لانى بحاجه للكود ده اوى


Public Sub GetLocation(frm As Form)
Dim i As Integer
' Load the current positions of each object into a user defined type array.
' This information will be used to rescale them in the Resize function.

'Loop through each control
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

torky1985
.....
.....

تاريخ التسجيل : 25/05/2013
المساهمات : 81
النقاط : 114
التقيم : 1
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف أحمد مناع في السبت مايو 25, 2013 8:46 pm

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




و الافضل اليك مثال فى المرفقات يوضح كيفية تغير حجم الادوات كلا على حد
المرفقات
_AutoPos.zip لا تتوفر على صلاحيات كافية لتحميل هذه المرفقات.(4 Ko) عدد مرات التنزيل 84

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

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

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 810
النقاط : 1479
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف torky1985 في الأحد مايو 26, 2013 5:27 am

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

torky1985
.....
.....

تاريخ التسجيل : 25/05/2013
المساهمات : 81
النقاط : 114
التقيم : 1
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف torky1985 في الأحد مايو 26, 2013 5:58 am

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

torky1985
.....
.....

تاريخ التسجيل : 25/05/2013
المساهمات : 81
النقاط : 114
التقيم : 1
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف أبوسجود في الأحد مايو 26, 2013 7:10 am

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

و الله يا اخى عندى معلومة بتقول أن أفضل دقة عرض الشاشة هو 1280x1024 و السبب فى ذلك ان تلك الدقة هى القيمة الافتراضية التى يدعهما ويندوز أكس بى لمعظم الشاشات خاصة 17 بوصة ..... لذلك قم بإنشاء مشروعك فى تلك الدقة وضع ادواتك على النافذة و عند استخدام الكود الذى اعطهولك أ/أحمد مناع سيقوم تلقائية بتنسيق حجم الادوات فى حاله تغيرها الى قيمة اكبر او اصغر

أبوسجود
.....
.....

تاريخ التسجيل : 18/02/2011
المساهمات : 87
النقاط : 162
التقيم : 7
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف torky1985 في الأحد مايو 26, 2013 8:13 am

اشكرك اخى ع الرد وعلى تعبكم جميعا معى

torky1985
.....
.....

تاريخ التسجيل : 25/05/2013
المساهمات : 81
النقاط : 114
التقيم : 1
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف مدونة وليدوف التطويرية في الإثنين أغسطس 19, 2013 7:53 am


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

مدونة وليدوف التطويرية
...
...

تاريخ التسجيل : 22/11/2011
المساهمات : 32
النقاط : 47
التقيم : 3
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف أحمد مناع في الإثنين أغسطس 19, 2013 9:21 am

مدونة وليدوف التطويرية كتب:
بارك الله فيكم يا اخوه
و بارك الله فيك يا اخى على شريفك لنا

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

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

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 810
النقاط : 1479
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف RANA في الثلاثاء سبتمبر 24, 2013 12:18 pm

جزاكم الله خيرا على التوضيح

RANA
....
....

تاريخ التسجيل : 01/08/2013
المساهمات : 64
النقاط : 103
التقيم : 1
الدولة : فلسطين
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف حسام في السبت أبريل 12, 2014 4:45 pm

شكرا على الجهود المبذولة

حسام
زائر


الرجوع الى أعلى الصفحة اذهب الى الأسفل

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

مُساهمة من طرف adooolah2011 في السبت أكتوبر 01, 2016 9:29 pm

شكرا لك استاذي الكريم على ماتبذله من جهد فى الشرح

adooolah2011
.
.

تاريخ التسجيل : 14/09/2016
المساهمات : 2
النقاط : 2
التقيم : 0
الدولة : السعودية
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

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


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى