5,928
社区成员




......
OldWndProc := shckwvflsh1.WindowProc; // 保存当前的窗口过程
shckwvflsh1.WindowProc := NewWndProc; // 设置新的窗口过程
......
procedure TForm1.NewWndProc(var msg: TMessage);
begin
if (msg.Msg = WM_KEYDOWN) and ((msg.WParam = Ord('A'))) then
isKeyDown := 1;
if (msg.Msg = WM_KEYUP) and (msg.WParam = Ord('A')) then
isKeyDown := 2;
OldWndProc(msg); // 恢复原窗口过程
end;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, ExtCtrls;
type
TForm1 = class(TForm)
shckwvflsh1: TShockwaveFlash;
tmr1: TTimer;
procedure FormCreate(Sender: TObject);
procedure tmr1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
OldWndProc: TWndMethod;
procedure NewWndProc(var msg: TMessage);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
isKeyDown: ShortInt;
procedure TForm1.FormCreate(Sender: TObject);
begin
OldWndProc := shckwvflsh1.WindowProc;
shckwvflsh1.WindowProc := NewWndProc;
shckwvflsh1.Movie := 'c:\1.swf';
shckwvflsh1.Play;
end;
procedure TForm1.NewWndProc(var msg: TMessage);
begin
if (msg.Msg = WM_KEYDOWN) and ((msg.WParam = Ord('A'))) then
isKeyDown := 1;
if (msg.Msg = WM_KEYUP) and (msg.WParam = Ord('A')) then
isKeyDown := 2;
OldWndProc(msg);
end;
procedure TForm1.tmr1Timer(Sender: TObject);
begin
if isKeyDown = 1 then
Caption := '按住了A键';
if isKeyDown = 2 then
Caption := '松开了A键';
end;
end.
type
TForm1 = class(TForm)
shckwvflsh1: TShockwaveFlash;
btn1: TButton;
procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
OldWndProc: TWndMethod;
procedure NewWndProc(var msg: TMessage);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
OldWndProc := shckwvflsh1.WindowProc;
shckwvflsh1.WindowProc := NewWndProc;
shckwvflsh1.Movie := 'c:\1.swf';
shckwvflsh1.Play;
end;
procedure TForm1.NewWndProc(var msg: TMessage);
begin
if msg.Msg = WM_KEYDOWN then
begin
// 这里做处理
end;
OldWndProc(msg);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = Ord('A')) and (Self.ActiveControl<>NIL) and (Self.ActiveControl is TShockwaveFlash) then
Caption := 'A Down'
end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = Ord('A')) and (Self.ActiveControl<>NIL) and (Self.ActiveControl is TShockwaveFlash) then
Caption := 'A Up'
end;