双击Listview表格,如何取它的列的值(100分)

  • 主题发起人 主题发起人 cnzcq
  • 开始时间 开始时间
C

cnzcq

Unregistered / Unconfirmed
GUEST, unregistred user!
Listview 为vsReport格式,Listview1.Items.SubItems.strings[j]可以取到某行某列的值,我双击的时候怎么确认J的值???
 
使用mouse.CursorPos坐标计算吧,ListView有Column属性,看当前鼠标的坐标判断在那列范围内,就可以判断出来了
 
procedure TForm1.ListView1DblClick(Sender: TObject);
var
rect:TRect;
i,uwidth:integer;
begin
if listview1.Selected=nil then
exit;
uwidth:=0;
for i:=0 to listview1.Columns.Count-1do
begin
uwidth:=uwidth+listview1.Column.Width;
if listview1.ScreenToClient(Mouse.CursorPos).X<uwidth then
begin
showmessage(inttostr(i));
exit;
end;
end;
end;
 
我根据你的代码写了,取出来的列值不对,偶尔是对的,表格的列值我都做了固定值
 
我试了,完全正确,哈哈.
 
你说有问题,我估计是有滚动条的原因,重新修改了一下,你再试试。
procedure TForm1.ListView1DblClick(Sender: TObject);
var
n,i,uwidth:integer;
begin
if listview1.Selected=nil then
exit;
n:=GetScrollPos(ListView1.Handle,SB_HORZ);
uwidth:=0;
for i:=0 to listview1.Columns.Count-1do
begin
uwidth:=uwidth+listview1.Column.Width;
if listview1.ScreenToClient(Mouse.CursorPos).X+n<uwidth then
begin
showmessage(inttostr(i));
exit;
end;
end;

end;
 
就是滚动条的问题,你要先取得当前item所在的Position
procedure TForm1.ListView1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
var
p:tpoint;
tmpw,i:integer;
edtitem:TListItem;
begin
with TListView(sender)do
begin
edtitem:=GetItemAt(x,y);
if edtitem<>nil then
begin
p:=edtitem.Position;
tmpw:=p.X;
for i:=0 to Columns.Count-1do
begin
if (x>tmpw) and (x<(tmpw+Column.Width)) then
begin
showmessage(edtitem.SubItems[i-1]);
break;
end else
inc(tmpw,Column.Width);
end;
end;
end;
end;
 
可以了,谢谢大家!!
 

Similar threads

S
回复
0
查看
816
SUNSTONE的Delphi笔记
S
S
回复
0
查看
737
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部