Delphi-PRAXiS

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 Transparente Checkbox (https://www.delphipraxis.net/41656-transparente-checkbox.html)

Schauries 6. Mär 2005 17:55


Transparente Checkbox
 
Hallo zusammen,

ich suche eine wirklich transparente Checkbox (D5), die nach wie vor eine Caption hat und den Fokus erhalten. Dream und JVCL bieten das leider nicht.
Hat jemand eine Idee?
Vielen Dank,
Dirk Schauries

SirThornberry 6. Mär 2005 18:01

Re: Transparente Checkbox
 
soll die gesammte Checkbox transparent sein? also auch dort wo später der Haken ist? Wenn ja, ist das nicht möglich denn wenn deine Componenten den Focus erhalten soll dasnn muss sie ein handle haben. Und Controls mit Handle (TWinControl) können nicht transparent sein. Oder meintest du 100% transparent (also nicht alpha)? Dann gebe es die möglichkeit mit "CreatePolygonRgn" eine Region für deine Checkbox zu erstellen so das sie dann an bestimmten Stellen 100% transparent ist so das man hindurch klickt.

Schauries 6. Mär 2005 18:23

Re: Transparente Checkbox
 
Hallo,
vielen Dank für die schnelle Antwort!
Also dass mit dem WinControl geht schon. Ich mach das über:

TMyCheckBox = class(TCustomControl)

gekürzt...

Delphi-Quellcode:
  private
    procedure CMEnabledChanged(var Msg: TMessage); message CM_ENABLEDCHANGED;
    procedure CMDialogChar(var Msg: TCMDialogChar); message CM_DIALOGCHAR;
    procedure CMFontChanged(var Msg: TMessage); message CM_FONTCHANGED;
    procedure CMTextChanged(var Msg: TMessage); message CM_TEXTCHANGED;
    procedure CMSysColorChange(var Msg: TMessage); message CM_SYSCOLORCHANGE;
    procedure CMCtl3DChanged(var Msg: TMessage); message CM_CTL3DCHANGED;
    procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
    procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
    procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
    procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE;
    procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;
    procedure WMRButtonDown(var Message: TWMLButtonDown); message WM_RBUTTONDOWN;
    procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message WM_LBUTTONDBLCLK;
    procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
    procedure WMMove(var Message: TWMMove); message WM_MOVE;
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;

und…
  protected
    procedure Paint; override;
    procedure Click; override;
    procedure CreateWnd; override;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure Toggle; virtual;
Aber es zeichnet sich nicht immer sauber in den Vordergrund. Lege ich die Checkbox auf ein Image und erhält das Image ein Invalidate, ist meine Checkbox weg. Erst durch anklicken oder Fokuserhalt tritt sie wieder in den Vordergrund.
Ich zeichne auch den Ankreuzhaken selber mit einem kleinen Bitmap. Das ganze hat also mit einer ursprünglichen Checkbox nichts mehr zu tun.

Ich würde auf mein Selbstgebasteltes gerne verzichten, wenn ich doch eine Alternative fände :wall: ...
Gruß,
Dirk Schauries

[edit=sakura] [delphi]Tags. Mfg, sakura[/edit]

SirThornberry 6. Mär 2005 19:31

Re: Transparente Checkbox
 
also ich würde es einfach mit einem TGraphicControl machen. Dies kann allerdings nicht den Focus erhalten. Dafür ist das da mit der Transparent bedeutend einfacher weil du im Paint auf die vorhandene Canvas eingehen kannst und per alpha drüber zeischnen.

eine weitere Möglichkeit wäre die Komponente von TCustomControl abzuleiten (wie du es schon machst) und ein Hintergrund bild zu zuweisen. Anahand des zugewiesenen Hintergrundbildes könntest du dann den Eindruck erwecken das die Komponente Transparent ist. Weswegen muss die Komponente eigentlich Transparent sein, was ist unter der Checkbox was man durchsehen soll? Vielleicht gibt es ja dementsprechend noch eine einfachere Lösung eine "pseudo-Transparenz" darzustellen.

sniper_w 6. Mär 2005 19:37

Re: Transparente Checkbox
 
Ich würde aber mit Regions. Vielleicht ist das mehr aufwand aber im Prinzip eine IMHO gute Lösung.

Schauries 6. Mär 2005 20:52

Re: Transparente Checkbox
 
Danke für die schnellen Antworten! Bin ich gar nicht gewohnt...
Also auf den Fokus kann ich nicht verzichten, denn dann schlagen mich ca. 1000 Kunden tooot.
Die arbeiten alle fast ausschließlich mit der Tastatur. Der Hintergrund steht nicht von Vornherein fest, da Formulardesigner zu einem späteren Zeitpunkt darüber entscheiden. Vermutlich werden es Image-Komponenten sein. Ich muss nur dafür sorgen, dass der Hintergrund, egal welcher (Windows sagt mir ja, wer dahinter liegt) zum richtigen Zeitpunkt gezeichnet wird.

<<und ein Hintergrund bild zu zuweisen

Das kann ich nicht. Es muss auch funktionieren, wenn die Hintergrundkomponente sich von selbst verschiebt.
Ich sehe schon, ich erwarte zu viel, aber vielen Dank für Eure/Deine Mühe !!!
Dirk Schauries

Muetze1 6. Mär 2005 20:59

Re: Transparente Checkbox
 
Moin!

Vielleicht hilft es, wenn man die TextOut() Funktion der WinAPI benutzt, weil diese kann einen Pfad anlegen der sich direkt um die Buchstaben des Strings legt und somit leicht zum Clipping benutzt werden kann, um einen rein transparenten Text zu erhalten für das Window Handle.

Die CheckBox kann man sich mit LoadImage() und MakeIntResource() ermitteln und entsprechend transparent umgestalten.

MfG
Muetze1

Bernhard Geyer 6. Mär 2005 21:29

Re: Transparente Checkbox
 
Die CheckBoxen vom ElPack könnten evtl. auch das gewünschte liefern.

Schauries 7. Mär 2005 18:59

Re: Transparente Checkbox
 
Danke, das hat geholfen !!!
Dirk Schauries


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