商品や顧客を検索するのに役立ついくつかのフォームがあります。私がこれらのフォームを開くとき、私は集中する検索のために入力するTEditコントロールが欲しいです。私はそれのためにタイマーを使用してきましたが、私はこれがフォームの表示されていないときに制御が集中するように指示されている場合にエラーを引き起こすので、これを行うより合法的な方法を探してきました。フォームの後にフォーカスコントロールが表示されます
フォームのOnShowイベントの最後に呼び出されるWindowsメッセージAfterShowを使用しようとしました。これは、ActiveControlまたはSetFocusの他のより簡単なソリューションとしては機能しません。ウィンドウのメッセージコードはこれです。
const WM_AFTER_SHOW = WM_USER + 444;
private
procedure WmAfterShow(var Msg: TMessage); message WM_AFTER_SHOW;
procedure Tproducts_edit_form.WmAfterShow(var Msg: TMessage);
begin
self.ActiveControl:= search_txt;
//showmessage(Screen.ActiveControl.Name);
//PostMessage(search_txt.Handle, WM_SETFOCUS, 0, 0);
end;
奇妙なことがshowmessageとのpostMessage両方のコメントを外した場合、TEDITが正しくフォーカスを取得することです。私がしない場合は、フォームが開きますが、Screen.ActiveControl.Nameがフォーカスを持っているコントロールが必要だと言っても、TEditはフォーカスされません。
アイデア?
編集コントロールに 'TabOrder'が' 0'であるようにしてください。 –
私はそれを動作させることはできません... TEditのTabOrderプロパティとそのすべての親コンテナがTabOrder:= 0を持っていることを確認しました。 – Mitsoloth
そのコメントを理解できません。あなたは自分と話しているようです。 –