Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Gridpanel zentrieren (https://www.delphipraxis.net/207726-gridpanel-zentrieren.html)

Delbor 27. Apr 2021 12:00

Delphi-Version: 10.4 Sydney

Gridpanel zentrieren
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi zusammen

Mit Hilfe dieses Beispiels erzeuge ich zur Laufzeit auf einem Gridpanel 12 meiner Monatskalender:

Delphi-Quellcode:
  for i := 1 to rowCount do
    with GridPanel1.RowCollection.Add do
    begin
      SizeStyle := ssAuto;
      Value := 155;
//      GridPanel1.RowCollection[i].Collection  // Das ist nicht vorhanden
    end;

  for i := 1 to colCount do
    with GridPanel1.ColumnCollection.Add do
    begin
//      GridPanel1.ColumnCollection.Items[i].SizeStyle := ssAuto;             // Das natürlich ebensowenig
//      GridPanel1.ColumnCollection.Items[i].Value := 258;
      SizeStyle := ssAuto;
      Value := 258;
      if (i = colCount) then
        Self.GridPanel1.Width := 300 * i
    end;

    for i := 0 to (rowCount * colCount) -1 do
    begin
      LMonth := i + 1;
      CreateDayNumberFrame(LMonth);
    end;
  GridPanel1.RowCollection.EndUpdate;
  GridPanel1.ColumnCollection.EndUpdate;

  GridPanel1.Width := (265 * 6);
Wiedergegeben ist hier nur der Codeblock aus dem Beispiel, den ich für mich angepasst habe.
Die letzte Zeile stützt auf den Wert von 'Value' ab. Wenn ich hier den ursprünglichen Wert (258) einsetze, werden mir vom letzten Kalender etliche Tage abgeschnitten (Anhang1).
Anhang 53920
Mit dem hier eingesetztenn Wert wird weniger abgeschnitten, aber immer noch zuviel. Und wenn ich stattdessen 278einsetze, sieht das wie in Anhang 2 aus:
Anhang 53921
Fazit:so verwirklicht, ist dies ein Hasardspiel: wenn sich die Auflösung ändert, ist je nachdem nichts mehr sichtbar.
Ich hatte auch schon anders getestet:

Delphi-Quellcode:
GridPanel1.Left := (Self.Width - GridPanel1.Width) div 2;

GridPanel1.Left := (Self.PnlBackGround.Width div 2) - (GridPanel1.Width div 2);
PnlBackGround sollte der eigentliche Parent sein. Ich hatte dabei gehofft, so das Gridpanel besser im Top zentrieren zu können.
Das Problem dabei: PnlBackGround.With war in jedem Fall kleiner als GridPanel.Width, so dass PnlBackGround.Left immer links ausserhalb des Bildschirms zu liegen kam.

Mein Fazit: TGridPanel und wohl auch TFlowpanel sind ziemlich unbrauchbar. Oder hat schon jemand andere Erfahrungen gemacht?
Die Idee hinter beiden Komponenten ist zwar gut, aber schlecht umgesetzt. Die Arbeit, die die beiden Komponenten abnehmen, fällt anderswo verstärkt an.

Gruss
Delbor

stahli 27. Apr 2021 12:18

AW: Gridpanel zentrieren
 
Hilft Dir vielleicht StackPanel, RelativePanel oder meine Lösung (https://www.delphipraxis.net/204696-alignmentpanel.html) weiter?

Moombas 27. Apr 2021 12:44

AW: Gridpanel zentrieren
 
Aber müsste das nicht immer so sein (ungetestet):
Delphi-Quellcode:
Abstand   := 10; //Abstand der Grids zum Rand und untereinander
GridAnzahl := 6;

Gridpanel1.Width := Abstand * (Gridanzahl + 1) + Gridanzahl * Gridwidth + 2 * Gridpanel1.BevelWidth;

Uwe Raabe 27. Apr 2021 13:31

AW: Gridpanel zentrieren
 
Dass dies
Delphi-Quellcode:
// GridPanel1.RowCollection[i].Collection // Das ist nicht vorhanden
nicht vorhanden ist, liegt daran, dass die Collection 0-basiert ist, dein I aber von 1 an gezählt wird. Gleiches gilt auch für die Bemerkung zur ColumnCollection.


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:12 Uhr.

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