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

تعلم كيفية التعامل مع الاداة أداة FlexGrid

اذهب الى الأسفل

تعلم كيفية التعامل مع الاداة أداة FlexGrid  Empty تعلم كيفية التعامل مع الاداة أداة FlexGrid

مُساهمة من طرف م/موسي السبت يونيو 29, 2013 3:16 pm

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

لاحظت في الفترة الأخيرة كثرة الأسئلة عن أداة FlexGrid ..ولذلك انقل لكم شرح الاستاذ /مهند عبادي فى منتدى الفريق العربى للبرمجة وكان الشرح على النحو التالى :


أولاً = نظرة عامة

أداة MsFlexGrid لمن لا يعرفها : هي أداة تتألف من مجوعة أسطر Rows وأعمدة Columns بحيث يشكل تقاطع كل سطر وعمود خلية Cell بشكل يشابه لما هو موجود في Excel وتنقسم الأعمدة والأسطر إلى قسمين : ثابت Fixed كما هو الحال العمود المحتوي على أرقام الأسطر في إكسل والسطر المحتوي على أسماء الأعمدة ، وقسم عام تعطينا هذه الأداة ميزة التحكم في أي شيء مما يتعلق بها بدءاً من عدد الأعمدة والأسطر مروراً بخصائص كل خلية انتهاءً بالأحداث

وسأقسم هذه الدروس بناءً على مجموعة الخصائص التي نتكلم عنها وسأبدأ بسرد الخصائص مع مثال عن كل منها ثم في الدروس الأخيرة سأضع بعض الأمثلة بما فيها تعبئة MsFlexGrid بالبيانات من خلال ADO

ثانياً = التحكم بعدد الأعمدة والأسطر :

- لتحديد عدد الأسطر : 
الكود:
MsFlexGrid.Rows= N

جيث N هو عدد الأسطر

- لتحديد عدد الأعمدة :
الكود:
MsFlexGrid.Cols= N

- لتحديد عدد الأسطر الثابتة :
الكود:
MsFlexGrid.FixedRows= N

جيث N هو عدد الأسطر الثابتة

- لتحديد عدد الأعمدة :
الكود:
MsFlexGrid.FixedCols= N
جيث N هو عدد الأعمدة الثابتة

مثال :ضع أداة MsFlexGrid في نموذجك ثم اكتب الشفرة التالية في حدث عند التحميل :
الكود:

Private Sub Form_Load()
    MsFlexGrid1.Rows = 10
    MsFlexGrid1.Cols = 5
    MsFlexGrid1.FixedCols = 1
    MsFlexGrid1.FixedRows = 1
End Sub


يقوم هذا المثال بتحديد عدد الأسطر إلى 10 منها عمود واجد ثابت وعدد الأعمدة إلى 5 منها سطر واحد ثابت

ثالثاً : ملئ الخلايا بالقيم :

يبدأ ترقيم الأعمدة والأسطر بدءاً من رقم صفر و يشكل تقاطع كل سطر وعمود خلية Cell ، ولكتابة قيمة معينة بإحدى الخلايا نقوم أولاً بتحديد السطر والعمود اللذان يحددان بتقاطعهما الخلية بهذا الأسلوب :

الكود:
MsFlexGrid.Col = ColNo  <------------------ رقم العمود
    MsFlexGrid.Row = RowNo <--------------- رقم السطر


ويجب أن لا ننسى أن الترقيم يبدأ من رقم 0 ولوضع قيمة في الخلية نستخدم :

الكود:
 MsFlexGrid.Text = MyText <------------ القيمة التي نريدها



مثال :من أجل ترقيم العمود الأول الثابت بترقيم يبدأ من 1 نكتب الكود التالي :
الكود:

Dim R as integer
For R = 1 to 9
    MsFlexGrid1.Col = 0 
    MsFlexGrid1.Row = R
    MsFlexGrid1.Text = R
Next R


حيث أننا بدءنا بالحلقة من الرقم 1 بسبب عدم رغبتنا في ترقيم أول خلية

رابعا :الألوان

1- لون خلفية الاداة :
الكود:
MsFlexGrid.BackColorBkg = Color


2- لون خلفية الخلايا الثابتة :
الكود:
MsFlexGrid.BackColorFixed = Color


3- لون خلفية الخلايا العادية :
الكود:
MsFlexGrid.BackColor = Color


4- لون خلفية خلايا التحديد : أي عند التحديد
الكود:
MsFlexGrid.BackColorSel = Color


5- لون كتابة الخلايا الثابتة :
الكود:
MsFlexGrid.ForeColorFixed = Color



6- لون كتابة الخلايا العادية :
الكود:
MsFlexGrid.ForeColor = Color


7- لون كتابة خلايا التحديد : أي عند التحديد
الكود:
MsFlexGrid.ForeColorSel = Color


8- لون خط حدود الخلايا الثابتة :
الكود:
MsFlexGrid.GridColorFixed = Color


9- لون خط حدود الخلايا العادية :
الكود:
MsFlexGrid.GridColor = Color


مثال :
الكود:


   MsFlexGrid1.BackColorBkg = QbColor(3)
    MsFlexGrid1.BackColorFixed = QbColor(7)
    MsFlexGrid1.BackColor = QbColor(15)
    MsFlexGrid1.BackColorSel = QbColor(1)
    MsFlexGrid1.ForeColorFixed = QbColor(0)
    MsFlexGrid1.ForeColor = QbColor(1)
    MsFlexGrid1.ForeColorSel = QbColor(14)
    MsFlexGrid1.GridColorFixed = QbColor(8)
    MsFlexGrid1.GridColor = QbColor(2)



10 – تلون خلية بحد ذاتها :بعد تحديد الخلية من خلال تحديد السطر والعمود كما ورد في الدرس الأول نستخدم التعليمات التالية :
- تحديد لون خلفية الخلية :
الكود:
MsFlexGrid.CellBackColor = Color


- تحديد لون خط الكتابة في الخلية :


الكود:
MsFlexGrid.CellForeColor = Color



مثال :من أجل تلوين خلايا العمود الثالث بشكل متباين نكتب الكود التالي :
الكود:

Dim R as integer
For R = 1 to 9
    MsFlexGrid1.Col = 2 
    MsFlexGrid1.Row = R
    MsFlexGrid1.CellBackColor = QbColor(R)
Next R

خامسا :المظهر ( الحدود والمحاذاة)


1- مظهر الأداة : (مظهر الأداة ككل)
الكود:

MsFlexGrid.Appearance = flexFlat <------------------- ثلاثي أبعاد
MsFlexGrid.Appearance = flex3D <------------------- مسطح


2- نمط الحدود الخارجية للأداة :
الكود:


MsFlexGrid.BorderStyle = flexBorderSingle<-------------- خط مفرد
MsFlexGrid.BorderStyle = flexBorderNone <-------------- بدون خط



3- نمط حدود الخلايا : (مظهر الخلايا)إن نمط الحدود في الخلايا له إحدى هذه القيم

المظهر               القيمة                   أو استخدم الثابت
---------------------------------------------------------
بلا                    0                flexGridNone
مسطح                1                   flexGridFlat
غاطس                2                 flexGridInset
بارز                  3                flexGridRaised


ونستخدم لتحديد مظهر الخلايا الطرائق التالية :

أ – مظهر الخلايا الثابتة :
الكود:

MsFlexGrid.GridLinesFixed = نمط الحدود


ب – مظهر الخلايا العادية :
الكود:

MsFlexGrid.GridLines = نمط الحدود


مثال :
الكود:


MsFlexGrid1.Appearance = flex3D
MsFlexGrid1.BorderStyle = flexBorderNone
MsFlexGrid1.GridLinesFixed = flexGridInset
MsFlexGrid1.GridLines = 0


4- محاذاة الأداة :لمحاذاة الأداة على نمط محاذاة الورقة في إكسل نستخدم :
الكود:

MsFlexGrid.RightToLeft = True <------------------- محاذاة إلى اليمين
MsFlexGrid.RightToLeft = False <------------------- محاذاة إلى اليسار


5- محاذاة محتويات الخلايا :إن نمط المحاذاة في الخلايا له إحدى هذه القيم

المحاذاة                     القيمة            أو استخدم الثابت
---------------------------------------------------------------------
يمين أعلى                    0             flexAlignRightTop
يمين وسط                    1             flexAlignRightCenter
يمين أسفل                   2             flexAlignRightBottom
وسط أعلى                   3             flexAlignCenterTop
وسط وسط                   4             flexAlignCenterCenter
وسط أسفل                  5             flexAlignCenterBottom
يسار أعلى                   6             flexAlignLeftTop
يسار وسط                   7             flexAlignLeftCenter
يسار أسفل                  8             flexAlignLeftBottom
محاذاة عامة                 9             flexAlignGeneral


ونستخدم لمحاذاة الخلايا الطرائق التالية :

أ – محاذاة عمود بكامله :
الكود:

MsFlexGrid.ColAlignment(رقم العمود) = N <--------------- نمط المحاذاة


ب- محاذاة الخلايا الثابتة :
الكود:


MsFlexGrid.FixedAlignment(رقم العمود) = N <--------------- نمط المحاذاة

في هذه الحالة إذا كان رقم العمود هو عمود ثابت يطبق عليه نمط المحاذاة وإلا فإن هذه المحاذاة تطبق فقط على الخلايا الثابتة في هذا العمود

جـ - محاذاة خلية بحد ذاتها :بعد تحديد الخلية من خلال تحديد السطر والعمود كما ورد في الدرس الأول نستتخدم صيغة التعليمة التالية:
الكود:

MsFlexGrid.CellAlignment = N <--------------- نمط المحاذاة


مثال :
الكود:

Dim X as Integer , Y as Integer
MsFlexGrid1.RightToLeft = True
For X = 0 To MsFlexGrid1.cols-1
     MsFlexGrid1.FixedAlignment (X) = 1
     For Y = MsFlexGrid1.FixedRows to MsFlexGrid1.Rows -1
          MsFlexGrid1.Col = X
          MsFlexGrid1.Row = Y
          If MsFlexGrid1.text = "0" then
               MsFlexGrid1.CellAlignment = flexAlignCenterCenter
          End If
     Next Y
Next X


سادسا :تحكمات متقدمة :

1- إضافة سطر جديد بواسطة تعليمة AddItem


الكود:
MsFlexGrid.AddItem Item, Idnex

حيث
Item : النص المراد إدراجه في السطر الجديد
Index الترتيب المراد إدراج السطر به .. وفي حال لم تمرر هذه القيمة يتم إدراج السطر في آخر الجدول ولا يجوز إدراج سطر جديد في ترتيب سطر ثابت

مثال :
الكود:


MsFlexGrid1.AddItem "Sum :"


ويلاحظ أن الإدراج يتم في أول عمود فقط .. ولكي ندرج مجموعة قيم في أعمدة أخرى نستخدم محرف الـ Tab وهو إما VBTab أو Chr(9) كما يلي :
الكود:


MsFlexGrid1.AddItem "Sum :" & VBTab & "12000" & chr(9) &  "2455"


2- السماح بتغيير حدود الأعمدة والأسطر :إن صلاحية تغيير حدود الأعمدة والأسطر يكون له إحدى هذه القيم :

الصلاحية .................... القيمة .. أو استخدم الثابت
------------------------------------------------------------------
حدود ثابتة..................... 0 ..... flexResizeNone
تغيير حدود الأعمدة فقط ......... 1..... flexResizeColumns
تغيير حدود الأسطر فقط ......... 2 ..... flexResizeRows
تغيير حدود الأسطر والأعمدة ..... 3 ..... flexResizeBoth
الكود:

MsFlexGrid.AllowUserResizing = الصلاحية


3- تغيير أسلوب التحديد عند النقر على خلية ثابتة :
الكود:


MsFlexGrid.AllowBigSelection = False أو True

True : عند الضغط على الخلية الثابتة يتم تحديد كامل السطر او العمود الذي يبدأ بهذه الخلية

4- الإستعلام عن حالة خفاء / ظهور الأعمدة والأسطر :
الكود:

MsFlexGrid.ColIsVisible(رقم العمود)
MsFlexGrid.RowIsVisible(رقم السطر)


مثال : إذا كان عدد الأسطر 15 ويظهر ضمن عرض أداة MsFlexGrid 7 أعمدة فقط فإن حالة ظهور الأعمدة من 7-15 تكون False

الكود:
 MsgBox MsFlexGrid1.ColIsVisible(MsFlexGrid1.cols)


5- تحديد مجموعة خلايا :لتحديد مجموعة خلايا نضع نحدد الخلية التي سنبدأ منها التحديد ثم نستعمل خاصيتي RowSel و ColSel كما يلي :
الكود:

  MsFlexGrid.ColSel = N <---------- يتم التحديد حتى هذا العمود
   MsFlexGrid.RowSel = N  <---------- يتم التحديد حتى هذا السطر


مثال :لتحديد ثالث ورابع وخامس خلية في العمود الثاني نكتب :
الكود:

  MsFlexGrid1.Col = 1
   MsFlexGrid1.Row = 2   
   MsFlexGrid1.RowSel = 4


في هذا المثال لا يتم تظليل الخلية الأولى لأنها هي الخلية التي عليها المؤشر (التحكم)

و يمكن استعمال خاصيتي RowSel و ColSel لقراءة قيمتهما.

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

Dim X as Integer , Y as Integer
Dim BC as Integer , EC as Integer
Dim BR as Integer , ER as Integer
BC = MsFlexGrid1.Col
EC = MsFlexGrid1.ColSel
BR = MsFlexGrid1.Row
ER = MsFlexGrid1.RowSel
For X = BC To EC Step IIf(BC > EC, -1, 1)
    For Y = BR To ER Step IIf(BR > ER, -1, 1)   
        MsFlexGrid1.Col = X
            MsFlexGrid1.Row = Y
            MsFlexGrid1.CellBackColor = VbYellow
    Next Y
Next X


6- تغيير ترتيب الأسطر :
الكود:

MsFlexGrid.RowPosition(رقم السطر) = الترتيب الذي نريده


7- تغيير ترتيب الأعمدة :
الكود:

MsFlexGrid.ColPosition(رقم العمود) = الترتيب الذي نريده


مثال : لترتيب الأعمدة بشكل معكوس :
الكود:

Dim R as Integer
For R = 2 To MsFlexGrid1.Cols - 1
    MsFlexGrid1.ColPosition(R) = 1
Next



8- معرفة موقع الخلية بالنسبة للأداة MsFlexGid :نستعمل خاصيتي :

ColPos : لمعرفة بعد الحد الأيسر للعمود عن طرف الأداة من اليسار
RowPos : لمعرفة بعد الحد العلوي للسطر عن طرف الأداة من الأعلى

مثال تطبيقي :للإظهار مربع نص - وليكن اسمه Text1وهو مخفي حالياً - مكان الخلية عند النقر المزدوج عليها :
الكود:

With MsFlexGrid1
    Set Text1.Font = .Font
    Text1.RightToLeft = .RightToLeft
    Text1.Alignment = .CellAlignment
    Text1.Left = .Left + .ColPos(.Col) + .BorderStyle * 30
    Text1.Top = .Top + .RowPos(.Row) + .BorderStyle * 30
    Text1.Width = .ColWidth(.Col)
    Text1.Height = .RowHeight(.Row)
    Text1.Appearance = vbFlat
    Text1.Text = .Text
    Text1.Visible = True
    Text1.SetFocus
End With

سابعا : تحكمات متقدمة (2)

1- أشرطة التمرير :إن نمط عرض أشرطة الأدوات في MsFlexGrid له إحدى هذه القيم الشريط القيمة أو استخدم الثابت

بلا 0 flexScrollBarNone
عمودي فقط 1 flexScrollBarHorizontal
أفقي فقط 2 flexScrollBarVertical
عمودي وأفقي 3 flexScrollBarBoth (افتراضي)
الكود:

MsFlexGrid.ScrollBars = نمط عرض أشرطة الأدوات



2- عرض حدود مربع تحديد الخلايا :وله إحدى هذه القيم العرض القيمة أو استخدم الثابت

بلا 0 flexFocusLight
رفيع 1 flexScrollBarHorizontal
ثخين 2 flexFocusHeavy
الكود:

MsFlexGrid.FocusRect = عرض حدود مربع التحديد


3- تحديد العمود والسطر الذي تتواجد فيهما الفأرة
الكود:

MsFlexGrid.MouseCol
MsFlexGrid.MouseRow


مثال
الكود:

Private Sub MsFlexGrid1_DblClick()
  With MsFlexGrid1
    MsgBox "Mouse in Row :" &.MouseRow & vbCr & _
           "Mouse in Col :" &.MouseCol
  End With
End Sub

وكتطبيق عملي يمكن عمل تأثير .. هو تلوين الخلية حيث تكون الفأرة موجودة ويتم تغييره مع تحرّك الفأرة

4- حذف سطر بواسطة تعليمة RemoveItem
الكود:

MsFlexGrid.RemoveItem (Idnex)

حيث :
Index ترتيب السطر المراد حذفه ..

مثال : لحذف السطر الذي فيه التحديد
الكود:

MsFlexGrid1.RemoveItem (MsFlexGrid1.Row)


5- خاصية الصورة ضمن الخلية :نقوم بتحديد الخلية المراد وضع الصورة بها ثم نستخدم الصيغة
الكود:

MsFlexGrid.CellPicture


مثال إذا أردنا وضع صورة في الخلية التي في الزاوية (0،0) نكتب
الكود:

MsFlexGrid1.Row = 0
MsFlexGrid1.Col = 0
Set MsFlexGrid1.CellPicture = LoadPicture(".\hand.ico")

نلاحظ استخدام Set في هذه الحالة

6- تحديد موقع الصورة ضمن الخلية
الكود:

MsFlexGrid.CellPictureAlignment = N <--------------- نمط المحاذاة

نستخدم في نمط المحاذاة نفس محاذاة محتويات الخلايا

مثال : لوضع صورة في منتصف الخلية التي في الزاوية (0،0) نكتب
الكود:


MsFlexGrid1.Row = 0
MsFlexGrid1.Col = 0
Set MsFlexGrid1.CellPicture = LoadPicture(".\hand.ico")
MsFlexGrid1.CellPictureAlignment = flexAlignCenterCenter

سابعا :تعبئة جدول ADO في أداة MsFlexGrid

قبل أن أبدأ في هذا الدرس أود التذكير أنه يوجد أدوات Grid خاصة جاهزة للتعامل مع البيانات مثل DbGrid و MSHFlexGrid

هذا مثال على تعبئة جدول ضمن MsFlexGrid

1- في قسم التصريحات العامة للفورم (General) نضع هذان التعريفان
الكود:

 Dim MyDb As New ADODB.Connection
  Dim rs As New ADODB.Recordset


2- في حدث عند التحميل للفورم نكتب الكود التالي :
الكود:


Private Sub Form_Load()
    MyDb.Provider = "Microsoft.JET.OLEDB.4.0;"
    MyDb.Open App.Path & "\Db1.mdb "
    rs.Open "table1", MyDb, adOpenStatic, adLockPessimistic
    DrawFlex
End Sub


في هذا الكود يتم تحديد نوع قاعدة البيانات وهي Access ثم نربط المتحول MyDB بالقاعدة وهي موجودة في نفس مسار البرنامج باسم db1.mdb ثم نستخدم المتحول RS لفتح الجدول Table1 من قاعدة البيانات ثم نستدعي إجراء اسمه DrawFlex

3- هذا الإجراء سوف نعمله من أجل أن يملأ أداة MsFlexGrid بالبيانات الموجودة ضمن RS ويتم استدعاؤه كلما تغيرت مجموعة البيانات

وهذه هي شيفرة هذا الإجراء:

الكود:

Private Sub DrawFlex()
 Dim R As Integer
    With MsFlexGrid1
        .Clear
        .AllowUserResizing = flexResizeColumns
        .FixedCols = 0
        .FixedRows = 1

        ' تحديد عدد الأعمدة يساوي عدد الحقول
        .Cols = rs.Fields.Count

       '  تحديد عدد الأسطر يساوي عدد السجلات زائد واحد لأن أول سطر سيستخدم لكتابة عناوين الأعمدة
        .Rows = rs.RecordCount + 1

       ' لكتابة عناوين الأعمدة
        .Row = 0
        For R = 0 To .Cols - 1
            .Col = R
            .Text = rs.Fields(R).Name
        Next R

        ' ملئ الأسطر بالمعلومات
        rs.MoveFirst
        .Row = 0
        Do Until rs.EOF
            .Row = .Row + 1
            For R = 0 To .Cols - 1
                .Col = R
                A = rs.Fields(R).Value
                A = IIf(IsNull(A), "", A)
                .Text = A
            Next R
           rs.MoveNext
        Loop
    End With
End Sub  

م/موسي
م/موسي
الاشراف
الاشراف

تاريخ التسجيل : 18/02/2011
المساهمات : 178
النقاط : 346
التقيم : 12
الدولة : تونس
الجنس : ذكر

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

تعلم كيفية التعامل مع الاداة أداة FlexGrid  Empty رد: تعلم كيفية التعامل مع الاداة أداة FlexGrid

مُساهمة من طرف tryold الخميس يوليو 04, 2013 9:48 pm

اداه تستخدم كثير ولا غنى عنها

شرح سلس وممتع  استفدنا منك الله يعطيك العافية والصحة

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ


ليس من اخترق جهاز اصبح هكر

وليس من كتب كود اصبح مبرمج

وليس من كسر برنامج صار خيبير كسر

ولكن من تواضع لله رفعة

tryold
tryold
...
...

تاريخ التسجيل : 06/04/2013
المساهمات : 37
النقاط : 47
التقيم : 2
الدولة : السعودية
الجنس : ذكر

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

تعلم كيفية التعامل مع الاداة أداة FlexGrid  Empty رد: تعلم كيفية التعامل مع الاداة أداة FlexGrid

مُساهمة من طرف اسلام الكبابى الخميس أبريل 20, 2017 1:48 am

بارك الله فيك

مثال على تعبئة جدول ضمن MsFlexGrid كتب:مثال على تعبئة جدول ضمن MsFlexGrid

ولكن كيف يمكن أن أجعل المستخدم يعبئ الMsFlexGrid بنفسه لأضع هذه البيانات فى جدول قاعدة البيانات بعد ضغطه على الزر"OK"
بفرض لدينا جدول من ثلاثة حقول (
XXX1,XXX2,XXX3)
ونريد أن يضع المستخدم فيه سبعة سجلات مثلآ عن طريق
الMsFlexGrid
ثم يضغط على الزر"OK"
فكيف ذلك ؟
ولكم ألف شكر
اسلام الكبابى
اسلام الكبابى
...
...

تاريخ التسجيل : 16/02/2017
المساهمات : 42
النقاط : 92
التقيم : 0
الدولة : مصر
الجنس : ذكر

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

تعلم كيفية التعامل مع الاداة أداة FlexGrid  Empty رد: تعلم كيفية التعامل مع الاداة أداة FlexGrid

مُساهمة من طرف اسلام الكبابى الأحد يونيو 04, 2017 11:36 am

هل سؤالى غير مفهوم ؟ أم ليس له حل ؟
ولكم ألف شكر
اسلام الكبابى
اسلام الكبابى
...
...

تاريخ التسجيل : 16/02/2017
المساهمات : 42
النقاط : 92
التقيم : 0
الدولة : مصر
الجنس : ذكر

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

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


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