|
15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」
[Q]
Editコントロールで、Enterキーや、上下キーが押された時に、次の
コントロールにフォーカスを移動させるにはどうすればいいのですか?
字数制限(MaxLength)を設定したEditコントロールで、制限字数まで
入力されると次のコントロールにフォーカスを移したいのですがどうし
たらいいのですが?
[A]
フォーカスの移動にはSendMessage(API)を使うと比較的簡単に行えます。
以下の例を参考にしてみて下さい。
{Enterキーで次のコントロールに移動}
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then begin
SendMessage(MyForm.Handle, WM_NEXTDLGCTL, 0, 0);
Key := #0;
end;
if Key <> #0 then inherited KeyPress(Key);
end;
{上下キーで前後のコントロールに移動}
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Direction: Word;
begin
if (Key = VK_UP) or (Key = VK_DOWN) then begin
if Key = VK_UP then Direction := 1
else Direction :=0;
SendMessage(Handle, WM_NEXTDLGCTL, Direction, 0);
end
else inherited KeyDown(Key, Shift);
end;
{制限字数になったら次のコントロールに移動}
procedure TForm1.Edit1Change(Sender: TObject);
begin
if Length(Edit1.Text) >= Edit1.MaxLength then
SendMessage(Handle, WM_NEXTDLGCTL, 0, 0);
end;
※長さの判定の所を以下のように変えて、複数のEditControlの
共有イベントにすれば制限字数の異なるEditControlがあっても
イベントハンドラの記述は一つですみます。
Length(TEdit(Sender).Text) >= TEdit(Sender).MaxLength
----------------------------------------------------------------
※OnKeyPressとOnKeyDownの違いについては、ヘルプを参照して
勉強して下さい。
※SendMessage(Handle, WM_NEXTDLGCTL, 0, 0);
の第3引数が0であれば次のコントロール、
1であれば前のコントロール
に移動できるようです。
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。
Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会
|