Delphi-PRAXiS

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 Kann ich in einem GridPanel Zeilen mittendrin einfügen? (https://www.delphipraxis.net/193678-kann-ich-einem-gridpanel-zeilen-mittendrin-einfuegen.html)

Der schöne Günther 28. Aug 2017 17:50

Kann ich in einem GridPanel Zeilen mittendrin einfügen?
 
Angenommen ich habe ein
Delphi-Quellcode:
TGridPanel
im Layout 1x5, also fünf Zeilen. Ich kann sagen
Delphi-Quellcode:
myGridpanel.RowCollection.Add()
oder
Delphi-Quellcode:
myGridpanel.RowCollection.Insert(2)
um eine neue Zeile einzufügen, beide tun das gleiche. Bei einem Insert(..) hätte ich, wie die Hilfe dazu sagt, erwartet dass ich es an einer bestimmten Stelle einfügen kann.

Beide Code-Schnipsel tun das gleiche, nämlich eine neue Zeile am Ende einfügen. Was fehlt mir?

Delphi-Quellcode:
procedure TForm17.Button1Click(Sender: TObject);
const
   wantedIndex = 2;
var
   rows:      TRowCollection;
   newRow:      TRowItem;
   rowIndex:   Integer;
   rowHeight:   Single;
begin
   rows := GridPanel1.RowCollection;

   rows.BeginUpdate();
   try
      newRow := rows.Insert(wantedIndex) as TRowItem;
      rowHeight := (100.0 / rows.Count);

      newRow.SizeStyle := TSizeStyle.ssPercent;
      newRow.Value := rowHeight;

      for rowIndex := 0 to Pred(rows.Count) do
         rows[rowIndex].Value := rowHeight;
   finally
      rows.EndUpdate();
   end;
end;

oder alternativ


Delphi-Quellcode:
procedure TForm17.Button1Click(Sender: TObject);
const
   wantedIndex = 2;
var
   rows:      TRowCollection;
   newRow:      TRowItem;
   rowIndex:   Integer;
   rowHeight:   Single;
begin
   rows := GridPanel1.RowCollection;

   rows.BeginUpdate();
   try
      newRow := rows.Add();
      rowHeight := (100.0 / rows.Count);

      newRow.SizeStyle := TSizeStyle.ssPercent;
      newRow.Value := rowHeight;
      newRow.Index := wantedIndex;

      for rowIndex := 0 to Pred(rows.Count) do
         rows[rowIndex].Value := rowHeight;
   finally
      rows.EndUpdate();
   end;
end;

himitsu 28. Aug 2017 20:33

AW: Kann ich in einem GridPanel Zeilen mittendrin einfügen?
 
Zitat:

Bei einem Insert(..) hätte ich ...
Die Row oder Col wird dabei schon an der richtigen Stelle eingefügt (war zuletzt noch so), aber bereits eingefügte Komponenten werden nicht mit verschoben, falls du das meinst.

Der schöne Günther 29. Aug 2017 17:30

AW: Kann ich in einem GridPanel Zeilen mittendrin einfügen?
 
Das bedeutet ich müsste von Hand alle Controls ab einer bestimmten Zeile durchgehen und eine Zeile nach unten schieben? Etwas fertiges gibt es nicht?

Uwe Raabe 29. Aug 2017 19:53

AW: Kann ich in einem GridPanel Zeilen mittendrin einfügen?
 
Die Controls sitzen ja nicht in der RowCollection sondern in der ControlCollection und sind lediglich durch das Row-Property des entsprechenden ControlItems mit der eigentlichen Zeile verknüpft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:43 Uhr.

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