如何把 ListView 的项目拉到资源管理器
发布:白河愁 日期:2007年12月11日
最近看到好像很多人不会,我就写一个吧。 SHELL 的方法就不说了,说个简单的。
1 首先把 ListView 的 DrawMode 设置为 dmAutomatic,
2 然后在 FormOnCreate 事件写上 DragAcceptFiles(ListView.Handle, True);
3 文件拖出 ListView 然后放手的事件是 OnEndDrag, 这个时间可以得当前鼠标的 X,Y.
4 然后看代码
最近看到好像很多人不会,我就写一个吧。
1 首先把 ListView 的 DrawMode 设置为 dmAutomatic,
2 然后在 FormOnCreate 事件写上 DragAcceptFiles(ListView.Handle, True);
3 文件拖出 ListView 然后放手的事件是 OnEndDrag, 这个时间可以得当前鼠标的 X,Y.
4 然后看代码
procedure TExplorerForm.ListViewEndDrag(Sender, Target: TObject; X, Y: Integer);
var
Point: TPoint;
Hwnd, Hwnd2: THandle;
Text: array[0..MAX_PATH - 1] of Char;
Size: Integer;
TmpFn, NewName: string;
Node: TTreeNode;
begin
Point.X:= X;
Point.Y:= Y;
Hwnd:= WindowFromPoint(Point);
//取得主 hwnd
repeat
Hwnd2:= GetParent(Hwnd);
if Hwnd2 <> 0 then
Hwnd:= Hwnd2;
until Hwnd2 = 0;
Size:= GetClassName(Hwnd, @Text[0], MAX_PATH);
//比较是否资源管理器
if StrLComp(@Text[0], 'ExploreWClass', Size) = 0 then
begin
GetTempPath(MAX_PATH, @Text[0]);
//设法把你要的文件写到临时目录
TmpFn:= Text + ListView.Selected.Caption;
//剪切
if not CopyFilesToClipboard(TmpFn, True) then
raise Exception.Create('Clipboard error!');
//把资源管理器弄上来
SetActiveWindow(Hwnd);
SetForegroundWindow(Hwnd);
//模拟粘贴
keybd_event(VK_CONTROL, 0, 0 ,0);
keybd_event(BYTE('V'), 0, 0 ,0);
Sleep(50);
keybd_event(BYTE('V'), 0, KEYEVENTF_KEYUP ,0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP,0);
Sleep(50);
//清空剪贴板
OpenClipboard(0);
EmptyClipboard;
CloseClipboard;
end;
评论: 2 | 引用: 0 | 浏览:
纯技术帖……路过……
订阅
上一篇
下一篇
Tags:
相关文章: