Einzelnen Beitrag anzeigen

Red six

Registriert seit: 3. Aug 2005
23 Beiträge
 
#1

CustomControl nach Repaint nicht mehr transparent

  Alt 7. Dez 2008, 18:26
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
  Mit Zitat antworten Zitat