tlistview控件小问题,高手进在线等之(50分)

  • 主题发起人 主题发起人 lcmlhs
  • 开始时间 开始时间
L

lcmlhs

Unregistered / Unconfirmed
GUEST, unregistred user!
设置tlistview的checkbox属性后,我单击选择checkbox的同时也选择对应的这项呢?
因为选取的那行不等于listview.selected,我想知道选中了哪一行怎么办?
 
自己顶一下,这个问题困扰了好久了
 
这个东西大富翁里也讨论过很多次了
1.不用自带的checkbox ,自己画个图片在上面处理
2.用API的TreeView_SetItem 能获得一个State 判断这个State是否有TVIS_CHECKED属性
3.用第3方控件
 
大侠,怎样画个图片在上面处理呀?
 
imagelist里放未选择和选择的图片对应0、1位置
这里我为了方便简单的用node.data存是否点击,你可以写个结构放到data里来存储
设置treeview的images为你的imagelist
procedure TForm1.FormCreate(Sender: TObject);
var
i,j:integer;
node,pnode:ttreenode;
begin
for i:=0 to 4do
begin
pnode:=treeview1.Items.AddChild(nil,'PIndex'+inttostr(i));
pnode.ImageIndex:=0;
pnode.Data:=pointer(false);
for j:=0 to 4do
begin
node:=treeview1.Items.AddChild(pnode,'CIndex'+inttostr(j));
node.ImageIndex:=0;
node.Data:=pointer(false);
end;
end;
nflash:=false;
end;

procedure TForm1.TreeView1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
var
node:TTreeNode;
r:TRect;
begin
node:=TTreeView(Sender).GetNodeAt(x,y);
if assigned(node) then
begin
r:=node.DisplayRect(true);
r.Left:=r.Left-ImageList1.Width;
if ptinrect(r,point(x,y)) then
{判断是否点在收缩按钮上或者节点外}
begin
node.Data:=pointer(not boolean(node.Data));
invalidateRect(TTreeView(Sender).Handle,@r,true);
end;
end;
end;

procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode;
State: TCustomDrawState;
Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean);
var
r:TRect;
begin
DefaultDraw:=true;
PaintImages:=false;
if assigned(node) then
begin
r:=node.DisplayRect(true);
with TTreeView(Sender)do
begin
Canvas.FillRect(r);
if boolean(node.Data) then
imagelist1.Draw(Canvas,r.Left-imagelist1.Width,r.Top-1,0)
else
imagelist1.Draw(Canvas,r.Left-imagelist1.Width,r.Top-1,1);
Canvas.TextOut(r.Left+2,r.Top+1,node.Text);
end;
end;
end;
 
接受答案了.
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
802
DelphiTeacher的专栏
D
后退
顶部