AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Label "Transparenz" beibringen

Ein Thema von DieDolly · begonnen am 8. Jun 2020 · letzter Beitrag vom 8. Jun 2020
Antwort Antwort
Seite 1 von 2  1 2      
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

Label "Transparenz" beibringen

  Alt 8. Jun 2020, 17:50
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 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?
Angehängte Dateien
Dateityp: pas MDLabel.pas (51,1 KB, 11x aufgerufen)

Geändert von DieDolly ( 8. Jun 2020 um 17:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: Label "Transparenz" beibringen

  Alt 8. Jun 2020, 17:59
Wenn es transparent sein soll, dann sollte csOpaque eigentlich nicht gesetzt werden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: Label "Transparenz" beibringen

  Alt 8. Jun 2020, 18:05
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.

Geändert von DieDolly ( 8. Jun 2020 um 18:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#4

AW: Label "Transparenz" beibringen

  Alt 8. Jun 2020, 18:42
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: Label "Transparenz" beibringen

  Alt 8. Jun 2020, 19:07
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#6

AW: Label "Transparenz" beibringen

  Alt 8. Jun 2020, 19:26
keine Color und/oder kein Style = keine Farbe


Warum überhaupt ein Rechteck zeichnen, wenn du Keines willst?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#7

AW: Label "Transparenz" beibringen

  Alt 8. Jun 2020, 19:28
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.

Geändert von DieDolly ( 8. Jun 2020 um 19:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#8

AW: Label "Transparenz" beibringen

  Alt 8. Jun 2020, 20:17
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 8. Jun 2020 um 20:31 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

AW: Label "Transparenz" beibringen

  Alt 8. Jun 2020, 20:28
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.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#10

AW: Label "Transparenz" beibringen

  Alt 8. Jun 2020, 20:46
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.

Geändert von venice2 ( 8. Jun 2020 um 21:04 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:54 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