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 Größenänderung eines Formulars nur am unteren Rand zulassen (https://www.delphipraxis.net/149755-groessenaenderung-eines-formulars-nur-am-unteren-rand-zulassen.html)

DSCHUCH 29. Mär 2010 14:00


Größenänderung eines Formulars nur am unteren Rand zulassen
 
Mein Problem ist im Betreff bereits ganz gut auf den Punkt gebracht.

Ich habe ein Formular, welches vom Anwender in der Höhe geändert werden kann aber nur am unteren Rand. Also Breite darf nicht geändert werden.

Hintergrund:

mehrere Formulare liegen in einer Scrollbox mit Align AlTop. Damit ist die Breite automatisch die des Hauptfenster, soll auch so sein und der Anwender soll dort nicht ändern können da es dann nur flackert. Das verändern der Höhe am oberen Rand soll deswegen ebenso ausgeschaltet werden.

Kann ich irgendwie feststellen (WindowsMessage) ob und an welchem Rand eines Formulars sich die Maus gerade befindet und dann die Größenänderung verbieten (das kann ich ja schon dadurch erreichen den Borderstyle umzusetzen)

Daniel

Sherlock 29. Mär 2010 14:19

Re: Größenänderung eines Formulars nur am unteren Rand zulas
 
Fixe Breite kannst Du doch über die Constraints regeln. Stell einfach ein Min und MaxWidth ein und fertig.

Sherlock

SirThornberry 29. Mär 2010 14:32

Re: Größenänderung eines Formulars nur am unteren Rand zulas
 
Wenn du schon konkret nach der Windows-Nachricht fragst so sei dir wm_sizing genannt.

samso 30. Mär 2010 07:10

Re: Größenänderung eines Formulars nur am unteren Rand zulas
 
Da habe ich vor kurzem etwas sehr schönes gesehen (Dank an turboPASCAL), dass ich dann auch dieser Stelle verwenden würde, weil es dem Nutzer durch die Veränderung des Mauszeigers direkt signalisiert, dass er nur den unteren Rand verschieben darf. (Borderstyle ist bsSizeable)

Delphi-Quellcode:
    procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
...
procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
  inherited;
  if (Message.Result in [HTLEFT, HTRIGHT, HTTOP, HTTOPLEFT,
                         HTTOPRIGHT, HTBOTTOMLEFT, HTBOTTOMRIGHT]) then
    Message.Result := htClient;
end;
Edit 1:
Laut Microsoft: Minimum supported client: Windows XP
Edit 2:
Ich habe es mit W2K (SP4) getestet, funktioniert wunderbar.


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