procedure ShowDebug(aMode: Integer; aTitle: String; anArr: array of const);
implementation
uses strutils;
procedure ShowDebug(aMode: Integer; aTitle: String; anArr: array of const);
function GetNextString(anIdx: Integer; out OK: Boolean): String;
begin
OK := False;
if anIdx >= High(anArr) then
Exit('');
case anArr[anIdx].VType of
vtAnsiString: Result := AnsiString(anArr[anIdx].VAnsiString);
vtChar: Result := anArr[anIdx].VChar;
vtPChar: Result := anArr[anIdx].VPChar;
vtPWideChar: Result := anArr[anIdx].VPWideChar;
vtString: Result := anArr[anIdx].VString^;
vtWideChar: Result := AnsiString(anArr[anIdx].VWideChar);
vtWidestring: Result := AnsiString(WideString(anArr[anIdx].VWideString));
else Exit('');
end;
OK := True;
end;
var
i: Integer;
maxLen: Integer = 0;
isOK: Boolean;
msg, s, st: String;
sArr: array of String;
begin
msg := aTitle + #10;
i := Low(anArr);
SetLength(sArr, 0);
while i < High(anArr) do
begin
s := GetNextString(i, isOK);
if not isOK then
Inc(i)
else
begin
if Length(s) > maxLen then
maxLen := Length(s);
Inc(i);
if anArr[i].VType = vtInteger then begin
case aMode of
1: msg := msg + s + #10;
2: begin
SetLength(sArr, Length(sArr)+1);
sArr[High(sArr)] := s;
end;
3: msg := msg + IntToStr(anArr[i].VInteger) + ' = ' + s + #10;
else msg := '';
end;
Inc(i);
end;
end;
end;
case isOK of
True: begin
if (aMode = 2) then
begin
s := '';
Inc(maxLen);
for st in sArr do
s := s + PadLeft(st, maxLen) + #10;
msg := msg + s;
end;
case (msg = '') of
True: ShowMessage('Error in parsing parameters');
False: ShowMessage(msg);
end;
end;
False: ShowMessage('Error in parsing parameters');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowDebug(1,'Mode 1',['One',1,'Two',2,'Three',3]);
ShowDebug(2,'Mode 2',['One',1,'Two',2,'Three',3]);
ShowDebug(3,'Mode 3',['One',1,'Two',2,'Three',3]);
ShowDebug(3,'Mode 3',[9,'nine']);
end;