各位大俠:
TreeView的TreeNode沒有Enable或則Disable屬性或則方法,請問有沒有什麽方法可以將一個TreeNode禁用掉啊?我的Delphi的版本是D6.
另外:下面的網址里有C++的實現,但是小弟對C++不了解,所以各位大俠可以把它翻譯成Delphi語言嗎?謝謝!http://www.ccrun.com/article.asp?i=1015&d=r2tf61#
TreeView的TreeNode沒有Enable或則Disable屬性或則方法,請問有沒有什麽方法可以將一個TreeNode禁用掉啊?我的Delphi的版本是D6.
另外:下面的網址里有C++的實現,但是小弟對C++不了解,所以各位大俠可以把它翻譯成Delphi語言嗎?謝謝!http://www.ccrun.com/article.asp?i=1015&d=r2tf61#
解决方案 »
- 枚举所有打开程序窗口内的标签控件,直到找到他或者全部枚举完毕【求高手详解】
- 88,散分啦
- delphi能开发后台是UNIX,数据库是ORICLE的应用程序吗
- Borland中国&游民的调查贴(有关你第一次在CSDN上的回复),谢谢大家的参与
- 用WebBroker开发Internet的问题。
- 请教一个简单的问题!真的很简单
- 一个困扰我很久的问题,希望有人能帮我解答一下
- 怎样用循环提出数据库中的前5条记录并将其中具体字段的值付给text1,text2,tex3...
- 对线程查询感兴趣的高手进来看看这个程序
- 一个数据库问题在线急需解决
- DELPHIz中如何用16进制数据查找出某个进程中相对应的地址
- 高分求查找arp病毒的计算机的源码
procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
begin
if Integer(node.Data) = 0 then
AllowChange := False;
end;你需要做的前期工作就是给不能用的node.Data赋值0,能用的赋值1
与bdmh意思一样
var AllowChange: Boolean);
begin
if Node.Text='1234' then
AllowChange:=False
else
AllowChange:=True;
end;procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Node.Text='1234' then
self.TreeView1.Canvas.Brush.Color:=clBtnFace
end;可以实现某个节点底色为灰色,而且不能选择
begin
if Node.Text='1234' then
AllowChange:=False
else
AllowChange:=True;
end; procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Node.Text='1234' then
self.TreeView1.Canvas.Brush.Color:=clBtnFace
end;
正解
用node.text判断不好,不具备普遍性,通用性
Windows, Messages, SysUtils, Classes, Controls,Commctrl,ComCtrls;
const
TVIS_CHECKED = $2000;
type
TCheckTreeview = class(TTreeView)
private
{ Private declarations }
protected
{ Protected declarations }
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public declarations }
function IsChecked(Node :TTreeNode) :Boolean;
procedure SetChecked(Node :TTreeNode; Checked :Boolean);
published
{ Published declarations }
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Standard', [TCheckTreeview]);
end;{ TCheckTreeview }procedure TCheckTreeview.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style:=Params.Style or TVS_CHECKBOXES;
end;function TCheckTreeview.IsChecked(Node: TTreeNode): Boolean;
var
TvItem :TTVItem;
begin
TvItem.Mask := TVIF_STATE;
TvItem.hItem := Node.ItemId;
TreeView_GetItem(Node.TreeView.Handle, TvItem);
Result := (TvItem.State and TVIS_CHECKED) = TVIS_CHECKED;
end;procedure TCheckTreeview.SetChecked(Node: TTreeNode; Checked: Boolean);
var
TvItem :TTVItem;
begin
FillChar(TvItem, SizeOf(TvItem), 0);
with TvItem do begin
hItem := Node.ItemId;
Mask := TVIF_STATE;
StateMask := TVIS_STATEIMAGEMASK;
if Checked then
TvItem.State :=TVIS_CHECKED
else
TvItem.State :=TVIS_CHECKED shr 1;
TreeView_SetItem(Node.TreeView.Handle, TvItem);
end;
end;
end.
procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
begin
if Integer(node.Data) = 0 then
begin
SetChecked(Node,False);
AllowChange := False;
end
else
begin
SetChecked(Node,True);
end;
end;
procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
var
check:Boolean;
begin
check := IsChecked(Node);
if Integer(node.Data) = 0 then
begin
SetChecked(Node,check);
AllowChange := False;
end
else
begin
SetChecked(Node,True);//用自己需要的处理
end;
end;
IsChecked,SetChecked取自TCheckTreeview
IsChecked,SetChecked在TCheckTreeview中已經可以做到,是否有類似的IsEnabled,SetEnabled的方法可以將一個TreeNode禁用掉呢?
謝謝!
treeview本身没有,你既然有IsChecked,SetChecked,为什么不用呢
比如CheckBox,我們可以設置它的check狀態,同時我們也可以設置其是否可用(Enabled),我想實現的也是類似這樣的一個效果,只是對象是一個TreeNode。請大家幫幫忙!謝謝!
這樣也可以,相當于在CheckTreeView中添加功能進來,可是我比較菜,所以幫忙一下了!如果嫌分少的話,可以再加!
謝謝!謝謝!