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 CheckListBox und OwnerDraw (https://www.delphipraxis.net/10707-checklistbox-und-ownerdraw.html)

OregonGhost 23. Okt 2003 18:02


CheckListBox und OwnerDraw
 
Ich verwende eine CheckListBox mit OwnerDraw, weil die Items mehrfarbigen und -zeiligen Text enthalten müssen und "aktiviert" werden können müssen.

Zwei Probleme habe ich damit. Zum einen wird trotzdem immer der gepunktete Fokusrahmen um die Items gezeichnet, und im Gegensatz zum ListView (wo ich weiß, wie man das unterbinden kann, denn da gibt es eine var-Variable DefaultDraw, die man einfach auf false setzen kann) krieg' ich das einfach nicht weg, außer indem ich Brush.Style auf bsClear setze - was aber zum einen nicht Sinn der Sache sein kann und zum anderen zu folgendem Problem führt:

Ich verwende den Flat-Style der Listbox, weil die Checkbox sonst keinen XP Visual Style bekommt (so zwar nur flach, sieht aber trotzdem besser aus) - aber wenn ich den Brush.Style auf bsClear setze wie oben beschrieben, wird die CheckBox nicht mehr korrekt gezeichnet, insbesondere nach Klick verschwindet sie.

Hat da jemand eine Lösung, oder ist es sinnvoll, auf ListView umzusteigen?

Keldorn 23. Okt 2003 18:25

Re: CheckListBox und OwnerDraw
 
Hallo

beim ondrawitem-ereignis prüfen, ob das item selektiert ist (odselected in state) und mit Canvas.drawfocusrect den Fokus einfach drüberzeichnen

Mfg Frank

OregonGhost 23. Okt 2003 18:54

Re: CheckListBox und OwnerDraw
 
Das gibt's nicht - das ist ja einfach :shock:

Aber ist es jetzt nicht so, dass das FocusRect zweimal gezeichnet wird, einmal von mir und einmal von Windows bzw. der VCL (wer auch immer)? Ist das nicht eigentlich unnötiger Overhead?

Naja, egal, es funktioniert und man merkt davon nichts. Vielen Dank ;c)

Christian Seehase 23. Okt 2003 19:17

Re: CheckListBox und OwnerDraw
 
Moin OregonGhost,

Zitat:

Zitat von Delphi Hilfe zu TCanvas.DrawFocusRect
Da DrawFocusRect mit einer XOR-Funktion arbeitet, führt ein zweiter Aufruf mit dem gleichen Parameter dazu, daß der Rahmen wieder vom Bildschirm verschwindet.

Kannst Du auch im PSDK unter DrawFocusRect so nachlesen.


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