Другие языки программирования и технологии

Помогите! DELPHI как сделать Двигающюся Форму при BorderStyle := bsNone?

var
IsDragging: Boolean;
startX, startY: Integer;

procedure TfrmMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsDragging := True;
startX := X;
startY := Y;
end;

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

procedure TfrmMain.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if IsDragging then begin
Left := Left + X - startX;
Top := Top + Y - startY;
end;
end;
Василий Topsecret
Василий Topsecret
32 502
Лучший ответ
Всё относительно просто!
Делаете на форме в design-time что-то, что будет играть роль области, за которую надо будет таскать в run-time мышкой форму. Предположим, это будет Panel1
В секции private в вашей форме пишете:
procedure WMNCHitTest(var Msg: TWMNCHitTest) ; message WM_NCHitTest;
и расписываете саму процедуру:
procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest) ;
begin
inherited;
if Msg.Result = htClient and (мышь над Panel1) then Msg.Result := htCaption;
end;
Следует заметить, что после этого Panel1 потеряет все остальные обработчики, которые, возможно, присутствуют на ней.
Если убрать (мышь над Panel1), то можно будет таскать за клиентскую часть формы (т. е. за ту часть, которая не занята системными кнопками, заголовком, границами, если они есть)
Всё просто. Делай обработчик форме, при нажатии ЛКМ флаг в истину, при отпускании - в ложь. В ОнМаусМув если флаг тру - изменить координаты формы на смещение мыши...
Стас Асанов
Стас Асанов
3 509