(Gast)
n/a Beiträge
|
ERangeError wo keiner ist.
9. Sep 2016, 19:20
Nach eingeschalteter Bereichsprüfung bekomme ich einen ERangeError.
Dürfte aber eigentlich nicht sein.
Delphi-Quellcode:
// "ACTIVECAPTION, 255,250,250,255" ' Active caption text color.
stActiveCaption:
begin
ActiveCaption[SkinEngine.SkinARGB(sBF), 1];
end;
Im string sBF steht als Beispiel: "ACTIVECAPTION, 255,250,250,255"
Dieser wird jetzt geparst mit dem Delemiter ","
Delphi-Quellcode:
function TSkinEngine.SkinARGB(sBF: string): COLORREF;
var
bytestruct: COLORBYTES;
begin
bytestruct.A := byte(StrToInt(ParseThis(sBF, ',', 1, 1)));
bytestruct.R := byte(StrToInt(ParseThis(sBF, ',', 2, 2)));
bytestruct.G := byte(StrToInt(ParseThis(sBF, ',', 3, 3)));
bytestruct.B := byte(StrToInt(ParseThis(sBF, ',', 4, 4)));
Result := MakeColor(bytestruct.A, bytestruct.R, bytestruct.G, bytestruct.B);
end;
Delphi-Quellcode:
function ParseThis(Source, Deli: string; Count: Integer): string;
var
StringList : TstringList;
EndOfCurrentString: byte;
begin
StringList := TStringList.Create;
try
repeat
EndOfCurrentString := Pos(Deli, Source);
if EndOfCurrentString = 0 then
StringList.add(Source)
else
StringList.add(Copy(Source, 1, EndOfCurrentString - 1));
Source := Copy(Source, EndOfCurrentString + length(Deli), length(Source) - EndOfCurrentString);
until EndOfCurrentString = 0;
Result:= Trim(StringList.Strings[Count]);
finally
StringList.Free;
end;
end;
Delphi-Quellcode:
function RightTrim( const s: String): String;
var
i:integer;
begin
i:=length(s);
while (i>0) and (s[i]<=#32) do
Dec(i);
result:=Copy(s,1,i);
end;
function LeftTrim( const s: string): string;
var
i, L:integer;
begin
L := length(s);
i := 1;
while (i <= L) and (s[i] <= #32) do
Inc(i);
result := Copy(s, i, MaxInt);
end;
function Trim(Str: String): String;
begin
Result := LeftTrim(RightTrim(Str))
end;
Delphi-Quellcode:
function MakeColor(a, r, g, b: Byte): ARGB; overload;
begin
result := ((DWORD(b) shl Blue_Shift) or
(DWORD(g) shl Green_Shift) or
(DWORD(r) shl Red_Shift) or
(DWORD(a) shl Alpha_Shift));
end;
Die Farbe wird korrekt berechnet dementsprechend auch der String korrekt geparst.
trotzdem ein Bereichsprüfungs Fehler?
Rückgabe der Farbe.
Delphi-Quellcode:
function TSkinConfig.GetActiveCaption(FColorMode, FReadColorMode: Integer): COLORREF;
begin
if FReadColorMode <> 0 then
FActiveCaptionColor := FColorMode;
Result := FActiveCaptionColor;
end;
gruss
Geändert von EWeiss ( 9. Sep 2016 um 19:56 Uhr)
|