![]() |
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 |
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; |
AW: GridPanelLayout mit leeren Zellen?
stimmt, hier mal ein verkürztes Beispiel, ich erzeuge 100 Zeilen und fülle ab Zeile 5
Delphi-Quellcode:
Vielen Dank für Deinen Beispielcode, die Zeilefor 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;
Delphi-Quellcode:
anstelle Grid.ControlCollection.AddControl(r, 0, i); löst mein Problem, danke nochmal!
Grid.ControlCollection.Controls[0, i] := r;
Ciao Stefan |
AW: GridPanelLayout mit leeren Zellen?
Pssst, füge einen einen Platzhalter (TPanel ohne Border) an den gewünschten Stellen ein. :angle:
|
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 07:30 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