因为第一列的宽度为0,不能用GetItemAt(X, Y)。 这样判断: procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var r: TRect; i, h: Integer; begin if ListView1.Items.Count = 0 then Exit; r := ListView1.Items[0].DisplayRect(drBounds); h := r.Bottom - r.Top; // item高度 for i := 0 to ListView1.Items.Count - 1 do begin if (Y >= ListView1.Items[i].Top) and (Y <= ListView1.Items[i].Top + h) then begin // 取得item ShowMessage(ListView1.Items[i].Caption); Break; end; end; end;
a: TListItem; a := listView1.GetItemAt(X, Y);
这样判断:
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
r: TRect;
i, h: Integer;
begin
if ListView1.Items.Count = 0 then Exit;
r := ListView1.Items[0].DisplayRect(drBounds);
h := r.Bottom - r.Top; // item高度
for i := 0 to ListView1.Items.Count - 1 do begin
if (Y >= ListView1.Items[i].Top) and
(Y <= ListView1.Items[i].Top + h)
then begin // 取得item
ShowMessage(ListView1.Items[i].Caption);
Break;
end;
end;
end;
Thanksto sysu(死树):
Good. It's right