Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Panels untereinander anornden bei Resize (https://www.delphipraxis.net/152323-panels-untereinander-anornden-bei-resize.html)

bwolf 18. Jun 2010 08:35

Panels untereinander anornden bei Resize
 
Hi,

ich habe ein Panel mit alTop, das wiederrum 2 Panels enthalt die beide alLEft haben.
Wenn ich jetzt die Form von der Breite ändere und die beiden Panels nicht mehr komplett dargestellt werden können, würde ich gerne das sich das rechte Panel unter das linke Panel schiebt.

Spiele schon seit einer Weile rum, aber krieg das nicht so richtig hin.
Habe übrigens D7 ;)

bernau 18. Jun 2010 08:37

AW: Panels untereinander anornden bei Resize
 
Ich würde align ausschalten und im OnResize des ersten Hauptpanels die Positionierung direkt setzen.

alphaflight83 18. Jun 2010 10:20

AW: Panels untereinander anornden bei Resize
 
Align ist bei Panel1 und 2 alNone.
Bei Panel0 (MotherPanel) AlClient oder AlTop.
PanelWidth nach Bedarf anpassen.
Die Prozedur im FormShow UND FormResize aufrufen.

Code:
procedure TForm1.SizeMe(Sender: TObject);
const
  PanelWidth = 500; (* The required width for each client panel *)
begin
  Panel1.Width := PanelWidth;
  Panel2.Width := PanelWidth;

  if Panel0.Width <= 2*PanelWidth then begin
    Panel1.Top := 0;
    Panel2.Top := (Panel0.Height div 2) +1;
    Panel1.Left := 0;
    Panel2.Left := 0;
    Panel1.Height := Panel0.Height div 2;
    Panel2.Height := Panel0.Height div 2;
  end
  else begin
    Panel1.Top := 0;
    Panel2.Top := 0;
    Panel1.Left := 0;
    Panel2.Left := PanelWidth + 1;
    Panel1.Height := Panel0.Height;
    Panel2.Height := Panel0.Height;
  end;

David Martens 18. Jun 2010 15:31

AW: Panels untereinander anornden bei Resize
 
jenachdem was du jetzt genau haben willst:

Situation: auf dem Motherpanel 2 Panel: pLeft und pRight

1.
pLeft : feste Größe
pRight: füllt den restlichen Teil des Motherpanels aus, hat eine Mindestgröße z.B. 100 und "verschwindet" bei unterschreiten hinter pLeft

Lösung:
pLeft.Align := alLeft;
pRight.Align := alRight;
und beim Motherpanel.OnResize
Delphi-Quellcode:
procedure TForm1.MotherpanelResize(Sender: TObject);
begin
  if (pRight.Width > 100) and (pRight.Left < pLeft.Width) then
    pRight.Width := 100;

  if pRight.Left > pLeft.Width then
    pRight.Width := Motherpanel.Width - pLeft.Width - 2;
end;
2.
pLeft : feste Größe
pRight: feste Größe und "verschwindet" bei unterschreiten hinter pLeft

Lösung:
pLeft.Align := alLeft;
pRight.Align := alRight;

P.S.: bei beiden Varianten muß pLeft "vor" pRight liegen d.h. entweder erst pRight anlegen und dann pLeft, oder Rechtclick auf pLeft und Element>"nach vorne setzen" auswählen.

Gruß David


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz