Einzelnen Beitrag anzeigen

WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#12

AW: 2 Panels sollen sich das Form gleichmäßig teilen -> Anchors ?

  Alt 23. Apr 2013, 22:58
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?
Angehängte Grafiken
Dateityp: jpg Form.jpg (14,6 KB, 17x aufgerufen)
Angehängte Dateien
Dateityp: zip DynamischeForm.zip (544,2 KB, 8x aufgerufen)
MFG
Steffen
  Mit Zitat antworten Zitat