Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]
habib2302
10-12-2013, 19:36
Tco 03, :lamer:
выдает ошибку »
Потому что участок кода:
if (CurUninstallStep=usUninstall) then
begin
GDFBinary:=ExpandConstant('{#GDFBinary}');
RetrieveGUIDForApplication(GDFBinary, GUID);
RemoveFromGameExplorer(GUID);
UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));
end;
в воздухе висит и не относится к процедуре "procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
".
Заведи нижний участок кода за end; кода который находится выше.
Dimas2011
10-12-2013, 21:02
Ребята помогите не показывает картинку.я пытаюсь сделать так что когда выбираешь куда устанавливать файлы потом открывается сам список того что хочешь установить. так чтобы когда наводишь на название какого-то файла выскакивала картинка а оно не работает.Скрип обновлённый вставил и не работает http://rghost.ru/50868040
Farser21
10-12-2013, 21:08
Так как никто не ответил повторяю вопрос. Кто может помочь, возникли небольшие вопросы о установщике. Объяснить не смогу. Поэтому прошу связаться со мной по скайпу и я покажу с чем у меня проблемы, заранее спасибо! скайп farsero_o
Помогите пожалуйста, это очень важно!
habib2302
10-12-2013, 21:18
Nordek,
http://i.imgur.com/tjtPIsH.jpg (http://i.imgur.com/e0vE2bQ.jpg)
habib2302, Это называется ты "не корректно в первый раз совместил".
Я не знаю как ты вставлял его. Ты же ведь в первый раз наверно перемещал в код (http://forum.oszone.net/post-2270159-1676.html)?
А там скорее всего удалил
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var GDFBinary: String; GUID: TGUID;
begin
end;
где был var GDFBinary: String; GUID: TGUID;
так вот, теперь у себя под процедуру procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
подсунь
var GDFBinary: String; GUID: TGUID;
.
P.S Я у экстрасенсов уроков мастерства не брал, по этому нет у меня экстрасенсорных способностей.
Ребята помогите не показывает картинку »Прикрепил скрипт.
Farser21
11-12-2013, 14:40
Всем привет, возникли такие вопросы.
1) Когда наводишь на компонент, то выскакивает картинка, как задать определенные координаты картинке? Задумка сделать все картинки одного размера, и чтобы они выскакивали в одном месте.
2) Как сделать чтобы при установке компонентов, очищалось старое содержимое того места куда устанавливаешь, и место него устанавливалось новое.
3) Как сделать авто определение установки, т.е. установщик сам выбирает нужную папку куда устанавливать. Например мне нужно чтобы компоненты устанавливались в папку с танками, в оригинале она называется World of Tanks. Как сделать так чтобы компоненты можно было установить в папку у которой в названии присутствовало World of Tanks, и возможно сделать так, чтобы установщик автоматом находил нужную папку.
4) Когда устанавливаешь компоненты то инсталка появляется в основной папке, как сделать чтобы инсталка создавалась в отдельной папке, и можно было самому задать название.
5) И последний вопрос который частично связан с первым. Идея такова если подогнать картинки под один размер и под одни координаты то картинки будут появляться в одном месте, но далее если отводишь курсор от компонента то они пропадают. Как сделать так чтобы изначально в том месте где должно быть картинки стояла стандартная картинка, а далее при наведении там бы появлялась картинка компонента.
Заранее спасибо, всем кто сможет помочь. Для меня это очень важно, поэтому прошу мне помочь!
Optitron
11-12-2013, 15:35
Здравствуйте. как сделать так, чтобы "DefaultDirName" для каждого компонента был разный? Например для компонента "One" "DefaultDirName={pf}\Game One", а для "Two" соответственно "DefaultDirName={pf}\Game Two"
FX-DENIS
11-12-2013, 15:38
2) Как сделать чтобы при установке компонентов, очищалось старое содержимое того места куда устанавливаешь, и место него устанавливалось новое. »
Эти секции отвечают за удаление файлов и/или папок перед установкой ([InstallDelete]) или при удалении () приложения.
Задача: перед установкой обновления для установленной программы удалить в папке приложения (путь к которой укажет пользователь при установке приложения) директорию и все ее содержимое (подпапки и файлы), и создать папку с тем же именем, куда установить все файлы обновления.
Решение:
…………………………
;Перед установкой удалить в папке приложения папку Data со всем ее содержимым
[InstallDelete]
Type: filesandordirs; Name: "{app}\Data"
;Создать папку с тем же именем, что и удаленная (хотя создавать ее не обязательно – инсталлятор все равно ее создаст при выполнении секции [Files]
[Dirs]
Name: "{app}\Data"
;Установить в созданную папку файлы
[Files]
Source: "C:\Program1.exe"; DestDir: "{app}\Data"
Source: "C:\Program2.exe"; DestDir: "{app}\Data"
Source: "C:\ReadMe.txt"; DestDir: "{app}\Data"; Flags: isreadme
;При удалении приложения удалить созданную папку
Type: filesandordirs; Name: "{app}\Data"
…………………………
Эту же задачу можно решить с помощью секции [Co[u]de]:
[Files]
Source: "C:\Program1.exe"; DestDir: "{app}\Data"; BeforeInstall: MyBeforeInstall
Source: "C:\Program2.exe"; DestDir: "{app}\Data";
Source: "C:\ReadMe.txt"; DestDir: "{app}\Data"; Flags: isreadme
[UninstallDelete]
Type: filesandordirs; Name: "{app}\Data"
[Co[u]de]
{Создать процедуру, которую инсталлятор вызовет перед установкой файла Program1.exe}
Procedure MyBeforeInstall;
Begin
{Если в директории программы существует папка Data, она удаляется со всеми вложенными в нее файлами и папками}
if DirExists(ExpandConstant('{app}\Data')) then
DelTree(ExpandConstant('{app}\Data'), True, True, True);
end;
…………………………
3) Как сделать авто определение установки, т.е. установщик сам выбирает нужную папку куда устанавливать. »
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={code:GetInstallDir}
AppendDefaultDirName=no
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Code]
Function GetInstallDir(Path: String ): String;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Rockstar Games\EFLC', 'InstallPath', Path);//Какой ключ реестра ищет ...
Result := Path;
end;
function InitializeSetup(): Boolean;
begin
Result:= true;
if not RegKeyExists(HKLM, 'SOFTWARE\Rockstar Games\EFLC') then
MsgBox('Игра {#SetupSetting("AppName")} не найдена! Укажите путь к папке с игрой вручную!', mbinformation, mb_ok);
end;
Farser21
11-12-2013, 15:57
FX-DENIS , Спасибо!
FX-DENIS
11-12-2013, 15:59
"DefaultDirName" для каждого компонента был разный? »
По моему страниц 10 назад уже был ответ.Пролистайте странички.
Farser21
11-12-2013, 16:36
FX-DENIS , Возникли проблемы с авто определением установки. Получается я вставил то что ты скинул, но когда запускается установщик пишет Название установщика "World of Tanks" и пишет что не может найти. Где я мог допустить ошибку?
El Sanchez
11-12-2013, 16:43
а вот самому написать функции "если нужен полный контроль над отображением информации о размерах/времени" ума не хватает. »
nik1967, открываешь любой репак, там этих реализаций... Вот мой вариант:
[Setup]
AppName=test
AppVerName=test
CreateAppDir=no
DefaultDirName={tmp}
Uninstallable=no
CreateUninstallRegKey=no
[Languages]
Name: en; MessagesFile: compiler:default.isl
Name: ru; MessagesFile: compiler:Languages\russian.isl
[CustomMessages]
ru.Size=байт,КБ,МБ,ГБ,ТБ,ПБ
en.Size=bytes,KB,MB,GB,TB,PB
ru.Time=сек,мин,ч
en.Time=s,m,h
[Code]
function pow(x, y: Double): Double; external 'pow@ntdll.dll stdcall';
///////////////////////////////////////////////////
function BytesToSize(const dBytes: Double): String;
var
i, j: Integer;
dRange: Double;
begin
with TStringList.Create do
try
CommaText := CustomMessage('Size');
if Count = 0 then Exit;
// default
Result := Format('0 %s', [Strings[0]]);
if dBytes = 0 then Exit;
// convert
for i := Count downto 0 do
begin
dRange := pow(1024, i);
if dBytes < dRange then Continue;
if Abs(dBytes/dRange - Round(dBytes/dRange)) < 0.01 then Result := Format('%.n %s', [dBytes/dRange, Strings[i]]) else Result := Format('%n %s', [dBytes/dRange, Strings[i]]);
Break;
end;
except
RaiseLastException;
finally
Free;
end;
end;
///////////////////////////////////////////////////
function TicksToTime(const dwTicks: DWORD): String;
var
i, j: Integer;
dwRange: DWORD;
begin
with TStringList.Create do
try
CommaText := CustomMessage('Time');
if Count = 0 then Exit;
// default
if dwTicks < 1000 then
begin
Result := Format('0 %s', [Strings[0]]);
Exit;
end;
// convert
dwTicks := Round(double(dwTicks)/1000);
for i := Count-1 downto 0 do
begin
dwRange := 1;
for j := 1 to i do dwRange := dwRange*60;
if dwTicks > dwRange-1 then
begin
Result := Format('%s%d %s ', [Result, dwTicks div dwRange, Strings[i]]);
dwTicks := dwTicks - (dwTicks div dwRange)*dwRange;
end;
end;
except
RaiseLastException;
finally
Result := TrimRight(Result);
Free;
end;
end;
/////////////////////////////
procedure InitializeWizard();
begin
MsgBox(BytesToSize(MaxInt), mbInformation, MB_OK);
MsgBox(TicksToTime(MaxInt), mbInformation, MB_OK);
end;
Получается я вставил то что ты скинул »Вот молодец. А остальное FX-DENIS должен угадать за тебя, да?
Farser21, Тупо скопипастилл и всё?
А в :
RegQueryStringValue(HKLM, 'SOFTWARE\Rockstar Games\EFLC', 'InstallPath', Path);//Какой ключ реестра ищет ...
и
if not RegKeyExists(HKLM, 'SOFTWARE\Rockstar Games\EFLC') then
ничего не нужно указывать?
Вместо SOFTWARE\Rockstar Games\EFLC замени на свои. И если нет InstallPath, то смотри какое значение ведёт к папке.
Optitron
11-12-2013, 17:36
FX-DENIS, Если вы про мой вопрос, то он был немного другого типа.
El Sanchez, спасибо! Затупил немного - ввели в заблуждение функции StrFormatByteSize64 и StrFromTimeInterval. Думал к ним нужно привязываться.
Farser21
11-12-2013, 18:26
Nordek, спасибо
El Sanchez, Здравствуйте. Ваш пример по загрузке файла, без сомнения, хорош. Пожалуйста, если Вас не затруднит, не могли бы Вы помочь с реализацией загрузки двух файлов. С одним общим прогрессбаром и текущим. Или же как эксперт помогите, пожалуйста, доработать пример (http://forum.oszone.net/post-2267585-1618.html) товарища Johny777. Он в принципе рабочий, но не корректно отрабатывает свои действия. Буду премного благодарен, да и не только я. Очень нужная будет вещь!
FX-DENIS, Поправь пожалуйста сообщение. Не корректный вывод BB-Кодов.
Если в скрипте присутствует , то понадобится дополнительная обработка.
Например: [*Code], [#Code], [Code], [Code] и т.д.
[hr]
Исходный текст BB-кодов:
[CODE][Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[*Code]
procedure InitializeWizard();
begin
with WizardForm.WizardSmallBitmapImage do
begin
Visible := False;
end;
end;
Вывод:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[*Code]
procedure InitializeWizard();
begin
with WizardForm.WizardSmallBitmapImage do
begin
Visible := False;
end;
end;
[hr]
Исходный текст BB-кодов:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[#Code]
procedure InitializeWizard();
begin
with WizardForm.WizardSmallBitmapImage do
begin
Visible := False;
end;
end;
Вывод:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[#Code]
procedure InitializeWizard();
begin
with WizardForm.WizardSmallBitmapImage do
begin
Visible := False;
end;
end;
[hr]
Исходный текст BB-кодов:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Code]
procedure InitializeWizard();
begin
with WizardForm.WizardSmallBitmapImage do
begin
Visible := False;
end;
end;
Вывод:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Code]
procedure InitializeWizard();
begin
with WizardForm.WizardSmallBitmapImage do
begin
Visible := False;
end;
end;
[hr]
Исходный текст BB-кодов:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Code]
procedure InitializeWizard();
begin
with WizardForm.WizardSmallBitmapImage do
begin
Visible := False;
end;
end;
Вывод:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Code]
procedure InitializeWizard();
begin
with WizardForm.WizardSmallBitmapImage do
begin
Visible := False;
end;
end;
[hr]
Кроме всего прочего, есть ещё в самой Inno Setup Compiler возможность копирования текста с BB-кодами.
В Inno Setup Compiler есть пункт "Копировать как UBB код", который позволяет скопировать сразу с BB-кодами.
Правда в некоторых случаях копируется не корректно.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.