دلفي يعرض عنصر تحكم TListView قائمة بالعناصر في الأعمدة التي تحتوي على رؤوس الأعمدة والعناصر الفرعية ، أو عموديًا أو أفقيًا ، مع رموز صغيرة أو كبيرة.
كما تفعل معظم ضوابط دلفي ، يكشف TListView عند النقر و OnDblClick (OnDoubleClick) الأحداث.
لسوء الحظ ، إذا كنت بحاجة إلى معرفة العنصر الذي تم النقر عليه أو النقر المزدوج ، فلا يمكنك ببساطة التعامل مع أحداث OnClick / OnDblClick للحصول على العنصر الذي تم النقر عليه.
يتم تشغيل حدث OnClick (OnDblClick) لـ TListView عندما ينقر المستخدم على عنصر التحكم - أي عند حدوث "النقر" في مكان ما داخل منطقة العميل الخاصة بالتحكم.
يمكن للمستخدم النقر داخل عرض القائمة ، ولكن "يغيب" عن أي من العناصر. ما هو أكثر من ذلك ، نظرًا لأن عرض القائمة يمكن أن يغير عرضه اعتمادًا على خاصية ViewStyle ، المستخدم ربما يكون قد نقر على عنصر ، في تسمية توضيحية لعنصر ، أو على رمز عنصر ، "في أي مكان" ، على رمز حالة العنصر ، إلخ
ملاحظة: تحدد خاصية ViewStyle كيفية عرض العناصر في عرض القائمة: يمكن عرض العناصر كمجموعة من الرموز المنقولة ، أو كأعمدة نصية.
عرض القائمة. في عنصر انقر فوق ListView. انقر نقرًا مزدوجًا على العنصر
لتتمكن من تحديد موقع العنصر الذي تم النقر عليه (إذا كان هناك عنصر) عند تشغيل حدث OnClick لعرض القائمة ، يلزمك تحديد ما تقع عناصر عرض القائمة تحت النقطة المحددة بواسطة معلمات X و Y - وهذا هو موقع الماوس في لحظة "انقر".
TListiew's GetHitTestInfoAt تعرض الدالة معلومات حول النقطة المحددة في منطقة العميل لعرض القائمة.
للتأكد من النقر على العنصر (أو النقر المزدوج) ، تحتاج إلى الاتصال بـ GetHitTestInfoAt والتفاعل فقط إذا حدث حدث النقر على عنصر فعلي.
في ما يلي مثال على تنفيذ حدث OnDblClick الخاص بـ ListView1:
// يعالج قائمة ListView1 عند النقر المزدوجإجراء TForm.ListView1DblClick(المرسل: الهدف) ؛
فار
hts: THitTests؛
ht: THitTest ؛
sht: خيط;
ListViewCursosPos: TPoint؛
selectedItem: TListItem ؛
ابدأ
// موضع مؤشر الماوس المتعلق بـ ListView
ListViewCursosPos: = ListView1.ScreenToClient (الماوس. CursorPos) ؛
// انقر مرتين أين؟
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X ، ListViewCursosPos. Y) ؛
// اختبار "التصحيح" ضرب الاختبار
شرح: = ''؛
إلى عن على ht في hts فعل
ابدأ
sht: = GetEnumName (TypeInfo (THitTest) ، عدد صحيح (ht)) ؛
تسمية توضيحية: = التنسيق ('٪ s٪ s |'، [Caption، sht])؛
النهاية;
// حدد موقع العنصر الذي تم النقر فوقه نقرًا مزدوجًا
إذا hts <= [htOnIcon، htOnItem، htOnLabel، htOnStateIcon] ثم
ابدأ
selectedItem: = ListView1.Selected ؛
// افعل شيئًا مع عنصر النقر المزدوج!
التسمية التوضيحية: = التنسيق ('DblClcked:٪ s'، [selectedItem. شرح]) ؛
النهاية;
النهاية;
في معالج الأحداث OnDblClick (أو OnClick) ، اقرأ دالة GetHitTestInfoAt بتزويدها بموقع الماوس "داخل" عنصر التحكم. للحصول على موقع الماوس المرتبط بطريقة عرض القائمة ، يتم استخدام وظيفة ScreenToClient لتحويل نقطة (إحداثيات X و Y) في إحداثيات الشاشة إلى إحداثيات محلية أو منطقة العميل.
إرجاع GetHitTestInfoAt قيمة الاختبارات اكتب. THitTests عبارة عن مجموعة من THitTest تعداد القيم.
THitTest تعداد القيم ، مع وصفها ، هي:
- htAbove - فوق منطقة العميل.
- htBelow - تحت منطقة العميل.
- htNowhere - داخل عنصر التحكم ، ولكن ليس على عنصر.
- هتونيمتيم - على عنصر أو نصه أو صورته النقطية.
- htOnButton - على زر.
- هتونيكون - على أيقونة.
- htOnIentent - في المنطقة البادئة من عنصر.
- htOnLabel - على ملصق.
- هونترايت - على الجانب الأيمن من عنصر.
- htOnStateIcon - على أيقونة حالة أو صورة نقطية مرتبطة بعنصر.
- htToLeft - على يسار منطقة العميل.
- htTright - على يمين منطقة العميل.
إذا كانت نتيجة استدعاء GetHitTestInfoAt أ مجموعة فرعية (مجموعات دلفي!) من [htOnIcon، htOnItem، htOnLabel، htOnStateIcon] يمكنك التأكد من قيام المستخدم بالنقر فوق العنصر (أو على الرمز / رمز الحالة الخاص به).
أخيرا ، إذا كان ما سبق صحيحا ، اقرأ المحدد خاصية عرض القائمة ، تقوم بإرجاع العنصر المحدد الأول (إذا كان بالإمكان تحديد عناصر متعددة) في عرض القائمة. افعل شيئًا مع العنصر الذي تم النقر عليه / النقر المزدوج / المحدد ...
تأكد من تنزيل شفرة المصدر الكاملة لاستكشاف الرمز والتعلم من خلال اعتماده.