Gut, wenn man sich zu helfen weiß.
Wer mindestens Version 4.70 der Common Controls installiert hat, der kann es auch so angehen:
Delphi-Quellcode:
uses
CommCtrl; // min. 4.70
function GetItemAt(lv: TListView; X, Y: Integer; var iSubItem: Integer): TListItem;
var
hti: TLVHitTestInfo;
begin
hti.pt := Point(X, Y);
iSubItem := ListView_SubItemHitTest(lv.Handle, @hti);
if iSubItem >= 0 then
begin
Result := lv.Items[iSubItem];
iSubItem := hti.iSubItem;
end else Result := nil;
end;
Getestet habe ich so:
Delphi-Quellcode:
procedure TTestForm.ListViewMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
li: TListItem;
iItem, iSubItem: Integer;
begin
li := GetItemAt(Sender as TListView, X, Y, iSubItem);
if Assigned(li)
then iItem := li.Index
else iItem := -1;
Caption := Format('Item %d SubItem %d', [iItem, iSubItem])
end;
Freundliche Grüße vom marabu