Войти

Показать полную графическую версию : Скрипты 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
06-06-2012, 14:42
Dark_Delphin,
опыта с внешними архивами у меня почти никакого, но думаю, что там где у тебя списком идут
внешние архивы(если это так) нужно после определённой строки создать форму и на ней эдит
с обзором или просто "Обзор" и указать расположение других архивов (как в вин раре)
покажи код распаковки

Dark_Delphin
06-06-2012, 16:02
Johny777,
if not ISArcExtract ( 0, 24, ExpandConstant('{src}\zdata.pro'), ExpandConstant('{app}'), false, '', '', '', PCFonFLY ) then break;
if not ISSRepExtract ( 0, 25, ExpandConstant('{app}\zdata.srep'), ExpandConstant('{app}\zdata.pcf'), true ) then break;
if not ISPrecompExtract( 0, 25, ExpandConstant('{app}\zdata.pcf'), ExpandConstant('{app}\zdata.7z'), true ) then break;
if not IS7ZipExtract ( 0, 25, ExpandConstant('{app}\zdata.7z'), ExpandConstant('{app}\'), true, '' ) then break;

или

if not ISArcExtract ( 0, 100, ExpandConstant('{src}\zdata.pro'), ExpandConstant('{app}'), false, '', '', '', PCFonFLY ) then break;

Johny777
06-06-2012, 17:17
Dark_Delphin,

дабы далеко не ходить вот тут есть готовый пример формы запроса от Winst@n для IsDone

http://176.9.1.113:52080/showthread.php?t=7&page=3

проще, чем нечто подобное с нуля рисовать

FrozenProtector
07-06-2012, 09:19
Во время установки подгружаю нужные мне файлы через интернет. Для этих целей использую плагин Inno Tools Downloader.
Всё устраивает кроме одной мелочи - не могу русифицировать интерфейс загрузки. Плагин позволяет править ini файлы с языками, а потом подгружать их через команду ITD_LoadStrings. Но в результате вместо русских букв получаются иероглифы. Пробовал конвертировать ini в различные кодировки, но ничего не помогло. Функция ITD_SetString дает аналогичный результат.
Кто сталкивался, помогите ,пожалуйста, или подскажите аналогичные загрузчики файлов через интернет.

t16bz
07-06-2012, 12:44
Здравствуйте, кто знает скажите, что нужно пропивать в caption, чтобы на кнопке был такой символ?
http://i25.fastpic.ru/big/2012/0607/05/65eacb69cefbeaeb2919d02824d38005.png

El Sanchez
07-06-2012, 13:10
подскажите аналогичные загрузчики файлов через интернет. »
FrozenProtector, в один поток без докачки.


[Code]
const
INTERNET_OPEN_TYPE_PRECONFIG = 0;
INTERNET_FLAG_NO_CACHE_WRITE = $4000000;
INTERNET_FLAG_NEED_FILE = $10;
INTERNET_FLAG_NO_AUTO_REDIRECT = $200000;
HTTP_QUERY_LOCATION = 33;
FILE_END = 2;
INVALID_SET_FILE_POINTER = $FFFFFFFF;

var
ProgressPage: TOutputProgressWizardPage;
DownSpeedLabel, PercentLabel, PassedLabel, RemainLabel: TLabel;
StartDownload: DWORD;
FStream: TFileStream;
fSize: DWORD;
fName: String;
Timer: TTimer;
LastSize, CurrentTimerEvent, LastTimerEvent: DWORD;


function InternetOpen(lpszAgent: String; dwAccessType: DWORD; lpszProxyName, lpszProxyBypass: String; dwFlags: DWORD): Integer; external 'InternetOpenA@wininet.dll stdcall';
function InternetOpenUrl(hInternet: Integer; lpszUrl, lpszHeaders: String; dwHeadersLength, dwFlags: DWORD; dwContext: DWORD_PTR): Integer; external 'InternetOpenUrlA@wininet.dll stdcall';
function InternetSetFilePointer(hFile: Integer; lDistanceToMove: Longint; lpDistanceToMoveHigh: Variant; dwMoveMethod, dwContext: DWORD): DWORD; external 'InternetSetFilePointer@wininet.dll stdcall';
function InternetReadFile(hFile: Integer; var lpBuffer: Char; dwNumberOfBytesToRead: DWORD; var lpdwNumberOfBytesRead: DWORD): BOOL; external 'InternetReadFile@wininet.dll stdcall';
function InternetQueryDataAvailable(hFile: Integer; var lpdwNumberOfBytesAvailable: DWORD; dwFlags: DWORD; dwContext: DWORD_PTR): Boolean; external 'InternetQueryDataAvailable@wininet.dll stdcall';
function InternetCloseHandle(hInternet: Integer): BOOL; external 'InternetCloseHandle@wininet.dll stdcall';
function DeleteUrlCacheEntry(lpszUrlName: String): BOOL; external 'DeleteUrlCacheEntryA@wininet.dll stdcall';
function HttpQueryInfo(hRequest: Integer; dwInfoLevel: DWORD; var lpvBuffer: Char; var lpdwBufferLength, lpdwIndex: DWORD): BOOL; external 'HttpQueryInfoA@wininet.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';
function StrFormatByteSize64(qdw: Currency; var pszBuf: Char; cchBuf: UINT): PAnsiChar; external 'StrFormatByteSize64A@shlwapi.dll stdcall';
function StrFromTimeInterval(var pszOut: Char; cchMax: UINT; dwTimeMS: DWORD; digits: Byte): Integer; external 'StrFromTimeIntervalA@shlwapi.dll stdcall';


////////////////////////////////////////////
function BytesToSize(Bytes: Extended): String;
var
pszBuf: array [0..15] of Char;
begin
try
Result := StrFormatByteSize64(Abs(Bytes div 1E4), pszBuf[0], sizeof(pszBuf));
except end;
end;

function TicksToTime(Ticks: DWORD): String;
var
i: Byte;
arr: array [0..31] of Char;
begin
for i := 0 to StrFromTimeInterval(arr[0], sizeof(arr), Ticks, 8)-1 do Result := Result + arr[i];
end;

function RoundDword(dwValue: DWORD): DWORD;
begin
dwValue := dwValue or (dwValue shr 1);
dwValue := dwValue or (dwValue shr 2);
dwValue := dwValue or (dwValue shr 4);
dwValue := dwValue or (dwValue shr 8);
dwValue := dwValue or (dwValue shr 16);
Result := dwValue - (dwValue shr 1);
end;

procedure DownloadProgress(Sender: TObject);
begin
try
CurrentTimerEvent := GetTickCount;
ProgressPage.SetText('Файл: '#9#9 + fName, 'Загружено: '#9 + BytesToSize(FStream.Size) + ' из ' + BytesToSize(fSize));
PassedLabel.Caption := 'Прошло: '#9 + TicksToTime(CurrentTimerEvent-StartDownload);
RemainLabel.Caption := 'Осталось: '#9 + TicksToTime(StrToInt(FormatFloat('0',(fSize-FStream.Size)*(CurrentTimerEvent-StartDownload)/FStream.Size)));
with PercentLabel do
begin
Caption := FormatFloat('0.#0 %', (FStream.Size*100)/fSize);
if Left <= (ProgressPage.ProgressBar.Width - Width) then
Left := StrToInt(FormatFloat('0', FStream.Size*ProgressPage.ProgressBar.Width/fSize));
end;
if CurrentTimerEvent - LastTimerEvent >= 1000 then
begin
DownSpeedLabel.Caption := 'Скорость: '#9 + BytesToSize(FStream.Size-LastSize) + '/сек';
LastTimerEvent := CurrentTimerEvent;
LastSize := FStream.Size;
end;
finally
end;
end;

procedure DownloadFile(urlFilename: String);
var
i: SmallInt;
lpBuffer: array of Char;
lpdwNumberOfBytesRead, lpdwNumberOfBytesAvailable, lpdwBufferLength, lpdwIndex: DWORD;
hInt, hRedir, hFile: Integer;
fBuf: String;
begin
try
hInt := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, '', '', 0);
if hInt <> 0 then
try
//Get file name and size
hRedir := InternetOpenUrl(hInt, urlFilename, '', 0, INTERNET_FLAG_NEED_FILE or INTERNET_FLAG_NO_AUTO_REDIRECT, 0);
if hRedir = 0 then Exit;
try
SetArrayLength(lpBuffer, 1024);
fSize := InternetSetFilePointer(hRedir, 0, NULL, FILE_END, 0);
if fSize = INVALID_SET_FILE_POINTER then
begin
lpdwBufferLength := GetArrayLength(lpBuffer);
lpdwIndex := 0;
HttpQueryInfo(hRedir, HTTP_QUERY_LOCATION, lpBuffer[0], lpdwBufferLength, lpdwIndex);
urlFilename := '';
for i := 0 to lpdwBufferLength-1 do urlFilename := urlFilename + lpBuffer[i];
hFile := InternetOpenUrl(hInt, urlFilename, '', 0, INTERNET_FLAG_NEED_FILE, 0);
if hFile <> 0 then
try
fSize := InternetSetFilePointer(hFile, 0, NULL, FILE_END, 0);
finally
InternetCloseHandle(hFile);
DeleteUrlCacheEntry(urlFilename);
end;
end;
finally
fName := ExtractFileName(urlFilename);
InternetCloseHandle(hRedir);
DeleteUrlCacheEntry(urlFilename);
end;
//
hFile := InternetOpenUrl(hInt, urlFilename, '', 0, INTERNET_FLAG_NEED_FILE, 0);
if hFile <> 0 then
begin
if GetSaveFileName('Сохранить как...', fName, '', '*' + ExtractFileExt(fName), ExtractFileExt(fName)) then
try
DeleteFile(fName);
FStream := TFileStream.Create(fName, fmCreate);
ProgressPage.SetProgress(0, fSize);
ProgressPage.Show;
StartDownload := GetTickCount();
while (InternetQueryDataAvailable(hFile, lpdwNumberOfBytesAvailable, 0, 0) and (lpdwNumberOfBytesAvailable > 0)) do
begin
SetArrayLength(lpBuffer, RoundDword(lpdwNumberOfBytesAvailable));
InternetReadFile(hFile, lpBuffer[0], GetArrayLength(lpBuffer), lpdwNumberOfBytesRead);
ProgressPage.SetProgress(FStream.Size + lpdwNumberOfBytesRead, fSize);
fBuf := '';
for i := 0 to GetArrayLength(lpBuffer)-1 do fBuf := fBuf + lpBuffer[i];
FStream.WriteBuffer(fBuf, lpdwNumberOfBytesRead);
FStream.Seek(0, soFromEnd);
Timer.Enabled := FStream.Size <> fSize;
end;
finally
Timer.Enabled := False;
FStream.Free;
ProgressPage.Hide;
end;
end;
finally
InternetCloseHandle(hFile);
DeleteUrlCacheEntry(urlFilename);
end;
finally
InternetCloseHandle(hInt);
end;
end;

procedure CreateDownloadProgressPage;
begin
ProgressPage := CreateOutputProgressPage('Загрузка файла', '');
ProgressPage.ProgressBar.Top := ProgressPage.ProgressBar.Top + ProgressPage.ProgressBar.Height div 2;
PercentLabel := TLabel.Create(WizardForm);
with PercentLabel do
begin
Parent := ProgressPage.Surface;
Top := ProgressPage.ProgressBar.Top - Height - ScaleY(2);
Transparent := True;
end;
DownSpeedLabel := TLabel.Create(WizardForm);
with DownSpeedLabel do
begin
Parent := ProgressPage.Surface;
Top := ProgressPage.ProgressBar.Top + ScaleY(30);
Transparent := True;
end;
PassedLabel := TLabel.Create(WizardForm);
with PassedLabel do
begin
Parent := ProgressPage.Surface;
Top := DownSpeedLabel.Top + ScaleY(15);
Transparent := True;
end;
RemainLabel := TLabel.Create(WizardForm);
with RemainLabel do
begin
Parent := ProgressPage.Surface;
Top := PassedLabel.Top + ScaleY(15);
Transparent := True;
end;
Timer := TTimer.Create(WizardForm);
with Timer do
begin
Interval := 100;
OnTimer := @DownloadProgress;
Enabled := False;
end;
end;

//
procedure InitializeWizard();
begin
CreateDownloadProgressPage;
end;
//

function NextButtonClick(CurPageID: Integer): Boolean;
begin
if CurPageID = wpWelcome then
begin
DownloadFile('http://mse.dlservice.microsoft.com/download/7/6/0/760B9188-4468-4FAD-909E-4D16FE49AF47/ruRU/x86/mseinstall.exe');
Result := True;
end;
Result := True;
end;


P.S. Требуется расширенная версия Inno.

Johny777
07-06-2012, 16:12
t16bz,
я бы например использовал SpeedButton с глифом (тебе понадобится расширенная версия инно http://forum.oszone.net/thread-148707-30.html)
пример с картинкой во вложенном архиве
хотя может на Unicode версии инно можно использовать такой символ

t16bz
07-06-2012, 16:55
я бы например использовал SpeedButton с глифом (тебе понадобится расширенная версия инно http://forum.oszone.net/thread-148707-30.html)
пример с картинкой во вложенном архиве
хотя может на Unicode версии инно можно использовать такой символ »
К сожалению, этот вариант не подходит

FrozenProtector
07-06-2012, 17:25
t16bz
Непечтные символы вывожу так:
Button.Caption := #код_символа
например:
Button.Caption := #244;
или шестнадцатеричный код символа
Button.Caption := #$FE;

Конечно нужно знать код символа.

El Sanchez
07-06-2012, 17:50
Конечно нужно знать код символа. »
t16bz, можно использовать символьный шрифт, где нужные глифы уже есть. Например, система для отрисовки стандартных контролов использует шрифт Marlett (http://www.reactos.org/wiki/Marlett_Characters).

Button.Font.Name := 'Marlett';
Button.Caption := '8';

R.i.m.s.k.y.
07-06-2012, 18:30
El Sanchez, способ хороший но есть нюанс: в говносборках частенько вырезают шрифты
В каждой венде есть "Таблица символов", интересующие меня символы я смотрю там

nik1967
07-06-2012, 18:43
В каждой венде есть "Таблица символов", интересующие меня символы я смотрю там »
С этим не прокатывает(по крайней мере у меня).

R.i.m.s.k.y.
07-06-2012, 18:55
С этим не прокатывает(по крайней мере у меня). »
http://rghost.ru/38535640/image.png

Dark_Delphin
08-06-2012, 00:47
Всем привет.

Кто знает как изменить окошко "Выбор языка инсталлятора" ?

Johny777
08-06-2012, 02:36
Dark_Delphin,
http://176.9.1.113:52080/showthread.php?t=7&page=4
(в сообщении sergey3695)

__________________________________________________

скажите пожалуйста как можно короче записать обновление прогрессбара
извлекаются 92 файла и после каждой строки приписываю Позиция := число
может можно покороче и по проще
я не знаю :(


Form := CreateCustomForm();
with Form do
begin
BorderIcons := [];
ClientWidth := ScaleX(256);
ClientHeight := ScaleY(338);
BorderStyle := bsSingle;
SetClassLong(Form.Handle, (-26), GetWindowLong(Form.Handle, (-26)) or $00020000); /// тень от окна
Left := GetSystemMetrics(16) - ClientWidth - ScaleX(16);
Top := GetSystemMetrics(17) - ClientHeight - ScaleY(16);
end;

with TBitmapImage.Create(Form) do
begin
.....
end;

LoadPrgsBar := TNewProgressBar.Create(Form);
with LoadPrgsBar do
begin
Parent := Form;
SetBounds(ScaleX(0), ScaleY(0), ScaleX(256), ScaleY(25))
Position := 0;
end;

with TLabel.Create(Form) do
begin
.......
end;


Form.Show();
Form.Repaint;
/// конец

/////////////////////////////////////////
/// скроллбокс /// 92 строки
with LoadPrgsBar do
begin
ExtractTemporaryFile('WizardForm.Intro_BitmapImage1.bmp');
Position := 1;

ExtractTemporaryFile('WizardForm.BitmapImage1.bmp');
Position := 2;

ExtractTemporaryFile('WizardForm.BitmapImage2.bmp');
Position := 3;

ExtractTemporaryFile('WizardForm.BitmapImage3.bmp');
Position := 4;

ExtractTemporaryFile('WizardForm.BitmapImage4.bmp');
Position := 5;

ExtractTemporaryFile('WizardForm.BitmapImage5.bmp');
Position := 6;

ExtractTemporaryFile('WizardForm.BitmapImage6.bmp');
Position := 7;

ExtractTemporaryFile('WizardForm.BitmapImage7.bmp');
Position := 8;

ExtractTemporaryFile('WizardForm.BitmapImage8.bmp');
Position := 9;

ExtractTemporaryFile('WizardForm.BitmapImage10.bmp');
Position := 10;

ExtractTemporaryFile('WizardForm.BitmapImage11.bmp');
Position := 11;

ExtractTemporaryFile('WizardForm.BitmapImage12.bmp');
Position := 12;

ExtractTemporaryFile('WizardForm.BitmapImage13.bmp');
Position := 13;

ExtractTemporaryFile('WizardForm.BitmapImage14.bmp');
Position := 14;

ExtractTemporaryFile('WizardForm.BitmapImage15.bmp');
Position := 15;

ExtractTemporaryFile('WizardForm.BitmapImage16.bmp');
Position := 16;

ExtractTemporaryFile('WizardForm.BitmapImage17.bmp');
Position := 17;

ExtractTemporaryFile('WizardForm.BitmapImage18.bmp');
Position := 18;

ExtractTemporaryFile('WizardForm.BitmapImage19.bmp');
Position := 19;

ExtractTemporaryFile('WizardForm.BitmapImage20.bmp');
Position := 20;

ExtractTemporaryFile('WizardForm.BitmapImage21.bmp');
Position := 21;

ExtractTemporaryFile('WizardForm.BitmapImage22.bmp');
Position := 22;

ExtractTemporaryFile('WizardForm.BitmapImage23.bmp');
Position := 23;

ExtractTemporaryFile('WizardForm.BitmapImage24.bmp');
Position := 24;

ExtractTemporaryFile('WizardForm.BitmapImage25.bmp');
Position := 25;

ExtractTemporaryFile('WizardForm.BitmapImage26.bmp');
Position := 26;

ExtractTemporaryFile('WizardForm.BitmapImage27.bmp');
Position := 27;

ExtractTemporaryFile('WizardForm.BitmapImage28.bmp');
Position := 28;

ExtractTemporaryFile('WizardForm.BitmapImage29.bmp');
Position := 29;

ExtractTemporaryFile('WizardForm.BitmapImage30.bmp');
Position := 30;

ExtractTemporaryFile('WizardForm.BitmapImage31.bmp');
Position := 31;

ExtractTemporaryFile('WizardForm.BitmapImage32.bmp');
Position := 32;

ExtractTemporaryFile('WizardForm.BitmapImage33.bmp');
Position := 33;

ExtractTemporaryFile('WizardForm.BitmapImage34.bmp');
Position := 34;

ExtractTemporaryFile('WizardForm.BitmapImage35.bmp');
Position := 35;

ExtractTemporaryFile('WizardForm.BitmapImage36.bmp');
Position := 36;

ExtractTemporaryFile('WizardForm.BitmapImage37.bmp');
Position := 37;

ExtractTemporaryFile('WizardForm.BitmapImage38.bmp');
Position := 38;

ExtractTemporaryFile('WizardForm.BitmapImage39.bmp');
Position := 39;

ExtractTemporaryFile('WizardForm.BitmapImage40.bmp');
Position := 40;

ExtractTemporaryFile('WizardForm.BitmapImage41.bmp');
Position := 42;

ExtractTemporaryFile('WizardForm.BitmapImage42.bmp');
Position := 44;

ExtractTemporaryFile('WizardForm.BitmapImage43.bmp');
Position := 45;

ExtractTemporaryFile('WizardForm.BitmapImage44.bmp');
Position := 46;

ExtractTemporaryFile('WizardForm.BitmapImage45.bmp');
Position := 47;

ExtractTemporaryFile('WizardForm.BitmapImage46.bmp');
Position := 48;

ExtractTemporaryFile('WizardForm.BitmapImage47.bmp');
Position := 49;

ExtractTemporaryFile('WizardForm.BitmapImage48.bmp');
Position := 50;

ExtractTemporaryFile('WizardForm.BitmapImage49.bmp');
Position := 51;

ExtractTemporaryFile('WizardForm.BitmapImage50.bmp');
Position := 52;

ExtractTemporaryFile('WizardForm.BitmapImage51.bmp');
Position := 53;

ExtractTemporaryFile('WizardForm.BitmapImage52.bmp');
Position := 54;

ExtractTemporaryFile('WizardForm.BitmapImage53.bmp');
Position := 55;

ExtractTemporaryFile('WizardForm.BitmapImage55.bmp');
Position := 56;

ExtractTemporaryFile('WizardForm.BitmapImage54.bmp');
Position := 57;

ExtractTemporaryFile('WizardForm.BitmapImage56.bmp');
Position := 58;

ExtractTemporaryFile('WizardForm.BitmapImage57.bmp');
Position := 59;

ExtractTemporaryFile('WizardForm.BitmapImage58.bmp');
Position := 60;

ExtractTemporaryFile('WizardForm.BitmapImage59.bmp');
Position := 61;

ExtractTemporaryFile('WizardForm.BitmapImage60.bmp');
Position := 62;

ExtractTemporaryFile('WizardForm.BitmapImage61.bmp');
Position := 63;

ExtractTemporaryFile('WizardForm.BitmapImage62.bmp');
Position := 64;

ExtractTemporaryFile('WizardForm.BitmapImage63.bmp');
Position := 65;

ExtractTemporaryFile('WizardForm.BitmapImage64.bmp');
Position := 66;

ExtractTemporaryFile('WizardForm.BitmapImage65.bmp');
Position := 67;

ExtractTemporaryFile('WizardForm.BitmapImage66.bmp');
Position := 68;

ExtractTemporaryFile('WizardForm.BitmapImage67.bmp');
Position := 69;

ExtractTemporaryFile('WizardForm.BitmapImage68.bmp');
Position := 70;

ExtractTemporaryFile('WizardForm.BitmapImage69.bmp');
Position := 71;

ExtractTemporaryFile('WizardForm.BitmapImage70.bmp');
Position := 72;

ExtractTemporaryFile('WizardForm.BitmapImage71.bmp');
Position := 73;

ExtractTemporaryFile('WizardForm.BitmapImage72.bmp');
Position := 74;

ExtractTemporaryFile('WizardForm.BitmapImage73.bmp');
Position := 75;

ExtractTemporaryFile('WizardForm.BitmapImage74.bmp');
Position := 76;

ExtractTemporaryFile('WizardForm.BitmapImage75.bmp');
Position := 77;

ExtractTemporaryFile('WizardForm.BitmapImage76.bmp');
Position := 79;

ExtractTemporaryFile('WizardForm.BitmapImage77.bmp');
Position := 80;

ExtractTemporaryFile('WizardForm.BitmapImage78.bmp');
Position := 81;

ExtractTemporaryFile('WizModernImage.bmp'); /// интеграция воды
Position := 82;

ExtractTemporaryFile('Trinagle_Info_bmp.bmp');
Position := 83;

ExtractTemporaryFile('Select_pic.bmp');
Position := 84;

ExtractTemporaryFile('WizardForm.PortalC_Image.bmp');
Position := 85;

ExtractTemporaryFile('WizardForm.SpeedBtn.bmp');
Position := 86;

ExtractTemporaryFile('TFormA.bmp'); /// распаковка картинки формы задач
Position := 87;

ExtractTemporaryFile('A_pic.bmp');
Position := 88;

ExtractTemporaryFile('C_pic.bmp');
Position := 89;

ExtractTemporaryFile('T1.bmp');
Position := 90;

ExtractTemporaryFile('T3.bmp');
Position := 93;

ExtractTemporaryFile('WizardForm.Scanner_pic.bmp');
Position := 95;

ExtractTemporaryFile('Ws_markings1.bmp'); /// распаковка картинки формы отмены
/// распаковка скрина при отсутствии шрифиов /// начало
if ActiveLanguage='Russian' then
begin
ExtractTemporaryFile('RU.jpg');
RenameFile(ExpandConstant('{tmp}\RU.jpg'), ExpandConstant('{tmp}\NoFont.jpg'));
Position := 97;
end;
if ActiveLanguage='English' then
begin
ExtractTemporaryFile('EN.jpg');
RenameFile(ExpandConstant('{tmp}\EN.jpg'), ExpandConstant('{tmp}\NoFont.jpg'));
Position := 97;
end;
/// конец
ExtractTemporaryFile('LIcon.ico'); /// извлекаем маленькую иконку
Position := 100;
end;


.........................

Sanshalay
08-06-2012, 20:16
Как путь для установки игры извлечь из реестра (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\nhl2009.exe. Параметр Path)?

Gnom_aka_Lexander
10-06-2012, 18:45
может можно покороче и по проще »
Position := число; можно заменить на Position := Position +1;, чтоб строки не считать.
короче точно не порлучится, да и проще тоже. как вариант - забивать все имена распаковываемых файлов в стринглист и потом в цикле от нуля до количества итемов минус один стринглиста, извлекать файлы, беря из стринглиста названия по номеру текущего цикла.
тогда распаковка любого количества файлов займет буквально меньше десятка строчек кода.
но, добавление файлов в стринглист займет все остальное, в итоге проще не станет точно, да и короче не сильно.

El Sanchez
10-06-2012, 22:18
как можно короче записать обновление прогрессбара
извлекаются 92 файла и после каждой строки приписываю Позиция := число
может можно покороче и по проще »
Johny777, как вариант, дать картинкам имена, содержащих позицию прогрессбара, и использовать цикл.

with LoadPrgsBar do
begin
for i := 1 to 100 do
begin
ExtractTemporaryFile('Image' + IntToStr(i) + '.bmp');
Position := i;
end;
end;

Johny777
11-06-2012, 03:03
El Sanchez,
спасибо
так и сделал
только не сами файлы картинок переименовал а сделал/делаю как дизайнер


DestName: "WizardForm.BitmapImage1.bmp"; Source: "prolog\Lambda_hand.bmp"; Flags: dontcopy solidbreak

....

with LoadPrgsBar do
begin
for i := 1 to 85 do
begin
ExtractTemporaryFile('WizardForm.BitmapImage' + IntToStr(i) + '.bmp');
Position := i;
end;
end;
LoadPrgsBar.Position := 100;



,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

доработал немного "проценты установки" (под свои нужды) :grin:
а именно добавил при помощи этого примера (смена названия кнопки в панели задач)


[Setup]
AppName=Test
AppVerName=Test
CreateAppDir=false
InternalCompressLevel=none
Compression=none

[ Code]
function SetWindowText(hWnd: Longint; lpString: PChar): Longint; external 'SetWindowTextA@user32.dll';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll';

procedure SetAppTitle(Value: String);
var n: HWND;
begin
n:=GetWindowLong(MainForm.Handle, -8);
if n <> 0 then SetWindowText(n, PChar(Value));
end;

procedure InitializeWizard;
begin
SetAppTitle('NewTitle');
end;


отображение процентов (там же на кнопке)
Так же доработке подверглось создание процентного лейбла и функция отмены эксклюзивно для страницы установки


[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[Files]
Source: compiler:innocallback.dll; Flags: dontcopy
Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs

[ code]
type
TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);


var
PercentsTimer: LongWord;
PercentsLabel: TLabel;


function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): longword; external 'SetTimer@user32';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32 stdcall delayload';


function NumToStr(Float: Extended): String;
begin
Result:= Format('%.1n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
SetLength(Result, Length(Result)-1);
end;


procedure PercentsProc(h, msg, idevent, dwTime: Longword);
begin
with WizardForm.ProgressGauge do
begin
PercentsLabel.Caption := NumToStr((Position*100)/Max) + ' %';
Application.Title := ' ' + NumToStr((Position*100)/Max) + ' %';
end;
end;


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


procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin

PercentsLabel:= TLabel.Create(nil);
with PercentsLabel do
begin
SetBounds(WizardForm.ProgressGauge.Left + ScaleX(30), WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + ScaleY(10), WizardForm.StatusLabel.Width, WizardForm.StatusLabel.Height);
AutoSize:= True;
Transparent := True;
Parent:= WizardForm.InstallingPage;
end;

PercentsTimer:= SetTimer(0, 0, 100, WrapTimerProc(@PercentsProc, 4));

end;

if CurStep = ssPostInstall then
begin
KillTimer(0, PercentsTimer);
Application.Title := ' Готово';
end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID=wpInstalling then
begin
Confirm := False;
case ExitSetupMsgBox of
True :
begin
PercentsLabel.Free;
Application.Title := ExpandConstant(' ' + SetupMessage(msgButtonCancel) + '...');
Cancel := True;
end;
False : Cancel := False;
end;
end;
end;






вроде мелочи, но может кому пригодится
сам считаю отображение процентов (помимо прогрессбара) на кнопке в панели задач очень удобным, если окно свёрнуто

sergey3695
11-06-2012, 11:10
доработал немного "проценты установки" (под свои нужды)
а именно добавил при помощи этого примера (смена названия кнопки в панели задач) »
так короче
[Setup]
AppName=Test
AppVerName=Test
CreateAppDir=false
InternalCompressLevel=none
Compression=none

[ Code]
procedure InitializeWizard;
begin
Application.Title:='NewTitle';
end;




© OSzone.net 2001-2012