AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listbox á la Windows-Software

Ein Thema von Luckie · begonnen am 3. Sep 2002 · letzter Beitrag vom 2. Jan 2003
Antwort Antwort
Seite 2 von 3     12 3      
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#11
  Alt 3. Sep 2002, 20:51
Ich hatte Google in den Newsgroups suchen lassen.


Grüße,
Daniel
Daniel R. Wolf
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12
  Alt 3. Sep 2002, 20:56
Na ja, danke, ich werde mal sehen, ob ich damit arbeiten kann.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#13
  Alt 4. Sep 2002, 06:02
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:
Add('-');
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.

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.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#14
  Alt 4. Sep 2002, 07:32
@Mathias:
Genau das hatte ich ja erfolglos versucht. Mein Code war folgender:
Code:
[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];
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.


Grüße,
Daniel
Daniel R. Wolf
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#15
  Alt 4. Sep 2002, 07:46
Stimmt, Daniel, du hast recht. Ich hätte wohl besser dieses Symbol hier () dazu posten sollen. 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 ...
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#16
  Alt 4. Sep 2002, 08:04
@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.


Grüße,
Daniel
Daniel R. Wolf
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#17
  Alt 4. Sep 2002, 09:06
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
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.107 Beiträge
 
Delphi 11 Alexandria
 
#18
  Alt 4. Sep 2002, 09:36
Moin Zusammen,

die Höhe jedes einzelnen Items zu ändern sollte sich eigentlich so regeln lassen:

Beispielsweise in der OnDrawItem Prozedur

Code:
SendMessage(TListBox(Control).Handle,LB_SETITEMHEIGHT,Index,50)
Man muss allerdings wohl alle Items jeweils neu ausgeben, da ja durch eine Vergrösserung der Höhe nicht selektierte Items überschrieben werden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#19
  Alt 4. Sep 2002, 11:28
Zitat von Daniel:
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.
Der orientalische Weg, was? Durch geschicktes Umkehren der Anreden gewinnt man das Vertrauen des Gegenüber. Nicht wahr, Grandseigneur?
  Mit Zitat antworten Zitat
Andreas2k

Registriert seit: 2. Jan 2003
108 Beiträge
 
Delphi XE5 Professional
 
#20

Re: Listbox á la Windows-Software

  Alt 2. Jan 2003, 14:33
Zitat von Luckie:
Hallo,
ihr kennt doch diese Listbox von Windows, die genutzt wird, um die installieret Software anzuzeigen.

Wenn man da einen Eintrag auswählt, wird der Eintrag doppelt so groß dargestellt mit Detail-Informationen. Den Button lassen wir mal weg, den interessiert so wie so niemanden.

Jetzt meine Frage: Wie geht das?
Ich habe schon mit ItemHeight probiert nur dann werden alle doppelt so hoch, nicht nur der selektierte.

Und wie bringe ich der Listbox bei zwei oder mehr Zeilen zu akzeptieren?
Wenn ich
Code:
  Listbox1.Items.Add('1. Zeile'+#13+#10+'2. Zeile);
mache, dann sieht das nachher so aus:
"1.Zeile||2. Zeile."

Link zu einer entsprechenden Kompo mit Source ist auch akzeptabel.

Schau mal hier nach ->http://private.freepage.de/cgi-bin/f....htm#Listboxen


Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:23 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