Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 9]
Vanadiy777,
Посмотрел скрипт. Вот что увидел.
Файл InfoBeforeRu.rtf предназначен для страницы "Информация".
А он теперь и там и на кнопке показывает.
А на кнопке должен ReadmeRu.rtf всегда отображаться.
И InfoBeforeRu.rtf только для страницы "Информация".
Vanadiy777
19-11-2022, 19:55
А он теперь и там и на кнопке показывает. »
Файл InfoBeforeRu.rtf предназначен для страницы "Информация".
А он теперь и там и на кнопке показывает. »
DA-Bro,
Вы скрипт скомпилировали, и там это увидели?
Или просто просмотрели сценарий, и увидели, что при процедуре InitializeWizard(); InfoBeforeRu.rtf подгружается так-же, как и ReadmeRu.rtf ???
Что Вас в этом смутило?
Я же дал пример отдельный специально, скомпилируйте и посмотрите.
В Вашем скрипте прописаны те же самые значения - пробуйте... :)
Vanadiy777, да, я скомпилировал.
На первой странице когда кнопку "О программе" открываете, показывает InfoBeforeRu.rtf.
И на странице "Информация" InfoBeforeRu.rtf. Но тут то как и должно быть. Нормальный в цвете.
А на кнопке "О программе" должен всегда быть ReadmeRu.rtf, а его нет. Наверно его подменяет InfoBeforeRu.rtf.
ReadmeRu.rtf - там короткое описание. Название, версия...
InfoBeforeRu.rtf - подробное описание программы. Много строк...
Vanadiy777
19-11-2022, 20:17
InfoBeforeRu.rtf - подробное описание программы. Много строк... »
DA-Bro,
InfoBefore.rtf тоже будет на двух языках? Просто чтобы понимать, как код прописать?
Да, они забивают друг друга... Извините, сам только заметил...
Vanadiy777, да, пожалуйста сделайте на двух языках, раз уж мастер установки RU-EN.
А то потом приспичит и опять лишний раз просить поправить.
Vanadiy777
19-11-2022, 20:36
пожалуйста сделайте на двух языках, раз уж мастер установки RU-EN. »
DA-Bro,
да, поправил и сделал на двух языках.
Отправил в личку, пожалуйста попробуйте, по идее, сейчас должно все работать... :)
Vanadiy777, теперь получается наоборот. Везде показывает ReadmeRu.rtf.
Vanadiy777
19-11-2022, 21:54
теперь получается наоборот. Везде показывает ReadmeRu.rtf. »
DA-Bro,
Вы точно уверены, что правильные rtf-файлы подсовываете?
Возможно у Вас файлы с одинаковым содержимым, просто с разными названиями, поэтому и разницы не видно.
Проверьте все еще раз. С тем скриптом, что я Вам дал, у меня все нормально отрабатывает...
И в "Temp" два разных файла извлекаются (у них даже размер разный), и подгружаются правильно, в зависимости от выбранной задачи.
И, если язык меняешь, то и файлы, соответственно, меняются.
Как еще проверить - не знаю.
Vanadiy777, Сильно прошу не пинать меня)
У меня было прописано маленькими буквами, в голове застряло что и так сработает независимо от регистра.
И забыл исправить вот это:
'en': begin
'ru': begin
Название ReadmeRu
и
[Languages]
Name: "ru"; MessagesFile: compiler:Languages\Russian.isl
Name: "en"; MessagesFile: compiler:Default.isl
Сейчас Всё Отлично. На RU и на EN всё как надо.
Спасибо Огромное!
Vanadiy777
19-11-2022, 22:50
Сильно прошу не пинать меня) »
Вы уже на эти грабли наступали с регистром языковых файлов... :) . Ну, это нормально...
Я то без обид, главное, что все работает...
Vanadiy777, Да хотел еще реализовать вот такую штуку.
Хотелось бы реализовать на первой странице два чекбокса.
Обычная установка и Портативная распаковка.
И если выбрать вариант "Портативная распаковка" то
на странице "Выбор папки установки" появлялся бы чекбокс "Упаковать в архив"
В общем при выборе "Портативная распаковка" + "Упаковать в архив"
должна быть функция упаковки файлов для портативки архиватором 7z
с названием архива NameRrogram.VersionProgram.Portable.7z
Как раз на странице "Выбор папки установки" можно сразу и выбрать в какую папку этот архив скинуть.
Vanadiy777
20-11-2022, 00:18
Да хотел еще реализовать вот такую штуку. (Про % в прогрессбаре лучше промолчу)) »
DA-Bro,
Это уже точно не ко мне... На этом мои знания заканчиваются...
В теме где то упоминалось что то похожее, попробуйте поискать...
Вот про проценты, но сам не пробовал, хотите - пилите под себя:
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp
[Files]
Source: 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) + ' %';
end;
end;
procedure DeinitializeSetup();
begin
KillTimer(0, PercentsTimer);
end;
procedure InitializeWizard();
begin
PercentsLabel:= TLabel.Create(WizardForm);
with PercentsLabel do
begin
Left:= WizardForm.ProgressGauge.Left;
Top:= WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + ScaleY(10);
Width:= WizardForm.StatusLabel.Width;
Height:= WizardForm.StatusLabel.Height;
AutoSize:= False;
Transparent := True;
Parent:= WizardForm.InstallingPage;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
PercentsTimer:= SetTimer(0, 0, 100, WrapTimerProc(@PercentsProc, 4));
end;
end;
Понадобится библиотека innocallback.dll, если поиском не найдете, пришлю в личку...
Vanadiy777, Спасибо, посмотрю.
А не подскажите.
У меня вот такое убивание процесса при удалении.
[UninstallRun]
Filename: "{sys}\taskkill.exe"; Parameters: "/f /im SSDToolBox.exe /t";
Где-то читал, что так не рекомендуется с taskkill.exe.
Может есть какое более правильное решение.
Vanadiy777
20-11-2022, 01:16
Может есть какое более правильное решение. »
DA-Bro,
сам не пробовал...
[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
[_Code]
///функции используемые при деинсталляции
///RunTask@{app}\ISTask.dll - название функции (в данном случае, если программа работает)
///и путь dll'ки где она расположена...
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
if RunTask('winamp.exe', False) then
begin
///прячем форму
UninstallProgressForm.Visible:= False;
if MsgBox('Программа winamp.exe используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
begin
KillTask('winamp.exe');
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
///показываем форму
UninstallProgressForm.Visible:= True;
end
else
begin
MsgBox('Завершите работу winamp.exe, затем снова запустите программу удаления.', mbInformation, MB_OK);
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
Abort;
end;
end;
end;
Vanadiy777, Спасибо! Попробую.
Что-то кнопки "Полезное сообщение" пропали. Хотел нажать, а их нет. У меня наверно лимит превышен )
Vanadiy777
20-11-2022, 21:51
Что-то кнопки "Полезное сообщение" пропали. Хотел нажать, а их нет. У меня наверно лимит превышен ) »
DA-Bro, да, лимит превышен. Появится через определенное время...
Подскажите пожалуйста.
Как сделать чтобы в инсталляторе при выборе Русского языка прописывалось везде "Русское название программы",
а при выборе Английского или по дефолту "English Name Programs".
И папка программы в меню Start так же называлась при выборе языка.
Что-то вроде этого.
#define AppName "Русское название программы"
#define AppVerName "Русское название программы 1.0"
#define AppName1 "English Name Programs"
#define AppVerName1 "English Name Programs 1.0"
Vanadiy777
18-12-2022, 12:46
Что-то вроде этого. »
DA-Bro,
это не нужно...
Вот так нормально работает:
[Setup]
AppName={cm:AppName}
AppVerName={cm:AppName} 1.0
DefaultGroupName={cm:AppName}
UninstallDisplayName={cm:AppName}
[Languages]
Name: EN; MessagesFile: compiler:Default.isl
Name: RU; MessagesFile: compiler:Languages\Russian.isl
[CustomMessages]
EN.AppName=English Name Programs
RU.AppName=Русское название программы
Vanadiy777, Спасибо! Помогло. Даже очень.
Подскажите пожалуйста, ещё вот такая загвоздка.
В языковом файле есть такая строчка:
[Messages]
; *** Application titles
SetupWindowTitle=%1
Название программы отображается.
А как сделать чтобы название и версия программы отображались.
Я и так SetupWindowTitle=%1 %2 и так SetupWindowTitle=[name/ver] пробовал подставлять.
Это не срабатывает.
Vanadiy777
18-12-2022, 17:10
А как сделать чтобы название и версия программы отображались. »
DA-Bro,
можно так:
[Setup]
AppName={cm:AppName}
AppVerName={cm:AppName} 1.0
AppVersion=1.0
DefaultGroupName={cm:AppName}
UninstallDisplayName={cm:AppName}
[Languages]
Name: EN; MessagesFile: compiler:Default.isl
Name: RU; MessagesFile: compiler:Languages\Russian.isl
[Messages]
EN.SetupWindowTitle=Setup — %1 {#SetupSetting('AppVersion')}
RU.SetupWindowTitle=Установка — %1 {#SetupSetting('AppVersion')}
; Если в заголовке не нужно "Установка", тогда можно просто так:
SetupWindowTitle=%1 {#SetupSetting('AppVersion')}
[CustomMessages]
EN.AppName=English Name Programs
RU.AppName=Русское название программы
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.