Войти

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


Страниц : 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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Tco 03
06-12-2013, 09:28
Что-то у меня не работает... Висит надпись "Preparing download..." и всё, больше никаких действий! »
Тут оказывается косяк! При нерабочем интернете (или рабочем, но не может связаться по ссылке с файлом) инсталлятор зависает! И выход из ситуации только "убить процесс".
например с 1 файла из 3 если они все втроём составляют одно целое »
Ну три файла составляют одно целое, но если интернет отрубился, а до этого два файла успешно скачались, объёмом по 80 метров, скачивать заново те, что уже скачались? Тут по правилам нужно сделать какую-нибудь проверку... Ещё бы хотелось добавить фунцию повтора закачки, если при обрыве связи закачка одного из трёх файлов была прервана (соответственно нужно скачать только его (недокаченный)).

ну всё, с тебя ящик бухла: »
:yes:

Johny777, Как в твоём примере нарисовать скорость загрузки?

Mat_y, А назад вернуть надпись кнопки!?


Procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectTasks then
begin
WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
end else begin
WizardForm.NextButton.Caption:= WizardForm.NextButton.Caption;
end;
end;

Mat_y
06-12-2013, 11:31
Mat_y, А назад вернуть надпись кнопки!? »
А автор не просил :) чтобы они еще и назад вернулись :)
З.Ы. А серьезно - просто забыл.

Johny777
06-12-2013, 14:01
Tco 03,
Ну три файла составляют одно целое, но если интернет отрубился, а до этого два файла успешно скачались, объёмом по 80 метров, скачивать заново те, что уже скачались? Тут по правилам нужно сделать какую-нибудь проверку... Ещё бы хотелось добавить фунцию повтора закачки, если при обрыве связи закачка одного из трёх файлов была прервана (соответственно нужно скачать только его (недокаченный)). »
OK,
но повторюсь, интернет для меня тема в большей мере непознанная. я еще с переадресацией и прокси не разобрался.
http://forum.oszone.net/post-2267708-1631.html
код будет очень нескоро. Паси форум
Как в твоём примере нарисовать скорость загрузки? »
вычисляется статистически. Учитывая прошедшее время и тд. Типа как здесь оставшееся время вычисляется.
http://forum.oszone.net/post-2264978-1575.html
Потом добавлю в демо.
Tco 03, ну всё, с тебя ящик бухла: »
временно отменяется. пока готовь 2 ящика! :)

Shkutu
06-12-2013, 14:15
Доброго времени суток!
А нет ли у кого-нибудь случаем алгоритма кодирования в/декодирования base64 для инно?

Mat_y
06-12-2013, 14:58
Ребят!
А можно ли вот эту часть кода
var
InfoBMP: TBitmapImage;
I_BMP : Array [0..10] of TBitmap;
которая призвана выводить картинки формата BMP при наведении на компонент (см. код ниже):

procedure ComponentsListItemMouseMove(Sender: TObject; X: Integer; Y: Integer; Index: Integer; Area: TItemArea);
begin
InfoBMP.Bitmap.FreeImage;
if ((Index >-1) and (Index<10))then InfoBMP.Bitmap := I_BMP[Index];
end;

procedure InitializeImageInfo;
var
i : Integer;
begin
with WizardForm do
begin
with ComponentsList do
begin
OnItemMouseMove := @ComponentsListItemMouseMove;
end;
end;

InfoBMP := TBitmapImage.Create(WizardForm); //*****************************
with InfoBMP do
begin
Parent := WizardForm.MainPanel;
SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(149));
Stretch := true;
// InfoBMP.Bitmap := I_BMP[0]; // 0-ая картинка по умолчанию
end;
for i := 0 to 10 do
begin
I_BMP[i] := TBitmap.Create;
with I_BMP[i] do
begin
case i of
0 : LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
1 : LoadFromFile(ExpandConstant('{tmp}\2.bmp'));
//////////............................................

Заменить на картинки на формат *.PNG и привязать их к свободной форме Parent := WizardForm;

Другими словами TBitmapImage можно чем либо заменить? Или другой подход реализовать... через dll какой нибудь?

Tco 03
06-12-2013, 17:23
Johny777, код будет очень нескоро. Паси форум »
Я его почти каждый день просматриваю (правда через E-Mail) :)
вычисляется статистически. Учитывая прошедшее время и тд. Типа как здесь оставшееся время вычисляется. »
Чего-то у меня это не получается :(
временно отменяется. пока готовь 2 ящика! »
:Beer:

Mat_y,
Заменить на картинки на формат *.PNG и привязать их к свободной форме Parent := WizardForm; »
Тут Вам поможет ботва!
Другими словами TBitmapImage можно чем либо заменить? Или другой подход реализовать... через dll какой нибудь? »
Незнаю, что конкретно Вам нужно... Типа вроде этого?

http://4put.ru/pictures/small/796/2447493.jpg (http://4put.ru/view-max-picture.php?id=2447493)

Если да, то вот готовый пример:

Shkutu
06-12-2013, 17:34
И еще вопрос.
Можно ли в инно как-то менять кодировку текста, сохраняемого в файлик? При сохранении получается utf-8 (у меня юникодная версия), а надо в результате ucs-2 little endian

Dimas2011
06-12-2013, 18:32
Ребята помогите не показывает картинку.я пытаюсь сделать так что когда выбираешь куда устанавливать файлы потом открывается сам список того что хочешь установить. так чтобы когда наводишь на название какого-то файла выскакивала картинка а оно не работает.107703

FX-DENIS
06-12-2013, 21:00
Ребята я наверно многим тут уже надоел,но вроде все делаю правильно.Скрипт компилируется без ошибок и запускается в инно (расширенная версия юникод) когда нажимаешь на запуск инсталятора в инно(зеленая стрелка).Как только компилирую,закрываю инно,нажимаю Setup.exe , появляется на панели задач иконка и окно иснталла и не раскрывается,тупо зависает инсталл не появившись.Не пойму почему такой глюк.Ошибок при компиляции не выдает.Система свежая тока недавно ставил,временные папки и реестр чистил.Вот скрипт,может просмотрите глазом ,что не так.Подозреваю ,что то в procedure InitializeWizard();
107705

Gnom_aka_Lexander
06-12-2013, 21:18
FX-DENIS, вот это все:
Source: ISSkin.dll; Flags: dontcopy
Source: tiger.cjstyles; Flags: dontcopy
//Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
//Source: ISDone_Arc.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\InnoCallback.dll; Flags: dontcopy
Source: CallbackCtrl.dll; Flags: dontcopy
Source: logo.bmp; Flags: dontcopy подними в начало секции, а строчку с файлами игры (у тебя эта:
Source: D:\Games\R.G. Catalyst\Far Cry 3\*; DestDir: {app}; AfterInstall: Progress; Flags: ignoreversion createallsubdirs recursesubdirs sortfilesbyextension sortfilesbyname
) наоборот в самый низ секции файлов

El Sanchez
06-12-2013, 21:57
А нет ли у кого-нибудь случаем алгоритма кодирования в/декодирования base64 для инно? »
Shkutu, держите, делал когда-то для одного товарища:


#define A = (Defined UNICODE) ? "W" : "A"

const
CRYPT_STRING_BASE64 = $1;
IS_TEXT_UNICODE_STATISTICS = $2;

function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: String; cbMultiByte: Integer; lpWideCharStr: String; cchWideChar: Integer): Integer; external 'MultiByteToWideChar@kernel32.dll stdcall';
function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: String; cchWideChar: Integer; lpMultiByteStr: String; cbMultiByte, lpDefaultChar: Integer; lpUsedDefaultChar: Longint): Integer; external 'WideCharToMultiByte@kernel32.dll stdcall';
function CryptBinaryToString(pbBinary: Longint; cbBinary, dwFlags: DWORD; pszString: Longint; var pcchString: DWORD): BOOL; external 'CryptBinaryToString{#A}@crypt32.dll stdcall';
function CryptStringToBinary(szString: String; cchString, dwFlags: DWORD; pbBinary: Longint; var pcbBinary, pdwSkip, pdwFlags: DWORD): BOOL; external 'CryptStringToBinary{#A}@crypt32.dll stdcall';
function IsTextUnicode(const lpv: String; iSize: Integer; var lpiResult: Integer): BOOL; external 'IsTextUnicode@advapi32.dll stdcall';

/////////////////////////////////////////////////////////////////////////////////////////////////////
function Base64Encode(const szString: String; const dwFlags: DWORD; const bUnicode: Boolean): String;
var
cchString: DWORD;
pszString, pszResult: Longint;
iLength: Integer;
#ifdef UNICODE
szAnsiString: AnsiString;
#endif
begin
if Length(szString) = 0 then Exit;
iLength := Length(szString);
if bUnicode then
begin
iLength := iLength shl 1;
#ifndef UNICODE
SetLength(Result, iLength);
MultiByteToWideChar(0, 1, szString, -1, Result, Length(Result));
szString := Result;
#endif
pszString := CastStringToInteger(szString);
end else begin
#ifdef UNICODE
szAnsiString := szString;
pszString := CastAnsiStringToInteger(szAnsiString);
#else
pszString := CastStringToInteger(szString);
#endif
end;
if not CryptBinaryToString(pszString, iLength, dwFlags, 0, cchString) then Exit;
Result := StringOfChar(#0, cchString-1);
pszResult := CastStringToInteger(Result);
CryptBinaryToString(pszString, iLength, dwFlags, pszResult, cchString);
end;

////////////////////////////////////////////////////////////////////////////
function Base64Decode(const szString: String; const dwFlags: DWORD): String;
var
cchString, dwSkip: DWORD;
pszResult, iResult: Longint;
szBuffer: String;
begin
if Length(szString) = 0 then Exit;
if not CryptStringToBinary(szString, Length(szString), dwFlags, 0, cchString, dwSkip, dwFlags) then Exit;
Result := StringOfChar(#0, cchString);
pszResult := CastStringToInteger(Result);
CryptStringToBinary(szString, Length(szString), dwFlags, pszResult, cchString, dwSkip, dwFlags);
szBuffer := Result;
iResult := IS_TEXT_UNICODE_STATISTICS;
if IsTextUnicode(Result, cchString, iResult) then
begin
#ifndef UNICODE
SetLength(Result, Length(Result) shr 1);
WideCharToMultiByte(0, 0, szBuffer, -1, Result, Length(Result), 0, 0);
end;
#else
Result := CastIntegerToString(pszResult);
end else Result := CastIntegerToAnsiString(pszResult);
#endif
end;

/////////////////////////////
procedure InitializeWizard();
begin
MsgBox(Format('Исходная строка: %s'#13#10'Кодированная строка (ANSI): %s', ['test1', Base64Encode('test1', CRYPT_STRING_BASE64, False)]), mbInformation, MB_OK);
MsgBox(Format('Исходная строка: %s'#13#10'Кодированная строка (Unicode): %s', ['test1', Base64Encode('test1', CRYPT_STRING_BASE64, True)]), mbInformation, MB_OK);
MsgBox(Format('Исходная строка (ANSI): %s'#13#10'Декодированная строка: %s', ['dGVzdDE=', Base64Decode('dGVzdDE=', CRYPT_STRING_BASE64)]), mbInformation, MB_OK);
MsgBox(Format('Исходная строка (Unicode): %s'#13#10'Декодированная строка: %s', ['dABlAHMAdAAxAA==', Base64Decode('dABlAHMAdAAxAA==', CRYPT_STRING_BASE64)]), mbInformation, MB_OK);
end;

FX-DENIS
06-12-2013, 23:18
наоборот в самый низ секции файлов »
Спасибо завтра проверю,не думал,что последовательность в секции Files так жестко влияет на итог,даже в справке по моему не упоминается.Так же спасибо за ваши сборки Инно Ультра,только ей и пользуюсь,правда она устарела,вышли новые версии инно и dll,но я просто копирую в вашу папку куда установлена ультра с заменой(надеюсь так и нужно).Еще раз спасибо вам.

Gnom_aka_Lexander
07-12-2013, 09:56
FX-DENIS, просто при солид-сжатии, когда файлы самого приложения идут до файлов оформления, которые нужны в работе инсталла, ему приходится ооочень долго добираться до этих служебных файлов. если не полениться и почитать архив темы, то вопрос этот всплывал несколько десятков раз. Кто-то даже помнится писал о нескольких часах ожидания..
По аналогии - видел как-то рекламу каких-то чипсов, которые продаются в трубчатой упаковке. Вот, чтоб представить себе муки инсталла, нужно купить такую банку чипсов и попытаться достать из нее самый нижний чипс не вынимаю все остальные, и не отрезая донышка банки.

Dimas2011
07-12-2013, 21:20
Ребята помогите не показывает картинку.я пытаюсь сделать так что когда выбираешь куда устанавливать файлы потом открывается сам список того что хочешь установить. так чтобы когда наводишь на название какого-то файла выскакивала картинка а оно не работает.Test.rar »
помогите

Johny777
08-12-2013, 00:01
Dimas2011, впиши InitInfo(); в InitializeWizard();
ты используешь этот код: http://forum.oszone.net/post-2169372-662.html
Он был недавно обновлён, я исправил в нём ошибку и оптимизировал.
замени у себя старую его версию на новую

PS:
и на будущее: будь добр выкладывать скрипт с файлами, чтоб перед тем как искать ошибку ни мне ни другим не приходилось закомментировать участки кода и/или искать нужные файлы
в твоём случае например это были
Source: Files\A.bmp; Flags: dontcopy nocompression
Source: Files\B.bmp; Flags: dontcopy nocompression
Source: Files\C.bmp; Flags: dontcopy nocompression
Source: Files\D.bmp; Flags: dontcopy nocompression
Source: Files\logo.bmp; Flags: dontcopy
Source: Files\BASS.dll; Flags: dontcopy
Source: Files\sound.mp3; Flags: dontcopy nocompression
Source: Files\MusicButton.bmp; Flags: dontcopy
Source: Files\DirBitmap.bmp; DestDir: "{tmp}"; Flags: dontcopy
Source: Files\GroupBitmap.bmp; DestDir: "{tmp}"; Flags: dontcopy

Mat_y
08-12-2013, 14:13
Johny777, в коде, который Вы привели в качестве примера (кстати еще раз спасибо)... за что отвечает эта часть? Можно получить коментарии к строкам, если не затруднит?
procedure CompOnClick(Sender: TObject);
var
i, k: Integer;
begin
k:= -1;
for i:= 0 to 3 do begin
if WizardForm.ComponentsList.Checked[1+i] then
begin
k:= i;
Break;
end;
end;
if (k=-1)or(cur=k) then Exit;
ImgSetVisibility(png[cur], False);
ImgSetVisibility(png[k], True);
cur:= k;
ImgApplyChanges(WizardForm.SelectComponentsPage.Handle);
end;

И еще... как добавить поле с компонентами на форму с произвольными размерами... ну, сказать, что на этой странице должно быть поле с компонентами, такого-то размера в том-то месте.

Optitron
08-12-2013, 16:16
Здравствуйте. как сделать так, чтобы "DefaultDirName" для каждого компонента был разный? Например для компонента "One" "DefaultDirName={pf}\Game One", а для "Two" соответственно "DefaultDirName={pf}\Game Two"

Farser21
08-12-2013, 19:51
Всем привет, вопрос такой.
В стандартном установщике, когда идет странице выбора компонентов, очень маленькое окно, подскажите как его сделать больше? Чтобы е нужно было постоянно прокручивать бегуной.

Dimas2011
08-12-2013, 20:33
Он был недавно обновлён, я исправил в нём ошибку и оптимизировал.
замени у себя старую его версию на новую »
а можно сылку на обновленый??

Nordek
09-12-2013, 03:45
а можно сылку на обновленый?? » Так Johny777 в своём сообщении указал ссылку. Что тебе ещё? Персонально указать? Сообщение: 662 (http://forum.oszone.net/post-2169372-662.html). И посмотри там чуть ниже написано "Последний раз редактировалось Johny777, 05-12-2013 в 23:26.", наверно не трудно догадаться что к чему.




© OSzone.net 2001-2012