Autor Beitrag
bug0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62

Win2000, Xp, Vista
Delphi 2006, 2009
BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
//Erster Versuch
//LV_Positionen.Columns.BeginUpdate; 
LV_Positionen.Columns[3].Caption     := 'Beschreibung (gefiltert)';
//LV_Positionen.Columns[3].DisplayName := 'Beschreibung (gefiltert)';
//LV_Positionen.Columns.EndUpdate;
   
//Zweiter Versuch
//LV_Positionen.Columns.BeginUpdate;
LV_Positionen.Columns.Items[3].Caption     := 'Beschreibung (gefiltert)';
//LV_Positionen.Columns.Items[3].DisplayName := 'Beschreibung (gefiltert)';
//LV_Positionen.Columns.EndUpdate;


Hat wer einen Ansatz für mich?

lg,
Andi
Renegade
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: Fr 17.07.09 14:10 
Versuch mal folgendes:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62

Win2000, Xp, Vista
Delphi 2006, 2009
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62

Win2000, Xp, Vista
Delphi 2006, 2009
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 20.07.09 14:13 
Hallo,

was hat StateImages mit Column[x].Caption zu tun :gruebel:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
bug0815 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62

Win2000, Xp, Vista
Delphi 2006, 2009
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 20.07.09 16:14 
Hallo,

user profile iconbug0815 hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconbug0815 hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62

Win2000, Xp, Vista
Delphi 2006, 2009
BeitragVerfasst: 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.

ausblenden volle Höhe 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;

  //PositionenAuswahl
  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