


09/12/2021 (الإصدار 1.7)
03/13/2021 (الإصدار 1.6)
02/01/2021 (الإصدار 1.5)
12/18/2020 (الإصدار 1.4)
10/31/2020 (الإصدار 1.3)
10/27/2020 (الإصدار 1.2)
10/26/2020 (الإصدار 1.1)
05/03/2020
02/11/2019
02/08/2019
02/07/2019
عندما تستخدم ListBox ، وعادةً ما تكون عند تعيين كائنات للعناصر ذات القائمة ، فأنت تريد إظهار/رسم أعمدة في قائمة القائمة ، باستخدام حدث OnDrawitem.
لا بأس ، لكن ليس لديك عنصر تحكم في الرأس لإظهار الأعمدة ، ولا تسمح للمستخدم بتغيير حجم الأعمدة ، وإظهار/إخفاء.
يتيح TheaderControl (Delphi Default Control) بعض هذه العمليات ، ولكن تحتاج إلى كتابة الكثير من التعليمات البرمجية لكل صندوق قائمة ، مع الاهتمام بمواضع إعادة طلاء الأعمدة. وبالطبع ، ليس لديك وظيفة عمود إخفاء/إظهار متوفرة.
لذلك ، كنت أعمل على هذا المكون ، وقررت مشاركته ، لأنه مفيد للغاية.
بالإضافة إلى ذلك ، يعرض DzlisTheader شريط التمرير عندما تضغط الأعمدة على المنطقة المرئية. ؟
يدعم Delphi Xe3..delphi 11
قم بإسقاط dzlistheader في نموذج ، ثم قم بإسقاط صندوق القائمة داخل Dzlistheader.
قم بتعيين dzlisTheader.Listbox = ListBox.
قم بإنشاء الأعمدة المطلوبة في خاصية dzlistheader.columns (يجب أن ترى الأعمدة في وقت التصميم).
ثم اكتب Ondrawitem of DzlisTheader (وليس ondrawitem of listbox - اترك هذا غير معروف). استدعاء الطريقة dzlisTheader.dwcol لرسم كل عمود بسهولة.
يرجى الاطلاع على مجلد مثال لمعرفة الوظائف الأساسية.
يجب عليك كتابة Ondrawitem of DzlisTheader (وليس ListBox) ، واتباع هذه الفكرة:
procedure TForm1.DzListHeaderDrawItem (Control: TWinControl; Index: Integer; Rect: TRect;
State: TOwnerDrawState);
var P: TPerson;
begin
P := TPerson(ListBox.Items.Objects[Index]);
DzListHeader.DwCol( 0 , Rect, P.ID);
DzListHeader.DwCol( 1 , Rect, P. Name );
DzListHeader.DwCol( 2 , Rect, P.Gender);
end ;ببساطة هكذا!
يوفر هذا المكون خيارًا آخر للاستخدام ، لذلك لا تحتاج إلى استخدام الكائنات ، ولا تحتاج إلى كتابة رمز لرسم العناصر. في هذا الخيار ، يجب عليك إضافة عناصر مع خلايا نصية مفصولة بحرف علامة التبويب.
لنفترض أن لديك الجدول التالي:
| بطاقة تعريف | اسم | هاتف |
|---|---|---|
| 1 | جون | 1111-2222 |
| 2 | سارة | 3333-4444 |
| 3 | ألفريد | 5555-6666 |
لذلك يمكنك فقط تمكين خاصية rawtabbedtext التلقائية وإضافة عناصر إلى listbox ذات الخلايا التي تفصلها حرف TAB ، مثل ذلك:
1[TAB]JHON[TAB]1111-2222
2[TAB]SARAH[TAB]3333-4444
3[TAB]ALFRED[TAB]5555-6666
ملاحظة: [علامة التبويب] تمثل الحرف رقم 9
ثم فقط تكوين الأعمدة المطلوبة. في هذا المثال ، ستكون أعمدة: معرف ، الاسم ، الهاتف. بدون أي سطر من التعليمات البرمجية ، سيقوم هذا بطباعة جميع العناصر في القائمة ومحاذاة معلمات الأعمدة.
إذا كنت ترغب في إضافة عناصر في وقت التشغيل ، فيمكنك استخدام وظيفة AddItem ، وتحديد مجموعة من السلاسل التي سيتم تحويلها في نص منفصل.
قد تحتاج إلى استخدام OnDrawitem مع نص مبيد لتخصيص الخلايا الرسم. في هذه الحالة ، يجب أن تترك تعطيل AutoDrawTabbedText وكتابة الحدث OnDrawitem ، ثم استخدام GetItemArray لاستخراج مجموعة من العنصر الحالي ، مع خلايا مفصولة للرسم باستخدام طريقة DWCOL.
لفتح تخصيص مربع الحوار ، انقر بزر الماوس الأيمن في أي جزء من الرأس أو الأعمدة. في مربع حوار تخصيص ، يمكنك إعادة ترتيب الأعمدة وإظهار/إخفاء الأعمدة وتعيين الترتيب الافتراضي.
AllowMoving: Boolean = تمكين/تعطيل أعمدة إعادة تحديد موضعها
AllowResize: Boolean = تمكين/تعطيل الأعمدة تتحرك (إذا كان خطأ ، العمود.
AutoDrawTabbedText: Boolean = عند استخدام AutoDrawTabbedText ، لا تحتاج إلى استخدام الكائنات أو OndrawItem. يمكنك إضافة عناصر إلى ListBox مع Tab Serimiter لتقسيم الأعمدة. في هذه الحالة ، لا تحتاج إلى رمز لرسم العناصر. هناك طريقتان متاحتان للاستخدام مع النص المتبادل: AddItem (إضافة صفيف العنصر ، وبالتالي يتحول المكون تلقائيًا في نص مبيد) ؛ GetArrayText (إرجاع مجموعة من الفهرس المطلوب). لا يزال بإمكانك ترك هذه الخاصية معطلة والعمل مع Tabbed Text ، وكتابة الحدث OnDrawitem واستخدام GetArrayText لقراءة نص الأعمدة المنفصلة.
ColorNormalCol: TColor = لون خلفية العمود
ColorHoverCol: TColor = لون خلفية العمود عند الماوس فوق العمود
ColorLineNormal: TColor = لون خلفية الخط (على القائمة) عندما لا يكون خطًا غريبًا (أو تعطيل UseDD) ، ولم يتم تحديده
ColorLineOdd: TColor = لون خلفية الخط عند تمكين الخط الفردي و useodd
ColorLineSel: TColor = لون خلفية الخط عند تحديد الخط
ColorShape: TColor = لون اندفاعة يشير إلى تحريك الاتجاه أو تغيير حجمه
Columns: TDzListHeaderColumns = مجموعة الأعمدة
HeaderHeight: Integer = ارتفاع رأس ثابت (يمكنك كتابة خطوط متعددة في تعليق العمود إذا كنت تريد)
LineCenter: Boolean = يشير إلى أن وظيفة dwcol ترسم النص مركزيًا رأسياً وفقًا لارتفاع الخط
LineTop: Integer = يشير إلى موضع نص y إلى dwcol عندما يكون Linecenter خطأ
ListBox: TCustomListBox = كائن listbox (مطلوب!)
TextMargin: Integer = مساحة بكسل على اليسار واليمين من العمود (يستخدم حتى لا يلتزم النص في عمود واحد بالنص في عمود آخر)
TitleFont: TFont = خط العنوان لتوضيحيات الأعمدة
UseOdd: Boolean = استخدم خلفية ملونة محددة للخطوط الفردية (انظر خاصية ColorLineodd)
Alignment: TAlignment = يشير إلى محاذاة النص المستخدم في وظيفة DWCOL
Caption: String = نص التسمية التوضيحية لعنوان العمود
CaptionEx: String = هذا التسمية التوضيحية اختيارية ، يستخدم إذا كنت ترغب في تحديد تعليق كامل لعرضه في تخصيص مربع الحوار (على سبيل المثال: Caption: "id" ، captionex: "id of person")
Customizable: Boolean = اسمح للعمود بتخصيصه في مربع الحوار تخصيص تخصيص
CustomTextFont: Boolean = يحدد تخزين خاصية TextFont (يتم تعيينه تلقائيًا عند تغيير TextFont)
Hint: String = تلميح العمود
MaxWidth: Integer = عمود maxwidth عند تغيير الحجم
MinWidth: Integer = عمود minwidth عند تغيير الحجم
Name: String = اسم العمود للعثور على العمود (وظيفة ColbyName) وللحفظ/تحميل تخصيص (وظائف SaveCustom/LoadCustom). يتطلب التخصيص اسم العمود لأنك قد تغير مشروعك ، وفي هذه الحالة سيتم الاحتفاظ بالأعمدة بالترتيب الصحيح بناءً على أسماء الأعمدة.
Sizeable: Boolean = السماح بتغيير حجم العمود
TextFont: TFont = الخط المستخدم بواسطة قماش لرسم نص العنصر لهذا العمود (إن لم يتم تغييره ، يستخدم Canvas خط القائمة لرسم العناصر)
Visible: Boolean = عرض/إخفاء العمود
Width: Integer = عرض العمود
Data: Pointer = مؤشر للاستخدام الحر (خاصية غير منشورة)
procedure LoadCustom ( const A: String);تحميل العمود تخصيص من السلسلة ، بما في ذلك الموضع والحجم والرؤية. يمكنك التحميل من ملف التسجيل/INI.
function SaveCustom : String;حفظ الأعمدة تخصيص إلى سلسلة ، بما في ذلك الموضع والحجم والرؤية. يمكنك حفظ إلى ملف التسجيل/INI.
function ColByID (ID: Integer): TDzListHeaderCol;إرجاع tdzlistheadercol بواسطة معرف العمود. يبقى المعرف ثابتًا عند تحريك الأعمدة (يتم تعريف موضع العمود بواسطة خاصية الفهرس).
function ColByName ( const aName: String): TDzListHeaderCol;إرجاع tdzlistheadercol باسم العمود.
procedure DwCol (ID: Integer; Rect: TRect; const Value : Variant; Margin: Integer = 0 );تستخدم في Ondrawitem ، لرسم نص عنصر العمود. يمثل المعرف رقم العمود بالنظر إلى الترتيب في المجموعة. لذلك ، حتى عندما يتم نقل الأعمدة في وقت التشغيل ، يظل المعرف دائمًا كما هو. هذا هو التعريف الرئيسي للعمود. تمثل القيمة النص المراد طباعته. لاحظ أن القيمة هي نوع متغير ، لذلك لا تحتاج إلى التحويل إلى سلسلة ، إلا إذا كنت تريد تنسيق القيمة ، بالطبع. يمكنك تحديد هامش في الجانب الأيسر من العمود ، لرسم أيقونة أو رسم مخصص آخر (انظر مثال المصدر).
function AddItem ( const Ar: TArray<String>): Integer;تساعدك هذه الوظيفة على إضافة عنصر إلى ListBox ، وفصل سلاسل المصفوفة تلقائيًا باستخدام حرف علامة تبويب. يجب عليك استخدام هذه الوظيفة فقط عندما تقوم بتخزين البيانات في ListBox باستخدام طريقة تحديد Tabbed. عادةً ما ترغب في استخدام هذا جنبًا إلى جنب مع خاصية AutoDrawTabbedText ، لذلك لا تحتاج إلى كتابة Ondrawitem.
function GetItemArray (Index: Integer): TArray<String>; إرجاع مجموعة من الأوتار بالنسبة للفهرس في ListBox ، مع الأخذ في الاعتبار أن نص العنصر يحتوي على بيانات مفصولة بحرف علامة تبويب. يمكنك قراءة خلية بسرعة باستخدام GetItemArray(Index)[Column] .
function GetLeft : Integer;إرجاع الموضع الأيسر للعمود وفقًا لحدود المستقيم.
function GetRight : Integer;إرجاع الموضع الأيمن للعمود وفقًا لحدود المستقيم.
procedure OnColumnClick (Sender: TObject; Col: TDzListHeaderCol);يحدث عند النقر بزر الماوس الأيسر على عمود.
procedure OnColumnDraw (Sender: TObject; Col: TDzListHeaderCol; Canvas: TCanvas; Rect: TRect; Hover: Boolean);إذا قمت بتعيين هذا الحدث ، فيمكنك التقاط وقت رسم عنوان العمود ، مما يتيح لك تغيير اللوحة أو إضافة بعض إلى العمود المطلي الحالي. عند حرائق الحدث ، يتم رسم العمود بالفعل ، ولكن لم يتم رسمه في الشاشة ، لأنه يتم استخدام صورة نقطية داخلية. لذلك يتيح لك هذا الحدث تغيير قماش صورة نقطية. عندما ينتهي الحدث ، يتم رسم صورة نقطية في الشاشة. تشير معلمة Hover إلى أن الماوس فوق العمود في هذه اللحظة.
procedure OnColumnRClick (Sender: TObject; Col: TDzListHeaderCol);يحدث عند النقر بزر الماوس الأيمن على عمود.
procedure OnColumnResize (Sender: TObject; Col: TDzListHeaderCol);يحدث بعد أن تم تغيير حجم العمود.
procedure OnDrawItem (Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);يجب عليك استخدام هذا الحدث لكتابة جميع الأعمدة ، باستخدام طريقة DWCOL (يرجى الاطلاع على مصدر مثال).
لن يطلق هذا الحدث إذا كنت تستخدم AutoDrawtAbbedText = True
procedure MouseEnterCol (Sender: TObject; Col: TDzListHeaderCol);يحدث عندما يدخل الماوس مساحة عمود.
procedure MouseLeaveCol (Sender: TObject; Col: TDzListHeaderCol);يحدث عندما يترك الماوس منطقة عمود.