Войти

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


Страниц : 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

DA-Bro
19-11-2022, 12:27
Vanadiy777,

Посмотрел скрипт. Вот что увидел.

Файл InfoBeforeRu.rtf предназначен для страницы "Информация".
А он теперь и там и на кнопке показывает.
А на кнопке должен ReadmeRu.rtf всегда отображаться.
И InfoBeforeRu.rtf только для страницы "Информация".

Vanadiy777
19-11-2022, 19:55
А он теперь и там и на кнопке показывает. »
Файл InfoBeforeRu.rtf предназначен для страницы "Информация".
А он теперь и там и на кнопке показывает. »
DA-Bro,
Вы скрипт скомпилировали, и там это увидели?
Или просто просмотрели сценарий, и увидели, что при процедуре InitializeWizard(); InfoBeforeRu.rtf подгружается так-же, как и ReadmeRu.rtf ???

Что Вас в этом смутило?
Я же дал пример отдельный специально, скомпилируйте и посмотрите.
В Вашем скрипте прописаны те же самые значения - пробуйте... :)

DA-Bro
19-11-2022, 20:06
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 тоже будет на двух языках? Просто чтобы понимать, как код прописать?

Да, они забивают друг друга... Извините, сам только заметил...

DA-Bro
19-11-2022, 20:30
Vanadiy777, да, пожалуйста сделайте на двух языках, раз уж мастер установки RU-EN.
А то потом приспичит и опять лишний раз просить поправить.

Vanadiy777
19-11-2022, 20:36
пожалуйста сделайте на двух языках, раз уж мастер установки RU-EN. »
DA-Bro,
да, поправил и сделал на двух языках.
Отправил в личку, пожалуйста попробуйте, по идее, сейчас должно все работать... :)

DA-Bro
19-11-2022, 20:52
Vanadiy777, теперь получается наоборот. Везде показывает ReadmeRu.rtf.

Vanadiy777
19-11-2022, 21:54
теперь получается наоборот. Везде показывает ReadmeRu.rtf. »
DA-Bro,
Вы точно уверены, что правильные rtf-файлы подсовываете?
Возможно у Вас файлы с одинаковым содержимым, просто с разными названиями, поэтому и разницы не видно.

Проверьте все еще раз. С тем скриптом, что я Вам дал, у меня все нормально отрабатывает...

И в "Temp" два разных файла извлекаются (у них даже размер разный), и подгружаются правильно, в зависимости от выбранной задачи.
И, если язык меняешь, то и файлы, соответственно, меняются.

Как еще проверить - не знаю.

DA-Bro
19-11-2022, 22:21
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
Сильно прошу не пинать меня) »
Вы уже на эти грабли наступали с регистром языковых файлов... :) . Ну, это нормально...
Я то без обид, главное, что все работает...

DA-Bro
19-11-2022, 23:20
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, если поиском не найдете, пришлю в личку...

DA-Bro
20-11-2022, 00:36
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;

DA-Bro
20-11-2022, 01:50
Vanadiy777, Спасибо! Попробую.
Что-то кнопки "Полезное сообщение" пропали. Хотел нажать, а их нет. У меня наверно лимит превышен )

Vanadiy777
20-11-2022, 21:51
Что-то кнопки "Полезное сообщение" пропали. Хотел нажать, а их нет. У меня наверно лимит превышен ) »
DA-Bro, да, лимит превышен. Появится через определенное время...

DA-Bro
17-12-2022, 23:52
Подскажите пожалуйста.

Как сделать чтобы в инсталляторе при выборе Русского языка прописывалось везде "Русское название программы",
а при выборе Английского или по дефолту "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=Русское название программы

DA-Bro
18-12-2022, 15:16
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