Thema: Delphi Gridpanel zentrieren

Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Gridpanel zentrieren

  Alt 27. Apr 2021, 12:00
Delphi-Version: 10.4 Sydney
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).
gridpanel-1.jpg
Mit dem hier eingesetztenn Wert wird weniger abgeschnitten, aber immer noch zuviel. Und wenn ich stattdessen 278einsetze, sieht das wie in Anhang 2 aus:
gridpanel-68.jpg
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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat