お知らせ

電子会議

ライブラリ

FDelphi サイト全文検索

Delphi FAQ一覧

サンプル蔵



FDelphi FAQ
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編纂委員会