FireMonkey を使用して作成されたアプリケーションにフォームがあります。その (モーダル) フォームには、Default プロパティを True に設定した [OK] ボタンがあります。メモ要素もあります。メモを入力中に Enter キーを押すと、メモに改行を挿入する代わりにフォームが閉じられるようになりました。
私が達成したいのは、メモコンポーネントで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;
これは機能しますが、Enter キーを押した後、改行が表示される前に少し面倒な遅延が発生します。また、ハックが少なくなる解決策が欲しいです。
また、[OK] ボタンを含むがメモ コンポーネントを含まないフォームもあることに注意してください。ただし、親プロパティを変更することにより、メモは実行時にそのフォームに移動します。