Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.27;
Скачать: CL | DM;

Вниз

messages   Найти похожие ветки 

 
Fiend ©   (2002-06-14 12:29) [0]

Надо сделать следующее:
Есть A: TWinControl
B: TWinControl

Как сделать так, чтобы когда A получает сообщение WM_VSCROLL, то В тоже уведомлялся об этом


 
Игорь Шевченко ©   (2002-06-14 12:53) [1]

PostMessage очевидно выдавать для B.Handle
Или B.Perform (WM_VSCROLL, ....)


 
Fiend ©   (2002-06-14 14:39) [2]

то Игорь Шевченко
Что то не выходит!?
Може я чё то не так творю, гляданите ПЛЗ

Творю новый класс от 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 14:43) [3]

А почему он должен реагировать? Он же от TGraphicControl, у него Handle нету, сообщения он из очереди не вынимает...


 
Fiend ©   (2002-06-14 15:05) [4]

то Игорь Шевченко.
Сделал так:

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;


И всё работает



Страницы: 1 вся ветка

Текущий архив: 2002.06.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
6-88983
Pauk [AL]
2002-04-19 12:24
2002.06.27
Передача данных через сокеты


1-88805
Cygnus
2002-06-14 10:19
2002.06.27
Количество видимых строк в DBGrid


7-89053
sniknik
2002-04-01 12:32
2002.06.27
Ошибка преобразований типов, для информации. Просьба проверить.


1-88939
Sniffer
2002-06-15 14:13
2002.06.27
Как загрузить картинку из файла ресурсов


7-89060
sniknik
2002-04-01 10:49
2002.06.27
Как получить путь Dll