2016-07-21 13 views
1

Inno Setupを使用して作成したプログラムインストーラを実行しているときにNice Welcome Animated GIFを表示します。ループコマンドまたは関数Inno Setupで条件がTrueになるまで

私はセットアップがコードの私のトンを初期化が終了するまで、Isgsg.dllを使用して(Inno Setupのは、まだアニメーションGIFの表示をサポートしていませんので)ために、いくつかのPNG画像を表示したいです。

これらのPNG画像を順番に表示するコードを書きましたが、最後に表示された後で停止します。

前回表示された後に最初のPNG画像から表示を続ける必要があります。

セットアップが初期化されている場合(つまり、WizardFormが表示されている場合)、ループ処理が停止するはずです。

function InitializeSetup(): Boolean; 
var 
    DlgWait: TForm; 
if Result = True then begin 
ExtractTemporaryFile('Welcome1.png'); 
ExtractTemporaryFile('Welcome2.png'); 
ExtractTemporaryFile('Welcome3.png'); 
ExtractTemporaryFile('Welcome4.png'); 
ExtractTemporaryFile('Welcome5.png'); 
ExtractTemporaryFile('Welcome6.png'); 
ExtractTemporaryFile('Welcome7.png'); 

< < <ルーピングは、ここから始めるべき>>>

ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome1.png'),0250,1000,0250,0,255,True,$FFFFFF,10); 
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome2.png'),0250,1000,0250,0,255,True,$FFFFFF,10); 
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome3.png'),0250,1000,0250,0,255,True,$FFFFFF,10); 
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome4.png'),0250,1000,0250,0,255,True,$FFFFFF,10); 
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome5.png'),0250,1000,0250,0,255,True,$FFFFFF,10); 
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome6.png'),0250,1000,0250,0,255,True,$FFFFFF,10); 
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome7.png'),0250,1000,0250,0,255,True,$FFFFFF,10); 

< < <ルーピングはここからIF NOT WizardForm継続すべきである:

コードは、私はそれらのPNG画像を表示するために書きました視認可能、そうでなければループを止めるべきである>>>

... 
end; 

どうすればいいですか?

更新QUESTION

このコードが動作しない理由を私は考えることはできません。

このDLLには、PNGファイルのファイル名がAnsiStringである必要があります。

しかし、私はStringを提供しました。

これは間違っているのでしょうか他のSynatxエラーですか?

Not Workingは、Loop Procedureが動作していないPNG画像を意味します。

コードは、私がRepeat Untilを使用して、この条件付きループを行うために追加しようとしました:

function InitializeSetup(): Boolean; 
var 
    DlgWait: TForm; 
    IMessageHandler: TForm; 
    X: Integer; 
    ErrorCode: Integer; 
    LblWait: TLabel; 
if Result := True then begin 
DlgWait := TForm.Create(nil); 
DlgWait.Hide; 
begin 
Order:=1; 
Repeat 
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome+IntToStr(Order)+.png'),0250,1000,0250,0,255,True,$FFFFFF,10); 
Order:=Order+1; 
Until FileExists(ExpandConstant('{tmp}\Welcome+IntToStr(Order)+.png')) = False; 
end; 
end; 

は、構文エラーがありますか?

コンパイラは、コンパイラの警告またはエラーを表示しません。

ありがとうございました。

+3

両方ここと、正しくコードをフォーマットすることを学ぶしてくださいあなたのコード/テキストエディタで。これは、読みやすく、管理しやすくします。コンパイラは空白を気にしないので、カンマの後に空白を適切にインデントして配置すると、+記号の前後にはキーストローク以外のコストはかからず、長期的には頭痛や視力を節約します。 –

答えて

1

終了時にカウンターをリセットする必要があります。このような何かがあなたを始めるはずです。 (注:テストされていない - 私はこのマシンでInnoSetupを持っていないWizardFormが見えて検出することが適切であるものは何でもしてuntilにテストを交換してください。。)

function InitializeSetup(): Boolean; 
var 
    DlgWait: TForm; 
    IMessageHandler: TForm; 
    X: Integer; 
    ErrorCode: Integer; 
    LblWait: TLabel; 
const 
    NumImages = 7; 
begin 
    if Result then 
    begin 
    DlgWait := TForm.Create(nil); 
    DlgWait.Hide; 
    Order := 1; 
    repeat 
     ShowSplashScreen(DlgWait.Handle, ExpandConstant('{tmp}\Welcome' + IntToStr(Order) + '.png'), 0250, 1000, 0250, 0,255, True, $FFFFFF, 10); 
     Order := Order + 1; 
     if Order > NumImages then 
     Order := 1; 
    until WizardForm.Visible; 
    end; 
end; 
+0

ありがとう、私は家に帰ってきたときにこれを試し、あなたに何が起こったかを知らせます。 – GTAVLover

+0

素晴らしい仕事、ケンホワイト..........まあ、それは働いているとループはうまく動作します。しかし、私はそれを止めるかどうかの条件を与えることはできません.........私は 'Until Order> 7'に設定するので、このループプロシージャでセットアップは止まっています。なぜなら、 'Until WizardForm.Visible' 、 'ウィザードフォームが作成される前にそれにアクセスしようとしました.'エラーが発生します。経験豊富なCoderは、 'WizardForm' Creates .....のときにループを止めるのに良い条件を与えることができます。 -/ – GTAVLover

+1

オーダーは決して'> 'にはなりません。なぜなら、7に達すると1にリセットされ、 (私が書いたコード、特にIf Order> NumImages then Order:= 1; 'という行を読んだことがありますか?)私はWizardFormが利用可能になったときにどのように伝えるべきかわかりません。私はあなたのコードを書いていませんでした。 –

関連する問題