我在使用FireMonkey编写的应用程序中有一个表单.在那个(模态)表单上有一个OK按钮,我已将Default属性设置为True.还有一个备忘录组件.现在,如果在输入备忘录时键入enter键,则表单将关闭,而不是在备忘录中插入换行符.
@H_403_2@我想要完成的是,当在memo组件中按下enter(或者像这样输入或smth)时,输入换行符.在其他组件中,您无法键入换行符,我仍然希望按Enter键关闭表单.到目前为止,我发现的最好的方法是将以下代码添加到表单OnCloseQuery操作中:
if (Focused.GetObject.ClassName = 'TMemo') and (ModalResult = mrOk) then begin CanClose := False; Memo := TMemo(Focused.GetObject); Memo.InsertAfter(Memo.CaretPosition,sLineBreak,[TInsertOption.ioMoveCaret,TInsertOption.ioCanUndo]); end else CanClose := True;@H_403_2@这是有效的,但现在有一个令人讨厌的延迟,在击中输入后和换行符出现之前.我也希望解决方案,这将不那么hacky. @H_403_2@我还应该指出,我还有包含OK按钮但不包含备忘录组件的表单,但是备忘录将在运行时通过更改其父属性移动到该表单.
解决方法
在备忘录的OnEnter中将btnOk.Default设置为False,并在备忘录的OnExit中将其设置为True