AGB  ·  Datenschutz  ·  Impressum  







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

ListView - AutoSize der Spalten

Ein Thema von Sir Rufo · begonnen am 5. Jan 2006 · letzter Beitrag vom 9. Mai 2014
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

ListView - AutoSize der Spalten

  Alt 5. Jan 2006, 14:06
Hi Forum,

in einem ListView habe ich mehrere Spalten, die jeweils auf AutoSize gestellt sind.
ListView.Align := alClient; (is irgendwie aber auch egal )

Wenn die Liste nun zur Laufzeit gefüllt wird, dann können irgendwann nach x-Zeilen, diese nicht mehr alle dargestellt werden, also wird ein Vert.Scrollbar angezeigt - das ist schön.

Unschön ist aber, dass nun die letzte Spalte nicht mehr ganz angezeigt wird, da ist ja jetzt die Vert.Scrollbar, also kommt auch noch die Horz.Scrollbar hinzu.

Wird jetzt das Fenster in der Größe geändert (z.B. Vollbild, oder Resize), dann wird sofort die Liste angepasst und alles passt wieder schon in die Liste (ohne Horz.Scrollbar, Vert.Scrollbar bleibt natürlich)

Wie bewege ich das DingsBumsView dazu, dieses doch von selbst (oder mit Anschubsen) zu machen ohne Resize.

Refresh, Realign, Repaint, Invalidate ... hilft nix

wat nu ...
  Mit Zitat antworten Zitat
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#2

Re: ListView - AutoSize der Spalten

  Alt 5. Jan 2006, 14:13
Das hatte ich auch mal.
Ich glaube habe mir damals, ziemlich primitiv, so geholfen:

Delphi-Quellcode:
lv.Width := lv.Width - 1;
lv.Width := lv.Width + 1;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

Re: ListView - AutoSize der Spalten

  Alt 5. Jan 2006, 14:21
Nicht zu fassen ...

es funktioniert ... aber die Spalten im ListView zappeln lustig durch die Gegend, ist ja nicht gerade schön ... (nicht falsch verstehen, Funktion is hier erst mal wichtiger als Ästhetik)

Aber bin weiterhin offen für eine richtige Lösung (wie sag ichs dem ListView, was das Form.Resize sagt), der Workaround ist schon mal gut.

cu
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: ListView - AutoSize der Spalten

  Alt 6. Jan 2006, 15:29
Delphi-Quellcode:
procedure TControl.SetWidth(Value: Integer);
begin
  SetBounds(FLeft, FTop, Value, FHeight);
  Include(FScalingFlags, sfWidth); // <- Der Befehl macht es schön ;-)
end;
Jo, da sitzt das Geheimnis.

Abba dat kann man nicht so einfach aufrufen, oder bin ich da auf dem Schlauch (heavy on woodway)
Wer weiss wie man Delphi dazu überredet, diesen Befehl auszuführen (mache ich ja gerne auch selber).
So müsste ich die Eigenschaft von TControl abändern (das ist doof)
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#5

AW: ListView - AutoSize der Spalten

  Alt 9. Mai 2014, 14:22
Hi,

ist zwar alt, aber ich grab's noch mal aus. Hab nämlich grad das gleiche Problem (warum ist mir das vorher nie aufgefallen).
Zwar funktioniert deine Lösung (witdh-1; +1) mit dem gewünschten Ergebnis, aber leider auch mit einem unschönen Zittern des ListView.
Bist du noch irgendwann auf eine brauchbarere Lösung gekommen bzw. hast deinen erwähnten Lösungsansatz vollenden können?

Gruß
Dieter
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: ListView - AutoSize der Spalten

  Alt 9. Mai 2014, 14:53
Ich hab's so gelöst - aber nur für die Überschrift!
Delphi-Quellcode:
  lv.Columns.Add;
  lv.Columns[i].Caption:=MyText;
  lv.Columns[i].Width:=lv.Canvas.TextWidth(MyText)+10;
In den +10 stecken die verschiedenen Ränder und Rahmen und.. drin.
(ich war die Frickelei satt)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#7

AW: ListView - AutoSize der Spalten

  Alt 9. Mai 2014, 15:04
Ja, aber ich will ja nicht jedes mal alle Columns löschen und wieder einreichten.
In meinem Fall habe ich (nur) 4 Columns, die zur Designtime feststehen und bei Bedarf mit unterschiedlichen Informationen gefüllt werden. Die 2. Spalte ist auf autosize, und soll sich mit der Form anpassen. Ist ja auch kein Problem, die wird ja auch größer.

mit lv1.Column[3].Width:=ColumnHeaderWidth; setze ich dann nach dem Füllen alle anderen auf die max. Breite, so dass es eigentlich passen sollte. Leider tut es das ja bekanntermaßen nicht, und die letzte Spalte verschwindet hinter dem Scrollbar, bis ich dann ein manuelles Resize der Form durchführe. Ein Resize innerhalb der Procedure bringt nix.

Hier mal ein Beispiel:

Delphi-Quellcode:
procedure TForm1.Datenladen;
var
  li: TListItem;
  i: integer;
begin
  lv1.Items.BeginUpdate;
  lv1.items.clear;
  for i:=0 to Data.Count-1 do
  begin
    li:=lv1.items.add;
    li.caption:=Data[i].Name;
    li.subitems.add(Data[i].Vorname);
    li.subitems.add(Data[i].Login);
    if chk1.checked then
      li.subitems.add(Data[i].Password) else
      li.subitems.add('***');
  end;
  lv1.Items.EndUpdate;
  lv1.columns[1].Autosize:=True;
  lv1.Column[3].Width:=ColumnHeaderWidth;
  lv1.Column[2].Width:=ColumnHeaderWidth;
  lv1.Column[0].Width:=ColumnHeaderWidth;
end;

procedure TForm1.chk1Click(Sender: TObject);
begin
  Datenladen;
end;
So in etwa. Müßte eigentlich auch so Funktionieren, aber geht tatsächlich nur wenn ich zur Laufzeit mit der Maus die Form resize.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo

Geändert von Captnemo ( 9. Mai 2014 um 15:19 Uhr)
  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 15:12 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