2013-07-24 17 views
6

入力します:彼らは押した場合、彼らはそれをEnterキーを押すと空TMemoオブジェクト+私が達成しようとしている何

  • をユーザーがTMemoオブジェクトボックス
  • にテキストを入力するには、新しい行
  • を作成し+ Ctrlキーは[KeyPreviewのがTrue]それは私がこのコードを使用しています別のボックスにテキストを移動し、TMemoオブジェクト

を空にを入力します。

procedure TFMsg.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); 
begin 
    if (Shift = [ssCtrl]) and (Key = $0D) then 
    begin 
    Key := 0; 
    btnSendClick(Sender); //this moves the text and empties the TMemo box 
    end; 
end; 

実際に何が起こっている:

  • Ctrlキーが + を入力しますが、他のボックスにテキストを送信しTMemoオブジェクトが空になるが、カーソルの点滅座っているように、キーを入力し受け入れるように思わ
  • 2行目

喜んでお寄せいただきありがとうございます。ありがとうございました!

答えて

7

次のようにこれを処理するための最良の方法は次のとおりです。

  1. は、アクションリスト、またはアクションマネージャを作成するか、既存のものを再使用します。
  2. メモを消去して次のメモに移動するアクションを追加します。アクティブなコントロールが実際にメモであることを確認する必要があります。
  3. 希望するショートカットを入力してください。CTRL + です。

アクションを何かに付ける必要はありません。ショートカットが確実に処理されることを保証するだけの存在である。

修飾キーを使用した複合キーボード操作の場合は、アクションショートカットを使用するのが最も簡単なので、下位レベルのキーボード操作コードから長さを保ちます。私は複数のメモがあることを仮定していると、テキストは、タブ順で次のいずれかに1 memoから移動され、このコードでは

if ActiveControl is TMemo then 
begin 
    Memo := TMemo(ActiveControl); 
    Text := Memo.Text; 
    Memo.Clear; 
    SelectNext(Memo, True, True); 
    if ActiveControl is TMemo then 
    begin 
    Memo := TMemo(ActiveControl); 
    Memo.Text := Text; 
    end; 
end; 

あなたのアクションハンドラは次のようになります。しかし、あなたのニーズはまったく違うかもしれません。どのような場合には、あなたのシナリオに必要なことが明らかになると確信しています。

+0

それは素晴らしいです、ありがとうございます。同様の試みをしている人のために、Ctrl + EnterはObject Inspectorのデフォルトオプションの1つではありません。 FormCreateのこの行は、手動で追加されました: 'Action1.ShortCut:= ShortCut($ 0D、[ssCtrl])'。 –

-1
property WantReturns: Boolean; 
+2

コードのみの投稿は、特に1行しか含まれておらず、本当に値を追加していない場合には、回答とはみなされません。あなたは答えを説明するために[編集]できますか?もしそうでなければ、それはおそらく "答えではない"として削除されます。ありがとう。 –

+1

「コードのみの回答」がここでは適切でない理由については、[このメタ投稿](http://meta.stackexchange.com/q/148272/172661)を参照してください。 –

0

は、そのためのメモのONKEYPRESSイベントを使用します。

procedure TFMsg.Memo1KeyPress(Sender: TObject; var Key: Char); 
begin 
    if (key=#10) and (GetKeyState(VK_CONTROL)<0) then 
    begin 
     key:=#0; 
     btnSendClick(Sender); 
    end; 
end; 

あなたは(#10)フィードラインをチェックしなければならないことに注意してください、ないキャリッジリターン(#13)のために。

関連する問題