توفر دلفي مكون DBGrid القوي لتسهيل تصميم تطبيق قاعدة البيانات. ولكن إذا استخدمنا مكون DBGrid فقط، فإن كل تركيز (شبكة) هو مجرد مربع تحرير نص بسيط، وهو غير مناسب للمستخدمين لإدخال البيانات. كما توفر دلفي بعض مكونات البيانات الأخرى لتسهيل إدخال المستخدم، مثل DBComboBox، DBCheckBox ومكونات أخرى، ولكن هذه المكونات ليست قوية مثل DBGrid. هل تستطيع دلفي، مثل Visual FoxPRo، السماح لشبكة التركيز في DBGrid بأن تكون مكونات بيانات مرئية أخرى لراحة المستخدمين؟ في الواقع، يمكننا تحقيق ذلك عن طريق إدراج مكونات مرئية أخرى في DBGrid.
آلية دلفي الداخلية لمعالجة DBGrid هي تعويم مكون على الشبكة - مكون DBEdit. الشبكة التي تدخل فيها البيانات هي في الواقع مكون DBEdit عائم، والمناطق الأخرى التي لا يتم التركيز عليها هي مجرد صور. لذلك، يؤدي إدراج مكونات مرئية أخرى في DBGrid إلى تعويم مكون مرئي على الشبكة. ولذلك يمكن إدراج أي مكون، من DbCheckBox البسيط إلى مربع الحوار المعقد، في DBGrid. ما يلي هو خطوة حول كيفية إدراج مكون DBComboBox في DBGrid. يمكنك إدراج مكونات أخرى باستخدام نفس الطريقة.
1. قم بإنشاء مشروع جديد في دلفي 4.0.
2. اسحب المكونات الأربعة DataSource وTable على لوحة مكونات الوصول إلى البيانات وDBGrid وDBComboBox على لوحة مكونات Data Controls إلى Form1 على التوالي.
3. اضبط خصائص كل مكون على النحو التالي:
مصنع إعداد سمة الكائن rcf1
تسمية توضيحية للنموذج 1 "مثال على إدراج مكون SpinEdit في DBGrid"
مصدر البيانات1 جدول مجموعة البيانات1
اسم قاعدة البيانات للجدول 1: DBDEMOS
اسم الجدول "teacher.DBF"
نشط صحيح
DBGrid1 مصدر البيانات مصدر البيانات 1
DBComboBox1 DataField الجنس
مصدر البيانات مصدر البيانات 1
مرئية كاذبة
عناصر السلاسل "ذكر" |.
ملاحظة: لقد استخدمت Teacher.dbf هنا، والذي يعكس جنس أعضاء هيئة التدريس والموظفين، والذي يمكن أن يكون "ذكر" أو "أنثى" فقط.
4. حدث DrawDataCell هو رسم الخلايا عندما يكون الحقل المقابل للشبكة المركزة متسقًا مع الحقل المقابل لمربع التحرير والسرد، انقل مربع التحرير والسرد إلى الشبكة المركزة، و
اجعل مربع التحرير والسرد مرئيًا لتحقيق وظيفة عرض DBComboBox على العمود المحدد في DBGrid. قم بتعيين الحدث OnDrawDataCell لـ DBGrid1 كما يلي:
الإجراء TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
يبدأ
إذا (gdFocused في الولاية) إذن
يبدأ
إذا (Field.FieldName = DBComboBox1.DataField) ثم
يبدأ
DBComboBox1.Left := Rect.Left + DBGrid1.Left;
DBComboBox1.Top := Rect.Top + DBGrid1.top;
DBComboBox1.Width := Rect.Right - Rect.Left;
DBComboBox1.Height := Rect.Bottom - Rect.Top;
DBComboBox1.Visible := صحيح؛
نهاية؛
نهاية؛
نهاية؛
5. لا يتم عرض DBComboBox عندما لا تتلقى الخلية المحددة في DBGrid التركيز. قم بتعيين الحدث OnColExit لـ DBGrid1 كما يلي:
الإجراء TForm1.DBGrid1ColExit(Sender: TObject);
يبدأ
إذا DBGrid1.SelectedField.FieldName = DBComboBox1.DataField ثم
يبدأ
DBComboBox1.Visible := false;
نهاية؛
نهاية؛
6. عندما يتم التركيز على العمود المحدد في DBGrid، يقوم حدث DrawDataCell فقط برسم الخلية وعرض DBComboBox، لكن DBComboBox لا يحصل على التركيز، ويستمر إدخال البيانات في الخلية. قم باستدعاء الدالة SendMessage Windows API في حدث KeyPress الخاص بـ DBGrid1 لنقل إدخال البيانات إلى DBComboBox، وبالتالي تحقيق إدخال البيانات على DBComboBox. لذا قم أيضًا بتعيين حدث KeyPress على النحو التالي:
الإجراء TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
يبدأ
إذا (مفتاح < > مركز حقوق الإنسان (9)) ثم
يبدأ
إذا (DBGrid1.SelectedField.FieldName =DBComboBox1.DataField) ثم
يبدأ
DBComboBox1.SetFocus;
SendMessage(DBComboBox1.Handle, WM_Char, Word(Key), 0);
نهاية؛
نهاية؛
نهاية؛
اجتاز البرنامج تصحيح الأخطاء ضمن نظام التشغيل Windows 98 الصيني وDelphi 4.015. آمل أن تمكنك هذه المقالة من تطوير تطبيقات قواعد البيانات بشكل أكثر سهولة وسرعة.