Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

ERangeError wo keiner ist.

  Alt 9. Sep 2016, 18: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 18:56 Uhr)
  Mit Zitat antworten Zitat