Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TGraphicControl transparent machen (https://www.delphipraxis.net/92275-tgraphiccontrol-transparent-machen.html)

xZise 17. Mai 2007 09:13


TGraphicControl transparent machen
 
Wie kann ich das TGraphicControl transparent machen? Ich wollte nämlich ein Label nachproggen (siehe Hier und hier)...
Aber wie bekommt man das hin?

Hawkeye219 17. Mai 2007 09:28

Re: TGraphicControl transparent machen
 
Hallo Fabian,

du mußt das Bit csOpaque in der Eigenschaft Delphi-Referenz durchsuchenTControl.ControlStyle löschen. Als Besitzer von Turbo Delphi verfügst du doch über die Quelltexte der VCL. Schaue am besten nach, wie es dort gemacht wurde (TCustomLabel in der Unit StdCtrls).

Gruß Hawkeye

xZise 17. Mai 2007 09:33

Re: TGraphicControl transparent machen
 
Ah okay... Danke, aber jatzt habe ich das Problem, dass ist ja sozusagen den Text entfernen muss, und dann neuzeichnen muss... Aber wie kann ich den Text den entfernen?

SirThornberry 17. Mai 2007 09:49

Re: TGraphicControl transparent machen
 
ein GraphicControl ist von sich aus Transparent. Im Paint deiner Componente (welches du überschreiben musst) zeichnest du dann einfach dort wo was dargestellt werden soll. Hat sich etwas geändert rufst du Invalidate auf und schon wird dein Paint wieder ausgelöst.

xZise 17. Mai 2007 14:47

Re: TGraphicControl transparent machen
 
Und wie kann ich das davor "entfernen"?
Weil es geht mir darum, dass ich ja den Text löschen & neuzeichnen muss... Bisher habe ich ein Rechteck darüber gezeichnet, aber das geht ja nicht mehr, weil es dann die Transparenz zerstören würde. Oder löscht man bei Paint den gesamten Inhalt?
Weil dann besteht das Problem, dass ich das alles irgendwie in Paint machen müsste (schau dir am besten mal Quelltext an.)
d.h. um einen transparenten Hintergrund zu bekommen, muss ich einfach die Paint Methode überschreiben und dann Text schreiben?

mkinzler 17. Mai 2007 19:28

Re: TGraphicControl transparent machen
 
Zitat:

Zitat von SirThornberry
Hat sich etwas geändert rufst du Invalidate auf und schon wird dein Paint wieder ausgelöst.


xZise 17. Mai 2007 21:20

Re: TGraphicControl transparent machen
 
1. TBitMap hat kein Invalidate
2. Invalidate zeichnet nur neu (also eigentlich Repaint ?!) und somit nicht geeignet (außer ihr könnt mir sagen, wie ich das anstellen soll... siehe Code)

mkinzler 17. Mai 2007 21:26

Re: TGraphicControl transparent machen
 
Warum TBitmap?

SirThornberry 17. Mai 2007 21:54

Re: TGraphicControl transparent machen
 
so gehts
Delphi-Quellcode:
type
  TYourControl = class(TGraphicControl)
  private
    fmeinText: String;
    procedure SetMeinText(AText: String);
  public
    procedure Paint(); override;
  published
    property MeinText: String read fmeinText write SetMeinText;
  end;

procedure TYourControl.Paint();
begin
  Canvas.TextOut(0, 0, fmeinText);
end;

procedure TYourControl.SetMeinText(AText: String);
begin
  if (AText <> fmeinText) then
  begin
    fmeinText := AText;
    Self.Invalidate();
  end;
end;

xZise 18. Mai 2007 07:52

Re: TGraphicControl transparent machen
 
@ mkinzler: Wie soll ich dass denn bitte sonst anstellen? Ich würde ungerne den Thread im Haupthread zeichnen lassen, und den Thread nur zum Timer benutzen.

@ SirT (auch für mkinzler): Genau da ist das Problem.
In einem Thread zeichne ich immer den Text. Und den speichere ich auf einer Bitmap zwischen. Und dann zeichne ich den immer mal wieder neu.
Das heißt ich müsste mir eine neue Komponente von TBitMap ableiten, um da die Paintmethode zu überschreiben.

Ich würde euch beiden mal den Code vorschlagen anzusehen, weil euch dann auffallen würde, dass SirTs Variante im Post hiervor so nicht umzusetzen wäre. Oder denke ich da nur etwas verquer?

[edit]Könnte ich auch rein theoretisch die Paintmethode überschreiben aber mit Paremetern? Würde er dann immernoch drauf anspringen?[/edit]

PS: >> C O D E <<


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 Uhr.
Seite 1 von 2  1 2      

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