بسم الله الرحمن الرحيم
لاحظت في الفترة الأخيرة كثرة الأسئلة عن أداة FlexGrid ..
ولذلك سأبدأ مجموعة دروس بهدف شرح هذه الأداة ولكن لا تستعجلوني في الدروس بسبب انشغالي في الفترة الحالية
بسم الله الرحمن الرحيم
لاحظت في الفترة الأخيرة كثرة الأسئلة عن أداة FlexGrid ..
ولذلك سأبدأ مجموعة دروس بهدف شرح هذه الأداة ولكن لا تستعجلوني في الدروس بسبب انشغالي في الفترة الحالية
الدرس الأول :
أولاً = نظرة عامة
أداة 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 بسبب عدم رغبتنا في ترقيم أول خلية
الدرس الثاني :
الألوان
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
مشكوووووووووووووووووووووووووووووووور
واصل ، جزاك الله خيرا
الدرس الثالث :
المظهر ( الحدود والمحاذاة)
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
السلام عليكم
اسف علي الاستعجال اكيد راح تصلها
بس يا ريت كيف طباعة المحتويات
(اطلعت علي الروابط الموجودة التي تخص هذا الموضوع في هذا المنتدي)
بس يا ريت يكون الشرح بقدر المستطاع باللغة العربية
و لك شكري مقدما
ابراهيم الطيب
الحــــــــــــــــرطــــوم

الله يجزاك الخير الحقيقة مشاركاتك تثلج الصدر
مشكورررررررررررررررر علي مجهودك الرائع
بسم الله الرحمن الرحيم
{وقل اعملوا فسيرى الله عملكم ورسوله والمؤمنون}
صدق الله العظيم
الدرس الرابع :
تحكمات متقدمة :
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
بوركت
وجزيت كل الخير
:)
أشكرك جداً على هذا العمل الرائع
واصل ، جزيت خيرا
الدرس الخامس :
تحكمات متقدمة (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
السلام عليكم أيها المشرف الكريم شكرا لك ولكن أريد أن ألفت نظرك إلى بعض الأمور مثل ربط الflix ب ado وأكثر من قاعدة بيانات إذا ممكن من بعد فضلك و الطباعة...
إياس
أخي إياس ..
شكراً على المداخلة
وما تكلّمت عنه هي في الخطة ضمن الدروس القادمة إن شاء الله
joe911 كتب:مشكوووووووووووووووووووووووووووووووور
active skin
الدرس السادس
تعبئة جدول 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
السلام عليكم
اشكرك اخ مهند على الدروس القيمة
و لدي استفسار
لي صديق يبرمج بالدوت نت و في components لم يجد الاداة flexgrid
اظن انها موجوده باسم اخر او طريقة اخرى
ارجو المساعدة و للاهمية ارجو السرعة في الاجابة
من قال لا إله إلا الله صادقا دخل الجنة
موقعي للتعارف و تبادل الأخبار http://www.xybond.com
والله أخي هشام أنا لا أعرف لغة VB.Net
أرجو ممن يعرف الإجابة المساعدة وشكراً
أخhishamnasr هناك اداة Data Grid في .netمشابهة لها.مع الأدوات القياسية
مشكورين شباب
و لكن كنت اظن ان اداة ال flex grid موجودة في الدوت نت و لكني وجدت نفس اجابتكم في منتدى الدوت نت
من قال لا إله إلا الله صادقا دخل الجنة
موقعي للتعارف و تبادل الأخبار http://www.xybond.com
الأخ العزيز مهند عبادي المحترم
السلام عليكم ورحمة الله وبركاته
في الحقيقة عندي سؤال أرجو الرد عليه سريعاً
عندي فلكس جريد مرتبطة بقاعدة بيانات
السؤال
كيف أطبعها على الورق وهل يمكن طباعة صفوف وأعمدة معينة
سؤال ثاني إذا تكرمت
عندي في قاعدة البيانات بيانات كيف اقوم بالبحث عن بيانات معينة واضهارها في الفلكس جريد مع العلم بأن البيانات قد تتشابه
مثل الراتب كيف ابحث عن اللي راتبه مثلا (3000)
ولكم جزيل الشكر وأسأل من الله أن يجعلنا محترفين علي يدكم