Einzelnen Beitrag anzeigen

Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

Form verschoben (beim Vergrößern)

  Alt 2. Aug 2007, 15:06
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?
Angehängte Dateien
Dateityp: exe testform_200.exe (625,5 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat