![]() |
Im Stringgrid oben eine neue Zeile einfügen
Hallo, ich füge mit
Delphi-Quellcode:
eine Zahl hinzu, diese sollte bei der nächsten Eingabe um eine Zeile nach unten rutschen.
StringGrid1.Cells[Spalte,0] := IntToStr(Zahl);
Ich dachte da, das man da am besten oben eine neue Zeile einfügt oder so? Wie kann ich Position 0 eine Zeile einfügen bzw, das alle Zahlen um eine Zeile nach unten rutschen am effizentesen umsetzen. |
Re: Im Stringgrid oben eine neue Zeile einfügen
ungetestet:
Delphi-Quellcode:
procedure insertGridLine(Grid :TStringGrid; index: integer);
var i:integer; begin Grid.RowCount :=Grid.RowCount +1; for i :=Grid.RowCount -2 downto index do begin Grid.Rows[i] :=Grid.Rows[i-1]; end; end; |
Re: Im Stringgrid oben eine neue Zeile einfügen
Fast perfekt, Danke, hat echt weiter geholfen!
getestet
Delphi-Quellcode:
procedure TForm1.insertGridLine(Grid :TStringGrid; index: integer);
var i:integer; begin Grid.RowCount :=Grid.RowCount +1; for i :=Grid.RowCount -2 downto index do begin Grid.Rows[i] :=Grid.Rows[i-1]; Grid.Rows[i-1].clear; end; end; |
Re: Im Stringgrid oben eine neue Zeile einfügen
Was haltet ihr von diesem Code?
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.InsertRow(iRow: integer);
var i: integer; begin with StringGrid do begin if iRow < FixedRows then raise Exception.Create('you cannot insert a fixed row'); RowCount := RowCount + 1; for i := RowCount - 1 downto Succ(iRow) do Rows[i].Assign(Rows[i-1]); Rows[iRow].Clear; end; end; |
Re: Im Stringgrid oben eine neue Zeile einfügen
@marabu:
doofes Codedesign, für den Zweck zu komplex und generell nicht so übersichtlich. Außerdem haben wir die Lösung längst... EDIT: sry, war nicht böse gemeint. |
Re: Im Stringgrid oben eine neue Zeile einfügen
Hai yankee,
Bitte etwas höflicher in der DP! Danke. |
Re: Im Stringgrid oben eine neue Zeile einfügen
Hallo yankee,
Zitat:
Nachdenkliche Grüße vom marabu |
Re: Im Stringgrid oben eine neue Zeile einfügen
Zitat:
|
Re: Im Stringgrid oben eine neue Zeile einfügen
Hallo yankee,
Thomas hat deinen Code in eine procedure of object verwandelt. Das bei deinem Code fehlende Leeren der neu eingefügten Zeile hat er unglücklicherweise in die Schleife gepackt - es gehört dahinter, was aber lediglich die Performanz beeinträchtigt und keinen zusätzlichen Fehler darstellt. In deinem Code befinden sich 3 Fehler unterschiedlicher Fehlerklassen. Der erste Fehler ist, dass du eventuell vorhandene FixedRows nicht berücksichtigst. Der zweite Fehler ist, dass du für das Kopieren der Zeileninhalte copy by assignment verwendest - reine Glückssache, dass es funktioniert. Normalerweise würdest du auf diese Weise ein Speicherleck schaffen, aber so verletzt du nur das black box Prinzip. Der dritte und letzte Fehler ist gravierend. Durch eine falsche Indizierung vernichtest du den Inhalt der letzten Zeile. Ich wollte euch beide durch meinen ersten Beitrag nur zum Nachdenken anregen. Das hat offenbar nicht funktioniert. Schade. Freundliche Grüße vom marabu |
Re: Im Stringgrid oben eine neue Zeile einfügen
Ok, das mit dem clear ist rihtig...
mit den FixedRows: das kann ja auch absicht sein die zu verschieben. Und er hat in seinem Beispiel ja 0 genommen. Daher habe ich das mal weggelassen. das mit dem copy by assignment: Interessiert mich jetzt aber mal. Warum ist das Glückssache? Und was macht assign anders? Den Fehler mit der indizierung muss ich wohl einsehen. Es ist eben -1 und nicht -2. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 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