Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Listbox : Scrollen und Anfang löschen / kopieren (https://www.delphipraxis.net/97735-listbox-scrollen-und-anfang-loeschen-kopieren.html)

moelski 15. Aug 2007 09:48


Listbox : Scrollen und Anfang löschen / kopieren
 
Moin !

Ich hätte da zwei Fragen zur ListBox ...

1) Ich würde gerne in einer Listbox ein Logging anzeigen. Allerdings will ich nicht das ganze Logging immer in der Listbox halten. Das macht keinen Sinn. Also sollen immer eine Anzahl X Logzeilen angezeigt werden. Wenn mehr als X Zeilen in der Listbox sind, dann soll die alten (oben stehenden) Einträge gelöscht werden und zwar so das halt immer X Items in der Box sind.
Geht das mit der Listbox irgendwie automatisch? Hat das schon mal jemand gemacht? Und sowas wie Autoscroll hat das Ding auch nicht, oder? Also das immer die letzte Zeile angezeigt wird nach dem Einfügen einer neuen Zeile?

2) Wenn ich MultiSelect auf True stelle, wie kopiere ich dann den selektierten Kram auf einen Schlag in die Zwischenablage?

Alien426 15. Aug 2007 10:09

Re: Listbox : Scrollen und Anfang löschen / kopieren
 
Zitat:

Zitat von moelski
1) Ich würde gerne in einer Listbox ein Logging anzeigen. Allerdings will ich nicht das ganze Logging immer in der Listbox halten. Das macht keinen Sinn. Also sollen immer eine Anzahl X Logzeilen angezeigt werden. Wenn mehr als X Zeilen in der Listbox sind, dann soll die alten (oben stehenden) Einträge gelöscht werden und zwar so das halt immer X Items in der Box sind.
Geht das mit der Listbox irgendwie automatisch? Hat das schon mal jemand gemacht? Und sowas wie Autoscroll hat das Ding auch nicht, oder? Also das immer die letzte Zeile angezeigt wird nach dem Einfügen einer neuen Zeile?

So entfernst du die Zeile mit dem angegebenen Index:
Delphi-Quellcode:
ListBox.Items.Delete(Index);
So kannst du die letzte Zeile im Fokus halten:
Delphi-Quellcode:
ListBox.ItemIndex := ListBox.Items.Count - 1;
Zitat:

Zitat von moelski
2) Wenn ich MultiSelect auf True stelle, wie kopiere ich dann den selektierten Kram auf einen Schlag in die Zwischenablage?

"auf einen Schlag" geht das glaube ich nicht. Mit ListBox.Selected[Index] kannst du prüfen, ob das Item ausgewählt ist.

marabu 15. Aug 2007 10:17

Re: Listbox : Scrollen und Anfang löschen / kopieren
 
Hallo Dominik,

noch ein paar alternative Überlegungen:

(1) Hier könnte eine virtuelle ListBox zum Einsatz kommen, bei der die Daten von einer StringList geliefert werden, welche als Ringspeicher genutzt wird. Dadurch müssen die String-Zeiger in der Liste beim Überlauf nicht jedesmal verschoben werden.

(2)

Delphi-Quellcode:
function CopySelected(clb: TCustomListBox): string;
var
  lb: TListBox;
begin
  lb := TListBox.CreateParented(HWND(-3));
  clb.CopySelection(lb);
  Result := lb.Items.Text;
  lb.Free;
end;
Grüße vom marabu

moelski 15. Aug 2007 10:29

Re: Listbox : Scrollen und Anfang löschen / kopieren
 
Moin !

Zitat:

virtuelle ListBox zum Einsatz kommen, bei der die Daten von einer StringList geliefert werden
Aber müsste dann nicht ständig ein umkopieren aus der Stringliste in die Listbox erfolgen?

marabu 15. Aug 2007 10:49

Re: Listbox : Scrollen und Anfang löschen / kopieren
 
Nein, denn bei einer virtuellen ListBox werden keine Daten im Control gehalten, sie werden auf Anforderung bereit gestellt und gezeichnet.

moelski 15. Aug 2007 11:31

Re: Listbox : Scrollen und Anfang löschen / kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin !

Ich habe lange nach der Komponente "VitualListBox" gesucht. Bis ich dann auf lbVirtual gestossen bin :shock:
Nuja, und nachdem ich dann auch ein Sample gefunden hatte was die ganze Sache mal in Funktion zeigt, konnte ich mein Problem glaube ich lösen.

Vielleicht schaut da nochmal ein ListBox Experde drüber :stupid:

@Marabu:
Das Kopieren funktioniert wunderbar so ! Danke !!


Nachtrag:
Eine Demo habe ich hier gefunden:
http://www.delphipages.com/threads/t...40676&SAR=TRUE

marabu 15. Aug 2007 17:41

Re: Listbox : Scrollen und Anfang löschen / kopieren
 
Hallo Dominik,

Zitat:

Zitat von moelski
Ich habe lange nach der Komponente "VitualListBox" gesucht. Bis ich dann auf lbVirtual gestossen bin...

sorry, hätte ich dazu schreiben sollen.

Zitat:

Zitat von moelski
Vielleicht schaut da nochmal ein ListBox Experde drüber

Bin zwar kein Experte, aber drüber geschaut habe ich trotzdem mal. Du hast dich sehr an die Vorlage gehalten, deshalb nur ein paar Anmerkungen:

(1) MaxCount gehört als private Variable in die Form, wo ja auch die StringList deklariert ist, welche gesteuert werden soll.

(2) Es muss "Count > MaxCount" heißen und nicht "Count > MaxCount + 1", sonst wird ein Item zuviel gespeichert.

(3) Wenn dein SpinEdit benutzt wird, dann hat das keinen Einfluß auf die StringList...

(4) Du musst dich noch entscheiden, ob du nur die Anzeige limitieren möchtest oder generell die Speicherung. Im ersteren Fall muss der Code noch angepasst werden, so dass immer die letzten MAX_COUNT Items aus der StringList angezeigt werden. Was auf den niedrigeren Positionen gespeichert ist, das kann in ein LogFile weggeschrieben werden.

Freundliche Grüße

moelski 15. Aug 2007 20:34

Re: Listbox : Scrollen und Anfang löschen / kopieren
 
Moin !

Zu 1 & 2 -> Stimmt :thumb:

Zu 3
Das SpinEdit nutze ich im Moment nur Testweise. Und es hat doch einfluss. Beim nächsten Eintrag eben ...
Das passt für meine Zwecke so auch ganz gut !

Zu 4
Also ich möchte nur die MaxCount Zeilen haben. Alles andere übernimmt eh unsere Logging Engine im Hintergrund. Hier geht es nur darum, für den User eine schnelle Übersicht zu schaffen.

Es funzt nun übrigens so wie ich es wollte.


Vielen Danke für die Hilfe !!! :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 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