Einzelnen Beitrag anzeigen

Delbor

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

AW: Panel Zentrieren...

  Alt 5. Mai 2021, 14:30
Hii zusammen

Ich glaube, ich habe den übeltäter gefunden der Basisframe...
Aber erstmal beim Create der Mainform:
Delphi-Quellcode:
procedure Ta.FormCreate(Sender: TObject);
   var i: integer; LEnvirontVariable: String;
begin
  Self.PnlCalendarFrame1.PnlCalendarPosition;
  Self.PnlCalendarFrame1.PnlSixMonths1Position;
  Self.PnlCalendarFrame1.PnlSixMonths2Position;
  Self.PnlCalendarFrame1.ChooseMonths;
end;
Da geschieht noch mehr, was aber mit dem aktuellen Thema nichts zu tun hat. In jedem Fall handelt essich um Test mit jeweilseigenen Objekten.
Weiter gehts mit den aufgerufenen Methoden:

Delphi-Quellcode:
procedure TPnlCalendarFrame.PnlCalendarPosition;
begin
  PnlCalendarPos.Left := 0;
  Top :=0;
// PnlCalendarPos.Width := PnlCalendarPos.Parent.ClientWidth;
  PnlCalendarPos.Width := Self.Width;
// PnlCalendarPos.Width := Self.ClientWidth;
end;
Als "Interessant" herausgestellt hat sich eigentlich die obige Prozedur. Ich habe hier abwechslungsweise Zeilen ausgeklammert, um deren "Wirksamkeit zu testen.

Delphi-Quellcode:
procedure TPnlCalendarFrame.PnlSixMonths1Position;
begin
  PnlSixMonts1.Left := 0;
  PnlSixMonts1.Top := 0;
  PnlSixMonts1.Width := 6*300; // Diese 300 sind der von Hand aufgerundeten
  PnlSixMonts1.Height := 174; // Wert FDayNumberFrame.Width (257)
end;

procedure TPnlCalendarFrame.PnlSixMonths2Position;
begin
  PnlSixMonts2.Left := 0;
  PnlSixMonts2.Top := PnlSixMonts1.Height;
// PnlSixMonts2.Width := PnlCalendarPos.ClientWidth;
  PnlSixMonts2.Width := PnlSixMonts2.Parent.ClientWidth;
  PnlSixMonts2.Height := 174;
end;
kalenderframe-1.jpgkalenderframe-2.jpg
Das sind die Ergebnisse mit allen möglichen Codevarianten

kalenderframe-3-designverlaengert.jpg
Und das ist das Ergebnis, wenn ich zur Designzeit alle Hilfsfenster (Objectinspektor etc) ausblende und die Arbeitsform über möglichst die ganze Bildschirmbreite aufziehe.Ich habe nicht alle Codeteile korrekt angepasst. Desshalb die Ungleichheiten.
Ich verstehe das jetzt mal so, dass ohne Tricks (künstlich zugewiesene Masse) eine Frameinstanz nie grösser sein kann, als der benutzte BasisFrame zur Entwurfszeit - grosser Bildschirm hin oder her.
Als ich hierdran gearbeitet habe, war mein Gedanke erstmal: ich brauch die ganzen Panels gar nicht mehr. Aber sie machens auch so einfacher...
Tia, und wies nun weitergeht, hab ich erstmal keine Ahnung. 2 Panels links und rechts, die die Differenz DesignzeitBreite zur LaufzeitBreite ausgleichen?
Ich habe hier alle Margins und Paddings entfernt, mit Ausnahme des Titelpanels. Ob das tatsächlich notwendig ist, muss die Zukunft zeigen. Ich denke mir eigentlich: alles, was innerhalb der Masse des Basisframes liegt, sollte machbar sein.

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