Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 198

/ вопрос открыт /

Как отследить перемещение формы? Такого события нет вроде! Ну вообще то я видел уже что-то по этому поводу в Интернете, но мне бы хотелось, чтобы объяснили!
Это надо для того, чтобы остальные формы моего программного средства двигались вместе с панелью инструментов, как прикреплённые!
Заранее спасибо!

RedMask Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: RedMask (статус: Посетитель)
Вопрос отправлен: 15 декабря 2006, 13:52
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: PaVeL-Ekt

Здравствуйте, RedMask!

Да Вы правы события такого нету,
но есть событие OnMouseMove

Создадим глобальную переменную типа
Type TForm_coord=record
X: integer;
Y: integer;
end;

Var
Form1: TForm1;
Form_Coord: TForm_coord;

теперь обработчик движения мыши:
Procedure TForm1.OnMouseMove(Sender: TObject; ...);
begin
if (ssLeft in state)and((x>0)and(x<form1.width)and(y>0)and(y<)) then
if (x<>Form_Coord.x)or(y<>Form_Coord.y) then
begin
//ваша Функция или процедура при передвижении формы;
Form_Coord.x:=x;
Form_Coord.y:=y;

Ответ отправил: PaVeL-Ekt (статус: 2-ой класс)
Время отправки: 15 декабря 2006, 14:13
Оценка за ответ: 4

Ответ #2. Отвечает эксперт: Вадим К

Зачем так сложно? И мне кажеться это не совсем то, что просят у нас. Итак, вот мой вариант
в public части формы обявим новый метод.
public
procedure WMMove(var mess:TWMMove);message WM_Move;
Дальше жмём Ctrl+Shift+C и Делфи сгенерирует обработчик. Там можно писать код обработки. Текущие координаты формы можно узнать непосредственно (Top и Left) или с этого параметра, так как он - структура.
Эта процедурка будет дёргаться каждый раз, когда форма будет соваться по экрану

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 15 декабря 2006, 16:49
Оценка за ответ: 4


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 25 января 2007, 21:17; участников в обсуждении: 2.
PaVeL-Ekt

PaVeL-Ekt (статус: 2-ой класс), 15 декабря 2006, 14:17 [#1]:

сорри нечайно нажал отправить, вот полный код:
Здравствуйте, RedMask!

Да Вы правы события такого нету,
но есть событие OnMouseMove

Создадим глобальную переменную типа
Type TForm_coord=record
X: integer;
Y: integer;
end;

Var
Form1: TForm1;
Form_Coord: TForm_coord;

теперь обработчик движения мыши:
Procedure TForm1.OnMouseMove(Sender: TObject; ...);
begin
if (ssLeft in state)and((x>0)and(x0)and(y<((GetSystemMetrics(SM_CYCAPTION))) then
if (x<>Form_Coord.x)or(y<>Form_Coord.y) then
begin
//ваша Функция или процедура при передвижении формы;
Form_Coord.x:=x;
Form_Coord.y:=y;
end;
end;

Еще при создании формы в Form_Coord задайте начальные координаты;
PaVeL-Ekt

PaVeL-Ekt (статус: 2-ой класс), 15 декабря 2006, 14:23 [#2]:

я писал без делфы на память, а потому прошу прощения за возможные неточности в часности в следующих строках:
if (ssLeft... //установите курсор на Shift и клик F1 там точно написано какой Left
в этой-же строке нужно уточнить x считаеться с начала по форме или по экрану
если по экрану тогда необходимо добавить
x>Form1.Left ... x y>Form1.Top ... y вроде все
Виталик

Виталик (статус: Посетитель), 25 января 2007, 21:17 [#3]:

Зачем нужен тип TForm_coord? Ведь тип TPoint - это тоже самое!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:47
Выполнено за 0.02 сек.