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
|