AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi CustomControl nach Repaint nicht mehr transparent

CustomControl nach Repaint nicht mehr transparent

Ein Thema von Red six · begonnen am 7. Dez 2008 · letzter Beitrag vom 9. Dez 2008
Antwort Antwort
Red six

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

CustomControl nach Repaint nicht mehr transparent

  Alt 7. Dez 2008, 17: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
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: CustomControl nach Repaint nicht mehr transparent

  Alt 7. Dez 2008, 17:32
Und wenn du deine Paint-Methode zum Zeichnen benutzt?

Delphi-Quellcode:
procedure TPControl.CMMouseEnter(var Message: TMessage);
begin
  inherited;
  FMouseOver := True;
  Paint;
end;
  Mit Zitat antworten Zitat
Red six

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

Re: CustomControl nach Repaint nicht mehr transparent

  Alt 7. Dez 2008, 17:39
Ja das klappt schon, trotzdem wurmt mich das
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: CustomControl nach Repaint nicht mehr transparent

  Alt 7. Dez 2008, 17:41
Naja, das zeigt dir aber, das das Repaint nicht deine Paint-Methode aufruft. Wenn du das Verhalten haben möchtest, dann musst du deine Komponente eben dementsprechend abändern.
  Mit Zitat antworten Zitat
Red six

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

Re: CustomControl nach Repaint nicht mehr transparent

  Alt 7. Dez 2008, 17:54
Es würde mich allerdings interessieren was da passiert, ich will ja nicht Repaint überschreiben ohne zu wissen was es genau tut.

Zitat:
Durch einen Aufruf von Repaint wird das Steuerelement veranlasst, sich sofort erneut zu zeichnen. Wenn die Eigenschaft ControlStyle den Wert csOpaque enthält, zeichnet sich das Steuerelement direkt selbst. Andernfalls ruft Repaint zunächst Invalidate und danach Update auf, damit auch alle sichtbaren Bereiche der Komponenten unter dem Steuerelement erneut gezeichnet werden.
  Mit Zitat antworten Zitat
Red six

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

Re: CustomControl nach Repaint nicht mehr transparent

  Alt 9. Dez 2008, 10:44
Naja, wäre zwar interessant gewesen, bin aber jetzt auf ein GraphicControl umgestiegen.

mfg
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz