一个说起来很简单很简单的操作,我不会。 ----大侠和富翁们看看。 (300分)

  • 主题发起人 主题发起人 白衣书生
  • 开始时间 开始时间

白衣书生

Unregistered / Unconfirmed
GUEST, unregistred user!
说起来很简单的关于鼠标的操作:想用鼠标操作得到Windows文件的路径和文件名。

比如:鼠标点击某个文件(不是文件夹),Label能够显示文件的绝对路径(包括文件名)。
或选中某个文件,用鼠标将其托动到Form上,则文件的路径能够显示在Edit中。
(类似蚂蚁或FlashGet?)

我考虑了一下,大概只能用“鼠标钩子”实现了。可我水平有限,怎么也钩不住、做不成。
应该怎样做呢? 究竟这个想法能不能实现呢?
还请做过这个东东或有这方面经验的富翁和大侠指教,给点思路或提示。 万分感谢。
300分奉送。解决后可另送分。谢谢。
 
这是Shell编程,不是钩子,你仔细找找资料,很多的。
 
to kkyy:多谢老大指教。
如果说钩子,我还见过这样的程序(如屏幕取词),但是Shell编程,知道的就更少了。
涉及到系统内部的东东我真的不明白啊。我搜索的一下,得到很少的资料,盼望老大给条明路。
 
这个程序挺好玩。如果是自己做资源管理器,实现在程序内部选择,这样应该比较简单。
 
dragdrop控件就可以,我刚试过
 
下面的程序可以实现将文件从资源管理器中拖放到应用程序中,Listbox中显示文
件名和路径。

在Form1上放置一个Listbox.

TForm1定义如下:
type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure WMDropFiles(VAR Msg: TWMDropFiles);message WM_DROPFILES;
procedure AppOnMessage(VAR Msg: TMsg;VAR Handled : Boolean);
public
{ Public declarations }
end;


WMDropFiles,AppOnMessage如下,

procedure TForm1.WMDropFiles(VAR Msg: TWMDropFiles);
VAR
N : Word;
buffer : ARRAY[0..180] OF Char;
BEGIN

WITH Msg DO
BEGIN
FOR N := 0 TO DragQueryFile(Drop, $FFFFFFFF, buffer,1)-1 DO
BEGIN
DragQueryFile(Drop, N, Buffer, 80);
ListBox1.Items.Add(StrPas(Buffer));
END;
DragFinish(Drop);
END;
END;

procedure TForm1.AppOnMessage(VAR Msg: TMsg;
VAR Handled : Boolean);
VAR WMD : TWMDropFiles;
BEGIN
IF Msg.message = WM_DROPFILES then
BEGIN
MessageBeep(0);
WMD.Msg := Msg.message;
WMD.Drop := Msg.wParam;
WMD.Unused := Msg.lParam;
WMD.Result := 0;
WMDropFiles(WMD);
Handled := TRUE;
END;
END;

TForm1的create事件:
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
DragAcceptFiles(Application.Handle, True);
Application.OnMessage := AppOnMessage;
end;
 
to 天与地: 老兄所言极是。
能够用鼠标得到路径的话,就省去了键盘输入这个烦琐的过程。
不知能不能实现啊?

to pgp:多谢老兄。这个控件哪里有下载的啊?
to forgot2002:多谢大侠。我这就去试试。

多谢各位富翁的指教和帮忙。谢谢。
在下感激不尽。
 
我没做过,谈一点我的思路,
1、点选就可以看到得到路径,我认为实现比较难,如果实现应该是一个后台的程序,拦截
windows消息,当消息是某个文件被选种,那么返回文件路径
2、至于拖到FROM,应该好些,就是关于拖拽的操作,你看以下这方面的资料,如果将FROM
支持拖拽,那么如果拖来一个东西,是可以得到这个东西的一些信息的。如果是文件,我想
文件的路径也是属于它信息的一部分。
 
to 运通:谢谢大哥的指教。
鼠标的托放操作倒也做过一个,但类似这个问题的没有做过。
楼上的老兄说了,大概是Shell编程之类的东东,我没有接触过这个。
多谢。
 
钩子,呵呵,不懂!!!抱歉啦:")我帮你UP
 
谢谢提前。
 
forgot2002 老兄的代码果然很爽。
 
gz
up
解决了能不能贴出来?
 
sorry
帮你UP先
 
学习,没做过
 
听课!

up!
 
有从http://www.delphibbs.com/delphibbs/dispq.asp?lid=1277207 来的大侠吗?
有的话请支一声。 请把答案也带来。 谢谢。
 

Similar threads

回复
0
查看
1K
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部