![]() |
Re: stringGrid --> Zeilen löschen
Was genau willst du denn?
Ich sehe darin kein Problem, sondern eher die Lösung. Wohin soll der Inhalt der unteren Rows denn sonst verschoben werden? |
Re: stringGrid --> Zeilen löschen
Ich mein ja nur...
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.) Denn wenn man eine stringgrid mit 1.000.001 einträgen hat und den oberen rauslöschen will, muss man 1.000.000 einträge verschieben. Ich hatte nur auf eine effizientere lösung gehofft. Aber seis drum. Diese lösung tuts auch und da ich nicht mit 1.000.000 einträgen arbeite, merke ich auch keinen zeitunterschied ... |
Re: stringGrid --> Zeilen löschen
Hallo,
die Klasse TStringGrid besitzt eine Proected-Methode DeleteRow, die man über einen "Class-Cracker" erreichen kann:
Delphi-Quellcode:
Gruß Hawkeye
type
TGridCracker = class (TStringGrid) procedure TForm1.DeleteRow (aIndex: Integer); begin TGridCracker(Grid1).DeleteRow (aIndex); end; |
Re: stringGrid --> Zeilen löschen
Hallo Hawkeye,
ich fürchte DeleteRow() kann die row-order nicht beibehalten. Freundliche Grüße vom marabu Nachtrag: Meine Befürchtung ist unbegründet - ich habe die Parameter von MoveRow() vertauscht... |
Re: stringGrid --> Zeilen löschen
Zitat:
Delphi-Quellcode:
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:
// 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));
Delphi-Quellcode:
So kannst Du dann natürlich nicht mehr das VCL-Objekt benutzen.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz