公用窗体的处理 ( 积分: 100 )

  • 主题发起人 主题发起人 chinaxuguojun
  • 开始时间 开始时间
C

chinaxuguojun

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在想做一个祖先窗体,这个祖先窗体支持的功能如下:
第一:按回车键,使得下一个可聚焦的控件获得焦点。两种方法,第一个在key...事件中做,第二种使用消息。请把代码写清楚点,我以前也用过,现在忘记了,以前的代码也找不到了。
第二:按上下左右键时,使得它的上下左右的可聚焦的控件获得焦点。这个好象要通过控件的位置进行。
请大家帮个忙,我在线等
 
我现在想做一个祖先窗体,这个祖先窗体支持的功能如下:
第一:按回车键,使得下一个可聚焦的控件获得焦点。两种方法,第一个在key...事件中做,第二种使用消息。请把代码写清楚点,我以前也用过,现在忘记了,以前的代码也找不到了。
第二:按上下左右键时,使得它的上下左右的可聚焦的控件获得焦点。这个好象要通过控件的位置进行。
请大家帮个忙,我在线等
 
Form的KeyPreview设为true

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then form1.perform(WM_NEXTDLGCTL,0,0);
end;

http://www.delphibbs.com/delphibbs/dispq.asp?lid=115578

后面那个麻烦点,要记录位置,方法可以同上
 
这些资料你看一下吧

perform(WM_NEXTDLGCTL,0,0);这是向下移动,请问如何向上移动??????
perform(WM_NEXTDLGCTL,1,0);即可向上移动
为什么不看MSDN,不看HELP你当然不知道了。
perform(WM_NEXTDLGCTL,0,1)
控制焦点移动,还可以利用TWinControl.SelectNext()方法来做!
*********************
Form.KeyPreview := true; 在Form的KeyDown中
if Key = VK_RETURN then
begin
if ActiveControl is TDBGrid or ... then
PostMessage(ActiveControl.Handle, WM_KEYDOWN, VK_TAB, 0);
else
PostMessage(Handle, WM_KEYDOWN, VK_TAB, 0);
Key := 0;
end
---------------
procedure EnterToTab(aForm: TForm; var Key: Char);
begin
if Key = #13 then
begin
key := #0;
aForm.Perform(CM_DialogKey, VK_TAB, 0);
end;
end;
***************
或者拦截Application.OnMessage即可,添加代码:
if Msg.Message = WM_KEYDOWN then
begin
if Msg.wParam = VK_RETURN then
Keybd_event(VK_TAB, 0, 0, 0);
end; //if
 
多谢app2001
多谢henybin
 
后退
顶部