Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listview Columns einblenden, ausblenden? (https://www.delphipraxis.net/57144-listview-columns-einblenden-ausblenden.html)

lucius 16. Nov 2005 13:45


Listview Columns einblenden, ausblenden?
 
Hallo Leute,

Ich moechte den User die Gelegenheit geben die Spalten(Columns) einer Listview(vsReport) einblenden oder ausblenden zu lassen ueber Checkboxes.
Die Spalten(7 Stueck, 0 bis 6) existieren bereits mit der Caption aber die Breite steht auf 0;
Wenn ich jetzt eine Checkbox auf checked := true setze wird alles richtig angezeigt, sobald ich eine demarkiere werden die SubItems eine Spalte zu viel nach hinten geschoben.
Der code ist vielleicht nicht optimal aber bis jetzt klapt es.
Delphi-Quellcode:
listitem := listview1.Items.add;
listitem.Caption := IntToStr(Succ(i));

if Date.Checked = true then
begin
Listview1.Columns.Items[1].Caption := 'Date:';
Listview1.Column[1].Width := 70;
z.Values['Added'] := Parse(' ', z.Values['Added'], 1);
listitem.SubItems.add(z.Values['Added']);
end
else
Listview1.Column[1].Width := 0;

if Category.Checked = true then
begin
Listview1.Columns.Items[2].Caption := 'Category:';
Listview1.Column[2].Width := 100;
listitem.SubItems.add(z.Values['Category']);
end
else
Listview1.Column[2].Width := 0;

if Release.Checked = true then
begin
Listview1.Columns.Items[3].Caption := 'Release:';
Listview1.Column[3].Width := 300;
listitem.SubItems.add(SimpleRSS.Items.Items[i].Title);
end
else
Listview1.Column[3].Width := 0;
....
.....
Listview1.Invalidate;
Weiss einer vielleicht die Loesung?
Besten Dank im voraus.

Lucius..

St.Pauli 16. Nov 2005 13:50

Re: Listview Columns einblenden, ausblenden?
 
Mhh, ich hab gerade leider nicht Delphi laufen und kann damit nicht überprüfen, ob das richtig ist, aber probier doch mal

Delphi-Quellcode:
Column[x].Visible = False
Und das am besten beim OnKlick auf die jeweilige Checkbox - das könnte dann so aussehen

Delphi-Quellcode:
Column[x].Visible := CheckBoxX.Checked;

lucius 16. Nov 2005 13:59

Re: Listview Columns einblenden, ausblenden?
 
Hi St Pauli, die Listview Columns haben keine Visible properties sonst haette ich das schon hingekriegt.

St.Pauli 16. Nov 2005 14:26

Re: Listview Columns einblenden, ausblenden?
 
OK, sorry, dass war wohl ein Schuss in den Ofen... :oops:
Ich verstehe nicht ganz, wann du diesen geposteten Code verwendest...

OK, Visible geht nicht, warum machst du dann nicht beim OnKlick der CheckBox einfach

Delphi-Quellcode:
if Category.Checked then
Listview1.Column[2].Width := 100;
else
Listview1.Column[2].Width := 0;
und füllst die ListView einfach mit allen Werten der jeweiligen ListView.
Bei mir klappt es...

lucius 16. Nov 2005 14:33

Re: Listview Columns einblenden, ausblenden?
 
St.Pauli, die Columns ein- und ausblenden geht, es geht sich mehr um die Zeilen die gefuehlt werden bei der Spalte, da liegt der Haken.
Zb wenn die Listview Spalten so aufgebaut sind
Zitat:

NR, Date, Category, Release, Size, Status, Speed
und die Checkboxen Category, Release und Size sind markiert dan schiebt er die ListView. Subitems von Size in Release, von Release in Category.

St.Pauli 16. Nov 2005 14:58

Re: Listview Columns einblenden, ausblenden?
 
Ok, also ich habe jetzt eine ListView exakt so nachgebaut, 7 CheckBoxes, die jeh nach Status die jeweiligen Kategorieen ausblenden.
Ich blende immer mal irgend ein paar Spalten aus, fügen dann neue Testwerte hinzu und wenn ich dann alle Spalten wieder anzeige, steht in jeder Spalte der richtige Testwert, ohne irgendwelche Verschiebungen!!!

lucius 16. Nov 2005 16:13

Re: Listview Columns einblenden, ausblenden?
 
So habs hingekriegt, war etwas gefummel aber es laueft jetzt sowie es muss.
Dank fuer eure Antworten.

Gruss Lucius.

marabu 16. Nov 2005 18:44

Re: Listview Columns einblenden, ausblenden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Lucius,

auch wenn du es nicht brauchst - ich habe einen proof of concept angehängt.
  • listview ist virtuell
  • right click auf column header blendet column aus
  • right click auf caption header blendet alle columns ein
  • column width wird wieder hergestellt
  • zu kleine Spalten werden beim Einblenden auf eine Standardbreite gesetzt
  • Spalten werden beim Programmstart automatisch aus Label-Zeile erstellt
Viel Spaß beim Vergleichen

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 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