Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TListColumn.Caption zur Laufzeit ändern
bug0815 - Fr 17.07.09 14:05
Titel: TListColumn.Caption zur Laufzeit ändern
Hallo zusammen,
ich versuche verzweifelt zur Laufzeit an einem bestehenden ListView eine Spaltenbeschriftung zu ändern. Bis jetzt leider ohne Erfolg. Den verwendeten Code findet Ihr unten, die auskommentierten Zeilen habe ich in allen erdenklichen Kombinationen bereits probiert.
Wenn ich den Wert von
.Caption oder
.DisplayName im Debugger verfolge, wird der richtige Wert gesetzt und ist auch beim zweiten Durchlauf noch erhalten. Die Spalte zeigt aber beharrlich noch ihre alte Caption an.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| LV_Positionen.Columns[3].Caption := 'Beschreibung (gefiltert)'; LV_Positionen.Columns.Items[3].Caption := 'Beschreibung (gefiltert)'; |
Hat wer einen Ansatz für mich?
lg,
Andi
Renegade - Fr 17.07.09 14:10
Versuch mal folgendes:
Delphi-Quelltext
1: 2:
| Listview1.Column[0].Caption:='Test'; Listview1.Invalidate; |
bug0815 - Mo 20.07.09 09:08
.Invalidate war ein Sache die ich noch nicht probiert habe. Das ganze restliche Programm habe ich schon durch. (.Refresh, .Repaint, .Update)
Leider alles ohne Erfolg, ich stehe also immer noch auf dem Schlauch.
lg,
Andi
Lannes - Mo 20.07.09 09:32
Hallo,
das verändern der Caption wird eigentlich automatisch ausgeführt.
Benutz Du eventuell Items.BeginUpdate ohne EndUpdate, das hat auch Einfluss auf das aktualisieren der Caption.
Besteht das Problem bei allen Spalten der ListView?
Benutzt Du eine OnDraw...-Ereignis?
Hast Du das Problem auch bei einem reduzierten Projekt?
bug0815 - Mo 20.07.09 14:10
Zitat: |
Benutz Du eventuell Items.BeginUpdate ohne EndUpdate, das hat auch Einfluss auf das aktualisieren der Caption. |
Beim Laden der Items nutze ich
Items.BeginUpdate und
Items.EndUpdate. An dieser Stelle ist (oder sollte) allerdings die Umschaltung der Spaltenüberschrift schon lange passiert sein.
Zitat: |
Besteht das Problem bei allen Spalten der ListView? |
Ja, das Problem besteht bei allen Spalten.
Zitat: |
Benutzt Du eine OnDraw...-Ereignis? |
Nein, eines der
.OnDraw Ereignisse nutze ich in diesem Fall nicht.
Zitat: |
Hast Du das Problem auch bei einem reduzierten Projekt? |
Ja, das (Fehl)Verhalten lässt sich mit jedem ListView hinstellen.
-----
Ich habe das Problem jetzt über die StateImages gelöst, aber der andere Weg muss ja auch irgendwie funktionieren.
lg,
Andi
Lannes - Mo 20.07.09 14:13
Hallo,
was hat StateImages mit Column[x].Caption zu tun :gruebel:
bug0815 - Mo 20.07.09 14:54
Tja, wenn man es nicht schafft die Spaltenbeschriftung von "Beschreibung" auf "Beschreibung (gefiltert)" zu ändern, dann zeigt man halt ein entsprechendes StateImage (bzw. Spaltenimage) an. :wink:
Hat nichts mit der anderen Sache zu tun, ist nur ein anderer Lösungsansatz. Es würde mich allerdings doch interessieren wie man die Spaltenbeschriftungen zur Laufzeit ändern kann.
lg,
Andi
Lannes - Mo 20.07.09 16:14
Hallo,
bug0815 hat folgendes geschrieben : |
Es würde mich allerdings doch interessieren wie man die Spaltenbeschriftungen zur Laufzeit ändern kann. |
so wie Du es im Anfangspost beschrieben hast, interressant ist doch eher die Ursache des Fehlverhaltens.
bug0815 hat folgendes geschrieben : |
Ja, das (Fehl)Verhalten lässt sich mit jedem ListView hinstellen. |
mach doch mal eine Demo-Projekt mit dem Fehler und lade das -incl. exe und allen Projektdateien- hier hoch, dann kann man mal auf Fehlersuche gehen.
bug0815 - Di 21.07.09 09:43
Beim erstellen des Demo-Projektes hab ich mir meinen Code noch mal etwas genauer angeschaut und :autsch:.
In der Zeile 16 hat sich ein CopyAndPaste Fehler eingeschlichen, welcher meine Spalten durch ein fehlendes
LV_Positionen.Columns.EndUpdate blockiert hatte.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| LV_Positionen.Columns.BeginUpdate; myColumn := LV_Positionen.Columns.Add; myColumn.Caption := EmptyStr; myColumn.Width := 20; myColumn.MinWidth := 20; myColumn.MaxWidth := 20; myColumn := LV_Positionen.Columns.Add; myColumn.Caption := 'App'; myColumn.Width := 44; myColumn := LV_Positionen.Columns.Add; myColumn.Caption := 'Vepos'; myColumn.Width := 44; myColumn := LV_Positionen.Columns.Add; myColumn.Caption := 'Beschreibung'; myColumn.Width := 500; LV_PositionenAuswahl.Columns.EndUpdate;
LV_PositionenAuswahl.Columns.BeginUpdate; myColumn := LV_PositionenAuswahl.Columns.Add; myColumn.Caption := EmptyStr; myColumn.Width := 20; myColumn.MinWidth := 20; myColumn.MaxWidth := 20; myColumn := LV_PositionenAuswahl.Columns.Add; myColumn.Caption := 'App'; myColumn.Width := 44; myColumn := LV_PositionenAuswahl.Columns.Add; myColumn.Caption := 'Vepos'; myColumn.Width := 44; myColumn := LV_PositionenAuswahl.Columns.Add; myColumn.Caption := 'Beschreibung'; myColumn.Width := 470; myColumn := LV_PositionenAuswahl.Columns.Add; myColumn.Caption := 'Anzahl'; myColumn.Width := 62; myColumn := LV_PositionenAuswahl.Columns.Add; myColumn.Caption := 'IsKauf'; myColumn.Width := 0; myColumn := LV_PositionenAuswahl.Columns.Add; myColumn.Caption := 'IsDemo'; myColumn.Width := 0; myColumn := LV_PositionenAuswahl.Columns.Add; myColumn.Caption := 'Zusatztext'; myColumn.Width := 0; LV_PositionenAuswahl.Columns.EndUpdate; |
Danke Euch für die Tipps, das Problem sitzt mal wieder an der Tastatur. :wink:
lg,
Andi
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!