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 2 von 3     12 3      
neothemachine

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

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

  Alt 3. Jun 2007, 18:24
@Gremlin: Sagt mir, wenn ich mich irre, aber das dürfte auch nicht funktionieren. Das Problem ist ja, dass man (ob nun direkt einfügen, oder mit OnData) nach dem Löschen von Spalten nicht mehr auf die ID oder Index oder was auch immer der Spalte zugreifen kann, weil sie einfach nicht mehr der aktuellen Anordnung entspricht. Man kann sich das so vorstellen... Ich habe die Spalten "Name", "Nachname" und "Alter", füge mit Caption und SubItems die Daten "Max", "Muster" und "18" hinzu. Wenn ich dann mit .Free eine Spalte lösche und vielleicht noch die Spaltenanordnung, dann mache ich eine neue Zeile Caption="Max2", dann ändere ich die Spaltenanordnung, mache wieder eine neue Zeile Caption="Max3". Allerdings stehen nun Max2 und Max3 nicht in der selben Spalte, was sie aber tun, wenn man keine Spalten gelöscht hat. Ich behaupte jetzt einfach mal, dass es keinen anderen Weg gibt, als die ListView neu mit Daten (Spalten und Items) zu befüllen, damit alles stimmt.

Zitat von Luckie:
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.
Genau das will ich machen. Die Daten sind sind schon in einer eigenen Datenstruktur. Ich weiß wie ichs machen müsste, aber ich will es direkt in die TListView kapseln als Komponente eben, die auch andere leicht verwenden können.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

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

  Alt 3. Jun 2007, 18:33
Zitat von neothemachine:
Genau das will ich machen. Die Daten sind sind schon in einer eigenen Datenstruktur. Ich weiß wie ichs machen müsste, aber ich will es direkt in die TListView kapseln als Komponente eben, die auch andere leicht verwenden können.
Und genau das würde ich nicht machen. Was wenn jemand eine andere Komponente benutzt? Dann kann er mit deiner Komponente auch nichts anfangen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
neothemachine

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

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

  Alt 3. Jun 2007, 18:38
Zitat von Luckie:
Und genau das würde ich nicht machen. Was wenn jemand eine andere Komponente benutzt? Dann kann er mit deiner Komponente auch nichts anfangen.
...Ist das nicht immer so? Es gibt einige ListView-Komponenten im Netz, wieso sollte ich da nicht auch eine machen? Ich mein, sind Komponenten nicht dazu da? Ich kann auch meinen Quellcode dann als Tutorial verbreiten, aber so wäre es doch für den Enduser viel leichter oder?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#14

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

  Alt 3. Jun 2007, 19:01
Hallo neothemachine,

mal davon abgesehen, dass ich es auch für sinnvoll halte die Daten und das Anzeigen zu trennen.

Hier mal ein Vorschlag der in deine Richtung geht...

Delphi-Quellcode:
type
  TMyListColumns = class(TListColumns)
  end;

  TMyListView = class(TListView)
  private
    FMyListColumns:TMyListColumns;
  public
    constructor create(Aowner:TComponent); reintroduce;
    destructor destroy; override;
  end;


{ TMyListView }

constructor TMyListView.create(Aowner: TComponent);
begin
  inherited create(Aowner);
  Self.Columns.free;
  FMyListColumns:=TMyListColumns.Create(Self);
  Self.Columns:=FMyListColumns;
end;

destructor TMyListView.destroy;
begin
  inherited;
end;
Gruss
Thorsten
  Mit Zitat antworten Zitat
neothemachine

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

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

  Alt 3. Jun 2007, 19:11
Thorsten, viiiielen Dank, das sieht mal nach einer guten Idee aus, hätte ich auch drauf kommen können...mal sehen obs geht

Und glaub mir, ich bin auch für das Daten&Layout-Trennen Prinzip, aber ich bin noch kein Delphi-Profi, klappt also nicht immer so wies im Idealfall sein soll, aber ich arbeite dran. So nun geh ich mal an die Arbeit...
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#16

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

  Alt 3. Jun 2007, 19:59
Hallo neothemachine,

ich habe mir das jetzt nochmal angesehen. Leider musste ich feststellen das das doch nicht so geht. Bei meinem ersten Test ging es wohl nur scheinbar.

Sorry,
Thorsten
  Mit Zitat antworten Zitat
neothemachine

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

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

  Alt 3. Jun 2007, 20:05
Ja..ich komm auch nicht weiter, kommen immer Access Violations, wenn er Self.Columns:= FListColumnsHide; machen will. Man kann wohl Columns nicht einfach so ersetzen, schade eigentlich..
  Mit Zitat antworten Zitat
marabu

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

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

  Alt 3. Jun 2007, 23:16
Hallo,

ich bin nicht sicher, ob mein Beitrag #7 richtig verstanden wurde, deshalb habe ich hier eine kleine Demo angehängt. Sie soll nur den Lösungsansatz zeigen und verwendet eine CheckListBox um die Sichtbarkeit der Spalten zu steuern, deshalb: Bitte keine DoubleClicks auf die CheckListBox.

Gute Nacht
Angehängte Dateien
Dateityp: zip lv-colhide_206.zip (2,2 KB, 26x aufgerufen)
  Mit Zitat antworten Zitat
neothemachine

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

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

  Alt 4. Jun 2007, 00:04
Hm, interessant, ich versteh zwar noch nich den kompletten Code, aber das liegt an der Uhrzeit

Wenn ich bei der Demo beim ListView FullDrag=true mache, scheints nicht mehr richtig zu gehen, sobald man Spalten verschiebt. Woran könnte das liegen?

Danke für die Mühe! Super Arbeit!!
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#20

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

  Alt 4. Jun 2007, 01:42
Mein Senf dazu:

Genau das gleiche Problem hatte ich auch mal. Und nach stundenlangem Ausprobieren bin ich dann zu dem ergebnis gekommen, dass die einzigste Lösung ist, jedesmal die ganze listview neu mit daten zu füllen. Da ich aber teilweise bis zu 1.000.000 Datensätze hatte, und das ganze sowieso etwas langsam war hab ich mich für DBGrid entschieden, was in meinem Fall wahrscheinlich auch die beste Entscheidung war. (Auch wenn ich bei DBGrid wieder einen Bug entdecken musste...)
Da das DBGrid bei dir so wies aussieht nicht in Frage kommt, wünsch ich dir noch viel Glück beim Umgehen des Problems...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 02:27 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