Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Transparent bei Checkboxen und Groupboxen (https://www.delphipraxis.net/56310-transparent-bei-checkboxen-und-groupboxen.html)

Chrissi91 3. Nov 2005 18:17


Transparent bei Checkboxen und Groupboxen
 
Hallo,

angenommen ich habe ein Bild als Hintergrund und habe auf der Form mehrere Checkboxen und Groupeboxen. Bei vielen Standardcomponenten ist die Funktion im Objektinspektor vorhanden (Transparent). Aber es muss doch auch für andere Komponenten diese Funktion geben.

Danke schon im Vorraus! ;)

Martin K 3. Nov 2005 18:57

Re: Transparent bei Checkboxen und Groupboxen
 
Es wäre wirklich gut, wenn einer mal was Nützliches zu diesem Thema schreiben könnte.

Hab das gleiche Problem:
Ich wollte nämlich mal Buttons transparent machen, damit man das Hintergrundbild sieht.
Bin dann aber auf SpeedButtons ungestiegen, da diese die Eigenschaft "Transparent" im Object Inspector haben.
Einziger Nachteil, SpeedButtons haben keinen TabStop.

Weiß jemand, wie man allgemein, bei allen Componenten die Eigenschaft "Transparent" hinzufügen kann?
Gibt es vielleicht eine Color, die man nehmen kann, damit man eine Transparenz hat?

@Chrissi91: :? Sorry, dass ich dir nicht helfen konnte...

hanselmansel 3. Nov 2005 19:51

Re: Transparent bei Checkboxen und Groupboxen
 
Zitat:

Zitat von Martin K
Gibt es vielleicht eine Color, die man nehmen kann, damit man eine Transparenz hat?

HiHo,

so einfach ist es mit Transparenz leider nicht. Es kann sein, dass ich mich im Folgenden tierisch täusche, und dann von denen die Ahnung haben, gehauen werde, aber ich will mich mal versuchen: :duck:

Es gibt den Unterschied zwischen GraphicControls und WinControls. Erstere haben den Vorteil, dass zu Beginn der Paint-Methode der Hintergrund in die Caption kopiert wird, somit also verfügbar ist, um Transparenz zu erzeugen. Ein WinControl (Win steht für "windowed" o.ä.) hat sowas nicht, und wird auch anders gezeichnet. Dafür hat das WinControl den Vorteil, den Fokus bekommen zu können.
Sir Thornberry hat ein Label gekapselt, welches über Alpha Transparenz verfügte, wobei es sich hierbei um ein GraphicControl handelt. LINK Für ein WinControl müsstet ihr da schon OnPaint an den Hintergrund kommen. Und das wird - wenn überhaupt - nur über ein dynamisches Bitmap-GraphicContol-Zeugs möglich sein, aus dem man die Caption besorgen kann. Arbeit über Arbeit!http://www.fedoraforum.de/html/emoticons/unsure.gif

hanselmansel

3_of_8 3. Nov 2005 19:55

Re: Transparent bei Checkboxen und Groupboxen
 
Haben TLabels nicht immer die Property Transparent?

hanselmansel 3. Nov 2005 20:09

Re: Transparent bei Checkboxen und Groupboxen
 
Zitat:

Zitat von 3_of_8
Haben TLabels nicht immer die Property Transparent?

Klar, hast recht. Es geht bei Sir Thornberry aber um Alphatransparenz.

Ich habe mir die Ursprungsfrage noch einmal angeguckt, in der es darum ging, z.B. eine Checkbox transparent zu machen. Hier müsste aber theoretisch das selbe Problem bestehen. Wenn das control gezeichnet wird, bekommt das Canvas die Backgroundfarbe, dann wird das eigentliche Control gezeichnet nur damit anschließend die Caption auf die Form geklebt werden kann. AFAIK hast du dabei nicht den Hintergrund zur Verfügung, den du allerdings bräuchtest, um es transparent zu zeichnen. Vieleicht guckt ihr euch die Paint-Methoden vom Label und seinen Vorgängern an, um zu gucken, wie die VCL das macht.
[€dit]Ich bin doch blöde! Das Label ist GraphicControl, hat also kein Problem damit, seinen hintergrund zu kennen...[/€dit]

MfG,
hanselmansel

SirThornberry 3. Nov 2005 21:16

Re: Transparent bei Checkboxen und Groupboxen
 
Hanselmann hat es so ziemlich auf den Punkt gebracht und zu fast 100% richtig erklärt. Ein was im eigentlichen Sinne ein Fenster ist (also so ziemlich jedes Control was ein Handle hat) zeichnet auf die eigene Canvas und da ist es fast unmöglich an den Untergrund heran zu kommen. Ein Control ohne Handle (Label etc.) zeichnet sich auf die Canvas des Parents und da der Parent sich vorher zeichnet hat man den Untergrund zur Verfügung und kann somit mit Transparenz spielen. Wenn man unbedingt eine Checkbox benötigt die Transparent ist kann man eignetlich auch einfach von TGraphicControl ableiten und selbst eine Checkbox mit Schrift auf die Canvas malen. Es gibt auch noch die möglichkeit mit WS_EX_TRANSPARENT bei den CreateParams das Fenster dazu zu bringen das es den Untergrund vom Parent hat. Allerdings ist dann auch noch überschreiben von Paint etc. angesagt weil die Methoden standardmäßig den Hintergrund übermalen. Und mit Doublebuffered und so kanns dann trotzdem zu problemen kommen das es nicht wirklich transparent ist weil es sich dabei nur um eine Fast-Transparenz handelt die nicht richtig funktioniert.

Eine etwas ausführlichere Erklärung warum das mit dem Transparent bei dem einen Control geht und bei dem anderen nicht gibts hier: http://www.delphipraxis.net/internal...=444167#444167

Helmi 3. Nov 2005 21:31

Re: Transparent bei Checkboxen und Groupboxen
 
Hallo,

unter http://www.pics-software.de/compon.htm gibt es zwei CheckBoxen, die transparent können (TSRCheckBox und TEnhancedCheckBox)

Vielleicht helfen dir diese ja weiter!

SirThornberry 3. Nov 2005 21:33

Re: Transparent bei Checkboxen und Groupboxen
 
wie dort bereits steht sind die Komponenten von TGraphicControl abgeleitet (eben wegen Transparenz) und können somit keinen Eingabefocus bekommen etc.

Jelly 3. Nov 2005 21:36

Re: Transparent bei Checkboxen und Groupboxen
 
Wie wärs denn eine Checkbox ohne Caption zu nehmen, und ein Label daneben um die Funktion zu beschreiben. :gruebel:

hanselmansel 3. Nov 2005 21:37

Re: Transparent bei Checkboxen und Groupboxen
 
Und wieder habe ich interessante Sachen dazugelernt. :-D *freu* Aber wo wir gerade beim Thema sind: Angenommen, ich hätte die fixe Idee, eine Komponente von TCheckBox abzuleiten, die nicht nur ein Handle hat, sondern auch transparent ist. Das u.a. die Paint-Methode überschrieben werden muss ist klar, doch nun frage ich mich, weshalb es so unmöglich ist Transparenz zu erzeugen. Ohne irgendetwas ausprobiert zu haben, habe ich mir folgendes überlegt:
  1. Ich erstelle im Paint meiner Komponente ein TImage der Größe und der Position meiner Kompo.
  2. Da TImage ja ein GraphicControl ist, müsste im Canvas des Timage doch der Hintergrund zu finden sein.
  3. Diesen Hintergrund würde ich nun dem Canvas meines Controls zuweisen, und mit Brush.Color := bsClear darauf zeichnen.
  4. Fertig ist die, von TWinControl abgeleitete, transparente Komponente! :angel2:
Wo ist der Haken an der Geschichte, wo es dann kracht?

MfG,

hanselmansel


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz