AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Optische Anordnung ListBox

Ein Thema von DutchmanTom · begonnen am 14. Okt 2009 · letzter Beitrag vom 14. Okt 2009
Antwort Antwort
DutchmanTom

Registriert seit: 12. Okt 2009
11 Beiträge
 
#1

Optische Anordnung ListBox

  Alt 14. Okt 2009, 10:35
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Optische Anordnung ListBox

  Alt 14. Okt 2009, 10:36
Nimm statt einer ListBox eine ListView mit ViewStyle vsReport.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
DutchmanTom

Registriert seit: 12. Okt 2009
11 Beiträge
 
#3

Re: Optische Anordnung ListBox

  Alt 14. Okt 2009, 10:48
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Optische Anordnung ListBox

  Alt 14. Okt 2009, 10:52
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:
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;
Das sieht dann so aus wie im Anhang.
Miniaturansicht angehängter Grafiken
listview_321.png  
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von iKilledKenny
iKilledKenny

Registriert seit: 25. Apr 2007
Ort: Bergstrasse
49 Beiträge
 
Delphi 5 Professional
 
#5

Re: Optische Anordnung ListBox

  Alt 14. Okt 2009, 11:13
Eine andere Möglichkeit wäre das selber zu zeichnen -> OwnerDraw
Alexander Stork
  Mit Zitat antworten Zitat
DutchmanTom

Registriert seit: 12. Okt 2009
11 Beiträge
 
#6

Re: Optische Anordnung ListBox

  Alt 14. Okt 2009, 14:06
Zitat von DeddyH:
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:
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;
Das sieht dann so aus wie im Anhang.
Das könnte funktionieren.
Nur iwie schaff ichs nit den code so an zu passen, dass der mein offenes Array akzeptiert
  Mit Zitat antworten Zitat
DutchmanTom

Registriert seit: 12. Okt 2009
11 Beiträge
 
#7

Re: Optische Anordnung ListBox

  Alt 14. Okt 2009, 15:49
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:
procedure TForm1.CBAnordnungChange(Sender: TObject);
var i : Integer;
begin
  LVAdressen.Clear;
  for i := 0 to High(Adressen) do
   AdressdarstellungEdit ( i, Adressen[i] );
end;
Das im Code genannte AdressDarstellungEdit sieht volgendermaßen aus:
Delphi-Quellcode:
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]
gruß
DutchmanTom

PS: Da wo die ganze <-- sind, befindet sich die Zeile an der die Zugriffsverletzung eintritt
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#8

Re: Optische Anordnung ListBox

  Alt 14. Okt 2009, 15:55
wenn du es noch komplexer haben willst (aber natürlich mit viel mehr optionen und möglichkeiten) kannst du auch einen virtualstringtree nehmen
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Optische Anordnung ListBox

  Alt 14. Okt 2009, 16:58
Das Ganze lässt sich schon mit einer ListBox realisieren. Einen Beispielcode gibt's im SDC: ...in einer Listbox Spalten mit unterschiedlich weiten Tabulatoren anzeigen?.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Optische Anordnung ListBox

  Alt 14. Okt 2009, 18:01
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:
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]
[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.
Delphi-Quellcode:
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;
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:32 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