ログイン: パスワード:   新規登録  パスワード紛失
 
メインメニュー
検索
オンライン状況
登録ユーザ: 0
ゲスト: 5
テーマ選択

(4 テーマ)
子フォームをタスクバーに表示する のバックアップの現在との差分(No.1)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
 [[Delphi]]
 
 **子フォームをタスクバーに表示する [#w7930d04]
 
 Delphiでは子フォームを作成して表示しても、タスクバーには表示されない。また、子フォームを最小化するとデスクトップにアイコン化されてしまう。 
 
 子フォームをタスクバーに表示し、最小化してもアイコン化されないようにするには次のように CreateParamsメソッドをオーバーライドする。 
 
  type
    TForm1 = class(TForm)
    private
      { private 宣言 }
    protected
      procedure CreateParams(var Params: TCreateParams); override;
    public
      { public 宣言 }
    end;
  
    :
    :
  
  procedure TForm1.CreateParams(var Params: TCreateParams);
  begin
    inherited;
    if FormStyle in [fsNormal, fsStayOnTop] then begin
      if BorderStyle in [bsSingle, bsSizeable] then begin
        Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
        Params.WndParent := GetDesktopWindow();
      end;
    end;
  end;
 
 
 -FormStyle と BorderStyle のチェックが本当に必要かどうかは詳しく検証していない。
 -Params.WndParentに代入するのは "0"でも良いようだ。(Params.WndParent := 0) 
 -Params.WndParentに代入をしないとタスクバーには表示されるが、タスクバーをクリックして Formを切り替えるときに動作がおかしくなる。 
 
 この方法で子ウィンドウから別フォームをモーダル表示するときには、モーダル表示するフォームの CreateParamsも次のように変更しなくていけない。
 変更しないと、メインフォームが前面に切り替わってしまう。 
 
  type
    TForm2 = class(TForm)
    private
      { private 宣言 }
    protected
      procedure CreateParams(var Params: TCreateParams); override;
    public
      { public 宣言 }
    end;
  
    :
    :
  
  procedure TForm2.CreateParams(var Params: TCreateParams);
  begin
    inherited;
    if (Owner <> nil) and (Owner is TWinControl) then
      Params.WndParent := TWinControl(Owner).Handle;
  end;
 
 また、モーダル表示のインスタンスを作成するときにはOwnerは呼び出し元にしなければいけない。 
 
  Form := TForm2.Create(Self);	//Selfを Application や nil にしてはいけない
  try
    Form.ShowModal();
  finally
    Form.Free;
 

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
PR