![]() |
Problem mit Constraints der Form
Hallo,
mit der Eigenschaft Constraints kann ich meiner Form eine Maximal- und Minimalgröße festlegen. Jetzt ist mir aber aufgefallen, dass, wenn ich die Form bis auf die Minimalmaße Resize und dann versuche noch weiter die Form zu verkleinern, verschiebe ich die Form um genau die Minimalgröße nach unten oder nach rechts. Wie kann ich dieses Problem umgehen? Gruß Mazel |
Re: Problem mit Constraints der Form
Hat keiner eine Idee?
Gruß Mazel |
Re: Problem mit Constraints der Form
Noch ein Versuch. :wink:
Gruß Mazel |
Re: Problem mit Constraints der Form
Es ist zwar schon etwas her, aber dennoch habe ich das Problem nicht beheben können. Ist den niemand der das selbe Problem, hat?
|
Re: Problem mit Constraints der Form
Das ist ein "normales" Problem. Das kenne ich schon seit Delphi 4 und auch noch vom BDS2006, von daher gibt es wohl auch keine Antwort. Theoretisch könntest du über die SetBounds() Methode und den Windowsbotschaften beim verschieben des Fensters dieses verhindern. Merke dir während des Verschiebens, dass verschoben wird und im SetBounds() keine Änderungen an Left und Top zulassen, wenn das Flag gesetzt ist. Das wäre mal so eine b'n'd Lösung die mir zZ einfällt.
|
Re: Problem mit Constraints der Form
du kannst das ganze über wm_sizing verhindern. Du musst also diese Message selbst händeln und wenn die größe zu klein wird verwirfst du einfach die Größenänderung. :-D
Delphi-Quellcode:
Wenn du auch noch das MaxWidth und MaxHeight von Contraints richtig haben willst musst du es natürlich ergänzen. So wird nur MinWidth und MinHeight von Constraints ordentlich verarbeitet und verhindert.
private
procedure WMSizing(var AMsg: TMessage); message wm_sizing; [...] procedure TForm1.WMSizing(var AMsg: TMessage); var lRect : PRect; begin lRect := PRect(AMsg.LParam); if (Constraints.MinWidth > 0) and (lRect.Right - lRect.Left < Constraints.MinWidth) then begin if (AMsg.WParam = WMSZ_RIGHT) or (AMsg.WParam = WMSZ_BOTTOMRIGHT) or (AMsg.WParam = WMSZ_TOPRIGHT) then lRect.Right := lRect.Left + Constraints.MinWidth else lRect.Left := lRect.Right - Constraints.MinWidth; end; if (Constraints.MinHeight > 0) and (lRect.Bottom - lRect.Top < Constraints.MinHeight) then begin if (AMsg.WParam = WMSZ_Bottom) or (AMsg.WParam = WMSZ_BOTTOMRIGHT) or (AMsg.WParam = WMSZ_BOTTOMLEFT) then lRect.Bottom := lRect.Top + Constraints.MinHeight else lRect.Top := lRect.Bottom - Constraints.MinHeight; end; end; |
Re: Problem mit Constraints der Form
Ich danke dir SirThornberry, auch für die PN :thumb:
Dies ist eine schöne Prozedur. Momentan ist es mir wichtig, das Min... behandelt wird, weil man ja doch meistens eine bestimmte MinGröße beibehalten will. Nun ist das Problem endlich gelöst. Gruß Mazel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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