![]() |
Frame Align := alClient funktioniert nicht
Hallo zusammen,
ich habe ein Frame, welches ich in ein Pagecontroll.TabSheet1 eingefügt habe. Das ganz funktioniert auch zur Entwicklungszeit ganz gut. Das Frame passt vollständig in das TabSheet. Zur Laufzeit wird jedoch der untere Teil des Frames abgeschnitten und ist nicht mehr sichtbar. Allerdings versteh ich das nicht ganz, wenn ich doch ein Frame oder z.B. ein Panel auf einen TabSheet lege und dem Frame Align := clClient zuweise, müsste er sich doch automatisch an die Größe des TabSheets anpassen. Oder habe ich da was falsch verstanden. Gruß Jens |
AW: Frame Align := alClient funktioniert nicht
Schuss ins Blaue: Der Frame wird schon die Größe des TabSheets annehmen, aber die darauf liegenden Controls werden sich vermutlich nicht an die Größe des Frames anpassen.
|
AW: Frame Align := alClient funktioniert nicht
Eigendlich müssten die Komponenten das aber, ich habe folgenden Aufbau...
1. Frame, darauf 1 Panel = AlClient -> Somit Größe des Frames. 2. 2Panel 1 = AlTop, 1 = AlButtom 3. Jeweils 8 Panels auf den o.g. Panels alle mit AlTop; Die Höhe lege ich im Code Fest...
Delphi-Quellcode:
Das sollte doch eigendlich gehen, Oder?
procedure TFrame1.SetPanelHeight;
var i : Integer; begin pnlGroup1.Height := pnlGround1.Height div 2; pnlGroup2.Height := pnlGround1.Height div 2; for i := 1 to 8 do begin (FindComponent('pnl'+IntToStr(i)) as TPanel).Height := pnlGroup1.Height div 8; end; for i := 9 to 16 do begin (FindComponent('pnl'+IntToStr(i)) as TPanel).Height := pnlGroup2.Height div 8; end; end; Gruß Jens |
AW: Frame Align := alClient funktioniert nicht
Zitat:
Zitat:
|
AW: Frame Align := alClient funktioniert nicht
Das Problem mit den Frames (auf Tabsheets ?!) kenne ich, da hat bei mir nur ein manuelles Refresh geholfen, damit das nach dem Anzeigen klappt (FormShow war glaube ich zufrüh)...
Meine Vermutung ist, dass Tabsheets das irgendwie nicht weitergeben und dadurch die untergeordneten Elemente keine korrekte Größe darstellen könenn. |
AW: Frame Align := alClient funktioniert nicht
Ich habe es hinbekommen,
hier die Lösung...
Delphi-Quellcode:
Gruß Jens
procedure TFrame1.SetPanelHeight;
var i : Integer; begin { Ground 1 } pnlGroup1.Height := (pnlGround1.Height div 2); pnlGroup2.Height := (pnlGround1.Height div 2); pnlGroup1.Align := ClTop; pnlGroup1.Left := 1; pnlGroup1.Top := 1; pnlGroup2.Left := 1; pnlGroup2.Top := pnlGroup1.Top + pnlGroup1.Height; pnlGroup2.Align := ClClient; for i := 1 to 8 do begin (FindComponent('pnl'+IntToStr(i)) as TPanel).Height := pnlGroup1.Height div 8; (FindComponent('pnl'+IntToStr(i)) as TPanel).Left := 1; (FindComponent('pnl'+IntToStr(i)) as TPanel).Top := 1 + (i * pnlGroup1.Height div 8) - pnlGroup1.Height div 8 end; for i := 9 to 16 do begin (FindComponent('pnl'+IntToStr(i)) as TPanel).Height := pnlGroup2.Height div 8; (FindComponent('pnl'+IntToStr(i)) as TPanel).Left := 1; (FindComponent('pnl'+IntToStr(i)) as TPanel).Top := 1 + ((i-8) * pnlGroup2.Height div 8) - pnlGroup2.Height div 8 end; |
AW: Frame Align := alClient funktioniert nicht
Zitat:
Noch etwas Genörgel am Rande. :-P Statt sowas: Zitat:
Delphi-Quellcode:
So ist es lesbarer und schneller.
var
pnl: TPanel; for i := 1 to 8 do begin pnl := (FindComponent('pnl'+IntToStr(i)) as TPanel); pnl.Height := pnlGroup1.Height div 8; pnl.Left := 1; pnl.Top := 1 + (i * pnlGroup1.Height div 8) - pnlGroup1.Height div 8 end; Und im konkreten Fall, wo du mehrere Positionsproperties auf einmal setzt, würde ich mir mal ![]() |
AW: Frame Align := alClient funktioniert nicht
|
AW: Frame Align := alClient funktioniert nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo und schönen guten Abend zusammen,
erstmal besten Danke für die guten Ideen. Ich habe allerdings ein echt seltsames Verhalten beim Gridpanel. Die Kompo ist soweit ich das sehen kann, genau die Lösung die ich Suche. Allerdings nachdem ich Sie eingerichtet habe und als Frame implementiert habe, kommt beim kompilieren immer unten angehangener Fehler. Das seltsame ist, das das erst nach schließen des Projektes auftritt. Ich erstelle ein Grid Panel mit 8 Gleichen Feldern. Die Prozentualle Einteilung mach ich im Constructor des Frames...
Delphi-Quellcode:
Wie gesagt, das ganze funktioniert bis nach dem schließen des Projektes. Öffne ich das Projekt erneut, ist der Fehler da. Löschen ich dann alle GridPanels, und lege Sie neu ins Frame, geht alles wieder, allerdings wieder nur bis zum nächsten schließen.
constructor TFrame2.Create(AOwner: TComponent) ;
var i : Integer; begin inherited Create(AOwner); grindpnlGround.ColumnCollection.BeginUpdate; for i := 0 to 3 do begin grindpnlGround.ColumnCollection[i].SizeStyle := ssPercent; grindpnlGround.ColumnCollection[i].Value := 25; end; for i := 0 to 1 do begin grindpnlGround.RowCollection[i].SizeStyle := ssPercent; grindpnlGround.RowCollection[i].Value := 50; end; grindpnlGround.ColumnCollection.EndUpdate; end; Irgend jemand eine Idee. Gruß Jens |
AW: Frame Align := alClient funktioniert nicht
Eventuell doch jemand eine Idee. Ich habe das ganze jetzt noch mehrmals in allen möglichen Varianten durchgespielt, und immer mit dem selben Ergebnis.
Das Problem ist ja, das es bis zum schließen immer ohne Problem funktioniert.:gruebel::gruebel::gruebel::gruebel: Gruß Jens |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:20 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