دلفي: ضبط عرض عمود DBGrid تلقائيًا

تم تصميمه لتمكين المستخدم من عرض البيانات وتحريرها في شبكة جدولية DBGrid يوفر طرقًا مختلفة لتخصيص الطريقة التي تمثل بها بياناته. مع الكثير من المرونة ، أ دلفي يمكن للمطور دائمًا إيجاد طرق جديدة لجعله أكثر قوة.

إحدى الميزات المفقودة لـ TDBGrid هي أنه لا يوجد خيار لضبط عرض أعمدة معينة تلقائيًا لتناسب عرض عميل الشبكة تمامًا. عند تغيير حجم مكون DBGrid في وقت التشغيل ، لا يتم تغيير حجم عرض العمود.

إذا كان عرض DBGrid أكبر من إجمالي عرض جميع الأعمدة ، فستحصل على مساحة فارغة مباشرة بعد العمود الأخير. من ناحية أخرى ، إذا كان العرض الإجمالي لجميع الأعمدة أكبر من عرض DBGrid ، فسيظهر شريط تمرير أفقي.

ضبط عرض عمود DBGrid تلقائيًا

هناك إجراء واحد سهل الاستخدام يمكنك اتباعه لإصلاح عرض أعمدة DBGrid الانتقائية عند تغيير حجم الشبكة في وقت التشغيل.

من المهم ملاحظة أنه عادة ما يحتاج عمودان أو ثلاثة أعمدة فقط في DBGrid إلى تغيير الحجم تلقائيًا ؛ تعرض جميع الأعمدة الأخرى بعض البيانات ذات "العرض الثابت". على سبيل المثال ، يمكنك دائمًا تحديد عرض ثابت للأعمدة التي تعرض القيم من حقول البيانات الممثلة بـ TDateTimeField و TFloatField و TIntegerField وما شابه.

instagram viewer

ما هو أكثر من ذلك ، ربما ستقوم بإنشاء (في وقت التصميم) مكونات المجال الثابتة باستخدام محرر الحقول ، لتحديد الحقول في مجموعة البيانات ، وخصائصها ، وترتيبها. باستخدام كائن منحدر TField ، يمكنك استخدام خاصية العلامة للإشارة إلى أن عمودًا معينًا يعرض قيمًا لهذا الحقل يجب أن يكون بالحجم التلقائي.

هذه هي الفكرة: إذا كنت تريد أن يلائم العمود المساحة المتاحة تلقائيًا ، قم بتعيين قيمة عددية لخاصية علامة سلالة TField التي تشير إلى الحد الأدنى للعرض المقابل للعمود.

إجراء FixDBGridColumnsWidth

قبل أن تبدأ ، في حدث OnCreate لكائن النموذج الذي يحتوي على DBGrid ، حدد الأعمدة التي يجب تغيير حجمها تلقائيًا عن طريق تعيين قيمة غير صفرية لخاصية العلامة لكائن TField المقابل.

إجراء TForm1.FormCreate (المرسل: TObject) ؛
ابدأ
// setup أعمدة قابلة للتحجيم الذاتي من خلال asigning
// Minimm Width in the Tag property.

// باستخدام القيمة الثابتة: 40 بكسل
Table1.FieldByName ('FirstName'). العلامة: = 40 ؛
// باستخدام القيمة المتغيرة: عرض
// نص عنوان العمود الافتراضي
Table1.FieldByName ('LastName'). العلامة: = 4 + قماش. TextWidth (Table1.FieldByName ('LastName'). DisplayName) ؛
النهاية
;

في الكود أعلاه ، جدول 1 هو مكون TTable مرتبط بـ مكون DataSource، الذي يرتبط بـ DBGrid. تشير الخاصية Table1.Table إلى جدول الموظف DBDemos.

قمنا بتمييز الأعمدة التي تعرض قيم حقلي الاسم الأول واسم العائلة لتكون قابلة لتغيير الحجم تلقائيًا. الخطوة التالية هي استدعاء FixDBGridColumnsWidth الخاص بنا في معالج الأحداث OnResize للنموذج:

إجراء TForm1.FormResize (المرسل: TObject) ؛
ابدأ
FixDBGridColumnsWidth (DBGrid1) ؛
النهاية
;

ملحوظة: كل هذا منطقي إذا كانت خاصية Align لـ DBGrid تتضمن إحدى القيم التالية: alTop أو alBottom أو alClient أو alCustom.

أخيرًا ، إليك رمز إجراء FixDBGridColumnsWidth:

إجراء FixDBGridColumnsWidth (مقدار ثابت DBGrid: TDBGrid) ؛
فار
i: عدد صحيح ؛ TotWidth: عدد صحيح ؛ VarWidth: عدد صحيح ؛ ResizableColumnCount: عدد صحيح ؛ AColumn: TColumn ؛
ابدأ
// العرض الإجمالي لجميع الأعمدة قبل تغيير الحجم
TotWidth: = 0؛
// كيفية تقسيم أي مساحة إضافية في الشبكة
VarWidth: = 0 ؛
// عدد الأعمدة التي يجب تغيير حجمها تلقائيًا
ResizableColumnCount: = 0 ؛
إلى عن على ط: = 0 إلى -1 + DBGrid. الأعمدة. العد دوبيجين
TotWidth: = TotWidth + DBGrid. الأعمدة [i] .Width ؛
إذا DBGrid. أعمدة [i] .Field. العلامة 0 ثم
Inc (ResizableColumnCount) ؛
النهاية;
// add 1px لخط فاصل الأعمدةإذا dgColLines في DBGrid. خيارات ثم
TotWidth: = TotWidth + DBGrid. الأعمدة. عد
// add عرض عمود المؤشرإذا dgIndicator في DBGrid. خيارات ثم
TotWidth: = TotWidth + IndicorWidth ؛
// width vale "left"
VarWidth: = DBGrid. ClientWidth - TotWidth ؛
// قم بتوزيع VarWidth بالتساوي
// لجميع الأعمدة القابلة لتغيير الحجم تلقائيًا
إذا ResizableColumnCount> 0 ثم
VarWidth: = varWidth شعبة ResizableColumnCount ؛
إلى عن على ط: = 0 إلى -1 + DBGrid. الأعمدة. العد دوبيجين
AColumn: = DBGrid. الأعمدة [i] ؛
إذا عمود. حقل. العلامة 0 ثم تبدأ
عمود. العرض: = عمود. العرض + VarWidth ؛
إذا عمود. العرض ثم
عمود. العرض: = عمود. حقل. بطاقة شعار؛
النهاية;
النهاية;
النهاية
; (* FixDBGridColumnsWidth *)
instagram story viewer