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

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

تعلم كيفية التعامل مع الاداة أداة 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
المساهمات : 130
النقاط : 252
التقيم : 8
الدولة : تونس
الجنس : ذكر

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

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

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

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

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

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


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

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

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

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


tryold
...
...

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

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

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


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