Показать сообщение отдельно
Старый 01.06.2002, 16:20
DMN вне форума Посмотреть профиль Отправить личное сообщение для DMN Посетить домашнюю страницу DMN Найти все сообщения от DMN
  № 2  
DMN
 
Аватар для DMN

Регистрация: Mar 2002
Сообщений: 204
Начну с того, что всякий вставленный в Дельфовую форму ActiveX все равно является объектом класса TControl - значит, есть у него и свойство WindowProc, которое мы можем смело перекрыть... Вся фишка в том, что мы смотрим - если к нам пришло MW_RBUTTONDOWN, мы его обслуживаем самостоятельно и дальше не отдаем. А вот если что другое - всегда пожалуйста, вызываем старый обработчик... В приведенном ниже примере SF - это вставленный в дельфовую форму ActivX с мувиком. При нажатии на правую кнопку жалобно пищит, в остальном функционирует нормально... Пример представлен только для демонстрации идеи...

Код:
unit mftestfm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  OleCtrls, ShockwaveFlashObjects_TLB;

type
  TForm1 = class(TForm)
    sf: TShockwaveFlash;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    OldProc:TWndMethod;
    procedure newProc(var Message: TMessage);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldProc :=sf.WindowProc;
  sf.WindowProc:=newProc;
end;

procedure TForm1.newProc(var Message: TMessage);
begin
  if Message.Msg <> WM_RBUTTONDOWN then
    OldProc(Message)
  else
    MessageBeep(0);
end;

end.