Ветеран
Сообщения: 649
Благодарности: 444
Профиль
|
Отправить PM
| Цитировать
Ivan_009 ,
тогда придётся вернуть переменные
ещё улучшил код
теперь на одну кнопку меньше, тк объединил проигрывание и паузу, а запуск видео и прочее перенёс из переключения страниц в этапы установки
код: (приписал комментарии)
читать дальше »
Код:
#include "xvid.iss"
[Setup]
AppName=ISVideo
AppVerName=1.5.0
AppPublisher=AVMan
CreateAppDir=no
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
[Languages]
Name: english; MessagesFile: compiler:Default.isl
[Files]
Source: Video.avi; DestDir: {tmp}; Flags: dontcopy;
Source: ISVideo.dll; DestDir: {tmp}; Flags: dontcopy;
Source: xvidcore.dll; DestDir: {tmp};Flags: dontcopy;
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs
Source: {fonts}\*; DestDir: {app}\Files; Flags: external recursesubdirs
[code]
var
Play_Pause_Button, StopButton: TNewButton;
Paused: boolean; /// вводим логическую переменную
procedure ISVideoInit(Handle: THandle; FileName: PAnsiChar; L,T,W,H: Integer); external 'ISVideoInit@files:ISVideo.dll stdcall';
procedure ISVideoPause(); external 'ISVideoPause@files:ISVideo.dll stdcall';
procedure ISVideoPlay(); external 'ISVideoPlay@files:ISVideo.dll stdcall';
procedure ISVideoStop(); external 'ISVideoStop@files:ISVideo.dll stdcall';
procedure ISVideoRePlay(); external 'ISVideoRePlay@files:ISVideo.dll stdcall';
procedure ISVideoClose(); external 'ISVideoClose@files:ISVideo.dll stdcall';
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssInstall: /// перед устанокой
begin
ExtractTemporaryFile('video.avi'); /// извлекаем видео перед установкой. Это лучше чем при запуске инстала, тк скорость запуска возрастёт
XVIDInstall;
Play_Pause_Button.Show; /// делаем кнопки видимыми
StopButton.Show;
SetWindowLong(WizardForm.Handle, (-20), GetWindowLong(WizardForm.Handle, (-20)) xor $2000000);
ISVideoInit(WizardForm.Handle, ExpandConstant('{tmp}\video.avi'), ScaleX(1), ScaleY(1), ScaleX(748), ScaleY(421)); /// инициализируем видео
ISVideoRePlay; /// запускаем проигрывание
end;
ssPostInstall: /// после установки
begin
SetWindowLong(WizardForm.Handle, (-20), GetWindowLong(WizardForm.Handle, (-20)) or $2000000);
ISVideoClose; /// закрываем видео
Play_Pause_Button.Free; /// разрушаем кнопки (или можешь просто прятать PauseButton.Visible := False; или PauseButton.Hide)
StopButton.Free;
end;
end;
end;
procedure Play_Stop_Pause(Sender: TObject);
begin
case TNewButton(Sender) of
// PauseButton: /// Pause
Play_Pause_Button:
begin
if Paused then /// если в переменной True, то
begin
ISVideoRePlay; // play - запускаем видео
TNewButton(Sender).Caption := 'Pause'; /// меняем текст кнопки (TNewButton(Sender) типэлемента(посыльный), от которог идёт команда) на "паузу"
Paused := False; /// пишем что сняли с паузы (заметь преременная для удобства переводится как "на паузе")
end else /// в противном случае, те в переменной значение False
begin
ISVideoPause(); /// ставим видео на паузу и меняем текст кнопки
TNewButton(Sender).Caption := 'Play';
Paused := True; /// пишем значение
end;
end;
StopButton: /// Stop
begin
ISVideoClose();
ISVideoInit(WizardForm.Handle, ExpandConstant('{tmp}\video.avi'), ScaleX(1), ScaleY(1), ScaleX(748), ScaleY(421));
ISVideoStop();
Play_Pause_Button.Caption := 'Play';
Paused := True; /// пишем значение
end;
end;
end;
procedure InitializeWizard();
begin
MsgBox('Чтоб имитировать установку во время установки будут скопированы справки и шрифты', mbInformation, MB_OK);
WizardForm.Width := ScaleX(700);
WizardForm.Height := ScaleY(600);
Paused := False; /// присваиваем начальное значение Caption := 'Pause';
Play_Pause_Button := TNewButton.Create(nil);
with Play_Pause_Button do
begin
Caption := 'Pause';
Parent := WizardForm;
SetBounds(ScaleX(190),ScaleY(488),ScaleX(50),ScaleY(25));
Font.Name := 'Georgia';
Font.Size := 10;
Cursor :=crHand;
OnClick := @Play_Stop_Pause;
Hide; // сразу прячем
end;
StopButton := TNewButton.Create(nil);
with StopButton do
begin
Caption := 'Stop';
Parent := WizardForm;
SetBounds(ScaleX(250),ScaleY(488),ScaleX(50),ScaleY(25));
Font.Name := 'Georgia';
Font.Size := 10;
Cursor :=crHand;
OnClick := @Play_Stop_Pause;
Hide; // сразу прячем
end;
end;
наглядный пример со всем необходимым в архиве:
http://sendfile.su/647969
Это сообщение посчитали полезным следующие участники:
Отправлено : 14:25, 12-08-2012
| #608