8

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] ボタンを含むがメモ コンポーネントを含まないフォームもあることに注意してください。ただし、親プロパティを変更することにより、メモは実行時にそのフォームに移動します。

4

1 に答える 1

2

メモの に設定btnOk.DefaultFalse、メモのにOnEnter戻るTrueOnExit

于 2013-03-17T17:12:07.713 に答える