拖动中的处理(急)(100分)

  • 主题发起人 主题发起人 黑人
  • 开始时间 开始时间

黑人

Unregistered / Unconfirmed
GUEST, unregistred user!
我在TTreeView中对某子节点进行拖动。
想拖动到另外某个节点时,过2秒钟后就展开这个节点
(2秒钟之内移走则不展开)
 
展开可以自己手动做,获得移动节点的位置,然后延时两秒展开。
 
自己做一个定时器。
 
两位大虾说的都没有错,但我想有一个仔细一点的答案 ,对于我这种刚转行的师弟来说,理论也许知道一点,但,具体什么东东就弄不懂了。
比如说 什么时候开始计时,什么时候关闭计时器?
再具体上点就是:我想在移动的鼠标到达某节点上时开始计时,如果停留了2秒钟
就展开,而如果只是一闪而过,那就要在离开这一事件上关闭计时器,但涉及到具体的事件是哪一个事件时,我头就大了。。。。
 
调用api,如sleep(2000){延时2秒}
 
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Timer1: TTimer;
Memo1: TMemo;
procedure TreeView1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
procedure TreeView1DragOver(Sender, Source: TObject;
X, Y: Integer;
State: TDragState;
var Accept: Boolean);
procedure Timer1Timer(Sender: TObject);
private
oldtreeNode:TTreeNode;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.TreeView1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
if button= mbRight then
Treeview1.begin
Drag(true);
end;

procedure TForm1.TreeView1DragOver(Sender, Source: TObject;
X, Y: Integer;
State: TDragState;
var Accept: Boolean);
begin
accept:=true;
if Treeview1.DropTarget<>OldTreeNode then
begin
oldTreeNode:=Treeview1.DropTarget ;
timer1.Enabled :=True;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if assigned(OldTreeNode) then
oldTreeNode.Expand(true);
memo1.Lines.add(oldtreeNode.text);
timer1.Enabled :=false;
end;

end.
 
接受答案了.
 

Similar threads

回复
0
查看
873
不得闲
D
回复
0
查看
822
DelphiTeacher的专栏
D
D
回复
0
查看
765
DelphiTeacher的专栏
D
后退
顶部