Naja ganz so kompliziert musst das ja auch nich machen, so geht das besser und brauch weniger function calls:

Code:
Result := StrToInt('$' + IntToHex(A,2) + IntToHex(rgb(R,G,B),6));
hab aber auch nochmal nen paar alte programme durchforstet und ne elegantere loesung gefunden, dafuer musst du dir nen record machen der so Aussieht:

Code:
TRGBA_struct = record
  case integer of 0: (z32:LongWord);
                  1: (z8:array[0..4]of Byte)
  end;
mit Diesem Struct hast du einen 8-Byte wert bei dem du die Byte-Gruppen 1-4 einzeln beschreiben kannst, das sieht in der Praxis dann so aus:

Code:
function GetRGBA(const R,G,B,A : Byte): TColor;
var
  cRGBA: TRGBA_struct;
begin
  cRGBA.z8[0]:= R;
  cRGBA.z8[1]:= G;
  cRGBA.z8[2]:= B;
  cRGBA.z8[3]:= A;
  Result:= cRGBA.z32;
end;
da brauchst du dann ueberhaupt kein IntToHex etc mehr rufen.