Как мне переместить форму, не имеющую заголовка?
Выберите элемент управления (или саму форму) и напишите это в его (ее) обработчике события OnMouseDown (данный пример дан только для формы):
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; Perform ( WM_SYSCOMMAND, SC_MOVE+2, 0 ); end; |
Классно! Намного проще метода NCHitTest, который я предлага. Хотя многое из того, чтобы вы мне написали, я не понял. Для чего нужно прибавлять 2 к параметру SC_MOVE? В справке по API об этом ничего не сказано.
Type TMovablePanel = Class ( TPanel ) Private Procedure wmNCHitTest ( Var Message : TWMNCHitTest ); message WM_NCHITTEST; Protected Procedure MouseDown ( Button : TMouseButton; Shift : TShiftState; X, Y : Integer ); override; End; Procedure TMovablePanel.wmNCHitTest ( Var Message : TWMNCHitTest ); Begin With Message, ScreenToClient ( Pos ) Do If ( X < Width - 10 ) And ( Y < Height - 10 ) Then Message.Result := HTCAPTION Else Message.Result := HTCLIENT; End; Procedure TMovablePanel.MouseDown ( Button : TMouseButton; Shift : TShiftState; X, Y : Integer ); Begin If Button = mbLeft Then Begin ReleaseCapture; Perform ( WM_SYSCOMMAND, SC_SIZE + HTBOTTOMRIGHT - 9, 0 ); End Else Inherited MouseDown ( Button, SHift, X, Y ); End; |
- Robert Wittig [001113]