Autor Beitrag
LittleBen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 30.01.11 22:24 
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:
ausblenden 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:
ausblenden 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:
ausblenden Delphi-Quelltext
1:
2:
Stringgrid1.Objects[0,1].Free;
DeleteRow(Stringgrid1,1//Eine Procedure aus dem Internet;


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.
ausblenden Delphi-Quelltext
1:
showmessage(inttostr(Integer(Stringgrid1.Objects[01])));					

und
ausblenden Delphi-Quelltext
1:
showmessage(inttostr(Integer(Stringgrid1.Objects[01])));					

Kann mir jemand helfen?

Grüße,
Benny


Moderiert von user profile iconNarses: Topic aus Dateizugriff verschoben am So 30.01.2011 um 22:51
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: 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.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 31.01.11 15:22 
Vielen Danke!!!

Die DeleteRow-Methode hat das Objekt nicht gelöscht.

Gruß,
Benny