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/)
-   -   Label "Transparenz" beibringen (https://www.delphipraxis.net/204577-label-transparenz-beibringen.html)

DieDolly 8. Jun 2020 16:50


Label "Transparenz" beibringen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich nutze eine vorgefertigte Komponente, um HTML-ähnliche Structuren in einem Label eingeben zu können. Das funktioniert jetzt so wie gewollt. Danke an alle, die beteiligt waren bisher.

Aber ein aller letztes, sehr großes Problem bleibt! Wie bringe ich diesem Label Transparenz bei?
Auf einem TPanel ist das Label transparent.

ABER
PageControl auf das Formular, dort eine Seite erstellen und dort das Label drauf. Dann ist es nicht mehr transparent sondern nimmt die Hintergrundfarbe vom Control an, was unter dem TPageControl ist. In diesem Fall das Form.

Im OnCreate des Labels steht schon
Delphi-Quellcode:
ControlStyle := [csOpaque, csCaptureMouse, csClickEvents, csSetCaption];
deswegen verstehe ich nicht, was hier falsch ist.

Ich weiß, dass es keine Transparenz in dem Sinne gibt. Die Komponente sollte also, um "transparent" zu sein, die Farbe vom Parent annehmen. Aber wie vermittelt man dem sowas? Ist das überhaupt der richtige Weg?

Uwe Raabe 8. Jun 2020 16:59

AW: Label "Transparenz" beibringen
 
Wenn es transparent sein soll, dann sollte csOpaque eigentlich nicht gesetzt werden.

DieDolly 8. Jun 2020 17:05

AW: Label "Transparenz" beibringen
 
Das Resultat ist leider gleich. Das Label nimmt die Farbe vom Parent an (hier Form).
Wenn ich innerhalb der Komponente auf das Property Color des Parents zugreifen könnte, könnte ich so einen unschönen Workaround basteln denke ich.
Aber da komme ich leider nicht ran.

Ein MDLabel1.Color := clRed; (egal welche Farbe man nimmt, am besten die des Parents) löst das Problem aber ich würde gerne vermeiden, das jedes mal zuweisen zu müssen.

Uwe Raabe 8. Jun 2020 17:42

AW: Label "Transparenz" beibringen
 
Ich habe jetzt nur auf die Schnelle mal drüber gesehen, aber wenn in der Paint-Methode folgendes steht
Delphi-Quellcode:
 
if Assigned(FOnPaintBackground) then
  FOnPaintBackground(self, self.Canvas, Width, Height)
 else
  begin
   Canvas.Pen.Width := 0;
   Canvas.Brush.Style := bsSolid;
   Canvas.Brush.Color := Color;
   Canvas.Pen.Color := Canvas.Brush.Color;
   Canvas.Rectangle(ClientRect);
   Canvas.Brush.Style := bsClear;
  end;
und FOnPaintBackground nicht zugewiesen ist, wie soll denn das Label dann transparent sein? Hier wird doch explizit ein Rechteck mit der Color des Labels gemalt.

DieDolly 8. Jun 2020 18:07

AW: Label "Transparenz" beibringen
 
FOnPaintBackground schmeiße ich gleich auch raus.
Wenn das Event dann weg ist, was müsste man hier schreiben, damit es transparent ist?

Wenn ich
Delphi-Quellcode:
Canvas.Brush.Color := Color;
   Canvas.Pen.Color := Canvas.Brush.Color;
kommentiere, ist es zwar transparent, aber das Label hat einen schwarzen, 1px Kasten drumherum, obwohl Pen Width 0 ist.

himitsu 8. Jun 2020 18:26

AW: Label "Transparenz" beibringen
 
keine Color und/oder kein Style = keine Farbe


Warum überhaupt ein Rechteck zeichnen, wenn du Keines willst?

DieDolly 8. Jun 2020 18:28

AW: Label "Transparenz" beibringen
 
Wenn ich da alles kommentiere ist der Hintergrund Dunkelgrau / Schwarz.
Das ist nicht meine Komponente. Ich versuche sie nur mit eurer Hilfe so anzupassen, dass sie ordentlich funktioniert.
Egal was ich da kommentiere oder nicht, der Hintergrund ist dann entweder weiß oder grau mit einem 1px schwarzen Rand.

himitsu 8. Jun 2020 19:17

AW: Label "Transparenz" beibringen
 
OK, es gibt hier keine Transparenz.
Das ist wie beim Delphi-Referenz durchsuchenTStaticText, welches das "echte" Windows-Label ist.

Dieses hier erbt von Delphi-Referenz durchsuchenTCustomControl, welches ein Nachfahre von TWinControl ist. ein "echtes Windows-Control" mit HWND und eigenem DC.

"Transparent" kann aber nur etwas werden, welches von TGraphicControl erbt, wie z.B. TLabel, TImage und TShape, denn diese Kompoenten sind keine eigenständigen Windows-Controls, sondern "hacken" sich in ihren Parent rein, wo sie sich auf dessen Canvas drauf zeichnen, mit der Möglichkeit, dass vorher der "Inhalt" des Parents gezeichnet wird und dann diese Komponente nur Teile davon übermalt.

DieDolly 8. Jun 2020 19:28

AW: Label "Transparenz" beibringen
 
Ich habe irgendwann mal versucht das von TGraphicControl erben zu lassen aber dann gehen einigen Stellen leider kaputt und es wird kein Text mehr ausgegeben.

venice2 8. Jun 2020 19:46

AW: Label "Transparenz" beibringen
 
Du willst echte Transparenz?

Dann kannst du nur eins tun deinen Text in einem Transparenten Bitmap kopieren und diesen anschließend wie ein Bitmap behandeln.
Aber! Wenn du einen grauen Hintergrund hast ist der Hintergrund des Labels natürlich auch hier dann Grau.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 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