1

こんにちは親愛なるコミュニティ...

Inno Setup のビデオ スプラッシュ スクリーンに関するこのトピックを見たところです。

ビデオ ファイル (アルファ付き) をスプラッシュ スクリーンとして使用しますか?

TLama (Inno Media Player の作成者) によって提示されたサンプル コードは素晴らしいですが、少し問題があります。それだけです。コードで指定されているスプラッシュ ビデオ ファイルには、d:\Video.avi のような絶対パスがあります。 d:\Video.avi のような他のコンピュータの絶対パスへのセットアップ プログラムが機能しなくなりました...

したがって、作者 ( TLama ) にこのスクリプトを修正して、動画ファイルを {src} または {tmp} のような相対パスでスプラッシュするように依頼しています。

著者に尋ねたい 2 番目のリビジョンは次のとおりです。

ウィンドウのクライアント領域をクリックしてビデオ再生を閉じる機能を実装したい...上記のサンプル コードでは使用できません...

最後に、TLama (Inno Media Player の作成者) に、次のコードに要求された 2 つのリビジョンを実装するように依頼しています。

    [Setup]
AppName=Media Player Project
AppVersion=1.0
DefaultDirName={pf}\Media Player Project

[Files]
Source: "MediaPlayer.dll"; Flags: dontcopy

[Code]
const
  EC_COMPLETE = $01;

type
  TDirectShowEventProc = procedure(EventCode, Param1, Param2: Integer);

function DSPlayMediaFile: Boolean;
  external 'DSPlayMediaFile@files:mediaplayer.dll stdcall';
function DSStopMediaPlay: Boolean;
  external 'DSStopMediaPlay@files:mediaplayer.dll stdcall';
function DSInitializeVideoFile(FileName: WideString; WindowHandle: HWND;
  var Width, Height: Integer; CallbackProc: TDirectShowEventProc): Boolean;
  external 'DSInitializeVideoFile@files:mediaplayer.dll stdcall';

var
  VideoForm: TSetupForm;  

procedure OnMediaPlayerEvent(EventCode, Param1, Param2: Integer); 
begin
  if EventCode = EC_COMPLETE then
    VideoForm.Close;  
end;

procedure OnVideoFormShow(Sender: TObject);
begin
  DSPlayMediaFile;
end;

procedure OnVideoFormClose(Sender: TObject; var Action: TCloseAction);
begin
  DSStopMediaPlay;
end;

procedure InitializeWizard;
var
  Width: Integer;
  Height: Integer;
begin
  VideoForm := CreateCustomForm;
  VideoForm.Caption := 'Popup Video Window';
  VideoForm.BorderStyle := bsNone;
  VideoForm.FormStyle := fsStayOnTop;
  VideoForm.Position := poScreenCenter;
  VideoForm.OnShow := @OnVideoFormShow;
  VideoForm.OnClose := @OnVideoFormClose; 

  if DSInitializeVideoFile('d:\Video.avi', VideoForm.Handle, Width, 
    Height, @OnMediaPlayerEvent)
  then
  begin
    VideoForm.ClientWidth := Width;
    VideoForm.ClientHeight := Height;     
    VideoForm.ShowModal;
  end;    
end;

procedure DeinitializeSetup;
begin
  DSStopMediaPlay;
end;
4

1 に答える 1

2

の前の呼び出しで、と交換'd:\video.avi'するだけです。ExpandConstant('{tmp}\video.avi')ExtractTemporaryFile

または、ビデオをセットアップに埋め込むのではなく、セットアップと一緒に (DVD などで) 配布する場合は、{src}代わりに を使用し{tmp}、 をスキップしExtractTemporaryFileます。

2番目の質問へ。IVideoWindowキーボードとマウスのメッセージをウィンドウの所有者に転送できるようにするメッセージ ドレインがありませんでした。ライブラリの更新バージョンでは、メッセージは所有者に送信されるため、最新バージョンをダウンロードし、次のようなコードを追加して、クリックしてビデオ ウィンドウを閉じます。

[Code]
procedure OnVideoFormClick(Sender: TObject); 
begin 
  // it's enough to just close the form as it owns the IVideoWindow
  VideoForm.Close;
end;

procedure InitializeWizard;
begin
  VideoForm := CreateCustomForm;
  ...
  VideoForm.OnClick := @OnVideoFormClick;
  ...
end;
于 2013-04-06T22:39:21.713 に答える