Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Stringgrid - Objekt aufrücken
LittleBen - So 30.01.11 22:24
Titel: Stringgrid - Objekt aufrücken
Hallo,
ich versteh es einfach nicht!
Mein Problem:
Der 1 Zelle der 1 Zeile meines Stringgrids weise ich ein Objekt als Integer zu und fülle diese Zelle dann:
Delphi-Quelltext
1: 2:
| Stringgrid1.Objects[0,1]:= Pointer(4); Stringgrid1.Cells[0,1]:= 'Test'; |
Das Gleiche mach ich dann mit der 1 Zelle der 2 Zeile:
Delphi-Quelltext
1: 2:
| Stringgrid1.Objects[0,2]:= Pointer(8); Stringgrid1.Cells[0,2]:= 'Test2'; |
Funktioniert wunderbar!
Aber wenn ich nun die 1 Zeile löschen, dem Objekt der 1 Zelle dann den Wert nil zuweise, dann rückt der Inhalt aus der 2 Zeile zwar auf, aber das Objekt deren nicht. Warum?
Also löschen tu ich so:
Delphi-Quelltext
1: 2:
| Stringgrid1.Objects[0,1].Free; DeleteRow(Stringgrid1,1) |
Wenn ich nun das Objekt der 1 Zelle der 1 Zeile abfrage bekomme ich den Wert 0 Zurück?! (Also wirklich "0")
Wenn ich das bei der 1 Zelle der 2 Zeile mache bekomme ich immer noch den Wert 8 zurück.
Delphi-Quelltext
1:
| showmessage(inttostr(Integer(Stringgrid1.Objects[0, 1]))); |
und
Delphi-Quelltext
1:
| showmessage(inttostr(Integer(Stringgrid1.Objects[0, 1]))); |
Kann mir jemand helfen?
Grüße,
Benny
Moderiert von
Narses: Topic aus Dateizugriff verschoben am So 30.01.2011 um 22:51
Bergmann89 - So 30.01.11 23:21
Hey,
guck dir ma die DeleteRow-Methode an, da wird sicherlich nur der Inhalt aller nachfolgenden Reihen nach oben kopiert und dann die letzte Reihe gelöscht. So musst du das auch mit deinen Objekten machen. Ein Free gibt lediglich die Instanz frei (wenn du eine hast) aber da du ja in dem Object nur Integer-Werte speicherst ist es sowieso falsch da Free zu benutzen, da das Programm dann versucht den Wert in Objects als TObject zu interpretieren und dann dessen Speicher freigeben will.
MfG Bergmann.
jaenicke - Mo 31.01.11 06:17
Für diesen Zweck ist eine TListView oder noch besser eine TVirtualStringTree viel besser geeignet.
Diese Komponenten bieten direkt die Möglichkeit einzelne Zeilen zu löschen. Und da sind die einzelnen Zeilen direkt gekapselt inkl. der dazu gehörenden Daten, so dass man sich da gar nicht erst etwas eigenes zum Löschen einer Zeile basteln muss.
Und eine TVirtualStringTree hilft dazu noch bei einer richtigen Trennung zwischen Daten und Oberfläche und ist extrem schnell.
LittleBen - Mo 31.01.11 15:22
Vielen Danke!!!
Die DeleteRow-Methode hat das Objekt nicht gelöscht.
Gruß,
Benny
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!