Klar ginge es (meistens)
* spaßig wird es bei MultiThread, den diese Zugriffe sind nicht thread-save
* und warum die globalen variablen umschreiben, anschließend wieder löschen, wodurch sie von anderen wieder neu initialisiert werden müssen,
anstatt direkt nur was Eigenes zu nehmen?
Anstatt die globalen Variablen zu ändern, kannst auch nur deine Lokalen anpassen, wenn leer.
Delphi-Quellcode:
// zuerst B und dann die Strings
function BoolToStrs(B: Boolean; const FalseStr, TrueStr: string): string;
begin
//VerifyBoolStrArray; // ich geh jetzt einfach mal davon aus das ist schon initialisert, vorallem da man von außen VerifyBoolStrArray nicht aufrufen kann
if B then
if TrueStr <> '' then
Result := TrueStr
else
Result := TrueBoolStrs[0]
else
if FalseStr <> '' then
Result := FalseStr
else
Result := FalseBoolStrs[0];
end;
function BoolToStrs(B: Boolean; const FalseStr, TrueStr: string): string;
begin
//VerifyBoolStrArray;
if B then
Result := IfThen(TrueStr <> '', TrueStr, TrueBoolStrs[0]) // Result := Coalesce(TrueStr, TrueBoolStrs[0])
else
Result := IfThen(FalseStr <> '', FalseStr, FalseBoolStrs[0]); // Result := Coalesce(FalseStr, FalseBoolStrs[0]);
//Result := IfThen(B, IfThen(TrueStr <> '', TrueStr, TrueBoolStrs[0]), IfThen(FalseStr <> '', FalseStr, FalseBoolStrs[0]));
//Result := IfThen(B, Coalesce(TrueStr, TrueBoolStrs[0]), Coalesce(FalseStr, FalseBoolStrs[0]));
end;
// soein Coalesce, wie man es aus Datenbanken kenn, hatte ich mir für String/Integer einfach mal nachgebaut
// zuerst die Strings und dann B
function BoolToStrs(B: Boolean; FalseStr, TrueStr: string): string;
begin
//VerifyBoolStrArray;
if TrueStr = '' then TrueStr := TrueBoolStrs[0];
if FalseStr = '' then FalseStr := FalseBoolStrs[0];
if B then Result := TrueStr else Result := FalseStr;
end;
bzw. BoolToStr oder ToString anstatt TrueBoolStrs/FalseBoolStrs
Delphi-Quellcode:
function BoolToStrs(B: Boolean; const FalseStr, TrueStr: string): string;
begin
if B and (TrueStr <> '') then
Result := TrueStr
else
if not B and (FalseStr <> '') then
Result := FalseStr
else
Result := B.ToString(TUseBoolStrs.true); // Result := BoolToStr(B, True);
end;
Und wer sich TUseBoolStrs.True ausgedacht hat, gehört ausgepeitscht.