2011-02-06 2 views
3

TDBMemoコンポーネントの選択したテキストをクリップボードにコピーできないのはなぜですか? DELPHI 7、Windows Vista。 次のコードはctrl + cイベントを捕捉できませんが、ctrl + aは正常に動作します。TMemoコンポーネントでCTRL + Cが動作しないのはなぜですか? (Vista + Delphi 7)

uses clipbrd; 

    procedure THierarchierForm.dbm1KeyDown(Sender: TObject; var Key: Word; 
     Shift: TShiftState); 
    begin 

    if (Key=Ord('A')) and (ssCtrl IN Shift) then begin 
    dbm1.SelectAll; 
    Key:=0; 
    end; 

    if (Key=Ord('C')) and (ssCtrl IN Shift) then begin 
    Clipboard.AsText:=dbm1.SelText; 
    Key:=0; 
    end; 

    end; 

ありがとう

+2

私はあなたの質問に対する答えを知らないが、あなたはそれをすべて間違っている。ショートカットを処理する場合は、KeyDownではなくショートカットハンドラを使用する必要があります。 CTRL + SHIFT + ALT + CとCTRLを含む任意の組み合わせを使用してクリップボードにコピーします。メモをクリップボードにコピーしたい場合は、 'dbm1.CopyToClipboard'を呼び出すべきだと思います。 –

+0

私はそれが正しくないことを知っていますが、それは私がそれをキャッチすることはできません、私は多くのトラブル。メモ全体をコピーするのではなく、選択した部分だけをコピーしたい。 「ショートカットハンドラ」とは何ですか? – lyborko

+0

'CopyToClipboard'はあなたが望むことをします。私はいつもShortcutプロパティ(メニューやアクションなど)でこれらのイベントを処理しようとします。 'Shift = [ssCtrl]'と書いておくと良いでしょうが、最も良いのは 'Shift * [ssShift、ssAlt、ssCtrl] = [ssCtrl]'でしょう。とにかく、そうするなら、それをヘルパー関数に移動します。 –

答えて

3

あなたは、プレーンバニラ・フォームの文脈で作品を発表コード。他に干渉する何かがあるはずです。

最も明白なのは、フォームにKeyPreviewが設定されており、Trueと設定されているため、フォームでCTRL+Cが処理されることです。

ご迷惑をおかけして申し訳ございませんが、ご了承ください。

+0

Thanx。しかし、keypreviewはfalseです... – lyborko

+0

Thanx。しかし、keypreviewはfalseです...私は干渉が発生する必要があると考えています.'CTRL + X、CTRL + Vがうまくいきます。 1つのTApplicationEventsオブジェクトがあり、OnMessageイベントハンドラのTDBmemoにルーティングされるイベントがいくつかキャッチされますが、このハンドラを削除しても違いはありません。 – lyborko

+0

私は、スパイまたはそのようなツールを使ってメッセージがどこに行き着くのか確認したいと思います。または、適切な条件付きブレークポイントを使用してDelphiデバッガで実行できます。 –

関連する問題