Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Im Stringgrid oben eine neue Zeile einfügen (https://www.delphipraxis.net/50731-im-stringgrid-oben-eine-neue-zeile-einfuegen.html)

Hallo_Thomas 30. Jul 2005 18:08


Im Stringgrid oben eine neue Zeile einfügen
 
Hallo, ich füge mit

Delphi-Quellcode:
StringGrid1.Cells[Spalte,0] := IntToStr(Zahl);
eine Zahl hinzu, diese sollte bei der nächsten Eingabe um eine Zeile nach unten rutschen.

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.

yankee 30. Jul 2005 18:14

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;

Hallo_Thomas 30. Jul 2005 18:59

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;

marabu 30. Jul 2005 19:33

Re: Im Stringgrid oben eine neue Zeile einfügen
 
Was haltet ihr von diesem Code?

Delphi-Quellcode:
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;
Grüße vom marabu

yankee 30. Jul 2005 19:38

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.

Sharky 30. Jul 2005 19:44

Re: Im Stringgrid oben eine neue Zeile einfügen
 
Hai yankee,

Bitte etwas höflicher in der DP! Danke.

marabu 30. Jul 2005 21:17

Re: Im Stringgrid oben eine neue Zeile einfügen
 
Hallo yankee,

Zitat:

Zitat von yankee
Außerdem haben wir die Lösung längst...

warum habt ihr die Lösung denn nicht in diesem thread gepostet und lasst weiter euren fehlerhaften Code stehen?

Nachdenkliche Grüße vom marabu

yankee 30. Jul 2005 22:51

Re: Im Stringgrid oben eine neue Zeile einfügen
 
Zitat:

Zitat von marabu
warum habt ihr die Lösung denn nicht in diesem thread gepostet und lasst weiter euren fehlerhaften Code stehen?

Nachdenkliche Grüße vom marabu

Welchen fehlerhaften code? Es funzt doch alles, wir sind doch alle glücklich!

marabu 31. Jul 2005 08:50

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

yankee 31. Jul 2005 10:07

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 14:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz