非アクティブなウィンドウの作成
ソフトウェアキーボードのように他にアクティブなウィンドウがありつつ、自分自身はクリックイベントなどのイベント処理をやる場合は、次のようにしてフォームの属性を変更します。
procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited; Params.ExStyle := Params.ExStyle or WS_EX_NOACTIVATE; end;
それから、他のウィンドウで隠れないように常に全面に表示するように設定します。
procedure TForm1.FormCreate(Sender: TObject); begin SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE); end;
基本的にはこの2つをやっておけばOKです。ただしこの方法ですと、ダイアログを表示するとウィンドウがアクティブになってしまったり、WM_MOVEなどのメッセージを受け取れるタイミングが変わるなど思わぬ動作もあるので注意が必要です。