Для того, чтобы перемещать форму за клиентскую область, существует 2 варианта: сделать всю форму как один большой заголовок, или обрабатывать события OnMouseDown, OnMouseUp и OnMouseMove у формы. (примеры взяты из моего SMPN плеера ) Способ #1 Этот вариант намного проще второго, но у него один недостаток: Компонент TPopupMenu перестает работать для формы ну чтож, начнем! Сначала в частных объявлениях (после слова private) объявляем процедуру: Code private procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest; Затем в разделе implementation описываем её так: implementation Code {$R *.DFM}
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest); begin inherited; if M.Result = htClient then M.Result := htCaption; end; Способ #2 Самый лучший, на мой взгляд, способ. создаем 3 глобальные переменные (X1 и Y1: типа integer) и (Drag: типа Boolean) в событие формы OnMouseDown пишем: Code If Button =mbLeft then begin CanTas := True; X1:=X; Y1:=Y; SetCapture(Application.Handle); в событие формы OnMouseUp пишем: Code CanTas := False; //сообщаем форме, что мы отпустили кнопку мыши в событие OnMouseMove пишем: Code if Drag then begin
MainForm.Left := MainForm.Left+X-X1; //сообщаем форме то, что мы нажали левую MainForm.Top := MainForm.Top+Y-Y1; //кнопку мыши и готовы тащить <img src="http://s7.ucoz.net/sm/24/smile.gif" border="0" align="absmiddle" alt="smile">
end; вот вроде все.
|