VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: woshibate

请问 listview 怎么知道,鼠标点击的是哪一列?

[复制链接]

1

主题

13

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-4-17 20:30:01 | 显示全部楼层
改了一下

function TListViewX.GetItemAtX(X, Y: integer;
  var Col: integer): TListItem;
var
  i, n, RelativeX, ColStartX: Integer;
  ListItem: TlistItem;
  OldRowSelect:Boolean;
  Found:Boolean;
begin
  Result := GetItemAt(X, Y);
  if (not RowSelect) and (Result <> nil) then
  begin
    Col := 0; // First column
  end
  else if (ViewStyle = vsReport)
    and (TopItem <> nil) then
  begin
    // First, let's try to find the row
    //ListItem := GetItemAt(TopItem.Position.X, Y);

    //save rowselect setting
    OldRowSelect := RowSelect;
    RowSelect := True;
    ListItem := GetItemAt(X, Y);
    //Restore rowselect setting;
    RowSelect := OldRowSelect;

    if ListItem <> nil then
    begin
      // Now let's try to find the Column
      RelativeX := X - ListItem.Position.X - BorderWidth;
//      ColStartX := Columns[0].Width;
      ColStartX:=0;
      n := Columns.Count - 1;
      for i := 0 to n do
      begin
        if RelativeX < ColStartX + Columns[i].Width then
        begin
          Result:=ListItem;
          Col:=i;
          break;
        end;
{        if RelativeX <= ColStartX +
          StringWidth(ListItem.SubItems[i - 1]) then
        begin
          Result := ListItem;
          Col := i;
          break;
        end; //if}
        Inc(ColStartX, Columns[i].Width);
      end; //for
//      Col:=i;
    end; //if
  end; //if
end;
回复

使用道具 举报

1

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-5-2 13:15:01 | 显示全部楼层
问题解决,感谢 jk66255 的代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表