如何制做带运行参数的程序?(100分)

S

sky0061

Unregistered / Unconfirmed
GUEST, unregistred user!
如何制做带运行参数的程序?
如 c:/>Waite 1000   (一个很简单的延时程序--Console Application)
其中Waite为程序名称,而1000是根据需要在执行时再给出。
代码如何写?有谁能写出个代码看看?
 
用ParamStr(),ParamStr(0)为可执行程序的名称,ParamStr(1)为在命令行中输入的第一个
参数,以此类推。
 
如Sachow所说,你不需要做特别的准备,只需要使用ParamStr即可,
只要在命令行给出了参数,ParamStr就会包含相应的参数,非常的
方便,比如说
Wait 1000
则你在程序中只需这样简单处理:
procedure TForm1.OnCreate(...)
var
WaitTime: Integer;
begin
...
try
WaitTime:=StrToInt(ParamStr(1));
except
WaitTime:=100
//转换出错时为100
end;
Sleep(WaitTime)
//休息一下
...
end;
 
同意楼上的。
我也是来学习的
 
还有个函数叫TryStrToInt,如果转换失败会返回false,但不会抛出异常。
var
iTmp: Integer;
begin
if TryStrToInt(ParamStr(0), iTmp) then
Sleep(iTmp)
//如果转换失败就不Sleep
end;
 
谢谢Sachow和yanghaijun,
但是如果我不输入参数则程序就报错!
能否让程序在不输入参数执行的情况下,提示输入参数?
 
yanghaijun解决问题了
 
你让程序报错,然后退出,让用户再进:)
有点麻烦,不会让人喜欢的!
 
用Sachow的方法搞定了。
感谢热心的DFW。


 
对不起,我刚才翻了一下帮助,才发现TryStrToInt原来是CB里的,Delphi里竟然没有!
把程序用try...except块包起来以后,转换代码如果失败,只有在Delphi集成开发环境,
且项目是调试模式下才会报错,在程序独立运行时是不会报错的。
program Waitn;

{$APPTYPE CONSOLE}

uses
Windows, SysUtils;

var
iSleepTime: Integer;
begin
if ParamStr(1)='' then
begin
Write('useage: Waitn [seconds] example: Waitn 3');
end
else begin
try
iSleepTime := StrToInt(ParamStr(1))*1000;
Sleep(iSleepTime);
Write(Format('program waited %d seconds', [iSleepTime div 1000]));
except
Write('please input a valid sleep time!');
end;
end;
end.
 
顶部