Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - horizontale Scrollbar in TListbox


Tomac - Di 11.03.03 16:22
Titel: horizontale Scrollbar in TListbox
Hallo!

Ich habe mittels

Quelltext
1:
 SendMessage(Listbox1.Handle, LB_SetHorizontalExtent, 1000, Longint(0));                    

eine horizontale Scrollbar in einer Listbox erzeugt. Da Problem dabei ist nur, dass mit "1000" eine Fixe "Länge" festgelegt ist, ich möchte aber, dass die Länge auf die Länge der Einträge angepasst wird, so wie das auch bei der vertikalen Scrollbar geht.

THX
Tomac


GSE - Di 11.03.03 16:30


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure HorScrollBar(ListBox: TListBox; MaxWidth: Integer); 
var 
  i, w: Integer; 
begin 
  if MaxWidth = 0 then 
    SendMessage(ListBox.Handle, LB_SETHORIZONTALEXTENT, MaxWidth, 0) 
  else 
  begin 
    { get largest item } 
    for i := 0 to ListBox.Items.Count - 1 do 
      with ListBox do 
      begin 
        w := Canvas.TextWidth(Items[i]); 
        if w > MaxWidth then 
          MaxWidth := w; 
      end; 
    SendMessage(ListBox.Handle, LB_SETHORIZONTALEXTENT, 
      MaxWidth + GetSystemMetrics(SM_CXFRAME), 0); 
  end; 
end;


Du musst die Prozedur dann immer bloß aufrufen wenn du ein Item hinzufügst oder entfernst!

mfg
GSE


Böser Borstel - Do 13.03.03 14:10
Titel: IDE
Wenn du mit der IDE eine ListBox erstellst, kannst du mittels Add unendlich viele einträge machen.


grayfox - Mo 17.03.03 19:34

32767 ist noch lange nicht unendlich ;)

mfg, stefan


Böser Borstel - Di 18.03.03 08:34
Titel: Achja
Das wußte ich nicht, aber bis jetzt hat das für meine Zwecke immer gereicht.
Hat hier denn schon jemand eine ListBox - Komponente entworfen die mehr als 32767 kann? Die würde ich mir nämlich mal gerne genauer angucken!

Böser Borstel


Delete - Di 18.03.03 08:54
Titel: Re: Achja
Böser Borstel hat folgendes geschrieben:

Hat hier denn schon jemand eine ListBox - Komponente entworfen die mehr als 32767 kann? Die würde ich mir nämlich mal gerne genauer angucken!

Das wird wohl wenig Sinn machen so eine Komponete zu entwickeln. Oder hast du schon mal überlegt, wie du den 20156 Eintrag auswählen willst?Bzw. wie sähe es mit der Übersicht aus. :roll:


Böser Borstel - Di 18.03.03 09:02
Titel: so vielleicht
so vielleicht

so bekomme ich doch immer den inhalt. ODER?


Quelltext
1:
2:
3:
4:
function gebeAuswahlVonListbox: String
begin
    result := listBox.Items.Strings[listBox.ItemIndex];
end;


Delete - Di 18.03.03 09:06

Nein. Deine Funktion ist keine Methode von deiner Form. Die Fehlermeldung müßte lauten:
Zitat:

Unbekannter Bezeichner "listbox".


Böser Borstel - Di 18.03.03 09:13
Titel: ok
so jemand wie du müßte wissen, was ich damit meine!


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    ListBox: TListBox;
    function gebeAuswahlVonListbox;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.gebeAuswahlVonListbox: String
begin 
    result := listBox.Items.Strings[listBox.ItemIndex];
end;

end.


Delete - Di 18.03.03 15:00

Ich kann auch nicht hellsehen. Woher soll ich wissen, dass du wissentlich unvollständigen Code postest und dir bewußt bist, dass dieser Code so nicht gehen kann? :roll:


Böser Borstel - Di 18.03.03 15:13
Titel: tja
ich habe diesen code niemals geschrieben außer hier, ich wollte den leuten nur einen tip geben. nun habe ich so viel geschrieben obwohl diese funktion als globale funktion benutzt werden hätte können.
also ich benutze immer eine unit nur für globale sachen.