الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تعلم الأداة MsFlexGrid

رائج
بدأه مهند عبادي في 11 مايو 2004 · 88 رد · 69,475 مشاهدة · في قسم الدروس والمواضيع الهامة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لاحظت في الفترة الأخيرة كثرة الأسئلة عن أداة FlexGrid ..

ولذلك سأبدأ مجموعة دروس بهدف شرح هذه الأداة ولكن لا تستعجلوني في الدروس بسبب انشغالي في الفترة الحالية

#2

الدرس الأول :

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

أداة MsFlexGrid لمن لا يعرفها : هي أداة تتألف من مجوعة أسطر Rows وأعمدة Columns بحيث يشكل تقاطع كل سطر وعمود خلية Cell بشكل يشابه لما هو موجود فيExcel

وتنقسم الأعمدة والأسطر إلى قسمين : ثابت Fixed كما هو الحال العمود المحتوي على أرقام الأسطر في إكسل والسطر المحتوي على أسماء الأعمدة ، وقسم عام

تعطينا هذه الأداة ميزة التحكم في أي شيء مما يتعلق بها بدءاً من عدد الأعمدة والأسطر مروراً بخصائص كل خلية انتهاءً بالأحداث

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

وسأبدأ بسرد الخصائص مع مثال عن كل منها

ثم في الدروس الأخيرة سأضع بعض الأمثلة بما فيها تعبئة MsFlexGrid بالبيانات من خلال ADO

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

- لتحديد عدد الأسطر :

MsFlexGrid.Rows= N

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

- لتحديد عدد الأعمدة :

MsFlexGrid.Cols= N

جيث 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 بسبب عدم رغبتنا في ترقيم أول خلية

#3

الدرس الثاني :

الألوان

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

تم تعديل هذه المشاركة بواسطة مهند عبادي في 11 مايو 2004 في 20:47

#4

مشكوووووووووووووووووووووووووووووووور

#5

واصل ، جزاك الله خيرا

#6

الدرس الثالث :

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

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

تم تعديل هذه المشاركة بواسطة مهند عبادي في 23 مايو 2004 في 01:26

#7

السلام عليكم

اسف علي الاستعجال اكيد راح تصلها

بس يا ريت كيف طباعة المحتويات

(اطلعت علي الروابط الموجودة التي تخص هذا الموضوع في هذا المنتدي)

بس يا ريت يكون الشرح بقدر المستطاع باللغة العربية

و لك شكري مقدما

ابراهيم الطيب

الحــــــــــــــــرطــــوم

gaza3-3.jpg
#8

الله يجزاك الخير الحقيقة مشاركاتك تثلج الصدر

#9

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

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

{وقل اعملوا فسيرى الله عملكم ورسوله والمؤمنون}

صدق الله العظيم

#10

الدرس الرابع :

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

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

تم تعديل هذه المشاركة بواسطة مهند عبادي في 24 مايو 2004 في 02:51

#11

بوركت

وجزيت كل الخير

:)

#12

أشكرك جداً على هذا العمل الرائع

#13

واصل ، جزيت خيرا

#14

الدرس الخامس :

تحكمات متقدمة (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

تم تعديل هذه المشاركة بواسطة مهند عبادي في 20 يونيو 2004 في 05:22

#15

السلام عليكم أيها المشرف الكريم شكرا لك ولكن أريد أن ألفت نظرك إلى بعض الأمور مثل ربط الflix ب ado وأكثر من قاعدة بيانات إذا ممكن من بعد فضلك و الطباعة...

إياس

#18
joe911 كتب:
مشكوووووووووووووووووووووووووووووووور

active skin

#19

الدرس السادس

تعبئة جدول 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
#20

السلام عليكم

اشكرك اخ مهند على الدروس القيمة

و لدي استفسار

لي صديق يبرمج بالدوت نت و في components لم يجد الاداة flexgrid

اظن انها موجوده باسم اخر او طريقة اخرى

ارجو المساعدة و للاهمية ارجو السرعة في الاجابة

من قال لا إله إلا الله صادقا دخل الجنة

موقعي للتعارف و تبادل الأخبار http://www.xybond.com

#23

مشكورين شباب

و لكن كنت اظن ان اداة ال flex grid موجودة في الدوت نت و لكني وجدت نفس اجابتكم في منتدى الدوت نت

من قال لا إله إلا الله صادقا دخل الجنة

موقعي للتعارف و تبادل الأخبار http://www.xybond.com

#25

الأخ العزيز مهند عبادي المحترم

السلام عليكم ورحمة الله وبركاته

في الحقيقة عندي سؤال أرجو الرد عليه سريعاً

عندي فلكس جريد مرتبطة بقاعدة بيانات

السؤال

كيف أطبعها على الورق وهل يمكن طباعة صفوف وأعمدة معينة

سؤال ثاني إذا تكرمت

عندي في قاعدة البيانات بيانات كيف اقوم بالبحث عن بيانات معينة واضهارها في الفلكس جريد مع العلم بأن البيانات قد تتشابه

مثل الراتب كيف ابحث عن اللي راتبه مثلا (3000)

ولكم جزيل الشكر وأسأل من الله أن يجعلنا محترفين علي يدكم

wh_156056168.gif

اللهم زدني علماً وارزقني فهماً

dhhomy@hotmail.com

مواضيع مشابهة