![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
messages
Fiend © (2002-06-14 12:29:00)Надо сделать следующее:
Есть A: TWinControl
B: TWinControl
Как сделать так, чтобы когда A получает сообщение WM_VSCROLL, то В тоже уведомлялся об этом
Fiend (2002-06-14 15:05:00) [1]то Игорь Шевченко.
Сделал так:
TBandsController = class(TGraphicControl)
private
....
fBandsHostControl: TWinControl;
DefWindowProc: TWndMethod;
procedure SetBandsHostControl(newControl: TWinControl);
protected
.....
procedure HostScrolled(var message: TMessage);
procedure ControllerWindowProc(var Message: TMessage);
public
constructor Create(AOwner: TComponent);
destructor Destroy;
end;
destructor TBandsController.Destroy;
begin
fBandsHostControl.WindowProc:= DefWindowProc;
end;
procedure TBandsController.SetBandsHostControl(newControl: TWinControl);
begin
if newControl<>fBandsHostControl
then begin
if fBandsHostControl<>nil
then fBandsHostControl.WindowProc:=DefWindowProc;
fBandsHostControl:= newControl;
DefWindowProc:= newControl.WindowProc;
newControl.WindowProc:=ControllerWindowProc;
Invalidate;
end;
end;
procedure TBandsController.HostScrolled(var message: TMessage);
begin
beep;
end;
procedure TBandsController.ControllerWindowProc(var Message: TMessage);
begin
if Message.Msg=WM_VSCROLL
then HostScrolled(Message);
DefWindowProc(Message);
end;
И всё работает
Игорь Шевченко (2002-06-14 14:43:00) [2]А почему он должен реагировать? Он же от TGraphicControl, у него Handle нету, сообщения он из очереди не вынимает...
Fiend (2002-06-14 14:39:00) [3]то Игорь Шевченко
Что то не выходит!?
Може я чё то не так творю, гляданите ПЛЗ
Творю новый класс от TGraphicControl
TBandsController = class(TGraphicControl)
private
fBandsHostControl: TWinControl;
...
procedure SetBandsHostControl(newControl: TWinControl);
protected
...
procedure HostScrolled(var message: TMessage);message WM_VSCROLL;
.......
procedure TBandsController.SetBandsHostControl(newControl: TWinControl);
begin
if newControl<>fBandsHostControl
then begin
fBandsHostControl:= newControl;
PostMessage(newControl.Handle, WM_VSCROLL, 0, 0);
Invalidate;
end;
end;
......
procedure TBandsController.HostScrolled(var message: TMessage);
begin
beep;
end;
И чё то не пикает
Что делать
Игорь Шевченко (2002-06-14 12:53:00) [4]PostMessage очевидно выдавать для B.Handle
Или B.Perform (WM_VSCROLL, ....)