مشاهدة النسخة كاملة : تعلم الأداة MsFlexGrid* سلسلة دروس تعليمية


King2010
02-03-09, 12:05 PM
الدرس الأول :

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

King2010
02-03-09, 12:08 PM
الدرس الثاني :

الألوان

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

King2010
02-03-09, 12:11 PM
الدرس الثالث :
المظهر ( الحدود والمحاذاة)


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

King2010
02-03-09, 12:15 PM
الدرس الرابع :

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

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