Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > WM_MOVE


Автор: midiar 16.1.2006, 12:43
У меня в компоненте одна из частей является наследником TGraphicControl, мне нужно отслеживать ее перемещение по экрану. Я делаю это следующим образом.
Код

  TAPlanDiagramPlotControl = class(TGraphicControl)
    private
      procedure WMMove(var Message: TWMMove); message WM_MOVE;
  ...

procedure TAPlanDiagramPlotControl.WMMove(var Message: TWMMove);
var
  pt:TPoint;
  pdc: TAPlanDiagramControl;
begin
  Inherited;
  pdc := FSlider.Owner as TAPlanDiagramControl;
  pt:=ClientToScreen(Point(Width,0));
  pdc.FForm.Left := pt.X - 40;
  pdc.FForm.Top := pt.Y+10;
end;


Но процедура WMMove не вызывается при перемещении контрола. В чем может быть дело?

Автор: Alexeis 16.1.2006, 12:50
TGraphicControl не является Windows окном значит и не получат сообщений от windows.

Видимо придется поменять предка на TWinControl

Автор: midiar 16.1.2006, 13:01
У наследников TWinControl тоже не вызывается.
Добавлено @ 13:03
То есть вообще вызывается, не вызывается при перетаскивании окна.

Автор: Alexeis 16.1.2006, 13:13
Цитата

У наследников TWinControl тоже не вызывается

У формы точно работает smile

и у панели вот пример:
Код

  Tmypanel = class(Tpanel)
    procedure WMMove(var Message: TWMMove); message WM_MOVE;
  end;

var
  Form1: TForm1;
  pnl  : tmypanel;
implementation

{$R *.dfm}

procedure Tmypanel.WMMove(var Message: TWMMove);
begin
  Inherited;
  messagebox(handle,'ðàáîòàåò','',0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 pnl := Tmypanel.Create(form1);
 pnl.Parent := form1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  pnl.Top := pnl.Top + 10;
end;

Автор: midiar 16.1.2006, 17:57
А мышой когда окно двигаешь, то как ловить?

Автор: Alexeis 16.1.2006, 18:10
А как данном случае присходит передвижение мышкой smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)