![]() |
Ich hatte Google in den Newsgroups suchen lassen.
Grüße, Daniel |
Na ja, danke, ich werde mal sehen, ob ich damit arbeiten kann.
|
Ich erinnere mich dunkel, dass eine Zeitschrift mal vor langer Zeit schrieb, dass die About-Box des IE auch bloß eine normale Webseite sein soll. Das Zauberwort hieß damals "Dynamic HTML" - allerdings in der IE-Form, die natürlich die anderen Browser nicht kapieren.
@Daniel: So schwer ist´s mit einer variablen OwnerDraw-Listbox nicht. Ich habe das mal für ein Programm ausprobiert. Im alten DF hatte ich mal eine Funktion gepostet, die eine Trennlinie in eine Listbox eingefügt hat. Dazu hat es gereicht, als Item ein Leerzeichen oder ein Minus anzugeben
Code:
und im "OnMeasureItem" wurde dann geprüft, ob es sich um so ein Sonderzeichen gehandelt hat. Wenn ja, wurde die "Height" auf 3/5 (in jedem Fall eine ungerade Zahl) reduziert. Wenn nicht, blieb sie konstant.
Add('-');
In deinem Fall, Luckie, könnte/müsste man also in "OnMeasureItem" herausfinden, ob der Wert Index dem ausgewählten Item entspricht. Wenn ja, wird die Höhe entsprechend raufgesetzt, damit du mehrzeilige Texte unterbringen kannst. |
@Mathias:
Genau das hatte ich ja erfolglos versucht. Mein Code war folgender:
Code:
Der selektierte Eintrag soll also mit einer Höhe von 50 Pixeln erscheinen, alle anderen mit einer Höhe von 20 Pixeln. Ungeachtet meiner Bemühungen ist trotz allem die Eigenschaft "ItemHeight" der ListBox ausschlaggebend. :x
[b]procedure[/b] TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer; [b]var[/b] Height: Integer);
[b]begin[/b] [b]If[/b] (Control [b]is[/b] TListBox) [b]Then[/b] [b]Begin[/b] [b]If[/b] (Index = TListBox(Control).ItemIndex) [b]Then[/b] Height:= 50 [b]Else[/b] Height:= 20; [b]End[/b]; [b]End[/b]; [b]procedure[/b] TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); [b]begin[/b] [b]If[/b] (Control [b]is[/b] TListBox) [b]Then[/b] [b]Begin[/b] [b]With[/b] TListBox(Control).Canvas [b]Do[/b] [b]Begin[/b] [b]If[/b] (odSelected [b]in[/b] State) [b]Then[/b] [b]Begin[/b] Font.Color:= clWhite; Font.Style:= [fsBold]; Font.Size:= 12; Brush.Color:= clNavy; [b]End[/b] [b]Else[/b] [b]Begin[/b] Font.Color:= clNavy; Font.Style:= []; Font.Size:= 12; Brush.Color:= clWhite; [b]End[/b]; FillRect( Rect ); TextOut( Rect.Left, Rect.Top, TListBox(Control).Items[Index] ); [b]End[/b]; [b]End[/b]; [b]end[/b]; Grüße, Daniel |
Stimmt, Daniel, du hast recht. Ich hätte wohl besser dieses Symbol hier (:idea:) dazu posten sollen. :oops: Ich gestehe, es war nur ein Gedanke. Getestet hab´ ich´s erst gerade eben ... mit so ziemlich dem selben Code -und dem selben Ergebnis!- wie du.
Ähem, ich schäme mich ein bisschen ... :wink: |
@Mathias:
Ach nicht doch .... ist aber auch mal schön für ein kleines Tierchen wie mich, einen der Großen der Branche vorsichtig auf die Möglichkeit eines gedanklichen Irrtums aufmerksam machen zu können. :P :mrgreen: Grüße, Daniel |
OnMeasureItem wird nur aufgerfuen, wenn die Eigenschaft Style auf lbOwnerDrawVariable gesetzt ist. Die Lösung hatte ich damals im alten DF gepostet. Das Problem, welches jedoch bestand, war Delphi zu erklären, dass sich die Höhe jedes einzelnen Items ändern kann. Die Lösung hatten wir leider nicht gefunden :(
|
Moin Zusammen,
die Höhe jedes einzelnen Items zu ändern sollte sich eigentlich so regeln lassen: Beispielsweise in der OnDrawItem Prozedur
Code:
Man muss allerdings wohl alle Items jeweils neu ausgeben, da ja durch eine Vergrösserung der Höhe nicht selektierte Items überschrieben werden.
SendMessage(TListBox(Control).Handle,LB_SETITEMHEIGHT,Index,50)
|
Zitat:
|
Re: Listbox á la Windows-Software
Zitat:
Schau mal hier nach -> ![]() :bounce1: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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