delphi 如何使用回车键模仿Tab键
1个回答
展开全部
正在装载数据……回答:先将窗体的KeyPreview属性设为True。然后在FormKeyPress事件中加入以下代码:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);beginif Key = #13 then { 如果按下了回车键 }beginKey := #0{ 吃掉回车键 }
Perform(WM_NEXTDLGCTL, 0, 0); { 移动到下一个控制 }endend这个方法对于大多数控件都适用,但不适用于TButton控件,因为对于按钮,回车键等于按下了按钮,不触发FormKeyPress事件。
答:要改写成一个自定义过程,可以这样:
procedure MyKeyPress(frm:TForm; var Key: Char);beginif Key = #13 then { 如果按下了回车键 }beginKey := #0{ 吃掉回车键 }
frm.Perform(WM_NEXTDLGCTL, 0, 0); { 移动到下一个控制 }endendprocedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);beginMyKeyPress(Self, Key);end如果你经常使用这样的窗体,你也可以在设置好KeyPreview属性和输入代码后,在Form上击右键,选择Add to Repository,这样把Form添加到Delphi的Repository库中,以后建立新窗口时,可以从Delphi的对话框的Forms中选择你添加的这个窗体作为模板。
答:这的确是个问题。可以这样解决:在KeyPress事件中先判断一下控件的类型,如果当前控件是TMemo或TDBMemo(甚至可以进一步检查控件的名字中是否带有Memo的),就不进行移动,对于这样的控件还是通过Tab键移动。下面是代码:
var sClassName: stringbeginif Key = #13 then { 如果按下了回车键 }beginsClassName := TForm(Sender).ActiveControl.ClassName;
if (sClassName <'TDBMemo')
And (sClassName <'TMemo') thenbeginKey := #0{ 吃掉回车键 }
Perform(WM_NEXTDLGCTL, 0, 0); { 移动到下一个控制 }end
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询