![]() |
ListView Columns aus- und einblenden (nicht width=0!)
Hallo liebe Delphianer....
mein Ziel ist es ListViews zu haben, bei denen Spalten ein- und ausgeblendet werden können per Rechtsklick auf die Spalten mit einem Kontextmenü, so wie auch beim Windows Explorer oder wo auch immer. Im Forum gibts schon einen Thread dazu, der aber den Weg mit Column width=0 geht, was ich aber ziemlich blöd finde, da man dann die Spalten nicht mehr in der Breite anpassen kann, da man dann die "versteckte" Spalte wieder auseinanderzieht.. ![]() Allerdings hat dort in den Kommentaren ein "Scotty B" geschrieben: Zitat:
Hat nun irgendjemand eine Idee, nen Tipp? Irgendwas? Maik |
Re: ListView Columns aus- und einblenden (nicht width=0!)
Naja, die Winforms Controls sind letztendlich ein Wrapper um die Win32-Fensterklassen/Controls.
Du könntest rein theoretisch darauf zugreifen. Dazu brauchst du dann aber Invoking, Marshaling und lauter so Zeug, wo jeder .Net-Entwickler Angst hat davor. Ich würde eher versuchen, das Fehlverhalten der Listview zu kompensieren. |
Re: ListView Columns aus- und einblenden (nicht width=0!)
Ok.... das mit dem kompensieren is leichter gesagt als getan ;) Noch jemand ne Idee?
|
Re: ListView Columns aus- und einblenden (nicht width=0!)
Hi,
im ![]() Vielleicht wäre auch noch eine Möglichkeit, bei einer Spalte mit 0-Breite auf das OnResize-Event oder so zu reagieren. |
Re: ListView Columns aus- und einblenden (nicht width=0!)
Zitat:
Zitat:
|
Re: ListView Columns aus- und einblenden (nicht width=0!)
Ok.... 100 Newsgroup Threads später... das was wohl am interessantesten ist:
Zitat:
90% haben das mit Width=0 geschrieben, die restlichen sagen man muss die ListView neu erstellen, was ich dann wohl machen werde.. Ich glaube mich dran zu erinnern, dass man irgendwie das Zeichnen eines Controls deaktivieren und wieder aktivieren kann, das geht vielleicht, um das Flackern zu verhindern, was beim neuerstellen der Liste kommen wird. Hm, hab ich nicht noch den Quellcode vom Taskmanager von Windows? Mal gucken wie MS das macht...:P Falls jemanden noch was einfällt, solls ers sagen, ansonsten Danke fürs nachdenken ;) Vielleicht mach ich dann ne ListView Komponente draus..mal gucken Maik |
Re: ListView Columns aus- und einblenden (nicht width=0!)
Hallo Maik,
ich würde - vorzugsweise bei einer virtuellen ListView - einfach die Spalten entfernen und einfügen um deren Sichtbarkeit zu steuern. Grüße vom marabu |
Re: ListView Columns aus- und einblenden (nicht width=0!)
@marabu: ja das ist ja das Problem. Wenn man das macht, treten merkwürdige Effekte auf. Neue Daten werden dann in die falschen Spalten eingetragen.
Die einzige Möglichkeit das "sauber" zu machen, ist die Items zu clearen, die Spalten zu löschen und dann alles neu einzutragen. So machts auch MS, wie ich rausgefunden hab (Taskmanager). Ist auch nicht weiter schwer, allerdings wollte ich daraus eine neue ListView-Komponente machen, damit man nicht bei jeder ListView den Zusatz-Code (und das ist schon ne Menge) hinzufügen muss. Neue Komponente TListViewHide....von TListView abgeleitet....noch nie gemacht, hab auch keine Ahnung wie. :-D Deswegen waren meine Versuche in den letzten Stunden auch etwas vergeblich. Ich will dem TListColumn (meine Ableitung: "TListColumnHide") eine neue Property namens "Visible" geben. Dazu muss ja aber mein TListViewHide auch die abgeleiteten Columns benutzen (auch abgeleitet zu: "TListColumnsHide", welche dann die TListColumnHide's benutzen soll), aber ich scheitere immer an den Zugriffsbeschränkungen, z.B.: In ComCtrls steht ja:
Delphi-Quellcode:
Das müsste ich ersetzen mit FListColumns := TListColumnsHide.Create(Self);
constructor TCustomListView.Create(AOwner: TComponent);
begin inherited Create(AOwner); {...} FListColumns := TListColumns.Create(Self); {...} end; Was natürlich in der TListViewHide.Create nicht funktioniert, da FListColumns ja private ist. Ich weiß wirklich nicht, wie ich da rangehen soll.. :| Kann mich jemand in die richtige Richtung schieben? Oder treten? :P |
Re: ListView Columns aus- und einblenden (nicht width=0!)
Mach es wir @Marabu gemeint hat mit einer virtuellen Listview und erstelle dir für die Steuerung der Spalten eine vernünftige Verwaltungsstruktur.
|
Re: ListView Columns aus- und einblenden (nicht width=0!)
Grundidee: Trenne die Daten von der Darstellung. Halte die Daten in einer entsprechenden Datenstruktur vor. Wird eine Spalte ausgeblendet, fülle den Listview neu aus der Datenstruktur, ebendso, wenn die Spalte wieder eingeblendet wird.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 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