一个小问题,关于拖放:如何没有选中某文本(比如只选中标题),将文本拖到别的应用程序中?
例如,有一棵树,点击树节点后,某文本框有内容,如何拖动该树节点到某应用程序(例如,word,notepad等)时候,文本自动就过去了。
当然,如果选中文本,复制,粘贴,也可以实现,不过不如拖放那么方便。
哪位大侠能指点一下,感谢~~~~
[解决办法]
需要写个IDropSource类来实现OLE接口,确实需要点时间
[解决办法]
参考
http://community.csdn.net/Expert/topic/5383/5383877.xml?temp=.9527246
[解决办法]
以下演示, “拖”往记事本测试成功。Word不成功。
var
H : HWND;
S : string = 'abcdefghijklmn ';//用这个字串代替你说的Text试验
procedure TForm1.Timer1Timer(Sender: TObject);
begin
H := WindowFromPoint(Mouse.CursorPos);
if H <> 0 then
if (GetKeyState(VK_LButton) and $8000) <> $8000 then
//如果松开左键
begin
//这里WM_SetText发送的是S, 换成节点指向的Text应该也简单
//并且这里应该判断鼠标指向的控件的类型, 这个你自己研究吧
SendMessage(H, WM_SetText, 0, integer(PChar(S)));
Timer1.Enabled := False;
end;
end;
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//如果在TreeView上按下左键并拖动
if Button = mbLeft then Timer1.Enabled := True;
end;
procedure TForm1.TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Timer1.Enabled := False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 100;
Timer1.Enabled := False;
end;