谢谢softwaiter! 我似乎截获不了这个消息 TActiveFormX = class(TActiveForm, IActiveFormX) Edit1: TEdit; Edit2: TEdit; Button1: TButton; protected procedure WndProc(var Message: TMessage); override;// ................. procedure TActiveFormX.WndProc(var Message: TMessage); begin if Message.Msg = WM_GETDLGCODE then begin beep(); Message.Result := DLGC_WANTALLKEYS; end else inherited; end;
这个问题困扰我很长一段时间了,softwaiter兄,可否给我具体说说!
yrb():你好,我做了一个ActiveXForm试验了一下,其中放了一个Edit控件,可以响应Delete和Ctrl+C阿,如果编辑控件是你自己写的,那么不但要在ActiveXForm里WM_GETDLGCODE消息,而且在编辑控件中也要响应WM_GETDLGCODE消息,如下(例如你写的编辑控件是派生的Edit,名为TEdit1):procedure TEdit1.WMGetDlgCode(var Message: TWMGETDLGCODE); begin inherited; Message.Result := Message.Result or DLGC_WANTTAB or DLGC_WANTCHARS or DLGC_WANTALLKEYS or DLGC_WANTARROWS; end;你可以试验一下,不知道可行否
我用delphi作activex控件(包括activeform)的时候,如果上面有编辑控件,在ie里使用这个activex控件的时候,如果网页上也有编辑控件的化,并且我的activex控件的焦点如果从网页上的那个编辑控件切换过来的话,我的那个编辑控件就不能相应delete键,也不能相应Ctrl+C键,你的这个似乎没有这个问题,能告诉我是怎么解决的吗?
你需要截获WM_GETDLGCODE消息自己进行处理
我似乎截获不了这个消息 TActiveFormX = class(TActiveForm, IActiveFormX)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
protected
procedure WndProc(var Message: TMessage); override;// .................
procedure TActiveFormX.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_GETDLGCODE then
begin
beep();
Message.Result := DLGC_WANTALLKEYS;
end
else
inherited;
end;
begin
inherited; Message.Result := Message.Result or DLGC_WANTTAB or
DLGC_WANTCHARS or DLGC_WANTALLKEYS or DLGC_WANTARROWS;
end;你可以试验一下,不知道可行否
谢谢!
这种方法行不通。你的控件应该是个activex吧,如果是ActiveForm也会有这个问题。
想再现这个问题,你需要在插入控件的网页上放置表单,在表单上放置编辑控件,然后将焦点从表单上编辑控件转移到ActiveForm上。