お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





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

"TRichEditでのプリフィックスキー"



TRichEditでのプリフィックスキーの使い方です。
OnKeyDown だけで処理しようとすると、指定キーの文字が編集画面に
書き込まれてしまいます。そこで、OnKeyUpとフラグを用いて書き込みを
キャンセルします。



[アルゴリズム]
 KeyDownでプリフィックスキーを会得
 TRichEdit を ReadOnly に
        ↓
 次のKeyDown で、指定キーを会得
 TRichEdit の ReadOnly 解除を指示
  指定のルーチンを走らせる。
        ↓
 KeyUp で ReadOnly 解除

[ソース]
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
  {ReadOnly ReSet}
  PreKeyFrg[0] := True;

  {Pre Fix Key Run}
  {Key = 0..9}
  if PreKeyFrg[1] then
  begin
    PreKeyFrg[1] := False;
    if  not(ssCtrl  in Shift) and
        not(ssShift in SHift) and
        not(ssAlt   in Shift) then
    begin
      case Key of
        Ord('0')..Ord('9'):
        begin
          TabX := Key - Ord('0');
          RichEdit1.SelStart := TabX * 3;
        end;
      end;
    end;
    Exit;
  end;

  {Pre Fix Key Set}
  {Cntrol + K}
  if    (ssCtrl  in Shift) and
     not(ssShift in SHift) and
     not(ssAlt   in Shift) then
  begin
    case Key of
      Ord('K'):
      begin
        PreKeyFrg[0] := False;
        PreKeyFrg[1] := True;
        RichEdit1.ReadOnly := True;
      end;
    end;
    Exit;
  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+K を押してから 0..9 までの数値キーを押すと
 押した数値キーの3倍の文字位置へカーソルが動きます。

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


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

Copyright 1996-2002 Delphi Users' Forum