type
TForm1 = class(TForm)
private
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure WMMove(var Message: TWMMove); message WM_MOVE;
...
end;
Обработчик перемещений формы
КАК определить, что у формы изменяются координаты
при ее перемещении пользователем по рабочему столу?
Цитата:
Originally posted by StranikS
При написании обработчика возникла проблема:
КАК определить, что у формы изменяются координаты
при ее перемещении пользователем по рабочему столу?
При написании обработчика возникла проблема:
КАК определить, что у формы изменяются координаты
при ее перемещении пользователем по рабочему столу?
Я бы тебе предложил перехватить два системных сообщения: WMSize, WMMove
Например так:
Код:
Главное не забывай из них вызывать соответствующие родительские методы.
Цитата:
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;
begin
inherited;
if PomDot=true then
begin
form15.Left:=form3.Left+form3.Width;
form15.Top:=form3.Top;
end;
end;
Цитата:
Originally posted by StranikS
Я пытаюсь обратиться из процедуры к другой форме, в результате ошибка.
Я пытаюсь обратиться из процедуры к другой форме, в результате ошибка.
Попробуй послать окну сообщение, а не напрямую менять его местоположение. Хотя...
[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;
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).