1. 使用 OnMouseDown
事件
在 OnMouseDown
事件中,Button
参数会告诉你当前按下的是哪个鼠标键(左键、右键或中键)。我们可以在代码中检查 Button
是否为 mbLeft
(左键)。
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Item: TListItem;
begin
// 只处理左键点击
if Button = mbLeft then
begin
// 获取鼠标点击位置的项
Item := ListView1.GetItemAt(X, Y);
if Item <> nil then
begin
// 鼠标左键点击了某个项
ShowMessage('你左键点击了项: ' + Item.Caption);
end
else
begin
// 鼠标左键点击了空白区域
ShowMessage('你左键点击了空白区域');
end;
end;
end;
2. 使用 OnClick
事件
如果你使用 OnClick
事件,可以通过 GetKeyState
函数来判断鼠标左键是否按下。OnClick
事件本身不会直接提供鼠标键信息,因此需要额外判断。
procedure TForm1.ListView1Click(Sender: TObject);
var
Item: TListItem;
begin
// 判断鼠标左键是否按下
if GetKeyState(VK_LBUTTON) < 0 then
begin
if ListView1.Selected <> nil then
begin
// 鼠标左键点击了某个项
ShowMessage('你左键点击了项: ' + ListView1.Selected.Caption);
end
else
begin
// 鼠标左键点击了空白区域
ShowMessage('你左键点击了空白区域');
end;
end;
end;
3. 使用 HitTest
方法(结合左键判断)
如果你需要更精确的点击位置信息(例如是否点击了图标、子项等),可以结合 HitTest
方法和左键判断。
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
HitTest: THitTests;
Item: TListItem;
begin
// 只处理左键点击
if Button = mbLeft then
begin
HitTest := ListView1.GetHitTestInfoAt(X, Y);
if htOnItem in HitTest then
begin
Item := ListView1.GetItemAt(X, Y);
if Item <> nil then
begin
// 鼠标左键点击了某个项
ShowMessage('你左键点击了项: ' + Item.Caption);
end;
end
else
begin
// 鼠标左键点击了空白区域
ShowMessage('你左键点击了空白区域');
end;
end;
end;
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END