运行时如何接收文件打开命令!
我编写了一个简单的多页文本编辑器,第一次可以用它打开一个文本文件,可是在运行时,如果双击一个文本文件,我在已经运行的程序中如何将它打开在另一个页面中呢?
问题点数:96、回复次数:18Top
1 楼Jiker(涛声依旧)回复于 2001-03-22 21:40:00 得分 0
我是一点儿也摸不着头脑。Top
2 楼sundayboys(sunboy)回复于 2001-03-22 21:59:00 得分 36
首先,将自己的程序与。txt文件相关联(通过注册表),然后试试这个代码(bcb的)在winmain()函数的开始处添加:
HWND RuningHandle=FindWindowEx(NULL,NULL,"自己窗体名",NULL);
//如果已经有一个实例运行,则只向该实例发送一个消息
//告诉它该打开哪个文件,而不运行程序
if(RuningHandle!=NULL)
{
TClipboard *Clipbd=new TClipboard();
Clipbd->Clear();
Clipbd->SetTextBuf(CLine);
delete Clipbd;
PostMessage(RuningHandle,OPEN_NEW_FILE,NULL,NULL);
return 0;
}
Top
3 楼coldljy(青山隐隐)回复于 2001-03-22 22:19:00 得分 0
用子窗口,看看MDI的例子。
或者是用pagecontrol。Top
4 楼Jiker(涛声依旧)回复于 2001-03-24 00:22:00 得分 0
to sumdaybodys:
谢谢,这的确是个办法,但我还有点问题:
1.如果接收这个消息,我使用Delphi编程,要接管系统本身的消息吗,如何做?
2.我用EditPlus试了一下,发现每次打开一个新文件后,先前拷贝的剪贴板中的内容还在,它可能用的其它方法。Top
5 楼Jiker(涛声依旧)回复于 2001-03-24 00:22:00 得分 0
to sumdaybodys:
谢谢,这的确是个办法,但我还有点问题:
1.如果接收这个消息,我使用Delphi编程,要接管系统本身的消息吗,如何做?
2.我用EditPlus试了一下,发现每次打开一个新文件后,先前拷贝的剪贴板中的内容还在,它可能用的其它方法。Top
6 楼sundayboys(sunboy)回复于 2001-03-24 01:32:00 得分 0
to Jiker:
1.不需要
2.我再想想Top
7 楼Jiker(涛声依旧)回复于 2001-03-25 01:21:00 得分 0
to sumdaybodys:
1.不需要,那么在Delphi中如何写(接收)。
Top
8 楼Jiker(涛声依旧)回复于 2001-03-26 00:25:00 得分 0
to sumdaybodys:
1.不需要,那么在Delphi中如何写(接收)。
Top
9 楼Jiker(涛声依旧)回复于 2001-03-26 23:49:00 得分 0
不需要,那么在Delphi中如何写(接收)。
Top
10 楼sundayboys(sunboy)回复于 2001-03-27 18:33:00 得分 0
kao,那天酒真的喝多了,应该是要(bcb的)
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(OPEN_NEW_FILE,TMessage*,OpenNewFile)
END_MESSAGE_MAP(TForm)Top
11 楼Jiker(涛声依旧)回复于 2001-03-27 22:53:00 得分 0
to sundayboys:
我就是说,VB都要,VB要用API来操作,Delphi如何做,应该与BCB不同?Top
12 楼Jiker(涛声依旧)回复于 2001-04-12 01:11:00 得分 0
to sundayboys:
我就是说,VB都要,VB要用API来操作,Delphi如何做,应该与BCB不同? Top
13 楼Jiker(涛声依旧)回复于 2001-04-12 01:11:00 得分 0
to sundayboys:
我就是说,VB都要,VB要用API来操作,Delphi如何做,应该与BCB不同? Top
14 楼Kingron(单身走我路……)回复于 2001-04-12 14:41:00 得分 0
等我测试再说。
附加功能:提前。Top
15 楼Jiker(涛声依旧)回复于 2001-04-12 23:56:00 得分 0
KingRon:
提前感谢你!Top
16 楼Kingron(单身走我路……)回复于 2001-04-13 08:55:00 得分 60
呵呵,测试代码如下(编译一下,然后同时运行两个实例,点击那个button,另外一个程序回显示一个字符串,当然,如果改成文件名也是一样的噢!):
我想你要修改一下就很简单了吧!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
const
wm_Openfile=wm_user+100;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure wmopenfile(var msg:tmessage);message wm_openfile;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ TForm1 }
procedure TForm1.wmopenfile(var msg: tmessage);
var
p:pchar;
begin
p:=pchar(msg.WParam);
showmessage(p);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
h:hwnd;
begin
caption:='abc';
h:=findwindow('tform1','form1');
if h>0 then
sendmessage(h,wm_Openfile,integer(pchar('c:\windows\readme.txt')),0);
caption:='form1';
end;
end.
Top
17 楼Kingron(单身走我路……)回复于 2001-04-17 13:45:00 得分 0
解决了没有?Top
18 楼Jiker(涛声依旧)回复于 2001-04-21 01:59:00 得分 0
谢谢,我还没来得及试,我想应该过了。Top




