![]() |
Zeilenumbruch einer Listbox beim Speichern erhalten
Moin!
Ich fülle eine Listbox mit mehreren langen Items. Unabhängig von ihrer Länge werden die Items vollständig in einer Zeile dargestellt, ohne dass innerhalb der Listbox ein Zeilenumbruch zu sehen ist. Wenn ich alle Items jedoch Speichere (entweder über ".Savetofile" oder via for-Schleife in FileStream) erhalte ich in der ausgegebenen Textdatei IMMER einen merkwürdig formatierten Inhalt. Allerdings will ich, dass die Items zeilenweise so in der Datei stehen, wie sie auch in der Listbox stehen. Ich hoffe mein Problem ist verständlich. Vielen Dank für Ihre Hilfe! Gruß |
AW: Zeilenumbruch einer Listbox beim Speichern erhalten
Deaktiviere mal in der Ansicht deines Editors den Zeilenumbruch.
|
AW: Zeilenumbruch einer Listbox beim Speichern erhalten
Daran habe ich schon viel herumgespielt. Auch im N++ ist von der Formatierung nichts zu retten.
|
AW: Zeilenumbruch einer Listbox beim Speichern erhalten
Eine Listbox unterstützt keine Zeilenumbrüche für einzelne Items.
Diese werden wie "normale" Zeichen behandelt und in einer Zeile eingezeigt. Wenn man aber die Items als StringList abspeichert (Items.Text, Items.SaveToFile, Items.SaveToStream), dann werden alle Einzelstrings zu einem großen String verwurschtelt. Das ist genauso wie innerhalb der TStringList. Wenn man einer Item Line einen Text mit Zeilenumbruch zuweist, dann bleibt der innerhalb dieser Zeile, solange man nicht alle Zeilen als einen Text behandelt. Denn wie soll nach dem Speichern noch irgendwer rausbekommen welcher Zeilenumbruch wozu gehört? Beim Einlesen werden also alle Zeilenumbruche als Item-Separatoren behandelt.
Delphi-Quellcode:
Und daran kannst du rein garnichts ändern, es sei denn du merkst/markierst dir die "ungewollten" Zeilenumbrüche/Steuerzeichen oder du sorgst dafür, das sowas erst garnicht in die ListBox reinkommt.
ListBox1.Items.Add('123 456');
ListBox1.Items.Add('123'#10'456'); ListBox1.Items.Add('123'#13'456'); ListBox1.Items.Add('123'#13#10'456'); Memo1.Lines.Text := ListBox1.Items.Text; Ich empfehle die fette Variante, drum werd' ich heute nicht mehr auf eine mögliche Speichervariante eingehn. :hattenwirnichtmaleingähnsmilie: Zitat:
|
AW: Zeilenumbruch einer Listbox beim Speichern erhalten
Zitat:
Wenn du es also anders darstellen willst, aber die Strings in der Liste erhalten willst, dann mußt du die Ausgabe selbst zeichnen. Ich hab hier nur ein Beispiel dafür, dass die Ausgabe in ListBox so aussehen kann, der Inhalt allerdings ganz anders sein kann. Im Beispiel lade ich eine Dateiliste inc. Pfade in die ListBox, will aber die Pfade nicht darstellen. Also werde sie für die Darstellung "entfernt", klicke ich allerdings auf ein Item, wird der korrekte Inhalt gezeigt, also Dateiname mit Pfad.
Delphi-Quellcode:
procedure GetFiles(Path: String; List: TStrings);
var Search: TSearchRec; begin if FindFirst(Path + '*.*', faArchive, Search) = 0 then repeat List.Add(Path + Search.Name) until FindNext(Search) <> 0; FindClose(Search); end; procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var FileName: String; begin with (Control as TListbox) do begin FileName := ExtractFileName(Items[Index]); Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top, FileName); end; end; procedure TForm1.Button1Click(Sender: TObject); begin ListBox1.Style := lbOwnerDrawFixed; ListBox1.Clear; GetFiles('c:\', ListBox1.Items); end; procedure TForm1.ListBox1Click(Sender: TObject); begin with ListBox1 do Caption := Items[ItemIndex]; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 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