Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]
Johny777
31-12-2012, 16:10
Кстати, если поклонник этой игры, можешь скачать, оценить »
а то, :)
кстати говоря, пока админы празднуют, смотри что у меня есть (давно скачал и очень доволен)
узнаёшь?
http://img819.imageshack.us/img819/4210/52906691.png (http://imageshack.us/photo/my-images/819/52906691.png/)
http://img803.imageshack.us/img803/4509/37882519.png (http://imageshack.us/photo/my-images/803/37882519.png/)
полная озвучка... ОК почитаю.
У меня выбор из семи языков и шести русских озвучек. Плюс к тому огромная куча других компонентов, как к примеру выбор музыки или модификаций типа PlugY и MultiRes. »
где релиз инсталла будет? (и когда?)
Если я всю эту араву начну делить на страницы, то это будет ахтунг. »
нифига, от себя замечу - перематывать 100 компонетов и 5-6 раз нажать на конопку далее где по дефолту уже отмечено что нужно - разные вещи
к тому же у меня пример нацелен на лучшее восприятие. Приме: тебе дают список из 100 вопросв или по одному листку по 5-10 вопросов через промежуток времени - психологическая фигня, - естественно по 10 вопросов легче отвечать, а 100 сразу отбивают желание
Как показала практика, юзер действительно не хочет ничего выбирать, ему бы лиш бы быстрее на кнопку "далее" »
как там говорили в СССР "Не можешь - научим. Не хочешь - заставим" :)
Raf-9600
31-12-2012, 16:15
только чтоб у тебя не было, что один компонент добавляется в зависимости от чего-то, а то компонента в середине нет, номера сдвинутся и получится ерунда »
В сборке Diablo 2 у меня комментарии к компонентам уже год по индексу работают, так что мне не привыкать
можно - по индексу. Например добавленные сверху вниз 10 компонентов, где у первого идекс равен 0, а у 10-го индекс - 9 »
А можно пример "правописания"? А то когда тупо заменяю CustomMessage('Game') на 0, то при запуске инсталлятора возникает ошибка "Exception: Type Mismatch" и выделяет "case WizardForm.ComponentsList.ItemCaption[i] of"
for i := 0 to WizardForm.ComponentsList.ItemCount - 1 do
begin
case WizardForm.ComponentsList.ItemCaption[i] of
0 :
WizardForm.ComponentsList.Checked[i] := GetIniValue('Game', 'Type', '', iFile) = 'Portable';
кстати говоря, пока админы празднуют, смотри что у меня есть (давно скачал и очень доволен)
узнаёшь? »
Это наверно какая-то очень древняя версия. Осенью прошлого года я коренным образом сборку переделал, и до сих пор через каждые пару месяцев понемногу продолжаю дорабатывать.
где релиз инсталла будет? (и когда?) »
Ну я ведь дал ссылку выше.
А в новой версии никаких существенных изменений не предвидится. Так что можно уже сейчас скачивать.
нифига, от себя замечу - перематывать 100 компонетов и 5-6 раз нажать на конопку далее где по дефолту уже отмечено что нужно - разные вещи »
Спорить не буду. Скажу так: мне никогда не нравилось как устроен инсталлятор в K-Lite Codec Pack. Ну не нравиться мне разброс компонентов на несколько страниц, и всё.
Johny777
31-12-2012, 16:21
А можно пример "правописания"? »
[CustomMessages]
E=iiiiiiiiiiiiiiiiiii
...
case WizardForm.ComponentsList.ItemCaption[i] of
CustomMessage('E'): WizardForm.ComponentsList.Checked[i] := True;
end;
метод
ItemCaption[индекс] возвращает строку а не число
Raf-9600
31-12-2012, 16:42
CustomMessage('E'): WizardForm.ComponentsList.Checked[i] := True; »
Дык это ведь по CustomMessage, а мне нужно по чистым циферкам, так как у меня часто бывает что у разных компонентов одинаковый CustomMessage.
Johny777
31-12-2012, 18:30
мне нужно по чистым циферкам, так как у меня часто бывает что у разных компонентов одинаковый CustomMessage. »
тогда так
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Components]
Name: a; Description: a
Name: b; Description: a
[ code]
procedure InitializeWizard();
var
i: Integer;
begin
for i := 0 to WizardForm.ComponentsList.ItemCount - 1 do
case i of
0: WizardForm.ComponentsList.Checked[0] := GetIniValue('Game', 'Type', '', iFile) = 'Portable'; // отмечаем комонент a
1: WizardForm.ComponentsList.Checked[1] := GetIniValue('Game', 'Type', '', iFile) = 'Normal'; // отмечаем комонент b
end;
end;
и все остальные компоненты по аналогии
Johny777, с наступающим Вас!
Raf-9600
01-01-2013, 03:26
С Новым Годом всех! И в особенности Johny777, а так же других участников форума, помогающих абсолютно посторонним людям создавать действительно классные инсталляторы! http://www.kolobok.us/smiles/light_skin/good.gif
Nightwishh
01-01-2013, 14:38
Всех с Новым 2013 годом, всем самого главного, здоровья. :4u:
Nightwishh
01-01-2013, 17:45
Господа, а не поскажите, можно ли из ISDone 6.0 убрать время и процент распаковки не в самом окне инсталла, а в рамочке на панеле задач (не знаю как это называется, а скрина нет под рукой)?
а в рамочке на панеле задач »
Вернее заголовок окна, заголовок окна и отображает в панели задач. Изменить можно, в каком-то файле (я уже забыл); то ли INI, INF или еще что-то; то что в комплекте ISDone есть какая-то INIшка.
Johny777
01-01-2013, 21:50
Пацаны скажите пожалуйста
1. правильно ли портировал отсюда http://www.swissdelphicenter.ch/torry/showcode.php?id=55 нижний Delay (задержку)
2. действительно ли он хорош (работает уж точно, но вот реализация... В общем хотелось бы чтоб кто-нибудь знающий глянул)
[Setup]
AppName=DisksInfo
VersionInfoVersion=5.0
AppVerName=DisksInfo
DefaultDirName={pf}\My program
[ Code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
const
QS_KEY = $0001;
QS_MOUSEMOVE = $0002;
QS_MOUSEBUTTON = $0004;
QS_POSTMESSAGE = $0008;
QS_TIMER = $0010;
QS_PAINT = $0020;
QS_SENDMESSAGE = $0040;
QS_HOTKEY = $0080;
QS_MOUSE = (QS_MOUSEMOVE or QS_MOUSEBUTTON);
QS_INPUT = (QS_MOUSE or QS_KEY);
QS_ALLEVENTS = (QS_INPUT or QS_POSTMESSAGE or QS_TIMER or QS_PAINT or QS_HOTKEY);
QS_ALLINPUT = (QS_INPUT or QS_POSTMESSAGE or QS_TIMER or QS_PAINT or QS_HOTKEY or QS_SENDMESSAGE);
STATUS_TIMEOUT = $00000102;
WAIT_TIMEOUT = STATUS_TIMEOUT;
function MsgWaitForMultipleObjects(nCount: DWORD; var pHandles: THandle; fWaitAll: BOOL; dwMilliseconds, dwWakeMask: DWORD): DWORD; external 'MsgWaitForMultipleObjects@user32.dll stdcall';
function CreateEvent(lpEventAttributes: Longint; bManualReset, bInitialState: BOOL; lpName: PChar): THandle; external 'CreateEvent{#A}@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';
procedure Delay(Milliseconds: Integer);
var
dwTick: DWORD;
hEvent: THandle;
begin
hEvent := CreateEvent(0, False, False, '');
try
dwTick := GetTickCount + DWORD(Milliseconds);
while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, hEvent, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
begin
Application.ProcessMessages;
Milliseconds := dwTick - GetTickCount;
end;
finally
CloseHandle(hEvent);
end;
end;
procedure InitializeWizard;
begin
Delay(2000);
end;
наперёд скажу, что обычный Sleep() не подходит, тк мне нужно задержать исчезновение формы на пару секунд, а с ним на ней всё замирает. Решение - код выше
===============================================================================
alert30, заголовок окна и отображает в панели задач »
заголовок окна и имя кнопки в панели задач не взаимосвязаны , меняются отдельно друг от друга 3-мя способами:
1. путём изменения стандартных констант сообщений
[messages]
SetupAppTitle=имя кнопки
SetupWindowTitle=заголовок окна
2. через методы объектов
procedure InitializeWizard();
begin
WizardForm.Caption := 'Заголовок окна';
Application.Title := 'Имя кнопки';
end;
3. через функцию винды SetWindowText
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
function SetWindowText(hWnd: HWND; lpString: String): BOOL; external 'SetWindowText{#A}@user32.dll stdcall';
procedure InitializeWizard();
begin
SetWindowText(WizardForm.Handle, 'Заголовок окна');
SetWindowText(Application.Handle, 'Имя кнопки');
end;
Nightwishh
01-01-2013, 22:52
Не, речь идёт об ISDone function ISDoneInit(RecordFileName:string; TimeType, Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean;
...
if ISDoneInit(ExpandConstant('{src}\records.inf'),$F777,Comps1,Comps2,Comps3,MainForm.Handle,{#NeedMem} ,@ProgressCallback) then begin
Разгадка скорее всего в этих строчках, а именно в "WinHandle" и "MainForm.Handle", но если их удалить, то вылезет ошибка "Не хватает оперативной памяти"
Mailchik
02-01-2013, 00:05
Nightwishh, замените MainForm.Handle на WizardForm.Handle.
Здравствуйте. Как в инсталляторе сделать проверку целостности игровых архивов перед началом установки?
Nikish X
02-01-2013, 07:50
Как делают Механики? Они же запаковывают фриарком, файлы извлекаются в {app}, а потом эти архивы удаляются, а остаются извлечённые файлы. Как мне так сделать?
Nikish X, по поводу распакования FreeArc-ом делается ISDone, почитай несколько страниц, там есть.
А Вот по поводу удаления архива ARC-а, после распакования FreeArc-ом в инсталляторе, читаем, начиная с 478 поста (http://forum.oszone.net/post-1957346.html#post1957346).
Здравствуйте. Как в инсталляторе сделать проверку целостности игровых архивов перед началом установки? »
ISMD5 - библиотека для вычисления и сравнения хеш-суммы MD5 файлов с выводом прогресса. (http://krinkels.org/showthread.php?p=13374#post13374)
Они же запаковывают фриарком, файлы извлекаются в {app}, а потом эти архивы удаляются, а остаются извлечённые файлы. »
Брр... К чему эти извращения? Для чего копировать архивы в папку назначения и затем удалять их после извлечения? Нужно гораздо больше места для установки, да и время установки увеличивается. Лучше и быстрее извлекать архивы из {src} в {app}.
Nikish X
02-01-2013, 13:22
Брр... К чему эти извращения? Для чего копировать архивы в папку назначения и затем удалять их после извлечения? Нужно гораздо больше места для установки, да и время установки увеличивается. Лучше и быстрее извлекать архивы из {src} в {app}. »
Я хочу запаковать игру в архивы, а потом архивы в архивы. Думаю так сильнее сжатие будет.
Nikish X
02-01-2013, 13:56
Я понял, что тупо паковать архивы в архивы, за это спасибо alert30 и nik1967. Теперь меня интересует как precomp'om всю папку сжать?
Nikish X, например, почитать здесь Пережатиe/Pекомпрессия/Oптимизация файлов для лучшего сжатия (http://forum.ru-board.com/topic.cgi?forum=5&topic=30239&start=0).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.