عندما يستخدم الأشخاص Delphi لتطوير تطبيقات قاعدة البيانات ، فإنهم يستخدمون في كثير من الأحيان عناصر التحكم في الجدول لتقديم تقارير. يمكن للاستخدام المرن لحدث OnDrawcell للتحكم في الجدول إكمال عرض بعض المؤثرات الخاصة ، والتي يمكن أن تلبي احتياجات المستخدم بشكل أفضل. تقدم هذه المقالة ثلاث نصائح لاستخدام أحداث OnDrawcell بمرونة.
تحديث لون صفوف الجدول ديناميكيًا
في بعض الأحيان يكون من الضروري تحديث لون صفوف الجدول ديناميكيًا في التقرير. على سبيل المثال ، في قائمة الموردين ، يتم عرض الموردين الذين يفضلون العرض باللون الأخضر ، بينما يتم عرض الموردين الآخرين باللون الأحمر. في هذا الوقت ، يمكنك استخدام الكود التالي لتنفيذه في حدث OnDrawcell:
إذا table1.fieldbyname ('custno'). asinteger> 1500 ثم
dbgrid1.canvas.font.color: = clred ؛
dbGrid1.DefaultDrawColumnCell (Rect ، Datacol ،
عمود ، حالة)
يمكن توسيع الرمز أعلاه وفقًا لاحتياجات التطبيق. على سبيل المثال ، عندما تحتاج إلى عرضه بالخط العريض ، فقط قم بتغيير الخط المقابل إلى:
dbgrid1.canvas.font.style: = [fsbold] ؛
أدخل عناصر التحكم البصرية الأخرى في الجدول
في برمجة قاعدة البيانات ، تعد قيود المفاتيح الخارجية طريقة فعالة لضمان تخزين البيانات الموجودة في قاعدة البيانات وفقًا لمتطلبات المستخدم. على سبيل المثال ، في بيئة معالجة الطلبات ، هناك قيود مفتاح خارجي بين جدول الطلب وجدول العميل ، أي أن كل سجل في جدول الطلب يجب أن يكون له عنصر مقابل في جدول العميل. وبهذه الطريقة ، عند ملء نموذج الطلب ، إذا تم توفير قائمة العميل للمستخدم للاختيار في تركيز الإدخال ، فسيتم ضمان صحة البيانات بشكل فعال.
يتم اشتقاق كل من التحكم في DBGRID والتحكم في StringGrid من tcustomGrid ، حيث يمكن للتحكم في DBGRID إدخال البيانات. الآلية الداخلية لـ Delphi لمعالجة DBGRID هي تعويم التحكم في الشبكة. الشبكة التي يمكن أن تحصل على بيانات التركيز والإدخال هي في الواقع عنصر تحكم عائم. بحيث يتم إدخال البيانات على الجدول. لذلك ، فإن طريقة إدراج عناصر التحكم البصرية الأخرى في جدول تتمثل في تعويم التحكم البصري على الشبكة. لذلك من حيث المبدأ ، يمكن إدراج أي عنصر تحكم في الجدول. تأخذ هذه المقالة مثالًا على إدخال مربع منسد في جدول لإدخال الخطوات المحددة لإدخال عناصر تحكم أخرى على الشبكة.
1. تعيين الخصائص
اقرأ خاصية العناصر الخاصة بقائمة العميل إلى المربع المنسدل.
2. إعداد حدث OnDrawcell
يتم إطلاق حدث Ondrawcell عند رسم خلية الجدول. عندما يكون الحقل المقابل للخلية التي تحصل على التركيز متوافقًا مع الحقل المقابل للمربع المنسدل ، حرك المربع المنسدلة إلى الشبكة التي تحصل على التركيز وجعل المربع المنسدل مرئيًا ، وبالتالي تحقيق وظيفة العرض المربع المنسدل في العمود المحدد من الجدول. حدث OnDrawcell لتحديد الجدول كما يلي:
إذا (gdfocused في الدولة) ثم
يبدأ
// إذا كانت الحقول المقابلة متسقة ، فستنفذ
if (grid.cells [acol ، 0] = 'Company') ثم
يبدأ
// انقل المربع المنسدلة إلى الموضع المحدد
comboBox1.Left: = rect.left + grid.left ؛
combobox1.top: = rect.top + grid.top ؛
combobox1.width: = rect.right-rect.left ؛
comboBox1.hight: = rect.bottom-rect.top ؛
// اجعل الصندوق المنسد مرئيًا واكتسب التركيز
combobox1.visible: = true ؛
combobox1.setfocus ؛
نهاية؛
نهاية؛
3. إعداد حدث onclick
إذا كان الحقل المقابل للخلية التي تحصل على التركيز لا يتطابق مع الحقل المقابل للمربع المنسدل ، فإن المربع المنسدل غير مرئي. للقيام بذلك ، قم بتعيين حدث Onclick للجدول على النحو التالي:
if (grid.cells [grid.col ، 0] <> 'Company') ثم
يبدأ
combobox1.visible: = false ؛
نهاية؛
4. إعداد حدث OnChange
في حدث Ondrawcell ، يتم الانتهاء من عمل خلايا الرسم وعرض الصناديق المنسدلة فقط ، ولا يمكن إدخال البيانات في الجدول. للقيام بذلك ، قم بتعيين حدث OnChange من الصندوق المنسدل على النحو التالي:
الشبكة.
العناصر [comboBox1.ItemIndex] ؛
هذا يكمل عمل إدخال المربع المنسدلة في الجدول.
إظهار حقول الرسوم في الجدول
في تطوير البرنامج ، في بعض الأحيان ، هناك حاجة إلى عرض بعض الشخصيات غير التقليدية في التقارير. على سبيل المثال ، يحتوي حقل عنصر التفتيش في تقرير تفتيش الجزء على أحرف غير تقليدية مثل خشونة الجزائن والتسامح مع الآلات. تتمثل الفكرة العامة لحل هذه المشكلة في تخزين هذه الأحرف غير التقليدية كحقول رسومية ، مثل حقل الصورة في قاعدة بيانات SQL Server. ومع ذلك ، سواء كان ذلك هو التحكم في StringGrid أو التحكم في DBGrid ، فإنه يمكن أن يعرض فقط سلاسل مباشرة ، مما يخلق مشكلة كيفية عرض حقول الرسوم على التحكم في الجدول.
للوهلة الأولى ، يمكن حل هذه المشكلة عن طريق إدخال التحكم في DBImage في الجدول باستخدام الطريقة أعلاه. ومع ذلك ، فإن هذا يتطلب إدخال عنصر تحكم مع نفس الرقم. ، ولكن من الواضح أن الخفقان في مجال الرسومات. يتمثل الحل الأفضل في إنشاء عنصر تحكم DBIMAGE ديناميكيًا عند الاتصال بقاعدة البيانات ، واستخدامه لقراءة حقل الصورة في قاعدة البيانات ، وحفظه على القرص الثابت العميل كملف مؤقت. اقرأ الملف المؤقت في حدث OnDrawcell من الجدول ويتم حذف ملف الرسم. فيما يلي الخطوات المحددة لعرض حقول الرسم البياني في الجدول.
1. حفظ حقل الصورة
اقرأ جميع حقول الصور عند تنفيذ استعلام وحفظ على القرص الصلب العميل.
يبدأ
... // حذف بيان الاستعلام
اسم الملف: = "D: EMP" ؛
mydbimage: = tdbimage.create (self) ؛ // إنشاء dbimage
mydbimage.parent: = الذات ؛
mydbimage.datasource: = datasource1 ؛
mydbimage .datafield: = 'الوصف' ؛ // حدد كحقل "الوصف"
الفهرس: = 1 ؛
بينما لا تبدأ ClientData.eof // اقرأ قاعدة البيانات
S: = inttoStr (الفهرس) ؛
filename1: = filename+s ؛
filename1: = filename1+'. BMP' ؛
// حفظ الملفات المؤقتة
mydbimage .picture .bitmap .Savetofile (filename1) ؛
grid.cells [1 ، index]: = '' ؛
// املأ النموذج
Grid.cells [2 ، index]: = clientData.FieldByName ('dative data'). assstring ؛
ClientData.next ؛
الفهرس: = فهرس+1 ؛
نهاية؛
mydbimage.destroy () ؛
نهاية؛
2. انسخ الرسومات
قم بتعيين حدث OnDrawcell ، وقراءة الملف المؤقت ، ونسخ الرسومات إلى العمود المحدد من الجدول:
إذا ((Acol = 1) و (arow> 0) و (Grid.Colcount> 2)) ثم ابدأ
// يتطلب الجدول عمودين على الأقل
اسم الملف: = 'D: EMP' ؛
S: = inttoStr (arow) ؛
اسم الملف: = اسم الملف+s ؛
اسم الملف: = اسم الملف+'. BMP' ؛
myimage: = timage.create (self) ؛ // إنشاء التحكم في الصورة
myimage.parent: = الذات ؛
// قراءة الملفات المؤقتة
myimage.picture.bitmap.loadfromfile (اسم الملف) ؛
// انسخ الرسومات
Grid.Canvas.draw (rect.left ، rect.top ، myimage.
picture.graphic) ؛
myimage.destroy () ؛
نهاية؛