Inno Setup 설치 프로그램 이전의 시작 화면에 이미지가 표시되지 않음 (Image on a splash screen before Inno Setup installer does not display)


문제 설명

Inno Setup 설치 프로그램 이전의 시작 화면에 이미지가 표시되지 않음 (Image on a splash screen before Inno Setup installer does not display)

Inno Setup에서 설치 프로그램의 시작 화면을 만들려고 합니다. 인스톨러 시작시 2초 동안 표시되는 폼을 생성했는데 그 안에 이미지가 표시되지 않습니다.

ShowModal 기능을 사용할 때만 표시됩니다. , 하지만 2초 후에 닫히지 않습니다.

제 코드는 다음과 같습니다.

[Code]
var
SplashForm: TSetupForm;
BIRegistry: TBitmapImage;

procedure SplashScreen;
begin
  SplashForm := CreateCustomForm;
  SplashForm.Position := poScreenCenter;
  SplashForm.BorderStyle := bsNone;  
  BIRegistry := TBitmapImage.Create(SplashForm);
  BIRegistry.Bitmap.LoadFromFile(ExpandConstant('{tmp}\regtoexe.bmp'));
  BIRegistry.Parent := SplashForm;
  BIRegistry.AutoSize := True;
  SplashForm.ClientHeight := BIRegistry.Height;
  SplashForm.ClientWidth := BIRegistry.Width;
  SplashForm.Show;
  Sleep(2000);
  SplashForm.Close;
end;

procedure InitializeWizard;
begin
  ExtractTemporaryFile('regtoexe.bmp');

  SplashScreen;

이 코드의 문제점은 무엇입니까?


참조 솔루션

방법 1:

That's because by calling Sleep you freeze Windows message pump, so the image cannot draw.


Quick and dirty solution is to force repaint before the Sleep:

SplashForm.Show;
SplashForm.Repaint;
Sleep(2000);
SplashForm.Close;

This is what Inno Setup Script Includes (ISSI) package was doing.


More correct way is to use the ShowModal and have the modal window close automatically after specified time:

var
  CloseSplashTimer: LongWord;

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord;
  external 'SetTimer@User32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord;
  external 'KillTimer@User32.dll stdcall';

procedure CloseSplashProc(
  H: LongWord; Msg: LongWord; IdEvent: LongWord; Time: LongWord);
begin
  KillTimer(0, CloseSplashTimer);
  SplashForm.Close;
end;

procedure SplashScreen;
begin
  SplashForm := CreateCustomForm;
  // rest of your splash window setup code

  CloseSplashTimer := SetTimer(0, 0, 2000, CreateCallback(@CloseSplashProc));
  SplashForm.ShowModal;
end;

Based on: MsgBox ‑ Make unclickable OK Button and change to countdown ‑ Inno Setup

(by yonniMartin Prikryl)

참조 문서

  1. Image on a splash screen before Inno Setup installer does not display (CC BY‑SA 2.5/3.0/4.0)

#pascalscript #inno-setup






관련 질문

Inno Setup의 WizardForm 페이지에서 레이블 텍스트 변경 (Changing label texts on WizardForm page in Inno Setup)

파스칼스크립트 디버깅 중에 양식 양식을 일시 중단할 수 있습니까? (Can a forms modality be suspended during pascalscript debugging?)

Inno Setup: .NET Framework 설치, 시스템 재부팅 후 설치 계속 (Inno Setup: Install .NET framework, reboot the system and continue installation)

Inno Setup - [code] 내부의 기본 경로 정의 (Inno Setup - Defining a default path inside [code])

파스칼스크립트에 DLL 함수 등록하기 (Registering DLL-Functions in Pascalscript)

HelpNDoc 파스칼 스크립트는 구조를 지원합니까? (Does HelpNDoc Pascal Script support structures?)

하위 설치 다운로드 및 실행 - Inno Download Plugin 다운로드 중에 진행률 표시줄이 이동하지 않음 (Download and run sub install - Inno Download Plugin progress bar does not move during download)

TBitmapImage는 Inno Setup 6에서 크기 조정된 디스플레이의 크기보다 크게 렌더링됩니다. (TBitmapImage is rendered larger than its size on scaled display in Inno Setup 6)

Inno Setup에서 필요할 때 시작 화면을 표시하지 않으려면 어떻게 해야 합니까? (How can I prevent showing the splash screen when I need it in Inno Setup?)

Inno Setup을 사용하여 현재 날짜를 레지스트리에 바이너리 형식으로 저장 (Storing the current date to the registry in binary format with Inno Setup)

Inno Setup 설치 프로그램 이전의 시작 화면에 이미지가 표시되지 않음 (Image on a splash screen before Inno Setup installer does not display)

Inno Setup 단어 완성이 전혀 작동하지 않습니다 (Inno Setup word completion doesn't work at all)







코멘트