使用“默认”按钮在表单上的TMemo中换行

时间:2013-03-16 10:33:22

标签: delphi firemonkey-fm2

我在使用FireMonkey编写的应用程序中有一个表单。在那个(模态)表单上有一个OK按钮,我已将Default属性设置为True。还有一个备忘录组件。现在,如果在输入备忘录时键入enter键,则表单将关闭,而不是在备忘录中插入换行符。

我想要完成的是,当在memo组件中按下enter(或shift + 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;

这样可行,但现在有一个令人烦恼的延迟,在击中输入后和换行符出现之前。此外,我想解决方案,这将不那么hacky。

我还应该指出,我也有包含OK按钮但不包含备忘录组件的表单,但是备忘录将在运行时通过更改其父属性移动到该表单。

1 个答案:

答案 0 :(得分:2)

在备忘录的btnOk.Default中将False设为OnEnter,然后在备忘录的True中将OnExit设为<{1}}