Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Gnom3
Дата сообщения: 27.03.2012 08:56
sjwrec
Посмотрел я этот скрипт. Про то, как неудобно с ним работать, говорить не буду. В целом, по скрипту и его оформлению, скажу, что в этот раз - не очень, предидущие работы - хороши, Сталкер, тот-же, Рейдж, Блад рейн... Нужно двигаться дальше, а ты все топчешься на одном месте. Все скрипты под копирку, единственное отличие - с каждым следующим, работать все неудобнее. Но это только мое мнение, есть здесь немало людей, которые и этого сделать не смогут.
Автор: YURSHAT
Дата сообщения: 27.03.2012 11:57
sjwrec
Можно и я выскажусь, если вам интересно мое скромное мнение.
Я согласен с Gnom3, нужно двигатся дальше и придумывать что-то более интересное и свеженькое.
По модулям - откровенно перебор. Сильно много их. Они скорее усложнят работу нежели упростят...
Автор: vintage_1
Дата сообщения: 27.03.2012 14:57
ISVerText v.0.1.0.0
[MORE="Скриншот"] [/MORE]
Автор: Nasgul1987
Дата сообщения: 28.03.2012 00:09
vintage_1
можешь пожалуйста сделать библиотеку для отображения двойного прогесбара?
уж очень классно он выглядит!
в верхнем общий прогресс, а внизу статус распаковки текущего файла
(не для FreeArc или IsDone, а для стандартной распаковки средствами инно)
Автор: YURSHAT
Дата сообщения: 28.03.2012 02:25
Nasgul1987
http://krinkels.ru/showpost.php?p=8222&postcount=311
Автор: meekrab
Дата сообщения: 28.03.2012 05:10
YURSHAT
Я иной раз поражаюсь,вроде читают они обсуждение и все равно задают глупые вопросы.
Автор: sjwrec
Дата сообщения: 28.03.2012 10:54

Цитата:
в верхнем общий прогресс, а внизу статус распаковки текущего файла

А это вообще реально сделать без IsDone? Мне это тоже интересно.

Просто в IsDone - за правильное определение позиции прогрессбара (и не только за это), отвечает файл "records.inf".
Можно как нибудь создание такого файла через стандартные функции реализовать. Затем заново
скомпилить скрипт. И использовать его для определения позиции второго прогрессбара.

Автор: Gnom3
Дата сообщения: 28.03.2012 11:33
sjwrec
ты понимаешь, как работает запись состояний в IsDone?
На втором прогрессбаре отоброжается не файл, а распаковка текущего архиваю Разницу видишь?
И это никак не связано с файлами, упакованными в инно. Только внешние архивы.
Автор: MOD_TEC
Дата сообщения: 28.03.2012 14:56
как можно сделать в isSlideShow v1.02 в первом примере где слайд шоу на весь экран показ слайдов не по процентам а по времени. Мне нужно для ISDone..
Автор: Nasgul1987
Дата сообщения: 28.03.2012 19:05
Скажите пожалуйста
как сделать проверку размера файла.
при запуске создаётся файл, но он пустой (для пользователя) и весит 517 байт
его нужно сохранить при удалении, но только если он больше чем 517 байт, тк всё что добавится сверху это пользовательская инфомация
т.е. появляется чекбокс и файл копируется.
Автор: kombat 77
Дата сообщения: 28.03.2012 21:49
Nasgul1987
[more=Как вариант]
[Setup]
AppName=My Program
AppVerName=My Program 1.0
DefaultDirName={pf}\My Program
OutputDir=userdocs:InnoSetupTest.

[no][Code][/no]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Size: Integer;
begin
if CurUninstallStep = usUninstall then
begin
if FileSize(ExpandConstant(AddQuotes(AddBackSlash('{app}') + 'filename')), Size) then
if Size > 517 then
if MsgBox('Сохранить пользовательские данные в'
+ #13#10 + ExpandConstant('{userdesktop}')
+ '\filename?', mbConfirmation, MB_YESNO) = IDYES then
FileCopy(ExpandConstant('{app}\filename'), ExpandConstant('{userdesktop}\filename'), True);
DeleteFile(ExpandConstant('{app}\filename'));
end;
end;
[/more]
Автор: GDDR7
Дата сообщения: 28.03.2012 22:05
ребят, подскажите какой у них новый адрес http://repack.at.ua/ ??
Автор: Nasgul1987
Дата сообщения: 28.03.2012 22:38
kombat 77
то что надо!
спасибо друже!

Автор: SotM
Дата сообщения: 28.03.2012 23:21
GDDR7
А зачем тебе это? Ведь есть и другие ресурсы, даже получше чем тот...
Автор: sjwrec
Дата сообщения: 29.03.2012 08:50
Gnom3

Цитата:
ты понимаешь, как работает запись состояний в IsDone?


Да я это понимаю. Но я вчера наткнулся на один скрипт, который работает с коммандами BeforeInstall и AfterInstall в секции [Files] . Я выложу его сдесь, может кто нибудь сможет в нём сделать правильную формулу определения.

[More=Скрипт]

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DiskSpanning=yes
DiskSliceSize=1566000000
Compression=none
SolidCompression=no

[Files]
Source: Files\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: ProgressInit(); AfterInstall: ProgressReset()

[_Code]
var
ProgressBar2: TNewProgressBar;
OldPosition, size, PrPos: Integer;
ReadyFlag: Boolean;
InstTimer: TTimer;

procedure ProgressInit();
begin
ProgressBar2.Min:= 0;
ProgressBar2.Position:= 0;
FileSize(ExpandConstant(CurrentFileName), size);
ProgressBar2.Max:= size;

with WizardForm.ProgressGauge do begin
PrPos:= (Position-Min)/((Max - Min)/1000);
OldPosition:= PrPos;
ReadyFlag:= True;
end;
end;

procedure ProgressReset();
begin
ReadyFlag:= False;
end;

procedure OnInstallProgress(Sender: TObject);
begin
if ReadyFlag=True then begin
with WizardForm.ProgressGauge do begin
PrPos:= (Position-Min)/((Max - Min)/1000);

with ProgressBar2 do
ProgressBar2.Position:= (Position-Min)/((Max - Min)/100) + (PrPos) - (OldPosition);
OldPosition:= PrPos;
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
InstTimer.Enabled:=True;
end
else begin
InstTimer.Enabled:=False;
end;
end;

procedure InitializeWizard();
begin
ReadyFlag:= False;

ProgressBar2 := TNewProgressBar.Create(WizardForm);
with ProgressBar2 do begin
Left := WizardForm.ProgressGauge.Left;
Top := WizardForm.ProgressGauge.Top + ScaleX(30);
Width := WizardForm.ProgressGauge.Width;
Height := WizardForm.ProgressGauge.Height;
Parent := WizardForm.InstallingPage;
Position := 0;

InstTimer:= TTimer.Create(WizardForm);
with InstTimer do begin
Interval:= 10;
OnTimer:= @OnInstallProgress;
Enabled:=False;
end;
end;
end;

[/more]
Автор: YURSHAT
Дата сообщения: 29.03.2012 14:29
sjwrec
Автор: MOD_TEC
Дата сообщения: 29.03.2012 16:25


Как соблюдать порядок строк чтобы не было ошибок................
Автор: sjwrec
Дата сообщения: 29.03.2012 20:33
YURSHAT
Спасибо за полный ответ.

[more=Вот оригинал скрипта]

#define SrcPath "Files\"
#define Mask "*.*"

#define FindHandle
#define FindResult
#define SearchPath SrcPath + Mask
#define AllFilesSize 0
#define CurFileSize 0

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: compiler:InnoCallback.dll; Flags: dontcopy
#sub ProcessFoundFile
#define FileName FindGetFileName(FindHandle)
Source: {#SrcPath}{#FileName}; DestDir: {tmp}; Flags: ignoreversion; BeforeInstall: ProgressInit(); AfterInstall: ProgressReset()
#expr CurFileSize = FileSize(SrcPath + FileName)
#expr AllFilesSize = AllFilesSize + CurFileSize
#expr WriteIni( SourcePath + "\\SizeInfo.ini","Name", FileName, CurFileSize )
#expr WriteIni( SourcePath + "\\SizeInfo.ini","Size", "AllSize", AllFilesSize )
#endsub

#for {FindHandle = FindResult = FindFirst(SearchPath, 0); FindResult; FindResult = FindNext(FindHandle)} ProcessFoundFile

Source: SizeInfo.ini; Flags: dontcopy

[_Code]
type
    TMsg = record
        hwnd: HWnd;
        msg: Word;
        wParam: Word;
        lParam: Word;
        time: Longint;
        pt: TPoint;
    end;

TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
Msg: TMsg;
TimerID: LongWord;
ProgressBar: TNewProgressBar;
CurrentFileSize: LongInt;
OneStepSize: LongInt;
OldPosition: LongInt;
ReadyFlag: Boolean;
lbl, lbl1: TLabel;

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function WrapTimerProc(callback: TProc; paramcount: Integer): Longword; external 'wrapcallback@files:innocallback.dll stdcall';

procedure ProgressInit();
begin
ProgressBar.Min:= 0;
ProgressBar.Position:= 0;
OldPosition:= WizardForm.ProgressGauge.Position;

ProgressBar.Max:= GetIniInt('Name', ExtractFileName(ExpandConstant(CurrentFileName)), 0, 0, 0, ExpandConstant('{tmp}\SizeInfo.ini'));

ReadyFlag:= True;
end;

procedure ProgressReset();
begin
ReadyFlag:= False;
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
res: LongWord;
begin
if ReadyFlag then
begin
ProgressBar.Position:= ProgressBar.Position + (WizardForm.ProgressGauge.Position - OldPosition) ;
OldPosition:= WizardForm.ProgressGauge.Position;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
pfunc: LongWord;
begin
if CurStep = ssInstall then
begin
pfunc:= WrapTimerProc(@OnTimer, 4);
TimerID:= SetTimer(0, 0, 20, pfunc);
end;
end;

procedure InitializeWizard();
begin
ReadyFlag:= False;
ExtractTemporaryFile('SizeInfo.ini');

ProgressBar := TNewProgressBar.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressBar.Left := Left;
ProgressBar.Top := Top + ScaleX(30);
ProgressBar.Width := Width;
ProgressBar.Height := Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.Position := 0;
end;
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;

[/more]




Добавлено:
У меня и этот не работает.
Автор: Gnom3
Дата сообщения: 29.03.2012 21:16

Цитата:
У меня и этот не работает.

Вот так кривенько, но работает. А чтобы не кривенько, нужно много считать. и теоретически, высчитать можно, но ооочень уж геморойно.
Автор: sjwrec
Дата сообщения: 29.03.2012 22:24
Gnom3
Спасибо! Попробую переделать таймер на Inno Timer. А так вроде неплохо.
Автор: Gnom3
Дата сообщения: 30.03.2012 08:07

Цитата:
Попробую переделать таймер на Inno Timer

Не рекомендую. После множества сравнений, могу сказать, что таймер на инно, кривой чуть менее, чем полностью. Идеальный вариант - использовать апишный каллбек и обрабатывать сообщение wm_timer.
Автор: sjwrec
Дата сообщения: 30.03.2012 20:25
Gnom3

Цитата:
Идеальный вариант - использовать апишный каллбек и обрабатывать сообщение wm_timer.

Можете скинуть пример мне в ЛС?
Автор: Gnom3
Дата сообщения: 30.03.2012 21:48
Гдето тут в теме ищи наитивный пример каллбек. Я давно не держу примеров у себя, за отсутствием надобности. когда пишешь заново даже то, что уже писал - всегда приходят мысли, как сделать лучше, удобнее, и оптимальнее.
Автор: Pavel0145
Дата сообщения: 31.03.2012 12:15
Как сделать в скрипте проверки системных требований чтобы в поле "Видеоадаптер" и "Процессоры" добавлялись пробелы после наименования устройства?
Использую скрипт Ultimate Test
То есть в поле "Видеоадаптер" должно быть NVIDIA GeForce GTX 550 TI, а в поле "Процессоры" AMD Athlon IIX3 425
см. скриншот:
http://s019.radikal.ru/i637/1203/3f/890995605100.bmp
Автор: repacksman
Дата сообщения: 31.03.2012 19:27
Нужны люди, которые хоть немного разбираются в движке DLE. Все заинтересованные пишите в скайп vasya.vishnovsky. Зарание спасибо.
Делаю аналог сайта repack.at.ua только на DLE.
Извините за флуд.
Автор: Gnom3
Дата сообщения: 31.03.2012 21:49

Цитата:
Извините за флуд.

Это не флуд, это реклама называется. и не вижу связи твоего рекламного сообщения с темой, которая тут обсуждается.
Автор: viktor9
Дата сообщения: 01.04.2012 10:16

Цитата:
PAnsiChar

Цитата:
viktor9
Если перешел на юникод, то замени PChar на PAnsiChar. В анси PChar все так-же работает.
Цитата: Inno не обновлял


Однозначно, если не обновлял, то переустановливал с Анси на Юникод.


перешел на юникод и вот еще ругается

Compile Error!
File: D:\Диск\Докукменты\Files\MP3.iss
Line: 106
Error: Column 5:
Semicolon (';') expected.

[more][Files]
Source: D:\Диск\Докукменты\Files\BASS.dll; DestDir: {tmp}; Flags: dontcopy noencryption
Source: D:\Диск\Докукменты\Files\Music.mp3; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: D:\Диск\Докукменты\Files\MusicButtons.bmp; DestDir: {tmp}; Flags: dontcopy noencryption

[Code]
const
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;

var
mp3Handle: HWND;
mp3Name: String;
PlayButton, PauseButton, StopButton: TPanel;
PlayImage, PauseImage, StopImage: TBitmapImage;
PlayLabel, PauseLabel, StopLabel: TLabel;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelIsActive(handle: DWORD): Integer;
external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';

function BASS_ChannelPause(handle: DWORD): Boolean;
external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Pause(): Boolean;
external 'BASS_Pause@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure PlayMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if PlayLabel.Enabled then PlayImage.Left := -90
end;

procedure PlayMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := 0
end;

procedure PauseMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if PauseLabel.Enabled then PauseImage.Left := -120
end;

procedure PauseMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
PauseImage.Left := -30
end;

procedure StopMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if StopLabel.Enabled then StopImage.Left := -150
end;

procedure StopMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
StopImage.Left := -60
end;

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('BASS.dll')
ExtractTemporaryFile('Music.mp3')
mp3Name := ExpandConstant('{tmp}\Music.mp3')
BASS_Init(-1, 44100, 0, 0, 0)
// Музыка начинает проигрываться при запуске инсталла:
mp3Handle := BASS_StreamCreateFile(FALSE, PAnsiChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP)
// Музыка начинает проигрываться только после нажатия кнопки "Play" ("Воспроизведение"):
// mp3Handle := BASS_StreamCreateFile(TRUE, PAnsiChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP)
BASS_Start()
BASS_ChannelPlay(mp3Handle, False)
Result := True
end;

procedure PlayButtonOnClick(Sender: TObject);
begin
case BASS_ChannelIsActive(mp3Handle) of
BASS_ACTIVE_PAUSED:
begin
BASS_ChannelPlay(mp3Handle, False)
end
BASS_ACTIVE_STOPPED:
begin
BASS_Init(-1, 44100, 0, 0, 0)
mp3Handle := BASS_StreamCreateFile(FALSE, PAnsiChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP)
BASS_Start()
BASS_ChannelPlay(mp3Handle, False)
end
end
end;

procedure PauseButtonOnClick(Sender: TObject);
begin
BASS_ChannelPause(mp3Handle)
end;

procedure StopButtonOnClick(Sender: TObject);
begin
BASS_Stop()
BASS_Free()
end;

procedure InitializeMusic();
begin
ExtractTemporaryFile('MusicButtons.bmp')

PlayButton := TPanel.Create(WizardForm)
PlayButton.Left := 33
PlayButton.Top := 284
PlayButton.Width := 30
PlayButton.Height := 20
PlayButton.Cursor := crHand
PlayButton.ShowHint := True
PlayButton.Hint := 'Воспроизведение музыки'
PlayButton.OnClick := @PlayButtonOnClick
PlayButton.Parent := WizardForm

PlayImage := TBitmapImage.Create(WizardForm)
PlayImage.Left := 0
PlayImage.Top := 0
PlayImage.Width := 180
PlayImage.Height := 20
PlayImage.Enabled := False
PlayImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButtons.bmp'))
PlayImage.Parent := PlayButton

PlayLabel := TLabel.Create(WizardForm)
PlayLabel.Width := PlayButton.Width
PlayLabel.Height := PlayButton.Height
PlayLabel.Autosize := False
PlayLabel.Transparent := True
PlayLabel.OnClick := @PlayButtonOnClick
PlayLabel.OnMouseDown := @PlayMouseDown
PlayLabel.OnMouseUp := @PlayMouseUp
PlayLabel.Parent := PlayButton

PauseButton := TPanel.Create(WizardForm)
PauseButton.Left := 66
PauseButton.Top := 284
PauseButton.Width := 30
PauseButton.Height := 20
PauseButton.Cursor := crHand
PauseButton.ShowHint := True
PauseButton.Hint := 'Приостановить музыку'
PauseButton.OnClick := @PauseButtonOnClick
PauseButton.Parent := WizardForm

PauseImage := TBitmapImage.Create(WizardForm)
PauseImage.Left := -30
PauseImage.Top := 0
PauseImage.Width := 180
PauseImage.Height := 20
PauseImage.Enabled := False
PauseImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButtons.bmp'))
PauseImage.Parent := PauseButton

PauseLabel := TLabel.Create(WizardForm)
PauseLabel.Width := PauseButton.Width
PauseLabel.Height := PauseButton.Height
PauseLabel.Autosize := False
PauseLabel.Transparent := True
PauseLabel.OnClick := @PauseButtonOnClick
PauseLabel.OnMouseDown := @PauseMouseDown
PauseLabel.OnMouseUp := @PauseMouseUp
PauseLabel.Parent := PauseButton

StopButton := TPanel.Create(WizardForm)
StopButton.Left := 99
StopButton.Top := 284
StopButton.Width := 30
StopButton.Height := 20
StopButton.Cursor := crHand
StopButton.ShowHint := True
StopButton.Hint := 'Остановить музыку'
StopButton.OnClick := @StopButtonOnClick
StopButton.Parent := WizardForm

StopImage := TBitmapImage.Create(WizardForm)
StopImage.Left := -60
StopImage.Top := 0
StopImage.Width := 180
StopImage.Height := 20
StopImage.Enabled := False
StopImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButtons.bmp'))
StopImage.Parent := StopButton

StopLabel := TLabel.Create(WizardForm)
StopLabel.Width := StopButton.Width
StopLabel.Height := StopButton.Height
StopLabel.Autosize := False
StopLabel.Transparent := True
StopLabel.OnClick := @StopButtonOnClick
StopLabel.OnMouseDown := @StopMouseDown
StopLabel.OnMouseUp := @StopMouseUp
StopLabel.Parent := StopButton
end;

procedure DeinitializeSetup();
begin
BASS_Stop()
BASS_Free()
end;
[/more]
Автор: Gnom3
Дата сообщения: 01.04.2012 11:12
viktor9

Цитата:
Semicolon (';') expected.

Пропущен знак точки с запятой перед 106-й(тоесть в конце 105-й строчки строчки) в скрипте MP3.iss
Неужели трудно перевести?
Автор: viktor9
Дата сообщения: 01.04.2012 11:20
Да не трудно перевести ведь до перехода на юникод все работало
Автор: SotM
Дата сообщения: 01.04.2012 15:54
viktor9
Ты как человек с деревни приехавший. Опять же, чуть ли не каждый чтит своим долгом написать про "Semicolon (';') expected."
Поиск уже не работает? У гугла отпуск?
Уже много раз это обсуждалось.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

Предыдущая тема: поиск


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.