TK128,梦回九月天,marshal,wen,heat请进,关于ACTIVEFORM的方向键和TAB键的问题。(200分)

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

gmc001

Unregistered / Unconfirmed
GUEST, unregistred user!
你们的提问及解答我都看了,而且好像你们都解决了这个问题,但是我用那些方法
却一点效果都没有,这个问题困扰我近一个月了,希望你们看到后能帮我一把,谢谢!

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1208281
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1012059
http://www.delphibbs.com/delphibbs/dispq.asp?lid=789177
http://www.delphibbs.com/delphibbs/dispq.asp?lid=886336
 
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;
 
to:bubble
非常感谢你!
按你的方法,可以解决这个问题。
不过我还是不太明白

ActiveForm并不处理CN_KeyDown(VCL control notification IDs)消息,
也就是说过滤掉了内含Vcl内部的KeyDown消息。

你是怎么知道"ActiveForm并不处理CN_KeyDown(VCL control notification IDs)消息"的?
并且还知道给ActiveForm加上CN_KeyDown消息的处理就能解决问题?
开始我碰到这个问题的时候,我试图找DELPHI的例子,但是一无所获,
然后是上网查找,找到一些方法,但我都没试成功。
我想之所以这么长时间都不能解决这个问题,最主要的原因是我对DELPHI的消息机制不了解。
所以我想请问,你是如何了解的。

另外,我感觉DELPHI的帮助不够全面,我想看一下CN_KeyDown是什么意思都找不到!
而且,看了帮助里的关于创建自定义组件及消息处理的部分,也没有找到答案。

我的QQ是:7552667
希望以后能多多指教!

再次表示感谢!
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
680
import
I
后退
顶部