Zitat von
blablab:
Das ganze Stringgris basiert ja auf den StrinLists. Und da wäre es net schlecht, wenn man da einfach zb. mit delete eine Zeile rauslöschen könnte. (Was ja bei Stringlists möglich ist.)
Auch das
delete von StringLists oder Lists verschiebt alle unten stehenden Daten eine Zeile nach oben, wenn Du Dir mal die Klassen anguckst:
Delphi-Quellcode:
// TStringList
if Index < FCount then
System.Move(FList^[Index + 1], FList^[Index],
(FCount - Index) * SizeOf(TStringItem))
// TList
if Index < FCount then
System.Move(FList^[Index + 1], FList^[Index],
(FCount - Index) * SizeOf(Pointer));
Das einzige, was Du ändern könntest, ist der Name und der Zugriff auf die Prozedur. Erstell Dir doch 'ne eigene Klasse, in der Du anstelle der globalen Prozedur (s.o.) eine Klassenprozedur deklarierst:
Delphi-Quellcode:
type
TMyStringGrid = class(TStringGrid)
public
procedure Delete(Index: Integer);
end;
[...]
procedure TMyStringGrid.Delete(Index: Integer);
var
FixedRows, i: integer;
begin
if (Index < self.RowCount) then
begin
FixedRows := self.FixedRows;
if (self.RowCount = FixedRows+1) then
self.Rows[FixedRows].Clear
else
begin
if (self.RowCount > FixedRows+1) then
begin
for i := Index to self.RowCount-2 do
self.Rows[i] := self.Rows[i+1];
self.Rows[self.RowCount-1].Clear;
self.RowCount := self.RowCount-1;
end;
end;
end;
end;
So kannst Du dann natürlich nicht mehr das
VCL-Objekt benutzen.