请问文件的关联及拖放编程!(100分)

  • 主题发起人 主题发起人 Aaxron
  • 开始时间 开始时间
A

Aaxron

Unregistered / Unconfirmed
GUEST, unregistred user!
目前我编写了一个记事本程序啊。比如说用Memo 做的简单记事本程序。<br>如何双击文本文件就可以调用我的程序打开文件啊。<br>还有就是在windows 资源管理器中,直接拖放文本到我的记事本程序中也可以打开文件。<br>具体怎么实现啊。要代码啊<br>谢谢啦!
 
文件关联<br>&nbsp; &nbsp;<br>uses<br><br>registry, shlobj;<br><br>procedure TForm1.RegisterFileType(prefix: string; exepfad: string);<br><br>var<br><br>reg: TRegistry;<br><br>begin<br><br>reg := TRegistry.Create;<br><br>try<br><br>reg.RootKey := HKEY_CLASSES_ROOT;<br><br>//create a new key --&gt; .pci<br><br>reg.OpenKey('.' + prefix, True);<br><br>try<br><br>//create a new value for this key --&gt; pcifile<br><br>reg.Writestring('', prefix + 'file');<br><br>finally<br><br>reg.CloseKey;<br><br>end;<br><br>//create a new key --&gt; pcifile<br><br>reg.CreateKey(prefix + 'file');<br><br>//create a new key pcifile<br><br>reg.OpenKey(prefix + 'file', True);<br><br>//and create a value where the icon is stored --&gt; c:.exe,0<br><br>try<br><br>reg.Writestring('', exepfad + ',0');<br><br>finally<br><br>reg.CloseKey;<br><br>end;<br><br>reg.OpenKey(prefix + 'file', True);<br><br>//create value where exefile is stored --&gt; c:.exe "%1"<br><br>try<br><br>reg.Writestring('', exepfad + ' "%1"');<br><br>finally<br><br>reg.CloseKey;<br><br>end;<br><br>finally<br><br>reg.Free;<br><br>end;<br><br>SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);<br><br>end;<br><br> <br><br>procedure TForm1.Button1Click(Sender: TObject);<br><br>begin<br><br>RegisterFileType('txt', '你的执行文件如:c:/edit.exe');<br><br>end;<br><br>我希望你是知道执行文件还得处理ParamStr
 
文件拖放<br><br>TForm1 = calss(TForm)<br>......<br>protected<br>procedure WMDROPFILES(var Msg : TMessage); message WM_DROPFILES;<br>......<br>end;<br><br>procedure TForm1.WMDROPFILES(var Msg: TMessage);<br>var a : Integer;<br>&nbsp; &nbsp; Buffer: Array[0..255] of Char;<br>begin<br>&nbsp; &nbsp;DragFiles(Msg);<br>&nbsp; &nbsp;a := DragQueryFile(Msg.wParam, $FFFFFFFF, Buffer, 255);<br>&nbsp; &nbsp;for a := 0 to a - 1 do begin<br>&nbsp; &nbsp; &nbsp; DragQueryFile(Msg.wParam, a, Buffer, 255);<br>&nbsp; &nbsp; &nbsp; //文件名就在Buffer里面了<br>&nbsp; &nbsp;end;<br>&nbsp; &nbsp;DragFinish(Msg.wParam);<br>end;<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>&nbsp; &nbsp;DragAcceptFiles(Handle, True);//启动窗口对文件的接收<br>end;<br><br>
 
文件拖放<br>我看木子兄答非所问,在windows 资源管理器中,直接拖放文本到我的记事本程序中.<br>这个拖放是由Windows来完成,我们只需要在应用程序启动的时候<br>检测一下ParamCount,如何ParamCount=2则<br>你要打开的文件完整的路径名在ParamStr[1]中,<br>注意: &nbsp;ParamCount,ParamStr是全局函数和全局变量<br>如果你不明白就写一个简单的程序:<br>&nbsp; 1,新建一个应用程序<br>&nbsp; 2,在主窗口OnCreate事件中写<br>&nbsp; &nbsp; &nbsp;if ParamCount=2 then<br>&nbsp; &nbsp; &nbsp; &nbsp; Caption:=ParamStr[1]<br>&nbsp; 3,在资源管理器里,拖文件到可执行文件上试试看!<br>&nbsp; &nbsp;你会发现你拖的文件的文件名在窗口的Caption上
 
to NeutronDelphi:<br>我给出的是在程序执行以后接受来自资源管理器的拖放,<br><br>你给出的,不过是资源管理器内部拖放操作,
 
同意木子,从资源管理器拖动文件到“已经打开的程序”和“程序exe文件”是不同的概念!<br><br>顺便请教木子:DragFiles(Msg)这部分是干什么用的?编译时提示未定义,用F1查看也不是一个API,注释后可通过编译,运行后结果正确。
 
DragFiles(Msg)<br>用来处理拖放消息啊,要不怎么实现拖放啊。
 
to &nbsp;木子兄.<br>&nbsp; &nbsp;我知道你有你的理解,但是我敢肯定楼主要的是我的答案,你信不信?
 
不用看了,大家都同意,木子老哥一定是高手啦,<br>我会好好实践调试的。:)<br>谢谢木子,谢谢大富翁!<br>Delphi 万岁!
 
哈哈,对不起DragFiles(Msg)这个好象是我自己的代码,没有清干净,<br><br>对不起大家
 
后退
顶部