![]() |
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! ;) |
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... |
Re: Transparent bei Checkboxen und Groupboxen
Zitat:
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. ![]() ![]() hanselmansel |
Re: Transparent bei Checkboxen und Groupboxen
Haben TLabels nicht immer die Property Transparent?
|
Re: Transparent bei Checkboxen und Groupboxen
Zitat:
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 |
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: ![]() |
Re: Transparent bei Checkboxen und Groupboxen
Hallo,
unter ![]() Vielleicht helfen dir diese ja weiter! |
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.
|
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:
|
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:
MfG, hanselmansel |
Re: Transparent bei Checkboxen und Groupboxen
@hanselmann: Wenn du im Paint deiner Komponente ein TImage erstellst (ist zwar überflüssig das erst im onPaint zu erstellen aber das spielt hier keine rolle) dann hat das TImage die Canvas von deiner abgeleiteten Klasse. Das heißt dein TImage kommt trotzdem nicht an das was unter deinem abgeleiteten ist. Wie in dem Beitrag den ich verlinkt habe beschrieben ist muss man sich ein Control mit handle wie ein Stück papier vorstellen. Und wenn ein Stück papier irgendwo drauf liegt sieht man einfahc nicht mehr was darunter ist, da ist es auch egal ob du darauf noch ein Stück papier etc. legst, du wirst nie sehen was darunter ist.
Es ist zwar mit dem ws_ex_transparent möglich etwas transparent zu bekommen aber nicht zu 100%. So hab ich zum Beispiel eine grafische Checkbox mir mal programmiert welche dieses Attribut hat. Dadurch kommt man an den Untergrund heran und es entsteht eine scheinbare Transparenz. Verschiebe ich allerdings meine Checkbox so wird der Untergrund nicht neu gemalt und somit sihet man auf meiner vermeintlich transparenten den Hintergrund wo sie vorher lag. Ähnliche Effekte können dann eben auch auftreten wenn irgend eine Komponente oder ein Fenster drüber lag oder Doublebuffered an ist. |
Re: Transparent bei Checkboxen und Groupboxen
Gut, dann komme ich innerhalb der Komponente also nicht über deren eigenes Canvas hinaus. Schade. Sonst hätte ich da bei einigen Programmen noch was zusammengefrickelt.
Gute Nacht, hanselmansel |
Re: Transparent bei Checkboxen und Groupboxen
hab mein Beitrag grad noch bischen erweitert. Mit dem ws_ex_transparent klappt das Bedingt. Genaueres wie man das macht findest du wenn du die suche nutzt und nach transparentem panel suchst (das wurde mal gepostet, funktioniert aber eben auch nur bedingt)
|
Re: Transparent bei Checkboxen und Groupboxen
Angenommen ich habe mehrere Radiobuttons ... allerdings muss ich die ja in groupboxen oder radioboxen (keine ahnung wie die heißen) ablegen ... diese boxen kann ich aber nicht transparent machen. wenn ich das nun ohne boxen mache und sie einfach so auf die form lege, sind die radiobutttons ja nicht unterteilt und ich kann max. eins anklicken. wie kann ich denn das umgehen?
und noch was: wie siehts mit transparenz beim memo aus? |
Re: Transparent bei Checkboxen und Groupboxen
genauso :?:
wenn du unnnnbedingt eine Transparenz haben willst könntest du ja theoretisch 2 Forms verwenden. Ein Backgroundform mit enabled=false, das du immer mitverschiebst wenn das Formular im Vordergrund geändert wird (form.resize) und ein Vordergrundformular, auf dem der selbe Hintergrund und die Komponenten sind und das einen bestimmten Alphablending-Value hat... :? |
Re: Transparent bei Checkboxen und Groupboxen
Zitat:
Du kannst mehr als ein Radiobutton auf die Form legen, oder meintest du das du nur eine Gruppe damit hast? Wenn man als Programmierer weiß was unter der entsprechenden Komponente liegt kann man auch einfach der darüber liegenden ein Bild zuweisen (natürlich mit entsprechender Anpassung). |
Re: Transparent bei Checkboxen und Groupboxen
Hallo
ich habe so etwas einmal mit 2 Forms gemacht. Man muss da gewisse Dinge beachten, wenn man mit Multi-Monitor-Systemen arbeitet, geht aber ansonsten ganz gut. Ich hab dabei das Hintegrundformular als eine Eigenschaft des Vordergrundformulars deklariert und dann jeweils Größe und Position automatisch angeglichen. Is zwar am Anfang und vom Prinzip her umständlich, wenn man allerdings das Grundgerüst programmiert hat, dann lässt sich damit gut arbeiten. Gruß Michael [Edit] Oh, da habe ich wohl in meinem Browserfenster-Durcheinander aus Versehen auf einen alten Thread geantwortet. Man möge es mir verzeihen. :o [/Edit] |
Re: Transparent bei Checkboxen und Groupboxen
TCustomWinControl hat sowohl Fokusfähigkeit als auch ein Canvas. Wie wärs damit?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 Uhr. |
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