Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Form verschoben (beim Vergrößern) (https://www.delphipraxis.net/96980-form-verschoben-beim-vergroessern.html)

Yheeky 2. Aug 2007 15:06


Form verschoben (beim Vergrößern)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

ich habe eine Form (Exe im Anhang) und die soll der User vergrößern können. Wenn man sie rechts und unten vergrößert funktioniert alles, nur wenn ich oben oder links die Form verkleinere, verschiebt sich die Form außerhalb der anderen. Die Eigenschaften Constraints habe ich in beiden Formen auf 180 (Breite) und 200 (Höhe) gesetzt.
Beide Formen sind übereinander gelegt. Die eine enthält den Rahmen und die andere die Komponenten.

Hier ein Codeauszug:

Delphi-Quellcode:
procedure TfrmMain_Maske.WMNCHitTest(var Msg: TWMNCHitTest);
begin
  DefaultHandler(Msg);
  with Msg do
      // TOPLEFT
    if PtInRect(Rect(0, 0, 20, 20), Point((XPos - Left), (YPos - Top))) then
      RESULT := htTopLeft
      // TOPRIGHT
    else if PtInRect(Rect((Width - 20), 0, Width, 20), Point((XPos - Left), (YPos - Top))) then
      RESULT := htTopRight
      // BOTTOMLEFT
    else if PtInRect(Rect(0, (Height - 40), 30, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htBottomLeft
      // BOTTOMRIGHT
    else if PtInRect(Rect((Width - 40), (Height - 40), Width, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htBottomRight
      // TOP
    else if PtInRect(Rect(0, 0, Width, 20), Point((XPos - Left), (YPos - Top))) then
      RESULT := htTop
      // LEFT
    else if PtInRect(Rect(0, 0, 20, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htLeft
      // BOTTOM
    else if PtInRect(Rect(0, Height - 40, Width, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htBottom
      // RIGHT
    else if PtInRect(Rect((Width - 20), 0, Width, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htRight
      inherited;
end;

procedure TfrmMain_Maske.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  frmMain_Maske.BringToFront;

  if Button = mbLeft then
  begin
    MousePos.X := X;
    MousePos.Y := Y;
    FormMoving := true;
  end;
end;

procedure TfrmMain_Maske.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if FormMoving then
  begin
    frmMain.Left := Mouse.CursorPos.X-MousePos.X;
    frmMain_Maske.Left := frmMain.Left;
    frmMain.Top := Mouse.CursorPos.Y-MousePos.Y;
    frmMain_Maske.Top := frmMain.Top;
  end;

end;

procedure TfrmMain_Maske.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FormMoving := False;

end;

procedure TfrmMain_Maske.FormResize(Sender: TObject);
begin
Zeichnen;

end;
Die Procedure "Zeichnen" enthält nur ein paar Draw-Funktionen und ist deswegen uninteressant.
Wie kann ich das Problem denn beheben?

SirThornberry 2. Aug 2007 15:15

Re: Form verschoben (beim Vergrößern)
 
Constraints greift erst wenn die Maustasge los gelassen wird. Zu dem Zeitpunkt ist allerdings die Größe und Position bereits gesetzt und somit wird die größe einfach wieder zurück korrigiert. Das Problem hatten wir schonmal. Durch abfangen der Nachricht wm_sizing kann man gleich dafür sorgen das gar nicht erst eine zu geringe größe gesetzt wird.
[Edit]
Hier wurde das Problem schonmal gelöst:
http://www.delphipraxis.net/internal...=699256#699256
[/Edit]

Yheeky 2. Aug 2007 15:21

Re: Form verschoben (beim Vergrößern)
 
Super, funktioniert! Danke schön! :???:


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