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 ausrichten (https://www.delphipraxis.net/175235-panels-ausrichten.html)

API 8. Jun 2013 07:52

Panels ausrichten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,

Auf meiner Form befinden sich zwei TPanel.

Panel1.Align := alClient;
Panel2.Align := alBottom;

Bei Klick auf einen Button soll Panel1 verschwinden und Panel2.Align := alClient gesetzt werden.
Nach erneutem Klick auf den Button soll wieder Panel1.Align := alClient und Panel2.Align := alBottom sein.

Sobald ein zweites Mal auf den Button geklickt wird, vergrößert sich jedoch die Form um fast das Doppelte!

Wie kann ich das verhindern?

Mein Code:

Delphi-Quellcode:
  if Panel1.Visible then
  begin
    Panel1.Hide;
    Panel2.Align := alclient;
  end
  else
  begin
    Panel1.Show;
    Panel2.Align := albottom;
  end;
das hilft auch nichts:

Delphi-Quellcode:
 if Panel1.Visible then
  begin
    Panel2.Tag := Panel2.Height;
    Panel1.Tag := Panel1.Height;
    Panel1.Hide;
    Panel2.Align := alclient;
  end
  else
  begin
    Panel1.Show;
    Panel1.Align := Alclient;
    Panel2.Align := albottom;
    Panel2.Height := Panel2.Tag;
    Panel1.Height := Panel1.Tag;
  end;
Gruß
API

Sir Rufo 8. Jun 2013 08:04

AW: Panels ausrichten
 
Versuch es mal so
Delphi-Quellcode:
  if Panel1.Visible
  then
    begin
      Panel1.Hide;
      Panel2.Tag  := Panel2.Height;
      Panel2.Align := alClient;
    end
  else
    begin
      Panel2.Align := alBottom;
      Panel2.Height := Panel2.Tag;
      Panel1.Show;
    end;
Manchmal kommt es auf die Reihenfolge an ;)

sx2008 8. Jun 2013 16:50

AW: Panels ausrichten
 
Verwende doch einen TSplitter mit
Delphi-Quellcode:
Align = alBotton
,
Delphi-Quellcode:
Height = 4
und
Delphi-Quellcode:
Color = clBlue
.
Mit dem Property
Delphi-Quellcode:
Autosnap = True
und
Delphi-Quellcode:
MinSize = 40
kann der Benutzer das untere Panel bis auf 40 Pixel verkleinern.
Zieht er den Splitter weiter nach unten verschwindet das untere Panel ganz.
Der Splitter bleibt aber weiterhin sichtbar und der Benutzer kann das untere Panel wieder einblenden.

Vorteile: Kein Code notwendig, keine Platzverschwendung für den Button

API 8. Jun 2013 17:23

AW: Panels ausrichten
 
Danke euch beiden, der Code von Sir Rufo hat funktioniert. Die Idee mit dem TSplitter werde ich noch anschauen.

Jens01 8. Jun 2013 17:57

AW: Panels ausrichten
 
Ich glaub es geht auch damit, das Align auf Custom zu stellen und das Positionieren im dem OnAlignPosition-Event de Form zu regeln.

zeras 9. Jun 2013 13:08

AW: Panels ausrichten
 
Zitat:

Zitat von sx2008 (Beitrag 1217869)
Verwende doch einen TSplitter mit
Delphi-Quellcode:
Align = alBotton
,
Delphi-Quellcode:
Height = 4
und
Delphi-Quellcode:
Color = clBlue
.
Mit dem Property
Delphi-Quellcode:
Autosnap = True
und
Delphi-Quellcode:
MinSize = 40
kann der Benutzer das untere Panel bis auf 40 Pixel verkleinern.
Zieht er den Splitter weiter nach unten verschwindet das untere Panel ganz.
Der Splitter bleibt aber weiterhin sichtbar und der Benutzer kann das untere Panel wieder einblenden.

Ich habe in etwas den Code von dir drin. Leider habe ich Probleme, mir die Position zu merken, wenn ich das Programm schliesse und wieder neu starte. Dann bekomme ich es einfach nicht hin, dass der Splitter an dergleichen Stelle wieder steht, wie beim letzten Programmstart.
Wie macht iht das mit dem Speichern der Splitterposition?

MrMooed 9. Jun 2013 20:02

AW: Panels ausrichten
 
Im einfachsten Fall könntest du ein TIniFile nutzen?
Wurde ja schließlich dafür entwickelt um Fensterposition, Größe, etc. zu speichern.

MrMooed

Jumpy 10. Jun 2013 08:48

AW: Panels ausrichten
 
Der Trick ist nicht die Splitter-Position zu speichern, sondern die Höhe des Labels, das nich alClient ist.

Sir Rufo 10. Jun 2013 08:49

AW: Panels ausrichten
 
Zitat:

Zitat von Jumpy (Beitrag 1217997)
Der Trick ist nicht die Splitter-Position zu speichern, sondern die Höhe des Labels, das nich alClient ist.

Ebend, denn der Splitter kuschelt sich immer ganz eng daran an ;)

zeras 10. Jun 2013 18:48

AW: Panels ausrichten
 
Zitat:

Zitat von Jumpy (Beitrag 1217997)
Der Trick ist nicht die Splitter-Position zu speichern, sondern die Höhe des Labels, das nich alClient ist.

Dann wird das wohl meine Lösung sein, denn die Splitterposition abzuspeichern hatte ich schon irgendwie gemacht, hat aber nicht funktioniert.

Vielen Dank. Werde das dieser Tage probieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 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