Die Definition der Funktion Val() aus der Delphi-Doku:
procedure Val(S; var V; var Code: Integer);
Der Parameter "S", (sEnable bei dir) wird
nicht als var-Parameter übergeben, und
kann nachher nicht anders sein.
Zudem sehe ich noch ein Problem in deinem Code: Was machst du, wenn Errorpos <> 0 ist? Eigentlich müsste der Compiler warnen, dass EnableFlag undefiniert sein könnte. (Wenn wir hier den gesamten Code sehen.)
Delphi-Quellcode:
sEnable := Trim(ParseThis(sBF, ',', 5));
if Length(sEnable) = 0 then
EnableFlag := 1 // Wenn Wert nicht gesetzt, 1 als Standard nehmen
else
VAL(sEnable, Int, Errorpos); // Wenn dennoch irgendwas im String ist, versuchen eine Zahl daraus zu lesen
if Errorpos = 0 then
EnableFlag := StrToInt(sEnable); // Wenn kein Fehler beim Interpretieren als Zahl war, umwandeln.
// ABER! Unnötig. Die erkannte Zahl steht bereits in "Int" aus dem VAL()-Aufruf!
// Vor allem aber: Was machst du, wenn Errorpos NICHT 0 ist, also KEINE Zahl erkannt wurde? Nichts! EnableFlag
// wird nichts neues zugewiesen, es wird kein Fehler ausgelöst, nichts. Du machst einfach weiter unter der Annahme,
// dass die Zahl richtig erkannt wurde. Was auch immer nachher in EnableFlag drin steht.
//
// Würde sEnable also in der ersten Zeile als '"2""' herauskommen, sollte Errorpos = 1 sein, und in EnableFlag steht
// NUR DANN eine 2, wenn irgendwo vorher an einer anderen Stelle eine 2 rein geschrieben wurde. NUR dann. Step das mal durch.
if EnableFlag = 2 then // RecycleBin
begin
sUseThumb := ExtractFilePath(sUseThumb);
if SHGetRecycleBinCount > 0 then
begin
sUseThumb := sUseThumb + 'RecycleBinFull.png';
gp.RecycleBinFull := true;
end
else
begin
sUseThumb := sUseThumb + 'RecycleBinEmpty.png';
gp.RecycleBinFull := false;
end;
end;
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)