怎样将窗体不需要截获的按键信息返回给对象?(50分)

  • 主题发起人 主题发起人 AsStone
  • 开始时间 开始时间
A

AsStone

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个窗体中设定,Form.KeyPrivew := True; 但是编辑框的按键信息我希望不能截获。
如何将截获的信息返回给对象?!
 
在编辑框Enter事件里设置,form.keypreview为False,在Exit事件里再设回去。
 
多谢!
可能我问题说的不是很清楚,我说的编辑框只是举一个实例,并不专指它,例如:
我在系统中嵌套了 IE,但是我不希望 IE 中的某些键值被主 Form 截获。谢谢!!!!
 
屏蔽F1键
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 112 then //F1键
key := 0
else showmessage('0');
end;
 
大家又错了,不是该按键信息不处理,而是,虽然主 Form 截获了 IE 的按键信息,但我
要将按键信息发回给 IE,如:我在 IE 地址栏输入了地址,敲回车,但该回车信息被主 Form
截获了,我希望将该信息发回给 IE处理。
 
只要不在Form1keyDown 事件里面把Key=0,其他控件是可以得到键盘信息的,
不用特别处理.只要判断Form1.ActiveControl<>IE 就处理该键,并设置Key=0,否则
不处理按键信息.让IE控件处理.
 
把下面的hook改一下可能就可以了。

{
demonstrate a mouse hook in a form.
}
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, OleCtrls, SHDocVw, ComCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
WebBrowser1: TWebBrowser;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
FMHook: HHOOK;
function FMHookProc(Code: Integer; WParam: Longint; var Msg: TMsg): Longint; stdcall;

implementation

{$R *.DFM}

function FMHookProc(Code: Integer; WParam: Longint; var Msg: TMsg): Longint; stdcall;
begin
if Msg.Message = WM_RBUTTONDOWN then
with form1 do
begin
//你还可以先判断一下位置。
Msg.Message := 0; //屏蔽右键
end ;
Result := CallNextHookEx(FMHook, Code, WParam, Longint(@Msg)); //放出消息给下一个.
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FMHook := SetWindowsHookEx(WH_GETMESSAGE, @FMHookProc, 0, GetCurrentThreadID);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('www.vckbase.com');
end;

end.
 
对不希望载获的按钮,判断一下直接 exit就行了。
不要进行任何处理
 
后退
顶部