![]() |
Listbox von unten füllen
Hallo,
wir besprechen im Moment im Informatikunterricht den Datentyp "Stapel". Dazu wird ja bekanntlich das neueste Element zu oberst angezeigt - nun hat heute unser Lehrer gesagt, dass es günstig wäre, die Listbox von unten zu füllen (also erstes Element erscheint am Boden, zweites darüber; ohne, dass man, wie normalerweise, das oberste Element erst nach unten verschieben muss, damit das neue eingefügt werden kann) - allerdings wusste er nicht, wie. Da ich auch keine Ahnung habe, frage ich einfach mal in die Runde, ob das zu realisieren ist (mit Delphi 4) und wenn ja, wie? Danke! Gruß, Olli |
Re: Listbox von unten füllen
ich würde einfach das neue nur ganz oben einfügen (weil einfacher)
letztendlich kommt aber dasselbe raus wie du meinst (hoffe ich doch) dazu musst du folgenden Befehl nutzen:
Delphi-Quellcode:
Damit fügst du S an der Position 0 ein, also ganz oben.#
ListBox1.Items.Insert(0,S);
Edit: Ich würde wenn möglich davon absehen wirklich die Items zu "stapeln" weil du dann mehrere Probleme hast: erstens müsstest du (um es vernünftig zu machen) komplett das OnPaint überschreiben zweitens wüsste ich nicht was du machst wenn der Stapel an der "decke" ankommt...Hochscrollen? unten bleiben? so ist es vielleicht nicht sooo perfekt, aber einfach und völlig ausreichend :) |
Re: Listbox von unten füllen
Zitat:
Sorry, fuer sowas hab ich irgendwie kein Verstaendnis. Als Lehrer eine Aufgabe stellen, bei der ich selbst nicht Bescheid weiss ? Naja, Jedem das Seine. |
Re: Listbox von unten füllen
Der Lehrer hat es uns ja nicht als Aufgabe gestellt, sondern gesagt, wenn jemand es wüsste, solle er es sagen. Es wäre nicht notwendig, aber er wolle es wissen.
|
Re: Listbox von unten füllen
Zitat:
Delphi-Quellcode:
Fuegt den Inhalt von i am Ende und
ListBox1.Items.Insert(ListBox1.Items.Count,inttostr(i));
Delphi-Quellcode:
am Anfang einer ListBox ein.
ListBox1.Items.Insert(0,inttostr(i));
Sowas sollte ein Lehrer auch in messbarer Zeit koennen. |
Re: Listbox von unten füllen
Hallo,
wie wäre es den damit :mrgreen:,etwas Abwechslung ist ja nicht schlecht am späten Abend :wink:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin ListBox1.Style := lbOwnerDrawFixed; ListBox1.IntegralHeight := True; ButtonClearClick(self);//damit beim Start gleich alles ok ist end; //ListBox mit leeren Zeilen bis zum Ende füllen procedure TForm1.ButtonClearClick(Sender: TObject); var z : integer; begin ListBox1.Clear; for z := 0 to Round(ListBox1.Height/ListBox1.ItemHeight)-1 do ListBox1.Items.Add(''); //Tag wird zum Nachhalten der beschriebenen Items gebraucht ListBox1.Tag := Round(ListBox1.Height/ListBox1.ItemHeight)-1; end; procedure TForm1.ButtonEintragClick(Sender: TObject); begin if ListBox1.Tag = 0 then//oben angekommen begin ListBox1.Items[0] := Edit1.Text; ListBox1.Items.Insert(0,'');//leere Zeile oben anlegen für kommende Eintrag end else begin ListBox1.Items[ListBox1.Tag] := Edit1.Text;>//nach oben füllen ListBox1.Tag := ListBox1.Tag-1; end; end; //damit man nicht oberhalb der Einträge eine Markierung sieht procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin if odFocused in State then begin if Listbox1.Items[Index] = '' then Listbox1.Canvas.Brush.Color := Listbox1.Color; Listbox1.Canvas.FillRect(Rect); Listbox1.Canvas.TextOut(Rect.Left,Rect.Top,Listbox1.Items[Index]); if Listbox1.Items[Index] = '' then begin ListBox1.ItemIndex := -1; DrawFocusRect(Listbox1.Canvas.Handle,Rect);//Focusrechteck entfernen end; end else begin Listbox1.Canvas.FillRect(Rect); Listbox1.Canvas.TextOut(Rect.Left,Rect.Top,Listbox1.Items[Index]); end; end; |
Re: Listbox von unten füllen
@lizardking: du hat das ganze wohl nicht richtig verstanden. Es geht nicht darum Items am Anfang einzufügen sondern das die Listbox von unten (vom unteren Rand des Controls) nach oben (oberer Rand des Controls) gefüllt wird. Einzige Möglichkeit die ich sehe um den Effekt zu erzielen wäre die Listbox mit leeren Items zu füllen und dann von unten her die Beschriftung zu ändern. Wenn also in der Listbox 5 Einträge im sichtbaren Bereich platz haben.
Delphi-Quellcode:
und zum von unten her "füllen"
var LCount: Integer;
begin for LCount := 1 to 5 do ListBox1.Items.Add('');
Delphi-Quellcode:
Dadurch sollte der Effekt entstehen das die Listbox von unten her gefüllt wird (ungetestet)
var LCount: Integer;
begin for LCount := 4 downto 0 do begin ListBox1.Items.Strings[LCount] := inttostr(5 - LCount); Application.ProcessMessages; Sleep(1000); end; |
Re: Listbox von unten füllen
Zitat:
|
Re: Listbox von unten füllen
Zitat:
|
Re: Listbox von unten füllen
Der Lehrer wollte wohl andeuten das es effizienter waere das listbox oder listview von unten zu fuellen. um unnoetiges scrollen zu vermeiden.
also 1. muss die anzahl der elemente (zu speicherne items) vorher genau bekannt sein. und 2. wenn es mehr sind als du du, bei der groeße deines listboxes darstellen kannst, musst du sowieso scrollen. naehmlich alles item 1 feld runter. haengt natuerlich von font und schriftgroeße ab. 3. sinn wuerde das ganze nur machen , wenn man die elemente ohne vcl sysncro einfuegen koennte und erst nach dem befuellen die vcl anzeige aktiviert Richard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz