![]() |
AW: Panel Zentrieren...
Zitat:
Element1.Left := 0; Element2.Left := 1; Element3.Left := 2; usw usf. |
AW: Panel Zentrieren...
Ja, beim GritPanel selber gibt es leider keinen Wert für den Zellenabstand.
Wenn die enthaltenen Komponenten kleiner als eine Zelle sind (nicht mit alClient eingepasst), dann zentrieren sie sich selbst. Aber man könnte auch mit alClient und den Margins (AlighWithMargins=True nicht vergessen), an jeder Komponente, einen Abstand einstellen. Entweder jeweils ein halber Abstand (lins X/2 und rechts X/2) an jeder Komponente oder blos einseitig an den Nachbarkomponenten (z.B. links X und rechts 0) |
AW: Panel Zentrieren...
Hi himitsu
Zitat:
Ich muss mir das nochmal ansehen, aber wenn ichs richtig in Erinnerung habe: ohne Paddingwerte waren die Zwischenräume nur noch wenige Pixel, während die Aussenabstände innen (normalerweise das Padding) nicht null, aber auch nicht wirklich vorhanden zu sein schienen. Wegen der fehlenden Werte der Zwischenräume konnte ich auch keine Aussenabstände errechnen, beziehungsweise das Gridpanel auf seinem Parent nicht einmitten. Auch hier gilt: sobald ich das Gridpanel versuchte, einzumitten ((parent.width - Gridpanel.width) div 2)überlappte es links. Auch hier war offensichtich der Parent "kürzer" als das Gridpanel. Gruss Delbor |
AW: Panel Zentrieren...
Vielleicht arbeitest Du manchmal noch fälschlicher Weise mit Width statt ClientWidth und kommst aus solchen Gründen nicht ganz zurecht...
|
AW: Panel Zentrieren...
Hi Stahli
Ein ShowMessage: Zitat:
Delphi-Quellcode:
Hochinteressant dabei: Zeile2 und 3 aus der ShowMessage-Anweisung.
function TPnlCalendarFrame.GetParentControlPostion(AParentCtrl : TPanel): integer;
var Widthtotal : Word; begin Widthtotal := (6 * FDayNumberFrame.Width); Result := (AParentCtrl.ClientWidth - Widthtotal); ShowMessage('FDayNumberFrame.Width := ' + InttoStr(FDayNumberFrame.Width) + slinebreak+ 'AParentCtrl.Width := ' + InttoStr(AParentCtrl.Width) + slinebreak+ 'AParentCtrl.ClientWidth := ' + InttoStr(AParentCtrl.ClientWidth) + slinebreak+ 'Widthtotal := ' + InttoStr(Widthtotal) + slinebreak+ 'FDayNumberFrame.Width := ' + InttoStr(FDayNumberFrame.Width) + slinebreak+ 'GetParentControlPostion := ' + InttoStr(Result)); end; Gruss Delbor |
AW: Panel Zentrieren...
Liste der Anhänge anzeigen (Anzahl: 3)
Hii zusammen
Ich glaube, ich habe den übeltäter gefunden der Basisframe... Aber erstmal beim Create der Mainform:
Delphi-Quellcode:
Da geschieht noch mehr, was aber mit dem aktuellen Thema nichts zu tun hat. In jedem Fall handelt essich um Test mit jeweilseigenen Objekten.
procedure Ta.FormCreate(Sender: TObject);
var i: integer; LEnvirontVariable: String; begin Self.PnlCalendarFrame1.PnlCalendarPosition; Self.PnlCalendarFrame1.PnlSixMonths1Position; Self.PnlCalendarFrame1.PnlSixMonths2Position; Self.PnlCalendarFrame1.ChooseMonths; end; Weiter gehts mit den aufgerufenen Methoden:
Delphi-Quellcode:
Als "Interessant" herausgestellt hat sich eigentlich die obige Prozedur. Ich habe hier abwechslungsweise Zeilen ausgeklammert, um deren "Wirksamkeit zu testen.
procedure TPnlCalendarFrame.PnlCalendarPosition;
begin PnlCalendarPos.Left := 0; Top :=0; // PnlCalendarPos.Width := PnlCalendarPos.Parent.ClientWidth; PnlCalendarPos.Width := Self.Width; // PnlCalendarPos.Width := Self.ClientWidth; end;
Delphi-Quellcode:
Anhang 53958Anhang 53959
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; Das sind die Ergebnisse mit allen möglichen Codevarianten Anhang 53960 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz