Как перетаскивать окна без рамки (т. е. с BorderStyle = bsNone).
Предполагаемое решение: При нажатии кнопки мыши - если она находится на форме
отправлять Windows сообщение, что под мышкой - заголовок окна.
Ответ №1 (Winnukem): Когда-то давно я где-то нашел вот это.
Можно повесить и на событие image,
и label; тогда форма будет перетаскиваться за них. Вот код:
Ответ №2 (Eugene V. Geraschenko): Вот у меня есть один способ, правда он рассчитан
на быстрые компы.
Нужно создать Timer с Enabled = False и Interval = на ваше усмотрение
(в зависимости от производительности), например 50.
interface
..............................................
public
procedure MoveAllPlace(var Msg:TMessage);message WM_NCHITTEST;
..............................................
implementation
..............................................
procedure TForm1.MoveAllPlace(var Msg:TMessage);
begin
inherited;
if Msg.Result=1 then Msg.Result:=2;
end;
..............................................
Ответ №6 (Fornit): Предложенное ведущим можно реализовать следующим образом
- включить в форму обработчик сообщения WM_NCHITTEST
procedure WMNCHitTest(var M: TWMNCHitTest); message WM_NCHITTEST;
...
procedure WMNCHitTest(var M: TWMNCHitTest);
begin
inherited;
if M.Result = htClient then
M.Result := htCaption;
end;
Ответ №7 (Желтов Антон): Я использую очень простой метод и не совсем возможно
корректный, но действенный. В примере image2 задний фон формы, и за нее можно таскать