
A mellékelt példaprogram megnyitása előtt az ExListView.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
Első lépésként létrehozunk egy új eseménytípust TCheckboxClickEvent névvel, mely két paramétert tartalmaz, az egyik maga a komponens objektuma lesz, míg a másikban a ListView azon elemét kapjuk majd meg TListItem típusban, melynél a kattintás történt.
TCheckboxClickEvent = procedure (Sender: TObject; Item: TListItem) of object;
Az új komponensen belül fel kell használnunk az OnMouseUp eseményt, melyet a MouseUp eljárás felülírásával tehetünk meg. Amikor tehát a felhasználó felengedi az egér gombját a ListView területén belül, akkor ellenőrizzük, hogy hol történt a kattintás.
procedure TExListView.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Item: TListItem;
HitTest: THitTests;
begin
Ehhez a GetItemAt függvény segítségével lekérdezzük az egér kattintás x, y koordinátájában lévő ListView elemet, majd a GetHitTestInfoAt függvénnyel meghatározzuk, hogy ezen a koordinátán milyen részobjektuma található a ListView komponensnek.
Item:=GetItemAt(x, y);
HitTest:=GetHitTestInfoAt(x, y);
Mivel a kattintás történhet olyan helyen is a ListView komponensben, ahol nem található egyetlen elem sem, így következő lépésként ellenőriznünk kell, hogy az előző két függvény értékes adatot szolgáltatott-e. Abban az esetben, ha a GetHitTestInfoAt függvény által szolgáltatott eredmény halmazban megtalálható a htOnStateIcon konstans, akkor biztosak lehetünk abban, hogy a kattintás valamely elem CheckBox-án történt. Ebben az esetben aktivizálhatjuk a létrehozott eseményünket.
if (Item<>nil) and (HitTest=[htOnStateIcon]) and (Assigned(FOnChecboxClick)) then begin
FOnChecboxClick(Self, Item);
end;
end;