![]() |
AW: 2 Panels sollen sich das Form gleichmäßig teilen -> Anchors ?
Hallo zusammen,
Sorry für die späte Antwort, meine Festplatte hatte sich zwischenzeitlich entschieden, in den Festplattenhimmel aufzusteigen....:cry: Naja, so hatte ich wenigstens Grund für ne SSD :-D. Danke erstmal für die Antworten. Ich hatte schon befürchtet, dass das Ganze nur via Berechnung laufen kann. Muss ich mich mal intensiver mit befassen. Dramatisch daran ist nur, dass die Panel auf einem Notebook angeordnet sind, 5 Seiten, verschiedene Komponenten. Naja, mal schauen, wie ich das per Funktion allgemein auf alle Seiten bringen kann. Dank euch! |
AW: 2 Panels sollen sich das Form gleichmäßig teilen -> Anchors ?
Liste der Anhänge anzeigen (Anzahl: 2)
So, hier mal meine Lösung, wobei mich mal eure Meinung interessieren würde:
Ich nehme die Properties Tag und TabOrder der Panel zu Hilfe, um die Position auf dem Hauptpanel zu ermitteln. Somit werden die Panel horizontal und vertikal richtig aufgeteilt.
Delphi-Quellcode:
procedure TForm1.FormResize(Sender: TObject);
var w,l,d,tl,wd,i,j, hgt:integer; pnl: TPanel; maxTag, maxTabOrder:integer; aMaxTaborder:array of array of Integer; begin d:=24; //Abstand zwischen den Panels l:=24; //Rand zum Panel5 maxTag:=-1; for i := 0 to Panel5.ControlCount - 1 do begin if Panel5.Controls[i] is TPanel then begin pnl := TPanel(Panel5.Controls[i]); if maxTag<pnl.Tag then Begin maxtag:=pnl.Tag; setlength(aMaxTabOrder,maxTag+1,2); aMaxTaborder[pnl.Tag,0]:=pnl.Tag; aMaxTaborder[pnl.Tag,1]:=1; end else aMaxTaborder[pnl.Tag,1]:=aMaxTaborder[pnl.Tag,1]+1; End; end; // Horizontale Ausrichtung ************************************* if maxTag>0 then Begin wd:=trunc(((panel5.Width)-(2*l)-((maxtag)*d))/(maxTag+1)); for i := 0 to Panel5.ControlCount - 1 do begin if Panel5.Controls[i] is TPanel then begin pnl := TPanel(Panel5.Controls[i]); pnl.width := wd; pnl.Left:= l+((wd+d)*pnl.Tag); pnl.Top:=l; pnl.Height:=panel5.Height-2*l; end; //if End;//for end; //if maxTag //*************************************************************** // Vertikale Ausrichtung***************************************** maxTabOrder:=0; For j:=0 to High(aMaxTabOrder) do if aMaxTabOrder[j,1]>1 then Begin hgt:=trunc(((panel5.height)-(2*l)-((aMaxTabOrder[j,1]-1)*d))/((aMaxTabOrder[j,1]-1)+1)); for i := 0 to Panel5.ControlCount - 1 do begin if ((Panel5.Controls[i] is TPanel) and (Panel5.Controls[i].Tag=aMaxTabOrder[j,0])) then begin pnl := TPanel(Panel5.Controls[i]); pnl.height := hgt; pnl.top:= l+((hgt+d)*pnl.TabOrder-1); end; //if End;//for End;//if //*************************************************************** end; Wie sieht es dabei mit der Ressourcennutzung aus, oder anders ausgedrückt: Ist das russisch? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08: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