Есть правда некоторые замечания (несущественные)
Свойствo Args логичней будет Keys(т.е список ключей)
к примеру я попробовал такой вариант (правда для FPC нужно подшаманить)
Так же желательно сделать приведение к типу (допустим по первому символу ключа -sInput = string, -iCount = integer)
pas:
unit hiArgParser;
interface
uses Kol,Share,Debug,Windows;
type
THIArgParser = class(TDebug)
private
LstKeys: PStrList;
LstParam: PStrList;
FLoadParam: boolean;
procedure SetKeys(Value: string);
procedure LoadParam;
public
_prop_Prefix: string;
destructor Destroy; override;
procedure _var_Keys(var _Data: TData; Index: word);
property _prop_Keys: string write SetKeys;
end;
implementation
destructor THIArgParser.Destroy;
begin
LstKeys.Free;
LstParam.Free;
inherited;
end;
procedure THIArgParser.LoadParam;
var
i: integer;
s,s2: string;
begin
s := GetCommandLine+' ';
//вырежем имя приложения
s2 := GetTok(s,_prop_Prefix[1]);
for i := 1 to ParamCount do
begin
s2 := GetTok(s,_prop_Prefix[1]);
if LstParam.IndexOf(s2) = -1 then
LstParam.Add(s2)
end;
FLoadParam := True;
end;
procedure THIArgParser.SetKeys(Value: string);
begin
LstKeys := NewStrList;
LstParam := NewStrList;
LstParam.NameDelimiter := ' ';
LstKeys.Text := Value;
end;
procedure THIArgParser._var_Keys;
var
s: string;
idx: integer;
begin
if not FLoadParam then LoadParam;
s := LstKeys.Items[Index];
idx := LstParam.IndexOfName(s);
if idx = -1 then //ключ отсутствует
begin
dtNull(_Data);
Exit;
end;
s := LstParam.LineValue[idx];
dtString(_Data,s);
end;
end.
ini:
[About]
Version=1.4
Author=TheRenat
Mail=
[Type]
Class=DPLElement
Sub=,,Keys,
Info=Продвинутый парсер аргументов командной строки
Tab=Tools
[Property]
+Keys=Используемые ключи|5|
Prefix=Префикс ключей|2|-
p.s Видимо пользователям разработчики уже не нужны. Видать всё можно нарисовать уже кубиками, через жопу конечно но почти всё