powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перетаскивание формы
4 сообщений из 4, страница 1 из 1
Перетаскивание формы
    #32188058
alexia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сделать так, чтобы форму можно было перетаскивать не только за зоголовок, но и за любое место?
...
Рейтинг: 0 / 0
Перетаскивание формы
    #32188089
uranic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по моему это описано в каждом FAQ
вот несколько способов

Простейший путь - "одурачить" окно, пусть оно думает, что его тастают за заголовок. Сделайте это с помощью системного сообщения wm_NCHitTest...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
type

TForm1 = class(TForm)
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;
end;

var

Form1: TForm1;

implementation
{$R *.DFM}

procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin

inherited;                   { вызов унаследованного обработчика события   }
if M.Result = htClient then  { кликнув в области окна?                     }
M.Result := htCaption;     { если так, то мы заставили Windows думать,   }
{ что щелчок был на заголовке окна.           }
end; 



или так:

Перетаскивать форму можно за любой элемент, который находится на ней. Для этого создайте обработчик OnMouseDown для элементов, за которые хотите перетаскивать форму (и/или для самой формы). Вот пример для Panel:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure TForm1.PanelMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);
const

SC_DRAGMOVE : Longint = $F012;
begin

if Button <> mbRight then
begin
ReleaseCapture;
SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE,  0 );
end;
end; 
...
Рейтинг: 0 / 0
Перетаскивание формы
    #32188103
alexia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. работает...
...
Рейтинг: 0 / 0
Перетаскивание формы
    #32188486
Фотография ScableR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я несколько по другому все это делаю. Правда, не знаю на сколько это правильно =))). Кстати, этот пример получается поменьше, чем у uranic .
Код: plaintext
1.
2.
3.
4.
5.
6.
   PROCEDURE TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
   CONST
      SC_DragMove = $F012;
   BEGIN
      ReleaseCapture;
      perform(WM_SysCommand, SC_DragMove,  0 );
   END;
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перетаскивание формы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]