Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit Constraints der Form (https://www.delphipraxis.net/80688-problem-mit-constraints-der-form.html)

Mazel 13. Nov 2006 18:29


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

Mazel 14. Nov 2006 18:34

Re: Problem mit Constraints der Form
 
Hat keiner eine Idee?

Gruß
Mazel

Mazel 16. Nov 2006 15:10

Re: Problem mit Constraints der Form
 
Noch ein Versuch. :wink:

Gruß
Mazel

Mazel 23. Mär 2007 16:14

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?

Muetze1 23. Mär 2007 22:14

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.

SirThornberry 24. Mär 2007 07:41

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:
  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;
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.

Mazel 24. Mär 2007 10:49

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