ActiveForm 中关于方向键的问题,206 倾囊求解 ( 积分: 206 )

  • 主题发起人 主题发起人 garden_p1
  • 开始时间 开始时间
G

garden_p1

Unregistered / Unconfirmed
GUEST, unregistred user!
做了一个ActiveForm控件,封装了RichEdit在里面,放在Delphi窗口中使用时,上下左右方向键成了切换焦点了。
原因是父类TWinControl截获了这些键,我现在想让RichEdit自己处理这些键,应该如何做啊,请大家帮忙。谢谢。
 
做了一个ActiveForm控件,封装了RichEdit在里面,放在Delphi窗口中使用时,上下左右方向键成了切换焦点了。
原因是父类TWinControl截获了这些键,我现在想让RichEdit自己处理这些键,应该如何做啊,请大家帮忙。谢谢。
 
这样的问题问过很多次了!


delphi把ActiveForm当作一个控件来处理,
当ActiveForm里面有Memo等控件的时候,
ActiveForm并不处理CN_KeyDown(VCL control notification IDs)消息,
也就是说过滤掉了内含Vcl内部的KeyDown消息。
所以你的ActiveForm如果有Memo等控件,你需要自己给ActiveForm加上CN_KeyDown消息的处理。
比如说我的ActiveForm上有个Memo.
type
TForm1 = class(TForm)
Button1: TButton;
Actfrm: TActiveFormXdj;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
OldActfrmWndProc: TWndMethod;
procedure ActfrmWndProc(var msg: TMessage);Message CN_KEYDOWN;

end;

var
Form1: TForm1;
implementation

{$R *.DFM}

procedure TForm1.ActfrmWndProc(var msg: TMessage);
begin
if (Msg.wParam =VK_Left)or(Msg.wParam =VK_Return)or(Msg.wParam =VK_Up)or(Msg.wParam =VK_Right)or(Msg.wParam =VK_Down) then
begin

end
else
begin
Inherited;
OldActfrmWndProc(msg);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
OldActfrmWndProc := Actfrm.WindowProc;
Actfrm.windowProc := ActfrmWndProc;
end;
 
谢谢寻路,我本来也想这个应该问了很多遍,不过搜索不到。实在是汗啊。
 
后退
顶部