Hab ja schon viel mit
GDI+ gemacht bekomme es aber einfach nicht hin
zwei Images zur Laufzeit auszutauschen ohne die neue Datei auf die Platte zu kopieren.
Ich lade ein Image ein Anzeige alles Ok!
Danach zeichne ich einen Rect mit der Farbe die ich aus ShowColor eingefügt habe
um anzuzeigen das der aktuelle Font die Farbe gelb hat als beispiel.
Jetzt habe ich aber mehrere Funktionen bei denen die Farbe geändert werden kann
aber jedes Bild das ich einlade um die Farbvorschau anzuzeigen ist das gleiche
daher kann ich nicht auf die Platte ausweichen da in diesem Fall dann alle Images die Farbe gelb anzeigen würden.
Das problem ist nur das beim nächsten WM_PAINT das alte Image ohne gelben Rechteck gezeichnet wird.
Kann man die Images vertauschen oder nicht?
Hab dafür noch keine lösung gefunden.
So erstelle ich das gelbe Quadrat im Image
Delphi-Quellcode:
procedure TSkinEngine.skGdipFillRect(Graphics: cardinal; x1, y1, x2, y2: integer;
ARGB: COLORREF);
var
hBrush: Pointer;
begin
GdipCreateSolidFill(ARGB, hBrush);
GdipFillRectangleI(Graphics, hBrush, x1, y1, x2, y2);
GdipDeleteBrush(hBrush);
end;
Delphi-Quellcode:
procedure TSkinImageButton.SetColor(
const Value: ColorRef);
var
Dc: HDC;
Graphics: Cardinal;
StateMax: Integer;
Color: ColorRef;
rc: TRect;
begin
Dc:= GetDc(FHImageButton);
StateMax := SkinEngine.GetButProperty(FHImageButton, PROP_STATEMAX);
Color := skinEngine.ColorARGB(255, Value);
GetClientRect(FHImageButton, rc);
if GdipCreateFromHDC(
DC, Graphics) = OK
then
SkinEngine.skGdipFillRect(Graphics, rc.Left + 6, rc.Top + 6,
(rc.Right
div StateMax) + 10, rc.Bottom - 10 , Color);
FColor := Value;
end;
Aber wie gesagt es wird nicht gehalten.
gruss