AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ListView Columns aus- und einblenden (nicht width=0!)
Thema durchsuchen
Ansicht
Themen-Optionen

ListView Columns aus- und einblenden (nicht width=0!)

Ein Thema von neothemachine · begonnen am 1. Jun 2007 · letzter Beitrag vom 4. Jun 2007
Antwort Antwort
Seite 1 von 3  1 23      
neothemachine

Registriert seit: 23. Dez 2004
18 Beiträge
 
#1

ListView Columns aus- und einblenden (nicht width=0!)

  Alt 1. Jun 2007, 16:44
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..

Diese Seite sah ja schon ganz vielversprechend aus, aber wie man in den Comments unten lesen kann, ist es auch nicht das wahre. Ich hab das auch mal ein bisschen getestet und es werden tatsächlich die falschen Spalten mit Daten befüllt wenn man nach dem Entfernen einer Spalte noch neue Daten hinzufügt.

Allerdings hat dort in den Kommentaren ein "Scotty B" geschrieben:
Zitat:
As far as I know, this is a problem with the .NET ListView control. It seems there is no straight forward way to hide columns. This was possible in the Win32 Common Control that this wraps, but that functionality was not passed on in .NET.
Also muss es ja irgendeinen Weg für Delphi Win32 geben, vorallem da es ja auch bei vielen anderen Programmen geht...

Hat nun irgendjemand eine Idee, nen Tipp? Irgendwas?

Maik
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: ListView Columns aus- und einblenden (nicht width=0!)

  Alt 1. Jun 2007, 16:49
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.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
neothemachine

Registriert seit: 23. Dez 2004
18 Beiträge
 
#3

Re: ListView Columns aus- und einblenden (nicht width=0!)

  Alt 1. Jun 2007, 17:00
Ok.... das mit dem kompensieren is leichter gesagt als getan Noch jemand ne Idee?
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#4

Re: ListView Columns aus- und einblenden (nicht width=0!)

  Alt 1. Jun 2007, 18:35
Hi,

im Usenet ist diese Frage x-Fach diskutiert worden; ob es eine Lösung gibt, ohne ListColumn.Width zu bemühen, kann ich Dir nicht sagen. Aber vielleicht bist Du ja noch gar nicht auf die Idee gekommen, da zu suchen

Vielleicht wäre auch noch eine Möglichkeit, bei einer Spalte mit 0-Breite auf das OnResize-Event oder so zu reagieren.
  Mit Zitat antworten Zitat
neothemachine

Registriert seit: 23. Dez 2004
18 Beiträge
 
#5

Re: ListView Columns aus- und einblenden (nicht width=0!)

  Alt 1. Jun 2007, 18:39
Zitat von s-off:
im Usenet ist diese Frage x-Fach diskutiert worden; ob es eine Lösung gibt, ohne ListColumn.Width zu bemühen, kann ich Dir nicht sagen. Aber vielleicht bist Du ja noch gar nicht auf die Idee gekommen, da zu suchen
Hm, tatsache, da hab ich noch nich geguckt

Zitat von s-off:
Vielleicht wäre auch noch eine Möglichkeit, bei einer Spalte mit 0-Breite auf das OnResize-Event oder so zu reagieren.
Daran hatte ich auch mal kurz gedacht, aber das funktioniert vermutlich nicht so wirklich gut, weil man ja dann die Spalte daneben u.U. nicht resizen kann.
  Mit Zitat antworten Zitat
neothemachine

Registriert seit: 23. Dez 2004
18 Beiträge
 
#6

Re: ListView Columns aus- und einblenden (nicht width=0!)

  Alt 1. Jun 2007, 19:10
Ok.... 100 Newsgroup Threads später... das was wohl am interessantesten ist:

Zitat:
Hi,

There is no easy workaround to achieve this. If you set the column Width to 0,
users can still resize the column using Mouse at runtime.
May be you can use DataGrid control and hide the column there.

317951 HOW TO: Hide a Column in a Windows Form DataGrid
http://support.microsoft.com/?id=317951

Hope this helps!
Bharat Patel
Microsoft, Visual Basic .NET
Man beachte, von wem es kommt

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...

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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: ListView Columns aus- und einblenden (nicht width=0!)

  Alt 2. Jun 2007, 15:09
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
  Mit Zitat antworten Zitat
neothemachine

Registriert seit: 23. Dez 2004
18 Beiträge
 
#8

Re: ListView Columns aus- und einblenden (nicht width=0!)

  Alt 3. Jun 2007, 16:41
@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. 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:
constructor TCustomListView.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
{...}
  FListColumns := TListColumns.Create(Self);
{...}
end;
Das müsste ich ersetzen mit FListColumns := TListColumnsHide.Create(Self);

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?
  Mit Zitat antworten Zitat
Gremlin

Registriert seit: 18. Apr 2006
Ort: Im Süden
176 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: ListView Columns aus- und einblenden (nicht width=0!)

  Alt 3. Jun 2007, 17:03
Mach es wir @Marabu gemeint hat mit einer virtuellen Listview und erstelle dir für die Steuerung der Spalten eine vernünftige Verwaltungsstruktur.
Gruss Gremlin
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: ListView Columns aus- und einblenden (nicht width=0!)

  Alt 3. Jun 2007, 17:10
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 09:45 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