تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] كلاس ResizeControls وطريقة جديد ومميزة لتكبير وتصغير ادوات الفورم تلقائيا
#1
Rainbow 
السلام عليكم

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

مشروع بسيط كمثال للموضوع http://www.elmagek.net/up/do.php?id=362

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

ضع هذه الاكواد فى اى مكان فى الفورم

كود :
Dim R As New ResizeControls()
   Private Sub Form1_HandleCreated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.HandleCreated
       R.Container = Me
   End Sub
   Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
       Me.StartPosition = FormStartPosition.CenterScreen
       R.ResizeControls()
   End Sub

ثانيا : ضيف كلاس جديد وامسح كل الاكواد الى فيه وضيف فيه كود هذا الكلاس

الكلاس

كود :
Public Class ResizeControls

   Dim RatioTable As New Hashtable

   Private WindowHeight As Single
   Private WindowWidth As Single
   Private HeightRatio As Single
   Private WidthRatio As Single

   Private _Container As New Control

   Private Shared m_FormWidth As Long                          'Original form width.
   Private Shared m_FormHeight As Long

   Public Property Container() As Control
       Get
           Return _Container
       End Get
       Set(ByVal Ctrl As Control)
           _Container = Ctrl
           FullRatioTable()
       End Set

   End Property

   Private Structure SizeRatio
       Dim TopRatio As Single
       Dim LeftRatio As Single
       Dim HeightRatio As Single
       Dim WidthRatio As Single
   End Structure

   Private Sub FullRatioTable()
       WindowHeight = _Container.Height
       WindowWidth = _Container.Width
       RatioTable = New Hashtable
       AddChildrenToTable(_Container)

   End Sub

   Private Sub AddChildrenToTable(ByRef ChildContainer As Control)
       Dim R As New SizeRatio

       For Each C As Control In ChildContainer.Controls
           With C
               R.TopRatio = CSng(.Top / WindowHeight)
               R.LeftRatio = CSng(.Left / WindowWidth)
               R.HeightRatio = CSng(.Height / WindowHeight)
               R.WidthRatio = CSng(.Width / WindowWidth)
               RatioTable(.Name) = R
               If .HasChildren Then
                   AddChildrenToTable(C)
               End If
           End With
       Next

   End Sub

   Public Sub ResizeControls()


       HeightRatio = CSng(_Container.Height / WindowHeight)
       WidthRatio = CSng(_Container.Width / WindowWidth)

       WindowHeight = _Container.Height
       WindowWidth = _Container.Width

       ResizeChildren(_Container)



   End Sub

   Private Sub ResizeChildren(ByRef ChildContainer As Control)

       Dim R As New SizeRatio
       For Each C As Control In ChildContainer.Controls
           With C
               R = CType(RatioTable(.Name), SizeRatio)
               .Top = CInt(WindowHeight * R.TopRatio)
               .Left = CInt(WindowWidth * R.LeftRatio)
               .Height = CInt(WindowHeight * R.HeightRatio)
               .Width = CInt(WindowWidth * R.WidthRatio)

               If .HasChildren Then
                   ResizeChildren(C)

               End If

           End With


           Select Case True
               Case TypeOf C Is ListBox
                   Dim L As New ListBox
                   L = CType(C, ListBox)
                   L.IntegralHeight = False
           End Select

           ResizeControlFont(C, WidthRatio, HeightRatio)

       Next





   End Sub

   Public Shared Sub SubResize(ByVal F As Form, ByVal percentW As Single, ByVal percentH As Single)

       Dim FormHeight As Long
       Dim FormWidth As Long
       Dim HeightChange As Single, WidthChange As Single


       FormHeight = Int((Screen.PrimaryScreen.WorkingArea.Height) * (percentH / 100))
       FormWidth = Int((Screen.PrimaryScreen.WorkingArea.Width) * (percentW / 100))

       With F
           .Height = FormHeight
           .Width = FormWidth

           HeightChange = .ClientSize.Height / m_FormHeight
           WidthChange = .ClientSize.Width / m_FormWidth


       End With


   End Sub



   Private Sub ResizeControlFont(ByRef Ctrl As Control, ByVal RatioW As Single, ByVal RatioH As Single)

       Dim FSize As Single = Ctrl.Font.Size
       Dim FStyle As FontStyle = Ctrl.Font.Style
       Dim FNome As String = Ctrl.Font.Name
       Dim NewSize As Single = FSize

       NewSize = CSng(FSize * Math.Sqrt(RatioW * RatioH))
       Dim NFont As New Font(FNome, CSng(NewSize), FStyle)
       Ctrl.Font = NFont

   End Sub

End Class
الرد }}}}
#2
السلام عليكم أخي العزيز ورحمة الله وبركاته
لماذا تتعبون أنفسكم والخصائص متوفر بهذا الشأن، أخي العزيز إستخدم TableLayOutPanel فهي تفي بهذا الغرض صدقني عم بحكيك عن خبرة.



عن مولا نا علي ابن أبي طالب عليه السلام :
إضرب بعض الرأي ببعض يتولد منه الصواب.
الرد }}}}
تم الشكر بواسطة: sendbad100 , أسامة السالمي , Fantastico
#3
السلام عليكم


أشكرك أستاذ الماجيك مسعد على وضع الكلاس للفائدة العامة.


كما أشكر الأستاذ khodor1985 على هذه الطريقة الرائعة لترتيب الفورم بشكل احترافي فعلاً،
أرجو وضع الفيديو في موضوع مستقل لتميز الفكرة والطريقة مع بعض الصور الثابتة من الفيديو.
الرد }}}}
#4
إن شاء الله سوف سوف أتكلم عن هذا الموضوع بالتفصيل في فيديو مستقل
أما بالنسبة لأخي سعود سوف أسعى جاهدا لتقديم الأفكار الإحترافية للإخوة الكرام ولن أبخل في ذلك أبدا

ههه إخطأت في التسمية بدل مساعدة وضعت سعود عذرا على الخطأ الكتبي
عن مولا نا علي ابن أبي طالب عليه السلام :
إضرب بعض الرأي ببعض يتولد منه الصواب.
الرد }}}}
تم الشكر بواسطة: أسامة السالمي
#5
(19-02-17, 05:28 AM)khodor1985 كتب : السلام عليكم أخي العزيز ورحمة الله وبركاته
لماذا تتعبون أنفسكم والخصائص متوفر بهذا الشأن، أخي العزيز إستخدم TableLayOutPanel فهي تفي بهذا الغرض صدقني عم بحكيك عن خبرة.




وعليكم السلام اخى

بالفعل طريقتك ممتازة

ولكن هذا الكلاس مفيد فى نظرى فى شئ معين وهو ماذا لو كان الفورم مصمم من قبل

هل سيقوم بمسحه وتصميمه من الصفر؟

عن نفسى لا افضل ان ابدء التصميم بالصفر خصوصا لو مشروع كبير وفيه فورمات كثيرة

لكن الكلاس مفيد فى مثل هذه الحالة

اتمنى تكون فهمت قصدى

واشكرك جزيلا على الشرح والطريقة الرائعة التى قدمتها
الرد }}}}
تم الشكر بواسطة:
#6
التصميم باحترافية يحتاج للأداة TableLayoutPanel
عن مولا نا علي ابن أبي طالب عليه السلام :
إضرب بعض الرأي ببعض يتولد منه الصواب.
الرد }}}}
تم الشكر بواسطة: الماجيك مسعد
#7
مشكور أستاذ (khodor1985)
لكن هل أداة (TableLayOutPanel) تفيد في حال تشغيل البرنامج في شاشة ذات أبعاد مختلفة ؟!
أم أن كل ما تفعله هو تغيير حجم الأدوات عند تغيير الشاشة؟!

لأنه إذا كان كل ماتفعله هذه الأداه هو تحجيم الأدوات وفقاً لحجم الشاشة فأعتقد أن الخاصيتين (Anchor) و (Dock) تفيان بالغرض Undecided
 
الرد }}}}
تم الشكر بواسطة: الماجيك مسعد
#8
أؤكد لك من وحي خبرتي أنها تعمل علي أي شاشة مهما كانت أبعادها.
عن مولا نا علي ابن أبي طالب عليه السلام :
إضرب بعض الرأي ببعض يتولد منه الصواب.
الرد }}}}
تم الشكر بواسطة: الماجيك مسعد
#9
أنت استخدمت زر تكبير و تصغير و لكن ماذا لو تم سحب افورم من الجانب يعني لو قام المستخدم بتطويل العرض و ليس زر التكبير (يعني ابعادها X,Y و بعد سحب الفورم أصبح البعد G,Y )
ملاحظة : أنا بعدي عن جهازي و لم أجربها بعد بنفسي و لكن الموضوع شيق فطرحت السؤال مباشرة
الرد }}}}
تم الشكر بواسطة:
#10
(06-04-17, 03:07 AM)kosay كتب : أنت استخدمت زر تكبير و تصغير و لكن ماذا لو تم سحب افورم من الجانب يعني لو قام المستخدم بتطويل العرض و ليس زر التكبير (يعني ابعادها X,Y و بعد سحب الفورم أصبح البعد G,Y )
ملاحظة : أنا بعدي عن جهازي و لم أجربها بعد بنفسي و لكن الموضوع شيق فطرحت السؤال مباشرة

نعم يتم التكبير والتصغير ايضا
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الفورم بخاصية none محمود صالح 1 55 30-12-17, 03:52 AM
آخر رد: طالب برمجة
  [سؤال] ارسال بريد الكتروني في وقت معين تلقائيا coder-22 0 73 23-11-17, 12:34 PM
آخر رد: coder-22
  حساب مكان الفورم علي شاشة الكمبيوتر silverlight 1 126 09-11-17, 09:35 PM
آخر رد: الوايلي
  رسم الفورم و طباعته silverlight 1 235 19-06-17, 05:44 PM
آخر رد: silverlight
  صمم الكلاس الخاص بك - كلاس للتعامل مع SQL SERVER ابو ليلى 16 2,486 03-09-16, 07:43 PM
آخر رد: tryold
  [اقتراح] ادوات vb4arb HASAN6.0 4 956 07-11-15, 06:44 PM
آخر رد: HASAN6.0
  [مقال] التهنيق (تهنيق ادوات-تهنيق اكواد) من نظرتي وتعبيري الخاصتين سعود 0 683 11-09-15, 11:23 PM
آخر رد: سعود
  من المنتدى القديم - تحريك الفورم من اي مكان ( للاخ omar2205 ) المبرمج علي نوري 2 1,126 16-08-15, 05:09 PM
آخر رد: otman_bel
  إيجاد جميع الكونترول الموجودة في الفورم Recursively Find All Controls in Form silverlight 0 908 26-05-15, 12:31 AM
آخر رد: silverlight
  [مقال] شرح الدوال العامة في كلاس ( Process ) Dev Saeed 4 1,869 06-04-15, 06:54 PM
آخر رد: es5s930

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


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