![]() |
Optische Anordnung ListBox
Moin Leuts,
ich bin imme rncoh bei meinem Adressbuch. Mittlerweile ist es so gut wie feritg. Im Moment fehlen nur noch optische feinheiten. Jetzt würde ich gerne, dass die Liste der Adressen nicht einefan so aussieht: Mustermann, Max Schröder, Gerhard Merkel, Angela usw. Sondern dass die Vorname alle auf einer Linie anfangen. (verständlich was ich will?) Habt ihr da irgendwelche Ideen? Die einzige die ich habe ist umständlich und unschön^^ Nämlich besteht die daraus, die Schriftart zu wählen, in der jeder Buchstabe dieselbe Breite hat, dann die Zeichen des Nachnamens zu zählen und dann z.b. 25-(Wortzeichenanzahl) Leerzeichen einzufügen bevor der Vorname kommt. gruß DutchmanTom |
Re: Optische Anordnung ListBox
Nimm statt einer ListBox eine ListView mit ViewStyle vsReport.
|
Re: Optische Anordnung ListBox
Das kam auch von nem Kolegen ^^
gibts irgend eine möglichkeit wie ich miene ListBox, die schon in die komplette Programierung mit eingebaut ist, schnell ersetzen kann? Einfach ersetzen und selber name hat leider nit geklappt :( |
Re: Optische Anordnung ListBox
Liste der Anhänge anzeigen (Anzahl: 1)
Mit der TListview geht das etwas anders, da Du auch SubItems brauchst. Hier einmal ein Beispiel (alles im Quellcode gemacht, was auch im OI ginge):
Delphi-Quellcode:
Das sieht dann so aus wie im Anhang.
procedure TfrmListViewDemo.FormCreate(Sender: TObject);
var Item: TListItem; Column: TListColumn; begin //Einstellen des ViewStyle ListView1.ViewStyle := vsReport; //Anlegen von 2 Spalten Column := ListView1.Columns.Add; Column.Width := 150; Column.Caption := 'Name'; Column := ListView1.Columns.Add; Column.Width := 150; Column.Caption := 'Vorname'; //Einfügen der Einträge Item := ListView1.Items.Add; Item.Caption := 'Mustermann'; Item.SubItems.Add('Max'); Item := ListView1.Items.Add; Item.Caption := 'Korn'; Item.SubItems.Add('Klara'); Item := ListView1.Items.Add; Item.Caption := 'Walker'; Item.SubItems.Add('Johnny'); end; |
Re: Optische Anordnung ListBox
Eine andere Möglichkeit wäre das selber zu zeichnen -> OwnerDraw
|
Re: Optische Anordnung ListBox
Zitat:
Nur iwie schaff ichs nit den code so an zu passen, dass der mein offenes Array akzeptiert |
Re: Optische Anordnung ListBox
Ok, ich hab die ListBox mittlerweile durch eine ListView erstezt.
Jetzt bekomm ich leider jedes mal, wenn ich von der Darstellung "Nachname, Vorname" ind die Darstellung "Vorname, Nachname" wechseln will eine Fehlermeldung a la Zugriffsverletzung. Code für Wechseln der Darstellung:
Delphi-Quellcode:
Das im Code genannte AdressDarstellungEdit sieht volgendermaßen aus:
procedure TForm1.CBAnordnungChange(Sender: TObject);
var i : Integer; begin LVAdressen.Clear; for i := 0 to High(Adressen) do AdressdarstellungEdit ( i, Adressen[i] ); end;
Delphi-Quellcode:
gruß
procedure TForm1.AdressdarstellungEdit ( index: integer; AAdresse: TAdresse );
var Item: TListItem; Column : TListColumn; begin Item := LVAdressen.Items[index]; Item.SubItems.Clear; <-- <-- <-- <-- <-- <-- <-- <-- <-- <-- <-- if CBAnordnung.ItemIndex = 0 [und so weiter] DutchmanTom PS: Da wo die ganze <-- sind, befindet sich die Zeile an der die Zugriffsverletzung eintritt |
Re: Optische Anordnung ListBox
wenn du es noch komplexer haben willst (aber natürlich mit viel mehr optionen und möglichkeiten) kannst du auch einen virtualstringtree nehmen ;)
|
Re: Optische Anordnung ListBox
Das Ganze lässt sich schon mit einer ListBox realisieren. Einen Beispielcode gibt's im SDC:
![]() |
Re: Optische Anordnung ListBox
Wenn Du die Items mit Clear aus der ListView löschst, kannst Du natürlich anschließend nicht mehr darauf zugreifen, sondern musst sie neu erzeugen.
Delphi-Quellcode:
[edit] Ich hab das Ganze jetzt mal unter Lazarus geschrieben. FAdressen ist ein array of record. Die folgende Routine wird aufgerufen, wenn das Array befüllt ist oder sich die ComboBoxReihenfolge ändert.
procedure TForm1.AdressdarstellungEdit ( index: integer; AAdresse: TAdresse );
var Item: TListItem; Column : TListColumn; begin Item := LVAdressen.Items.Add; //Item neu anlegen //Item.SubItems.Clear; //unnötig, da noch keine SubItems vorhanden if CBAnordnung.ItemIndex = 0 [und so weiter]
Delphi-Quellcode:
[/edit]
procedure TForm1.ListAdresses;
var i: integer; Item: TListItem; begin LVAdressen.Items.BeginUpdate; try LVAdressen.Items.Clear; case ComboBoxReihenfolge.ItemIndex of 0: begin LVAdressen.Columns[0].Caption := 'Name'; LVAdressen.Columns[1].Caption := 'Vorname'; end; 1: begin LVAdressen.Columns[1].Caption := 'Name'; LVAdressen.Columns[0].Caption := 'Vorname'; end; end; for i := Low(FAdressen) to High(FAdressen) do begin Item := LVAdressen.Items.Add; case ComboBoxReihenfolge.ItemIndex of 0: begin Item.Caption := FAdressen[i].Name; Item.SubItems.Add(FAdressen[i].Vorname); end; 1: begin Item.Caption := FAdressen[i].Vorname; Item.SubItems.Add(FAdressen[i].Name); end; end; end; finally LVAdressen.Items.EndUpdate; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 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-2025 by Thomas Breitkreuz