Registriert seit: 7. Jun 2002
1.339 Beiträge
|
Form verschoben (beim Vergrößern)
2. Aug 2007, 16: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?
|