任意の項目へフォーカスを移動するには?

解決


もも  2009-07-25 01:33:59  No: 35229

いつもお世話になります。
  日付入力でTMonthCalendarを別のフォームに貼り付けて日付を選択
した後、元のフォームに戻り任意の入力項目(TEdit)へフォーカス
したいのですが、どのようにすればよいのでしょうか?
  インターネットで検索すると、次の項目または前の項目へフォーカス
したりする場合はSendMessage(MyForm.Handle, WM_NEXTDLGCTL, 0, 0);
という方法があるようなんですが、任意の項目へフォーカスを移動する
方法がなかなか見つかりません。
  どなたかご教授頂けますでしょうか?

  以下は、Form5でTMonthCalendarの日付を選択して、Form5をクローズ
して、Form1.Edit2へフォーカスを任意に移動するところで止まって
います。TMonthCalendarの日付を選択するところは上手く動作しています。
----------------------------------------------------------------
procedure TForm5.Button1Click(Sender: TObject);
var
  str_wk : string;
begin
  g1_Birth  := MonthCalendar1.Date;
  DecodeDate(g1_Birth,g1_YY,g1_MM,g1_DD);
  str_wk    := IntToStr(g1_YY) + '/' + IntToStr(g1_MM)  + '/' + IntToStr(g1_DD);
  if g1_Button = 'Form1.Button11' then
    begin
      Form1.Edit2.Text := str_wk;
      Form5.Close;
      (ここにフォーカス移動のコーディングを入れたい)
    end;
end;
----------------------------------------------------------------


Manbon  2009-07-25 01:45:25  No: 35230

Form5.Close;
の後に、以下ではどうでしょうか?

  SetForegroundWindow(Form1.Handle);
  Application.ProcessMessages;
  Form1.Edit2.SetFocus;


tor  2009-07-25 02:28:13  No: 35231

> 任意の項目へフォーカスを移動する方法がなかなか見つかりません。
WM_NEXTDLGCTLの説明を見れば、wParamをコントロールのハンドル、
lParam(の下位ワード)をTRUEにすればそのコントロールに
フォーカスを移動すると書いてあります。
SendMessage(MyForm.Handle, WM_NEXTDLGCTL, 目的のコンポーネント.Handle, true);

もっとも、WM_NEXTDLGCTLが必要なのは、ダイアログボックスで
フォーカス移動に伴うデフォルトボタンの切り替えを正しく行わせるためです。
ご質問の目的なら単にフォームのActiveControlを設定するだけでいいのでは?


もも  2009-07-25 02:29:54  No: 35232

Manbon様、ありがとうございます。
  でも、フォーカスは移動しませんでした。


う〜ん  2009-07-25 02:34:15  No: 35233

> if g1_Button = 'Form1.Button11' then
ここがおかしいと思うけど、いったい何のための行?


もも  2009-07-25 12:29:35  No: 35234

if g1_Button = 'Form1.Button11' then
↑この行は技術的というよりも業務的に無いと困るんです。
思惑どおりに動作しています。


ところで  2009-07-25 18:30:08  No: 35235

Form5の表示方法は?
ShowModalじゃないの?


KHE00221  2009-07-25 20:06:58  No: 35236

単純に
Form1.Edit2.SetFocus;
のみで移動する
SetForegroundWindow(Form1.Handle);
を入れると移動しない


もも  2009-07-27 19:08:15  No: 35237

いつもお世話になります。
  Form1.Edit2.SetFocus; で上手く動作しました。
  .SetFocusは入力系のコンポーネントには付随して
いるみたいですね。Form1.ComboBox7.SetFocus という
のもありました。
  皆様、ご教授頂きありがとうございました。
  また、よろしくお願い致します。(m_m)


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加