TListView 判断是否是鼠标左击,点击了Item

欢迎加入全网最大Delphi 技术交流群 682628230

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
喜欢就支持一下吧
点赞6 分享