在我的Delphi应用程序中,我想添加命令行参数以在登录屏幕中自动设置一些参数。
目前我有一个登录界面,用户可以在其中设置一些信息(如服务器,数据库,用户,密码,AuthenticationType,AUtoLogin等)。
我使用MRU来填充字段。无论如何,在大型组织中,不需要让用户选择任何信息。为此,我在我的场景中可以做的最简单的事情是使用命令行参数。
我的问题是你如何建议选择命令行参数?我的意思是,我应该采用“位置”方法还是某种“标记”方法,例如:
MyProject.exe -s:MYSERVER -d:DATABASE
或
MyProject.exe MYSERVER DATABASE
在第一种情况下,我需要使用ParamStr
循环所有参数并“解码”它们的内容。如果他们以“-s:”开头,我知道接下来是服务器名称。第二种是更快速和更脏,但可能更有效。
如何管理包含“空格”的参数?是否可以使用ParamStr自动拦截它们,还是应该手动处理所有? (我的意思是有一种方法可以自动告诉ParamStr一个参数包含一个空格(比如使用大括号或其他东西)。
最佳做法是什么?
答案 0 :(得分:23)
我应该选择“位置”方法还是某种“标记”方法?
毫无疑问,您应该标记命令行参数。位置方法不允许足够的灵活性来省略参数。标记使用户更容易理解参数,尤其是在返回先前编写的代码时。标签应该是自我记录的。
当您拥有未标记的参数时,一种常见的情况是您拥有文件名或文件名列表。
如何管理包含“空格”的参数?
Windows约定是通过在参数周围加上双引号来转义空格。 ParamStr
解析将识别这些并相应地解析参数。您在ParamStr(i)
中看到的是删除了引号的参数。
RTL附带了一个有用的辅助函数来帮助您解析命令行参数:FindCmdLineSwitch
。
答案 1 :(得分:11)
Delphi包含一个非常好的单元,名为CommandParser,带有TCommandParser类,可以为您执行命令行解析。
由于它有virtually no documentation,因此以下是一些要开始的事情。
我的HiddenExecutable example有一个open source bo repository。
基本上你:
TComponent
,其中包含您要作为命令行参数公开的属性(HiddenExecuteSettingsUnit THiddenExecuteSettings
THiddenExecuteArguments
(回想起来并不是一个好名字),其中包含一个InitCommandLine
方法,用于设置TCommandParser实例,并将TComponent
h
和help
)ProcessCommandLine
实例上的TCommandParser
方法来处理命令行并填充TComponent
的属性(在我的示例中,这是在{{1}中完成的方法)。现在很有趣:
ProcessCommandLine
有TCommandParser
方法,可以根据您使用HelpText
方法提供的内容完全自动组合帮助文本。AddSwitch
还有TCommandParser
方法,可让您将TComponent的当前设置保存到设置文件中。您需要的德尔福单位是您可以从Embarcadero radstudiodemos.sourceforge.net演示库获得的:
SaveOptions
修改: John Kaster写了一封包含article on EDN的好more details on using the TCommandParser。
答案 2 :(得分:7)
你的第一个问题仅仅是品味问题。但是,第二个我可以回答。您使用双引号括起包含空格的参数。例如,如果你有
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
i: integer;
begin
for i := 0 to ParamCount do
WriteLn(ParamStr(i));
Readln;
end.
并使用参数one "two with spaces" three "four with spaces"
启动应用程序,然后获得输出
C:\Users\Andreas Rejbrand\Documents\RAD Studio\Projects\Project1.exe
one
two with spaces
three
four with spaces
答案 3 :(得分:0)
我将单独的参数(基于订单)和选项(基于交换机)分开 例如,请参阅“c:>帮助副本”。