Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 回车键没有执行它所执行的操作';它应该在子窗体上显示,是吗?_Delphi - Fatal编程技术网

Delphi 回车键没有执行它所执行的操作';它应该在子窗体上显示,是吗?

Delphi 回车键没有执行它所执行的操作';它应该在子窗体上显示,是吗?,delphi,Delphi,我正在使用以下命令调用子窗体: var frm: TForm2; begin try frm := TForm2.Create(Application); frm.ShowModal; finally frm.Free; end; end; 该子窗体中有一个丰富的编辑,但是,当我按[enter]时,它充当一个选项卡键并切换焦点(这适用于我在这个特定应用程序中创建的所有子窗体,与RichEdit本身无关) 注意事项:我在主窗体和子窗体上尝试了RichEdit.WantRetur

我正在使用以下命令调用子窗体:

var frm: TForm2;
begin
 try
  frm := TForm2.Create(Application);
  frm.ShowModal;
 finally
  frm.Free;
 end;
end;
该子窗体中有一个丰富的编辑,但是,当我按[enter]时,它充当一个选项卡键并切换焦点(这适用于我在这个特定应用程序中创建的所有子窗体,与RichEdit本身无关)

注意事项:我在主窗体和子窗体上尝试了RichEdit.WantReturns true/false、RichEdit.WanTabs true/false和KeyPreview true/false

我的想法:主形态根本没有任何onkey事件,祖先形态与[enter]没有任何关系。由于代码非常庞大,因此可能会在某个地方指定enter作为选项卡,但是这太难找到了。所以我只是想,如果有一种方法可以让enter像enter一样工作,那就容易多了

有什么想法吗

谢谢大家!

编辑

我在一个远程.pas文件中发现了这个问题

if Msg.wParam = 13 then
begin
//bunch of code
Msg.wParam := 9; //Ta-da

谢谢大家的支持。

根据这些信息,无法确定问题出在哪里


我会通过将debug DCU设置为True,在TWinControl上设置一个断点来调试它。选择Next(下一步),并尝试找出按下ENTER键时它为什么会出现在那里。

根据此信息无法确定问题出在哪里


我会通过将debug DCUs设置为True,在TWinControl上设置断点来调试它。选择Next(下一步),并尝试找出当按下ENTER键时它为什么会在那里着陆。

首先,有没有不遵循该习惯用法的特殊原因

frm := TForm2.Create(Self);
try
  frm.ShowModal;
finally
  frm.Free;
end;
??此标准代码更好,因为1)如果未成功创建
frm
,则不会调用
Free
,(2)当对话框关闭时,操作系统(即Windows)知道要聚焦哪个窗体(
Self

第二,您是否在
TForm2
上有一个按钮,上面有
Default:=true
?如果是这样,当您按Enter键时,此按钮将被“单击”(除非具有键盘焦点的控件执行特殊操作-
TEdit
的情况并非如此,但可能是
TRichEdit
)。但是,如果
TRichEdit
具有
WantReturns:=true
,则Enter键应仅在Rich Edit控件中创建新行。这是正常的行为

如果在
TForm2
的实例中按Enter键选择对话框中的下一个控件(关于选项卡顺序属性),则您可能在
TForm2
中做了一些特殊的操作。您是否重写了
TForm2
WndProc
CreateParams
过程?如果是的话,请看一看!或者在
TForm2.OnCreate中是否有一些非常奇怪的东西

更新


既然你说在
TForm2
中没有任何有趣的东西,我的灵力告诉我你在你的主表单中添加了一个
TApplicationEvents
,当你响应它的
OnMessage
事件时,你做了一些奇怪的事情。

首先,你为什么不遵循这个成语

frm := TForm2.Create(Self);
try
  frm.ShowModal;
finally
  frm.Free;
end;
??此标准代码更好,因为1)如果未成功创建
frm
,则不会调用
Free
,(2)当对话框关闭时,操作系统(即Windows)知道要聚焦哪个窗体(
Self

第二,您是否在
TForm2
上有一个按钮,上面有
Default:=true
?如果是这样,当您按Enter键时,此按钮将被“单击”(除非具有键盘焦点的控件执行特殊操作-
TEdit
的情况并非如此,但可能是
TRichEdit
)。但是,如果
TRichEdit
具有
WantReturns:=true
,则Enter键应仅在Rich Edit控件中创建新行。这是正常的行为

如果在
TForm2
的实例中按Enter键选择对话框中的下一个控件(关于选项卡顺序属性),则您可能在
TForm2
中做了一些特殊的操作。您是否重写了
TForm2
WndProc
CreateParams
过程?如果是的话,请看一看!或者在
TForm2.OnCreate中是否有一些非常奇怪的东西

更新

既然你说在
TForm2
中没有任何有趣的东西,我的灵力告诉我你在你的主窗体中添加了一个
TApplicationEvents
,你在响应它的
OnMessage
事件时做了一些奇怪的事情。

错误(可能)不在窗体2中,因为Form2在干净的项目中正常工作

这就剩下了mainform项目文件(带有.dpr的文件)。
在你的问题中发布dpr文件(program1.dpr)的代码,我们会看一看。 接下来是主窗体。显然,要粘贴的代码太多了,所以让我们在代码中包含对“Enter”或“Return”的所有引用

使用Delphi搜索主表单
在Delphi中打开主窗体(通常为Form1),
右键单击表单并从菜单中选择查看为文本。
有时Delphi会拒绝(当使用框架等时),如果拒绝,请跳到下面使用写字板搜索主窗体一节

使用写字板搜索主表单
写字板中打开主窗体的.DFM文件(通常命名为unit1.DFM)

在表单中查找“输入”
搜索单词“Enter”和“Return”,复制并粘贴您在问题中找到的行,以及上面包含单词
object
的第一行

在mainform.pas(unit1.pas)中查找“回车” 使用VK_Enter和VK_Return以及#13和#10搜索所有行,然后将它们与一些上下文代码一起粘贴到您的问题中

其他