Autor Beitrag
Tomac
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

Win XP
D6 Ent
BeitragVerfasst: Di 11.03.03 16:22 
Hallo!

Ich habe mittels
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 740

Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
BeitragVerfasst: Di 11.03.03 16:30 
ausblenden 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

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs
and the universe trying to produce bigger and better idiots. So far, the universe is winning. (Richard Cook)
Böser Borstel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Mo 17.03.03 19:34 
32767 ist noch lange nicht unendlich ;)

mfg, stefan
Böser Borstel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154



BeitragVerfasst: 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
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154



BeitragVerfasst: Di 18.03.03 09:02 
Titel: so vielleicht
so vielleicht

so bekomme ich doch immer den inhalt. ODER?

ausblenden Quelltext
1:
2:
3:
4:
function gebeAuswahlVonListbox: String
begin
    result := listBox.Items.Strings[listBox.ItemIndex];
end;
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154



BeitragVerfasst: Di 18.03.03 09:13 
Titel: ok
so jemand wie du müßte wissen, was ich damit meine!

ausblenden 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.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154



BeitragVerfasst: 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.