Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обработчик перемещений формы

4.5K
03 февраля 2005 года
StranikS
44 / / 03.02.2005
При написании обработчика возникла проблема:
КАК определить, что у формы изменяются координаты
при ее перемещении пользователем по рабочему столу?
302
03 февраля 2005 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by StranikS
При написании обработчика возникла проблема:
КАК определить, что у формы изменяются координаты
при ее перемещении пользователем по рабочему столу?


Я бы тебе предложил перехватить два системных сообщения: WMSize, WMMove
Например так:

 
Код:
type
  TForm1 = class(TForm)
  private
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
    procedure WMMove(var Message: TWMMove); message WM_MOVE;
    ...
  end;

Главное не забывай из них вызывать соответствующие родительские методы.
4.5K
03 февраля 2005 года
StranikS
44 / / 03.02.2005
Цитата:
Originally posted by Sagittarius

Главное не забывай из них вызывать соответствующие родительские методы.



Я пытаюсь обратиться из процедуры к другой форме, в результате ошибка. В чем может быть проблема:

 
Код:
procedure TForm3.WMMove(var Mess);
begin
inherited;
if PomDot=true then
 begin
 form15.Left:=form3.Left+form3.Width;
 form15.Top:=form3.Top;
 end;
end;
302
04 февраля 2005 года
Sagittarius
648 / / 12.04.2003
Цитата:
Originally posted by StranikS
Я пытаюсь обратиться из процедуры к другой форме, в результате ошибка.


Попробуй послать окну сообщение, а не напрямую менять его местоположение. Хотя...

4.5K
04 февраля 2005 года
StranikS
44 / / 03.02.2005
Спасибо Sagittarius. Проблему решил. Действительно из процедуры обработки сообщения напрямую можно обратиться только к родительской форме через
[COLOR=darkblue]inherited[/COLOR], для остальных форм - через сообщения API. Ниже привожу исходник процедуры:
Код:
private
    procedure FMove(var mess); message WM_Move;
    ...

procedure TForm1.FMove(var mess);
var rect:Trect;h:hWnd;
begin
 h:=FindWindow('TForm2',nil);
 GetWindowRect(h,rect);
 MoveWindow(h,form1.Left+form1.Width,form1.Top,rect.Right-rect.Left,rect.Bottom-rect.Top,true);
end;


Окно 'form2' будет перемещаться совместно с первым, прилегая к его правому краю (вспоминаем все WinAmp).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог