お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"TRichEditでの Keyイベントの置き換え"



TRichEdit 固有の Keyイベントを置き換えます。
TRichEdit は、[Ctrl]+[V] などのイベントを独自に持っています。普通に
使うには調子がよいのですが、テキストデータだけ貼り付けたい場合などに
問題が置きます。FormのOnkeyイベントを用いて書き込みをキャンセルしま
す。
コンポーネントまでもぐってOverrideをかけるのが本道ですが、毎度使う
わけでもなく小手先で逃げたい場合に有効です。



[アルゴリズム]
 KeyDownでキーイベントを会得
  指定のルーチンを走らせる。
 TRichEdit を ReadOnly に
        ↓
 KeyUp で ReadOnly 解除

[ソース]

uses Clipbrd;

var
  PreKeyFrg : array[0..1] of Boolean;
{
        PreKeyFrg[0] : ReadOnly Set
        PreKeyFrg[1] : PreFixKey Set
}

(* KeyPreview := True *)
procedure TForm1.FormCreate(Sender: TObject);
begin
    Form1.KeyPreview := True;
end;

(* KeyDown *)
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);

var TabX : Byte;

begin
  PreKeyFrg[0] := True;
  {Ctrl + V run}
  if   (ssCtrl  in Shift) and
    not(ssShift in SHift) and
    not(ssAlt   in Shift) then
    case Key of
      Ord('V'):
      begin
        RichEdit1.SelText := Clipboard.AsText;
        RichEdit1.ReadOnly := True;
      end;
    end;
end;

(* ReadOnly ReSet *)
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  {ReadOnly}
  if PreKeyFrg[0] then
    with RichEdit1 do
      if ReadOnly then ReadOnly := False;
end;

[動作]
 Ctrl + V を押すと、テキストデータのみが貼り付きます。

Original document by 後藤 治彦   氏 ID:(HCG03153)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum