怎样使自己的程序支持命令行参数?(54分)

  • 主题发起人 主题发起人 花 儿
  • 开始时间 开始时间

花 儿

Unregistered / Unconfirmed
GUEST, unregistred user!
就是比如我要用自己的编的文本程序打开txt文件,除了要改注册表以外,还要在代码里加
些什么?(请给出源代码)
第二个问题:
我得不到预期的结果为什么?我在自定义的一个过程里写了下面的代码,可是并没有改变
字体。是参数传递不正确吗?(第二个参数是Hwnd的参数)
FontDlg.OnApply(Sender,RichEdit.handle);
 

function ParamCount: Integer;

function ParamStr(Index: Integer): string;
 
GOHKI,:
你的代码要加在哪里?谢谢了:)
还有,为什么是函数?不是过程啊?难道要加在Form的Create里?
 
同意楼上,在你的程序的开始部分(如FORM CREATE时)用以上两个函数读取命令行参数。
 
一、支持命令行参数其实就是你在程序中检测运行时传进来的参数罢了,就用Sysutil单元
; ; 中的两个函数,ParamCount返回参数的个数,ParamStr(Index)返回每个参数的内容,
; ; 其中ParamStr(0)表示可执行文件自身,ParamStr(1)为第一个参数。
二、FontDlg.OnApply是干什么用的? 设置字体一般可以这样:RichEdit.Font.Assign(FontDlg.Font);
 
蒋劲刚:
我笨!!!!
我试了,老是出错,麻烦给点程序源码,据个例子,谢谢啦?[:)][:)][:)][:)]
 
1 ;没什么要加的,只要你的程序能处理文本即可! 注册表里只要将TXT和你的程序关联。
2 ;用ParamStr(),它就是专门用来侦测程序参数的!
 
procedure TForm1.FormCreate(Sender: TObject);
var FileName : string;
begin
; FileName := '';
; if paramcount>1 then
; ; FileName := ParamStr(1);
; if (FileName <> '')and(fileExists(FileName)) then
; ; memo1.Lines.LoadFromFile(FileName)
; else
; ; memo1.Clear;
end;
 
算了,我把我的代码贴出来好了
procedure TForm1.FormCreate(Sender: TObject);
var
; FileName : string;
begin
; FileName := '';
; if paramcount>1 then
; ; FileName := ParamStr(1);
; ; ; if Filename='' then
; ; showmessage('Null');
; if (FileName <> '')and(fileExists(FileName)) then
; begin
; ; Form1.Caption:=FileName;
; ; Edit.Lines.LoadFromFile(FileName);
; end
; else
; ; Edit.Clear;
end;
如果我把FileName := ParamStr(1);这一句改为FileName := ParamStr(0);显示则为乱码,
怎么回事啊?急!!!!
 
这样写也许好一些[:)]
var
; FileName: string;
begin
; if ParamCount = 0 then
; ; ShowMessage('Null')
; else
; begin
; ; FileName := ParamStr(1);
; ; if fileExists(FileName) then
; ; ; Memo1.Lines.LoadFromFile(FileName);
; end;
你的paramStr(0)为可执行文件本身!当然是乱码了!!!
 
yzhshi:
还是没法啊。
其实我就是,当用户双击TXT文件时,我的软件内的RichEdit显示出TXT文本的内容,可就是
。。。。哎。。。。
麻烦您给看看:)
 
delphi帮助里面有 完整的例子。按 Paramcount,ParamStr就能查得到。
 
大虾们:
我试过了,我的程序有时可以正常显示Txt文本,有时里面确是空的:),怎么办?
而且,我用Showmessage(filename)得到的结果有时是空的!!!!
急啊!!!!
 
我现在是有的txt可以,有的不行(大多不行)
而且,不行的时候我用Showmessage(filename)得到的结果是空!!!!怎么回事?

谢谢大家了!!!!
哎~~~~~~~
 
如果是从命令行运行的话,应该以上的是可以了的.但如果是要双击行运你的程序的话还要建关联.
但原来的关联就不行了,(.txt->notepad)
这一段是我在cb下建关联的代码,参考一下,delphi下几乎一样.
; TRegistry* Reg=new TRegistry;
; try{
; ; Reg->RootKey = HKEY_CLASSES_ROOT;
; ; if (!Reg->OpenKey(".txt", true)) ; ;
; ; {
; ; ; delete Reg;
; ; ; return;
; ; }
; ; Reg->WriteString("","MyProject"); ;
; ; Reg->CloseKey();
; ; if(!Reg->OpenKey("//MyProject//shell//open//command",true))
; ; {
; ; ; delete Reg;
; ; ; return;
; ; }
; ; Reg->WriteString("",Application->ExeName+" /"%1/"");
; ; Reg->CloseKey();
; ; if(!Reg->OpenKey("//MyProject//DefaultIcon",true))
; ; {
; ; ; delete Reg;
; ; ; return;
; ; }
; ; Reg->WriteString("",Application->ExeName+",0");
; ; Reg->CloseKey();
; ; delete Reg;
; }catch(...){delete Reg;}
 
我在注册表里也建了关联了。(F:/记事本/Project1.exe %1)
F:/记事本/Project1.exe 是我编的程序的路径,注册表的键值也没错啊。
我再把代码贴出来
procedure TForm1.FormCreate(Sender: TObject);
var
; FileName: string;
begin
; if ParamCount = 0 then
; ; //ShowMessage('Null')
; else
; begin
; ; FileName := ParamStr(1);
; ; if fileExists(FileName) then
; ; begin
; ; ; SBar.Panels[0].Text:=FileName;
; ; ; RichEdit.Lines.LoadFromFile(FileName);
; ; end;
; end;
end;
就是这样,几句简简单单的程序有时候可以正常显示文本,有时不行(什么都没有,连得到
的变量FileName也是空的,当然没法显示了)
所以,我觉得很奇怪,希望大家帮帮我!!!!:)
 
使用你的代码,在Windows Me下面,在Txt文件按Shift然后选择Porject1打开,最大打开165K的文件,
没有发现问题![:)]
 
yzhshi:
你每个不同路径的Txt都试过了吗?
谢谢!!!!非常感谢:)
 
没问题呀。
无论是根目录还是长文件名的目录,还是多级目录都没问题呀。
你实验使用这种方式打开看是否出现这个问题?
 
yzhshi,
我发现了:
如果文件名有空格就不行:)
可是我用的是WinMe,早上在学校(win98)试就可以,这到底是怎么回事啊?:)
麻烦了,:)
 
后退
顶部