Вопрос:

Как показать окно сообщения за указанное время?

inno-setup messagebox

1180 просмотра

2 ответа

65725 Репутация автора

Есть ли способ показать окно сообщения в течение указанного времени (это означает, что окно сообщения закроется само по истечении указанного времени)?

Автор: TLama Источник Размещён: 28.12.2013 04:43

Ответы (2)


11 плюса

65725 Репутация автора

Решение

В Windows API есть функция для отображения окна сообщения в течение указанного времени, но по какой-то причине эта функция недокументирована, что означает, что она официально не поддерживается и может быть изменена.

Эта функция вызывается MessageBoxTimeout, и она даже экспортируется в user32.dllбиблиотеку, что заставляет меня чувствовать, что единственная вещь, которой не хватает этой функции - это официальная документация. Но кто знает ...

Следующий скрипт показывает, как отобразить окно сообщения за 5 секунд до отображения формы мастера. Если пользователь не нажимает кнопку ОК и не закрывает окно вручную, окно сообщения автоматически закрывается по истечении этого 5-секундного периода:

[Code]
#ifdef UNICODE
  #define AW "W"
#else
  #define AW "A"
#endif
const
  MB_TIMEDOUT = 32000;
  MB_ICONERROR = $10;
  MB_ICONQUESTION = $20;
  MB_ICONWARNING = $30;
  MB_ICONINFORMATION = $40;

function MessageBoxTimeout(hWnd: HWND; lpText: string; lpCaption: string;
  uType: UINT; wLanguageId: Word; dwMilliseconds: DWORD): Integer;
  external 'MessageBoxTimeout{#AW}@user32.dll stdcall';

procedure InitializeWizard;
begin
  MessageBoxTimeout(WizardForm.Handle, 'This message will be automatically ' +
    'closed in 5 seconds!', 'Caption...', MB_OK or MB_ICONINFORMATION, 0, 5000);
end;

Для получения дополнительной информации о параметрах и значениях результата обратитесь к MessageBoxсайту справки по функции и некоторым неофициальным статьям, описывающим MessageBoxTimeoutсаму функцию, например:

Автор: TLama Размещён: 28.12.2013 04:43

0 плюса

95702 Репутация автора

Если вы хотите более индивидуализированную реализацию, чем позволяет ответMessageBoxTimeout from @ TLama (например, отображение обратного отсчета или заголовки пользовательских кнопок):

  • создать пользовательскую форму, используя CreateCustomForm;
  • использовать SetTimerдля реализации тайм-аута / обратного отсчета.

Полный код см. В разделе MsgBox - сделать кнопку ОК неактивной и перейдите в обратный отсчет - Inno Setup .

Автор: Martin Prikryl Размещён: 05.11.2017 05:01
Вопросы из категории :
32x32