Hallo Leute,
ich bau mir zur Zeit ein etwas ansprechenderes Interface für ein Programm. Speziell arbeite ich gerade an einer Art Button.
Das ganze ist abgeleitet von TCustomControl, transparent, in der Paint Methode wird ein Teiltransparentes PNG ins Canvas kopiert.
Folgende Problematik: Sobald ich das Element neu malen will (Repaint), geht die Transparenz flöten und ein weißer Hintergrund erscheint hinter den transparenten Stellen des PNGs! Dasselbe bei Invalidate, bei der normalen Paint Methode läuft Alles problemlos (minimieren-maximieren -> alles wieder normal).
Hier die relevanten Codeauszüge:
Delphi-Quellcode:
constructor TPControl.Create(AOwner: TComponent);
begin
inherited;
ControlStyle := ControlStyle-[csOpaque]+[csAcceptsControls];
end;
procedure TPControl.CreateParams(var Params: TCreateParams);
begin
inherited
CreateParams(Params);
Params.ExStyle := Params.ExStyle+WS_EX_Transparent;
end;
procedure TPControl.Paint;
begin
inherited;
Canvas.Draw(0, 0, Images.Graphic);
end;
Und dann zB bei...
Delphi-Quellcode:
procedure TPControl.CMMouseEnter(var Message: TMessage);
begin
inherited;
FMouseOver := True;
Repaint; //<-------------!!!
end;
...tritt der Fehler auf. Aber auch wenn ich Repaint/Invalidate über das Programm aufrufe.
Canvas füllen geht nicht, da der Hintergrund variiert!
Ich hoffe Ihr habt da ne Idee,
mfg