AGB  ·  Datenschutz  ·  Impressum  







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

Gridpanel zentrieren

Ein Thema von Delbor · begonnen am 27. Apr 2021 · letzter Beitrag vom 27. Apr 2021
Antwort Antwort
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
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Gridpanel zentrieren

  Alt 27. Apr 2021, 12:18
Hilft Dir vielleicht StackPanel, RelativePanel oder meine Lösung (https://www.delphipraxis.net/204696-alignmentpanel.html) weiter?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Gridpanel zentrieren

  Alt 27. Apr 2021, 12:44
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;
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (27. Apr 2021 um 13:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.476 Beiträge
 
Delphi 12 Athens
 
#4

AW: Gridpanel zentrieren

  Alt 27. Apr 2021, 13:31
Dass dies // 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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 04:33 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