AGB  ·  Datenschutz  ·  Impressum  







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

Widerwillige Spalte in einer ListView Kompo

Ein Thema von phlux · begonnen am 16. Nov 2002 · letzter Beitrag vom 3. Dez 2002
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#1

Widerwillige Spalte in einer ListView Kompo

  Alt 16. Nov 2002, 10:53
Hallo!
Ich habe folgendes Problem, in einem meiner Programme hab ich eine TListView Kompo, diese ist hat den Style vsReport und nur eine Spalte, dem entsprechend sollte die Spalte so breit wie die TListView sein. Mit dem Objektinspektor lässt sich das wie folgt realisieren:
1. ViewStyle auf vsReport setzten
2. Unter Columns eine neue Spalte hinzufügen
3. Dieser Spalte eine Caption geben
4. AutoSize dieser Spalte auf True setzen

So, wenn ich das ganze jetzt jedoch durch Quellcode verwirklichen will sieht das wie folgt bei mir aus:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Col: TListColumn;

begin
  With ListView1 do
  begin
    ViewStyle := vsReport;
// ColumnClick := False;
// RowSelect := True;
    Col := Columns.Add;
    Col.MaxWidth := 0;
    Col.MinWidth := 0;
    Col.Width := 50;
    Col.Caption := 'C:\';
    Col.AutoSize := True;
  end;
end;
Hat jedoch als Ergebniss nicht den gewünschten Effekt, die somit erzeugte Spalte ist viel kleiner als erwünscht, hab ich da irgendetwas übersehn, oder wo liegt mein Fehler??? Hoffe ihr könnt mir helfen.

[edit=Admin]Neue Delphicode-Tags eingefügt. Mfg. Daniel[/edit]
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 16. Nov 2002, 12:05
Moin Phlux,

also ich behelfe mir da immer so (Beispiel);

aiColWidth[0] := Max(aiColWidth[0],Canvas.TextWidth(ListView1.Items[ListView1.Items.Count-1].Caption)+16); Wobei aiColWidth eine Tabelle ist (aiColWidth = a Array / i integer), die die Spaltenbreiten aller Spalten enthält. Initialisiert wird diese mit den Breiten der Überschriften, so das diese immer lesbar sind.
Sobald alle neu hinzuzufügenden Zeilen eingetragen wurden, werden dann die Werte aus der Tabelle den Spaltenbreiten zugeordnet.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#3
  Alt 16. Nov 2002, 12:19
Hallo phlux,

ich glaub, da muss man erst einen entsprechend langen String einfügen, damit das AutoSize wirkung zeigt. //Könnte aber auch ein Schmarrn sein, hatte selbst mal vor nem Jahr so ein Problem

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#4
  Alt 17. Nov 2002, 13:57
Zitat von Christian Seehase:
Wobei aiColWidth eine Tabelle ist (aiColWidth = a Array / i integer), die die Spaltenbreiten aller Spalten enthält. Initialisiert wird diese mit den Breiten der Überschriften, so das diese immer lesbar sind.
Sobald alle neu hinzuzufügenden Zeilen eingetragen wurden, werden dann die Werte aus der Tabelle den Spaltenbreiten zugeordnet.
Also diese aiColWidth, ist einfach nur ein (unbestimmter) Array vom Typ Integer? Ich denke mal für nur eine Spalte kann ich das auch noch mit ner einfachen Integer-Variable machen. Danke!

Zitat von Daniel B:
ich glaub, da muss man erst einen entsprechend langen String einfügen, damit das AutoSize wirkung zeigt. //Könnte aber auch ein Schmarrn sein, hatte selbst mal vor nem Jahr so ein Problem
Anscheinend nicht, das ist ja mein Problem, wenn ich im ObjektInspektor für die Column nur 'C:\' eingebe hat sie die komplette breite der ListView, wenn ich das versuche durch code hinzukriegen hauts net hin
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#5
  Alt 17. Nov 2002, 14:07
Moin Phlux,

logisch, bei einer Spalte genügt natürlich auch ein Wert.
Je nachdem, wieviele Zeilen der Listview bekommen soll, wäre es ganz sinnvoll vor dem Füllen Listview.Items.BeginUpdate, und wenn alles eingetragen, und die Spaltenbreite angepasst ist ListView.Items.EndUpdate aufzurufen.
Das bringt, gerade bei vielen Einträgen, einen ziemlichen Geschwindigkeitsvorteil.

Ach ja. Die maximale Breite (in Zeichen gerechnet) sollte 259 nicht übersteigen. Die Spalte wird dann zwar breiter, aber es wird trotzdem nicht alles angezeigt.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#6
  Alt 17. Nov 2002, 14:22
Zitat von Christian Seehase:
Je nachdem, wieviele Zeilen der Listview bekommen soll, wäre es ganz sinnvoll vor dem Füllen Listview.Items.BeginUpdate, und wenn alles eingetragen, und die Spaltenbreite angepasst ist ListView.Items.EndUpdate aufzurufen.
Das bringt, gerade bei vielen Einträgen, einen ziemlichen Geschwindigkeitsvorteil.
Echt? Cool, das wusste ich nicht, hab mich immer schon gewundert, wozu man das braucht, hab es in den meisten fällen auch weggelassen, da es auch ohne lief

Zitat:
Ach ja. Die maximale Breite (in Zeichen gerechnet) sollte 259 nicht übersteigen. Die Spalte wird dann zwar breiter, aber es wird trotzdem nicht alles angezeigt.
Hmm, ich brauch das ja für meine Kompo mit der ich den Verzeichnisinhalt auslesen kann, da theo. die länge eines verzeichnisses eh nicht 255 zeichen überschreiten darf dürfte es kein problem geben mit der Begrenzung.
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
iaby

Registriert seit: 30. Nov 2002
Ort: BW
258 Beiträge
 
#7
  Alt 2. Dez 2002, 16:41
wie kann ich denn in die verschiedenen columns von der listview schreiben?
ich will dort einfach nur einen text, bsp: "hallo" in der zweiten spalte, einfügen!

gruß,
iaby
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 2. Dez 2002, 17:00
Moin iaby,

als erstes wirst Du mal auf die Eigenschaft ViewStyle auf vsReport umstellen müssen, um überhaupt die Spaltenansicht zu erhalten.

Mit

ListView1.Items.Add; wird dann eine neue Zeile hinzugefügt, und mit

ListView1.Items[ListView1.Items.Count-1].Caption := '.....'; wird dann der Text der 1. Spalte eingetragen (oder auch '' wenn dort nichts stehen soll).

Die weiteren Spalten sind dann die Subitems, die Du mit

ListView1.Items[ListView1.Items.Count-1].SubItems.Add('und hier der Text'); hinzufügen kannst. Das erste SubItem hat dann den Index 0. Ein erneutes Hinzufügen eines SubItems zu einem speziellen Item fügt dann wieder einen Eintrag eine Spalte weiter ein.
Nicht zu vergessen vorher die Columns zu erzeugen, sonst wirst Du nicht viel von den SubItems sehen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#9
  Alt 2. Dez 2002, 17:49
Also ich würde zuerst ein TListItem deklarieren und es dann mit

Delphi-Quellcode:
Var Item: TListItem;

begin
  //...
  Item := TListView.Items.Add;
end;
hinzufügen, das erleichtert einem den Zugriff auf das Item extrem wenn man nacher noch die Eigenschaften (Caption zum Bleistift) umändern will

(ich wäre dafür man splittet das thema auf )
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
iaby

Registriert seit: 30. Nov 2002
Ort: BW
258 Beiträge
 
#10
  Alt 2. Dez 2002, 18:16
ich will eine playliste erstellen(wie es sie auch im winamp oder sonst wo gibt).
dazu brauche ich:
-3spalten: Nummer/Filename/Länge
-später will ich die caption der verschiedenen spalten wieder auslesen(eigentlich nur der Nummer, damit ich auf einen array mit den filenamen zugreifen kann, um das lied abzuspielen)
ich denke mal, das müsste mit der TListView zu machen sein!

eine frage noch zu eurer erklärung: wo steht nun der index der spalte(0,1,2)?
konnte ich leider nicht dem post entnehmen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:41 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