PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 [74] 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

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;


и все остальные компоненты по аналогии

alert30
31-12-2012, 18:43
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 убрать время и процент распаковки не в самом окне инсталла, а в рамочке на панеле задач (не знаю как это называется, а скрина нет под рукой)?

alert30
01-01-2013, 18:04
а в рамочке на панеле задач »
Вернее заголовок окна, заголовок окна и отображает в панели задач. Изменить можно, в каком-то файле (я уже забыл); то ли 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.

LinkOFF
02-01-2013, 06:11
Здравствуйте. Как в инсталляторе сделать проверку целостности игровых архивов перед началом установки?

Nikish X
02-01-2013, 07:50
Как делают Механики? Они же запаковывают фриарком, файлы извлекаются в {app}, а потом эти архивы удаляются, а остаются извлечённые файлы. Как мне так сделать?

alert30
02-01-2013, 08:16
Nikish X, по поводу распакования FreeArc-ом делается ISDone, почитай несколько страниц, там есть.

А Вот по поводу удаления архива ARC-а, после распакования FreeArc-ом в инсталляторе, читаем, начиная с 478 поста (http://forum.oszone.net/post-1957346.html#post1957346).

nik1967
02-01-2013, 11:54
Здравствуйте. Как в инсталляторе сделать проверку целостности игровых архивов перед началом установки? »
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 всю папку сжать?

nik1967
02-01-2013, 14:07
Nikish X, например, почитать здесь Пережатиe/Pекомпрессия/Oптимизация файлов для лучшего сжатия (http://forum.ru-board.com/topic.cgi?forum=5&topic=30239&start=0).




© OSzone.net 2001-2012