Autor |
Beitrag |
bug0815
      
Beiträge: 62
Win2000, Xp, Vista
Delphi 2006, 2009
|
Verfasst: Fr 17.07.09 14:05
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
      
Beiträge: 358
Win XP Pro, Win 7 Beta
BDS 2006
|
Verfasst: Fr 17.07.09 14:10
Versuch mal folgendes:
Delphi-Quelltext 1: 2:
| Listview1.Column[0].Caption:='Test'; Listview1.Invalidate; |
_________________ Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
|
|
bug0815 
      
Beiträge: 62
Win2000, Xp, Vista
Delphi 2006, 2009
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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?
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
bug0815 
      
Beiträge: 62
Win2000, Xp, Vista
Delphi 2006, 2009
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Mo 20.07.09 14:13
Hallo,
was hat StateImages mit Column[x].Caption zu tun 
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
bug0815 
      
Beiträge: 62
Win2000, Xp, Vista
Delphi 2006, 2009
|
Verfasst: 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.
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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
bug0815 
      
Beiträge: 62
Win2000, Xp, Vista
Delphi 2006, 2009
|
Verfasst: Di 21.07.09 09:43
Beim erstellen des Demo-Projektes hab ich mir meinen Code noch mal etwas genauer angeschaut und  .
In der Zeile 16 hat sich ein CopyAndPaste Fehler eingeschlichen, welcher meine Spalten durch ein fehlendes LV_Positionen.Columns.EndUpdate blockiert hatte.
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.
lg,
Andi
|
|
|