使用treeview时,当在执行某操作时不想让用户点击到树目录,如何做?(20分)

  • 主题发起人 主题发起人 dana
  • 开始时间 开始时间
D

dana

Unregistered / Unconfirmed
GUEST, unregistred user!
因为不能让用户改变当前树目录的焦点值,所以如何不让用户点击到?
 
enabled:=false;
 
不行这样界面太难看!
 
放在Panel上,Panel.enabled:=false;就行了变通一下嘛!
 
呵呵全面解决拿分来
 
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
treeview1.Items[0].Selected:=True;
end;
此方法用户可点击到,但不能改变当前焦点。
 
redsky.l:可这样没法向用户提示信息。
sanming:因为当前的焦点是在程序中变化的不能这样强制指定。
有何较好的方法吗?
谢谢二位大哥!
 
仅供参考:
1、当用户改变节点时,把节点立即该回来。(中间可以加声音或对话框提示);
2、从系统消息队列截获鼠标消息,不让鼠标移过去。
3、像 redsky.l 所说的。 可以在窗口的状态栏提示用户。
4、当此时,改变 Treeview 的背景 变暗一些。
 
还是用我这种方法,还必须是加个Panel,程序设置其Enable的属性就行了。看代码:

private
procedure Msg(var Msg: TMsg; var Handled: Boolean);

var

MouseX,MouseY:integer;

implementation


procedure TForm1.FormCreate(Sender: TObject);
begin
application.OnMessage:=Msg;
end;

procedure Tform1.Msg(var Msg: TMsg; var Handled: Boolean);
var
Rect1,Rect2,Rect3,Rect4:integer;
begin
Rect1:=Panel1.left;
Rect2:=Panel1.left+Panel1.width;
Rect3:=Panel1.top;
Rect4:=Panel1.left+Panel1.Height;
if msg.message=WM_LBUTTONDOWN then
if //(not Panel1.Enabled)and Panel.Enable 为true时,From接收不到鼠标移动事件,所以没必要这句
(MouseX>Rect1)and(MouseX<Rect2)and
(MouseY>Rect3)and(MouseY<Rect4) then
begin
Application.MessageBox('这里不让你点了!!笨蛋!!','提示',MB_OK);
handled:=true;
end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
MouseX:=X;
MouseY:=y;
end;


这个如何??你20分也太少了点呀:)
 
procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
begin
if (不能让用户改变当前树目录的焦点值) then
AllowChange := False;
end;


你20分也太少了点呀:)
 
多人接受答案了。
 
后退
顶部