AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GridPanelLayout mit leeren Zellen?

Ein Thema von sko1 · begonnen am 13. Feb 2017 · letzter Beitrag vom 13. Feb 2017
Antwort Antwort
sko1

Registriert seit: 27. Jan 2017
577 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

GridPanelLayout mit leeren Zellen?

  Alt 13. Feb 2017, 08:09
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
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: GridPanelLayout mit leeren Zellen?

  Alt 13. Feb 2017, 08:46
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;
Miniaturansicht angehängter Grafiken
unbenannt.png  
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
577 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: GridPanelLayout mit leeren Zellen?

  Alt 13. Feb 2017, 08:57
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

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

Ciao
Stefan

Geändert von sko1 (13. Feb 2017 um 08:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#4

AW: GridPanelLayout mit leeren Zellen?

  Alt 13. Feb 2017, 09:20
Pssst, füge einen einen Platzhalter (TPanel ohne Border) an den gewünschten Stellen ein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
577 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: GridPanelLayout mit leeren Zellen?

  Alt 13. Feb 2017, 10:17
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 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