דלפי בקרת TListView מציגה רשימת פריטים בעמודות עם כותרות עמודות ותתי פריטים, או אנכית או אופקית, עם סמלים קטנים או גדולים.
כמו רוב פקדי Delphi, TListView חושף את ה- בלחיצה ו OnDblClick (OnDoubleClick) אירועים.
לרוע המזל, אם אתה צריך לדעת על איזה פריט או לחיצה כפולה, אינך יכול פשוט להתמודד עם אירועי OnClick / OnDblClick כדי לקבל את הפריט שלחץ עליו.
אירוע OnClick (OnDblClick) עבור TListView מופעל בכל פעם שהמשתמש לוחץ על הפקד - כלומר בכל פעם ש"קליק "מתרחש איפשהו באזור הלקוח של הבקרה.
המשתמש יכול ללחוץ בתצוגת הרשימה, אך "להחמיץ" כל אחד מהפריטים. מה שכן, מכיוון שתצוגת רשימה יכולה לשנות את התצוגה שלה בהתאם לנכס ViewStyle, המשתמש יכול להיות שלחץ על פריט, על כיתוב פריט, על סמל פריט, "בשום מקום", על סמל מצב פריט, וכו '
הערה: המאפיין ViewStyle קובע כיצד מוצגים פריטים בתצוגת הרשימה: ניתן להציג את הפריטים כסט סמלים הניתנים להזזה, או כעמודות טקסט.
תצוגת רשימה. על הפריט לחץ & ListView. על הפריט לחץ כפול
בכדי להיות מסוגל לאתר את הפריט שהקליק עליו (אם יש אחד) כאשר מופעל אירוע OnClick עבור תצוגת הרשימה, עליך לקבוע מה אלמנטים מתצוגת הרשימה שוכנים מתחת לנקודה שצוינה על ידי פרמטרים X ו- Y - זהו מיקום העכבר ברגע של "לחץ".
רשימת ה- TListiew GetHitTestInfoAt הפונקציה מחזירה מידע על הנקודה שצוינה באזור הלקוח של תצוגת הרשימה.
כדי לוודא שלחצו על הפריט (או לחצו עליו פעמיים) עליכם להתקשר ל- GetHitTestInfoAt ולהגיב רק אם אירוע הקליק התרחש על פריט בפועל.
להלן דוגמה ליישום של אירוע OnDblClick של ListView1:
// מטפל בלחיצה כפולה של ListView1תהליך TForm.ListView1DblClick(שולח: נושא);
var
hts: בדיקות THT;
ht: THitTest;
sht: מחרוזת;
ListViewCursosPos: TPoint;
selectItem: TListItem;
התחל
// מיקום סמן העכבר הקשור ל- ListView
ListViewCursosPos: = ListView1.ScreenToClient (עכבר. CursorPos);
// לחץ כפול איפה?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// מבחן התאמה של "ניפוי באגים"
הכיתוב: = '';
ל ht בתוך hts לעשות
התחל
sht: = GetEnumName (TypeInfo (THitTest), מספר שלם (ht));
הכיתוב: = פורמט ('% s% s |', [הכיתוב, sht]);
סוף;
// אתר את הפריט שנלחץ פעמיים
אם hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] לאחר מכן
התחל
valgtItem: = ListView1.Selected;
// תעשו משהו עם הפריט הקליק כפול!
הכיתוב: = פורמט ('DblClcked:% s', [selectItem. הכיתוב]);
סוף;
סוף;
במטפל האירועים OnDblClick (או OnClick) קרא את הפונקציה GetHitTestInfoAt על ידי מתן אפשרות למיקום העכבר "בתוך" הפקד. כדי לקבל את מיקום העכבר הקשור לתצוגת הרשימה, הפונקציה ScreenToClient משמשת להמרת נקודה (עכבר X ו- Y) בקואורדינטות המסך לקואורדינטות מקומיות או אזור לקוח.
ה- GetHitTestInfoAt מחזיר ערך של בדיקות סוג. ה- THitTests הוא סט של מבחן זה הערכים המנויים.
המבחן הזה ספירה הערכים, עם התיאור שלהם, הם:
- ht מעל - מעל אזור הלקוח.
- htBelow - מתחת לאזור הלקוח.
- htNherehere - בתוך הפקד, אך לא על פריט.
- htOnItem - על פריט, הטקסט או מפת הסיביות שלו.
- htOnButton - על כפתור.
- htOnIcon - על אייקון.
- htOnIndent - על שטח ההטבעה של פריט.
- htOnLabel - על תווית.
- htOnRight - בצד ימין של פריט.
- htOnStateIcon - על סמל מצב או מפת סיביות המשויכים לפריט.
- htToLeft - משמאל לאזור הלקוח.
- htToRight - מימין לאזור הלקוח.
אם תוצאת השיחה ל- GetHitTestInfoAt היא א תת משנה (סטים של דלפי!) של [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] אתה יכול להיות בטוח שהמשתמש לחץ על הפריט (או על הסמל / סמל המצב שלו).
לבסוף, אם האמור לעיל נכון, קרא את הסעיף נבחר המאפיין של תצוגת הרשימה, הוא מחזיר את הפריט שנבחר הראשון (אם ניתן לבחור מספר) בתצוגת הרשימה. עשה משהו עם הפריט הקליק / לחיצה כפולה / שנבחר ...
הקפד להוריד את קוד המקור המלא כדי לחקור את הקוד וללמוד על ידי אימוץ.