强制应用程序在显示对话框时显示TaskBar图标

时间:2015-12-11 09:03:18

标签: delphi dialog delphi-2007 taskbar

开始时,如果有更新,则下载并替换运行时包。如果其中一个正在使用中,则会显示允许用户重试或取消的对话框窗口(使用MessageDlg)。显示对话框时,尚未创建任何表单,并且应用程序图标在任务栏中不可见。 我可以创建一个自定义对话框表单并覆盖CreateParams过程(在这里Force application to show TaskBar Icon during OnCreate procedure),但我想知道我是否可以使用标准对话框消息做同样的事情。

其他信息: 在"(Win32MajorVersion> = 6)和UseLatestCommonDialogs和ThemeServices.ThemesEnabled"如果为False,则MessageDlg将对话框创建为TMessageForm(从TForm继承)。如果条件结果为True,则执行以下函数:

var
  _TaskDialogIndirect: function(const pTaskConfig: TTaskDialogConfig;
    pnButton: PInteger; pnRadioButton: PInteger;
    pfVerificationFlagChecked: PBOOL): HRESULT; stdcall;

  _TaskDialog: function(hwndParent: HWND; hInstance: HINST;
    pszWindowTitle: LPCWSTR; pszMainInstruction: LPCWSTR; pszContent: LPCWSTR;
    dwCommonButtons: DWORD; pszIcon: LPCWSTR; pnButton: PInteger): HRESULT; stdcall;

function TaskDialogIndirect(const pTaskConfig: TTaskDialogConfig;
  pnButton: PInteger; pnRadioButton: PInteger; pfVerificationFlagChecked: PBOOL): HRESULT;
begin
  if Assigned(_TaskDialogIndirect) then
    Result := _TaskDialogIndirect(pTaskConfig, pnButton, pnRadioButton,
      pfVerificationFlagChecked)
  else
  begin
    InitComCtl;
    Result := E_NOTIMPL;
    if ComCtl32DLL <> 0 then
    begin
      @_TaskDialogIndirect := GetProcAddress(ComCtl32DLL, 'TaskDialogIndirect');
      if Assigned(_TaskDialogIndirect) then
        Result := _TaskDialogIndirect(pTaskConfig, pnButton, pnRadioButton,
          pfVerificationFlagChecked)
    end;
  end;
end;

0 个答案:

没有答案