2013-03-16 5 views
8

私はFireMonkeyを使って書かれたアプリケーションのフォームを持っています。その(モーダル)フォームには、[OK]ボタンがあります。このボタンでは、DefaultプロパティをTrueに設定しています。メモコンポーネントもあります。メモを入力するときにEnterキーを押すと、メモに改行を挿入するのではなく、フォームが閉じられます。デフォルトボタンが付いたフォーム上でのTMemoの改行

私が達成したいのは、メモコンポーネントで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; 

これは動作しますが、入力し、改行が表示される前に打った後、小さな迷惑な遅延がありますが、今があります。また、私はソリューションがほしいと思う、それはあまりにもハッキリだろう。

また、私はOKボタンを含むフォームを持っていますが、メモコンポーネントはありませんが、メモは実行時にその親プロパティを変更することによってそのフォームに移動されます。あなたのメモのOnEnterFalse

+1

では 'Memo.Lines.BeginUpdateを試してみてください;'メモ内容と 'Memo.Lines.EndUpdateを変更する前に、'その後。 – Abelisto

+3

EmbaはTMemo WantReturns、WantTabsのプロパティを実装しませんでした:o(Defaultプロパティを設定するために、フォーカスされたTMemoがあるかどうかを確認するためにフォーム上でOnIdleイベントを使用しますが、EmbaもFMXのTApplicationEventを持っていません: OnUpdate少なくとも1つのアクションが定義され、コントロールに割り当てられている場合にアイドル状態で発生したイベント –

+1

デフォルトのボタンOnClickイベントでは、メモがフォーカスされているかどうかをテストし、mrNoneに設定します。 –

答えて

2

設定​​、バックTrueにメモのOnExit

+0

いつもそれは簡単ではありません。私はフォームがあります。フォームは、OKボタン(http://stackoverflow.com/a/9048640/721309のように)にフォームに埋め込まれた別のフォーム上にあります。したがって、メモにはボタンがあるかどうかを知る方法がありません。 –

+1

その場合、 'Default'が' True'に設定されたボタンを親のコントロールから検索し、 'CMEnter()'メソッドで 'False'に設定する' TMemo'の子孫を作成し、 'CMExit()'の 'True'に戻ります。 –

関連する問題