TreeView控件在右键尚未松开时,焦点是在被单击的节点上的;但只要一松开,在我的菜单弹出之前,焦点就回到原先的选中节点上去了。对比一下Windows的资源管理器中的TreeView,是在菜单功能执行之后才回到原选中节点上的。我需要类似资源管理中的表现。
一定给分。
一定给分。
解决方案 »
- Time 问题
- fastreport问题
- 谁能给个内存加载dll的代码?
- 关于短信网关发送短信
- 回答问题送国际域名一个,加300分,ActiveForm超高手请进,绝世难题。回答正确后直接找QQ:82865领奖
- 昵称为奇奇号巡洋舰的朋友请进!!
- 招聘DELPHI程序员,工作地点:上海
- 一个关于时间运算问题(20分)
- ‘Update mydb set mytime=’+DateTimetoStr(Now)+‘ where num=1’出什么错?
- 我要用delphi开发一个串口通信的实现的测试小程序。怎么办。MSCOMM控件和 SPCOMM控件又是如何获取的,谢谢
- 如何在delphi中实现TDBComboBox从一个编码表中读数据!!!!!
- 请问哪位知道Delphi6的InstallShield Express 3.51的注册码?
用Node := self.TreeView.GetNodeAt(X, Y);测试鼠标松开时所处的结点,
Shift: TShiftState; X, Y: Integer);
begin
if Button=mbRight then
Treeview1.Selected :=Treeview1.GetNodeAt(X,Y);
end;
当右键点击时,使被点击节点成为被选中节点;如果想执行完操作后,回到之前的被选中节点;定义一个节点变量,var myNode:TTreeNode;
在if Button=mbRight then之前写
myNode:=Treeview1.selected; //保存之前的被选中节点
... //执行操作
Treeview1.selected:=myNode; //返回之前被选中节点
procedure TMainForm.TreeView1ContextPopup(Sender: TObject;
MousePos: TPoint; var Handled: Boolean);
begin
if TreeView1.GetNodeAt(MousePos.X, MousePos.Y)<>nil then
begin
TreeView1.ClearSelection;
TreeView1.GetNodeAt(MousePos.X, MousePos.Y).Selected:=true;
end;
end;
这80分是我的了
我的问题还要稍微复杂一点:
对比一下Windows的资源管理器,当我们用右键点击某节点时,被击的节点以蓝背景显示,但右侧的文件夹内容并不会跟着变化;而在菜单消失后,选中的节点仍是右击前的节点。也就是说,TreeView.Selected属性在此过程中并未发生变化,只是在右击事件进行中,被右击的节点暂时以蓝背景显示而已。
大家提供的解法中都有对Selected属性的修改,而我不希望激发OnChange事件。也就是说,我希望弹出时,被右击的节点以蓝背景显示,但不想将此节点设为选中节点。请大家再想想别的办法!以上各位都会有分,能解决问题的,独得80分!
要在程序中手动设置selected,Treeview的HideSelection属性要设为false
要鼠标移到某个节点时,出现下划线,将HotTrack属性设为true怕你觉得80分不值,多说了两句 *^_^*
这样treeview1.selected就是右键点击的结点了。简单的。
Shift: TShiftState; X, Y: Integer);
var
TpNode : TTreeNode;
begin
if Button = mbRight then
begin
try
TpNode := TvwFh.GetNodeAt(X,Y);
except
exit;
end;
if TpNode <> nil then
begin
PopupMenu.Popup(x + Left + 20, y + Top + 20);
end;
end;
end;
if TpNode <> nil then
begin
PopupMenu.Popup(x + Left + 20, y + Top + 20);
end;
换成
if TpNode <> nil then
begin
trrview.select := Tpnode;
end;
就可以了。
我希望在右击及菜单保持在弹出状态时,TreeView中被右击的节点能以蓝背景显示,在我选择一某一项菜单后,蓝背景才回到先前的焦点上。目前Delphi的动作是:在右击时,节点以蓝背景显示,但只要鼠标一松开,蓝背景就回到右击前的Selected节点上去了。
回答的都将给分。能解决问题的得100分。
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ComCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
procedure N1Click(Sender: TObject);
procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure N2Click(Sender: TObject);
private
NowNode:TTreeNode;
OldNode:TTreeNode;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.N1Click(Sender: TObject);
begin
OldNode:=NowNode;
end;procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
OldNode:=TreeView1.Selected;
NowNode:=TreeView1.GetNodeAt(X,Y);
TreeView1.Selected:=NowNode;
end;procedure TForm1.N2Click(Sender: TObject);
begin
TreeView1.Selected:=OldNode;
NowNode:=OldNode;
end;end.