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/)
-   -   GridPanelLayout mit leeren Zellen? (https://www.delphipraxis.net/191708-gridpanellayout-mit-leeren-zellen.html)

sko1 13. Feb 2017 08:09

GridPanelLayout mit leeren Zellen?
 
Hallo,

ich wollte zur Laufzeit ein GridPanelLayout (1 Spalte, 100 Zeilen) mit Buttons "bestücken", dabei aber einzelne Zellen leer lassen.
Irgendwie funktioniert das nicht, die leeren Zeilen "verschwinden", es werden nur die gefüllten Zellen untereinander angezeigt!

Habe ich einen falschen Ansatz?

Ciao
Stefan

Der schöne Günther 13. Feb 2017 08:46

AW: GridPanelLayout mit leeren Zellen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ein bisschen Code wie du das machst wäre hilfreich.

Über ControlCollection.Controls[columnIndex, rowIndex] kannst du gezielt an Positionen Controls einfügen:
Delphi-Quellcode:
function TForm10.createNewButton(const index: Integer): TButton;
begin
   Result := TButton.Create(GridPanelLayout1);
   Result.Text := 'Button ' + (index + 1).ToString();
end;

procedure TForm10.Button1Click(Sender: TObject);
const
   numRows = 10;
   emptyRows = [3, 4, 7];
var
   rows:      TGridPanelLayout.TRowCollection;
   row:      TGridPanelLayout.TRowItem;
   rowIndex:   Integer;

   newButton:   TButton;
begin
   rows := GridPanelLayout1.RowCollection;
   rows.BeginUpdate();
   try
      rows.Clear();
      for rowIndex := 0 to Pred(numRows) do begin
         row := rows.Add();
         row.SizeStyle := TGridPanelLayout.TSizeStyle.Absolute;
         row.Value := 30;

         if not (rowIndex in emptyRows) then begin
            newButton := createNewButton(rowIndex);
            GridPanelLayout1.ControlCollection.Controls[0, rowIndex] := newButton;
            newButton.Parent := GridPanelLayout1;
         end;
      end;
   finally
      rows.EndUpdate();
   end;
end;

sko1 13. Feb 2017 08:57

AW: GridPanelLayout mit leeren Zellen?
 
stimmt, hier mal ein verkürztes Beispiel, ich erzeuge 100 Zeilen und fülle ab Zeile 5
Delphi-Quellcode:

  for i := 0 to az - 1 do
  begin
    Grid.RowCollection.Add;
    Grid.RowCollection.Items[i].SizeStyle :=
      TGridPanelLayout.TSizestyle.Absolute;
    Grid.RowCollection.Items[i].Value := 50;
    if i > 5 then
    begin
      r := TRectangle.Create(self);
      r.Parent := Grid;
      r.OnClick := RectangleClick;
      r.Align := TAlignLayout.Client;
      r.Tag := i;
      r.Margins.Top := 2;
      r.Margins.Bottom := 2;
      b := TButton.Create(self);
      b.Parent := r;
      b.Height := 30;
      b.Width := 50;
      b.OnClick := ButtonClick;
      b.Position.X := 3;
      b.Position.Y := 3;
      b.Tag := i;
      b.Text := 'test' + i.ToString;
      Grid.ControlCollection.AddControl(r, 0, i);
    end;
  end;
Vielen Dank für Deinen Beispielcode, die Zeile

Delphi-Quellcode:
Grid.ControlCollection.Controls[0, i] := r;
anstelle Grid.ControlCollection.AddControl(r, 0, i); löst mein Problem, danke nochmal!

Ciao
Stefan

himitsu 13. Feb 2017 09:20

AW: GridPanelLayout mit leeren Zellen?
 
Pssst, füge einen einen Platzhalter (TPanel ohne Border) an den gewünschten Stellen ein. :angle:

sko1 13. Feb 2017 10:17

AW: GridPanelLayout mit leeren Zellen?
 
Nein, das geht leider nicht, das Erzeugen des Grid mit 100 Zeilen und Panels darin dauert auf dem Handy 12 Sekunden!

Deswegen suche ich ja nach einer Möglichkeit, zwischen 100 Einträgen zu scrollen aber nur die sichtbaren wirklich darzustellen!

Vielleicht ist das Grid doch der falsche Ansatz?

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 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