AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Form Größe zur Laufzeit ändern klappt nicht richtig
Thema durchsuchen
Ansicht
Themen-Optionen

Form Größe zur Laufzeit ändern klappt nicht richtig

Ein Thema von TurboMagic · begonnen am 28. Jan 2020 · letzter Beitrag vom 29. Jan 2020
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#1

Form Größe zur Laufzeit ändern klappt nicht richtig

  Alt 28. Jan 2020, 16:07
Gegeben Delphi 10.3.2 und eine VCL FOrm mit diesen eigenschaften:

- 1 TPanel top aligned
- 1 TPanel client aligned
- 1 TPanel bottom aligned

Je nach dem welche Daten vorliegen möchte ich das Top oder das Client Panel verbergen
und die Form um deren Größe verkleinern bzw. beim Top Panel auch ggf. die Höhe
an die Menge des darzustellenden Texts anpassen. Im Form designer ist dieses Panel auf
die maximale Länge zu erwartenden Texts ausgelegt.

Im OnCreate der Form prüfe ich, ob das client aligned Panel versteckt werden muss und
falls ja rufe ich das hier auf:

SetBounds(Left, Top, Width, Height - ClientPanel.Height);

Rechnerisch scheint das in Ordnung zu sein, beim Ausführen ist die Form in der Höhe
aber so winzig, dass noch nicht mal die Titelleiste ganz dargestellt wird.

Bei der dynamischen Änderung des Top-Panels genau dasselbe, daher vermutlich der
selbe Fehler.

Woran liegt das?
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Form Größe zur Laufzeit ändern klappt nicht richtig

  Alt 28. Jan 2020, 16:15
Hast du mal geschaut welche Werte Height/ClientPanel.Height haben beim setzen der Bounds?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#3

AW: Form Größe zur Laufzeit ändern klappt nicht richtig

  Alt 28. Jan 2020, 16:17
Hallo,

ja, mit dem Debugger und das sah vernünftig aus.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Form Größe zur Laufzeit ändern klappt nicht richtig

  Alt 28. Jan 2020, 17:32
Hallo,
müsste Du nicht ClientHeight statt Height nehmen?
Heiko
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#5

AW: Form Größe zur Laufzeit ändern klappt nicht richtig

  Alt 28. Jan 2020, 17:50
Hallo,

ich glaube nicht, dass das einen Unterschied bewirken würde ob ich
nun ClientHeight oder Height nehme.

Evtl. muss ich das mal morgen mit einem einfachen Testprogramm ausprobieren...

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Form Größe zur Laufzeit ändern klappt nicht richtig

  Alt 28. Jan 2020, 18:38
Ich hab es eben ausprobiert und es klappt ohne Probleme:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    plClient: TPanel;
    Panel3: TPanel;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetBounds(Left, Top, Width, Height - plClient.Height);
end;

end.
Design:



Laufzeit:

Miniaturansicht angehängter Grafiken
img2.png   img1.png  
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: Form Größe zur Laufzeit ändern klappt nicht richtig

  Alt 28. Jan 2020, 19:03
Zitat:
ich glaube nicht, dass das einen Unterschied bewirken würde ob ich
nun ClientHeight oder Height nehme.
Wenn man aktuelle Höhe minus Höhe der entfernten Komponente nimmt und es der selben Höhen-Eigenschaft zurückübergibt, dann ist es egal.
Selbes = Client-Bereich (Innenmaße) oder Fenster-Bereich (Außenmaße)



Bei Höhe ausrechnen (ohne aktuelle Höhe zu beachten) und irgendeiner Höhen-Eigenschaft zuweisen, das geht schnell schief.
Hier besser ClientHight/ClientRect verwenden, anstatt und Hight/BoundRect, denn bei Letzeterem sind auch TitelLeiste und Rahmen drin, die mit jeder Windowsverions andere Dimensionen hatten.
PS: Das ist auch der Grund, warum Delphi inzwischen ClientHeight/ClientWidth bei den TForm in den DFMs speichert, weil es früher echt blöd war, wenn das Programm in einer Windowsversion, bzw. mit einer gewissen Benutzereinstellung des Desktops kompilert wurde, später und woanders plötzlich der Inhalt des Fensters schnell nicht mehr passte.

Im Windows 10 besonders gut zu bemerkten, denn der FormDesigner arbeitet immernoch mit dem Windows-7-Style und zur Laufzeit hat das Fenster nun außen eine andere Größe, aber innen stimmt es. (falls man keine alte DFM mit Width/Heigt lädt und vorher noch nicht neu gespeichert hat)
Oder DevExpress-Styles und MDI ... eingebettet alter Style und ausgebettet/freifliegend der Neue.
$2B or not $2B

Geändert von himitsu (28. Jan 2020 um 19:08 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#8

AW: Form Größe zur Laufzeit ändern klappt nicht richtig

  Alt 29. Jan 2020, 12:56
Inzwischen klappt es auch bei mir.

Ich hatte Height etwas zugewiesen was eigentlich in eine temporäre Variable sollte,
da es nicht immer zu verwenden war. Duh!

Der Tipp mit dem ClientHeight war aber auch ein nützlicher! Da hatte ich gar nicht
mehr dran gedacht.

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Form Größe zur Laufzeit ändern klappt nicht richtig

  Alt 29. Jan 2020, 17:34
Bei ClientHeight muß man leider manchmal aufpassen, z.B. wenn man im Contructor der Form darauf zugreifen will, oder bei Komponenten, die grade keinen Parent haben oder unsichtbar sind.
Manchmal kann dort der ClientOffest nicht bestimmt werden und dann kommt dort eine Exception aus dessen Getter/Setter.
$2B or not $2B
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#10

AW: Form Größe zur Laufzeit ändern klappt nicht richtig

  Alt 29. Jan 2020, 20:59
Danke für diese Zusatztipps!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 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