Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]
Мне нужно, чтобы сообщения, написанные в секции Code, были на разных языках... Как написать там несколько вариантов? И, чтобы один из них сам выбирался в зависимости от языка системы и т.п? »
я дал вам пример:
MsgBox(CustomMessage ('MsgBoxText'), mbInformation, MB_OK); // только текст
MsgBox(ExpandConstant ('{cm:MsgBoxText}'), mbInformation, MB_OK); // текст с возможностью форматирования, вложения и т.п.
в зависимости от выбранного при установке языка MsgBoxText будет принимать нужное значение из секции CustomMessages:
en.MsgBoxText=It's alive!
ru.MsgBoxText=Таки работает!!!
sergey3695
08-01-2012, 19:39
Почему на MainForm не срабатывает botva2.dll?
Здравствуйте, подскажите пожалуйста:
Делаю лого с помощью этого скрипта:
[Setup]
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
OutputDir=userdocs:Test.
[Files]
Source: logo.png; DestDir: {tmp}; Flags: dontcopy nocompression
[code]
var
LogoImage:TBitmapImage;
LogoPanel: TPanel;
LogoLabel: TLabel;
procedure InitializeWizard();
/////////////////
begin
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(8);
Top := ScaleY(327);
Width := ScaleX(120);
Height := ScaleY(28);
BevelOuter := bvNone;
end;
LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
ExtractTemporaryFile('logo.png');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.png'));
end;
end;
Я хочу чтобы оно исчезало к примеру после прохода экрана приветствия, чтоб глаза не мозолить. Это возможно? И главное как?
TROY Diamond
09-01-2012, 15:59
я дал вам пример:
А как сюда добавить?
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
ResultStr:string;
begin
Result:=True;
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{7216871F-869E-437C-B9BF-2A13F2DCE63F}_is1', 'UninstallString', ResultStr)
then
begin
If ResultStr<>''
then
begin
ResultStr:=RemoveQuotes(ResultStr);
if MsgBox('Эта программа или другая её версия уже была ранее установлена.' #13#13 'Вы хотите предварительно удалить её?', mbInformation, MB_YESNO) = idYes
then
if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
then
MsgBox('Ошибка удаления. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещён, удалён или переименован.', mbError, MB_OK);
end;
end;
end;
end;
Как в этом коде сделать:
procedure RD(Dir:string);
var
res : integer;
begin
Exec('cmd.exe', ' /c rd /S /Q ' + AddQuotes(Dir),ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
Exec('cmd.exe', ' /c rd /S /Q ' + '"'+Dir+'"',ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then begin
if DirExists(ExpandConstant('{userdocs}\My Company\My Game')) then begin
if MsgBox('Вы хотите удалить сохранения и настройки игры?',mbconfirmation, mb_yesno) = IDYES then RD(ExpandConstant('{userdocs}\My Company\My Game'))
end;
end;
end;
1.Нужно, чтобы сообщение с предложением удалить сохранения появлялось ДО УДАЛЕНИЯ ИГРЫ. А сейчас сначала удаляется игра, пояляется сообщение о том, что игра полностью удалена и только потом предлагается удалить сохранения...
2. Как организовать проверку "основной" папки и удалить её если она пустая?
Например, сохранения лежат в "Мои документы" -> EA Games. Если, кроме сохранений этой игры в "EA Games", больше ничего нет, то её нужно удалить.
Зачем она пустая будет висеть на винте?!
Поясгите про параметр "AppMutex", как его применять? Как раз нужна проверка на наличие уже установленного, а тем более запущенного приложения. С возможностью его закрыть БЕЗ ЗАПРОСА и предложением удалить!
Как добавить задачу в "Назначенные задания" - файл *.job в WINDOWS\Tasks? Как его "создать" в Inno?
Нужно, чтобы приложение запускалось с Windows и/или в опредёленное время.
Ярлык приложения в "Автозагрузка" и/или в реестре НЕ подходит!!! Нужно, чтобы было "задание", т.к. оно связано с настройками программы. И чтобы оно устанавливалось ТОЛЬКО если пользователь его выберет при установке.
No4noylis
09-01-2012, 16:05
leshcat, добавь это вконце:
procedure CurPageChanged(CurPageID: Integer);
begin
LogoPanel.Hide;
case CurPageID of
wpWelcome:
begin
LogoPanel.Show;
end;
end;
end;
TROY Diamond, ты сильно много пишешь, аж читать лень :lazy:
Как в этом коде сделать: »
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
Name: eng; MessagesFile: compiler:Default.isl
[CustomMessages]
rus.DelSave=Удалить сохраненные игры и профили?
eng.DelSave=Delete save games and profiles?
[_Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); // удаление сейвов
begin
if (CurUninstallStep=usUninstall) then begin
if DirExists(ExpandConstant('{userdocs}' + '\My Company\My Game')) then
if MsgBox (ExpandConstant('{cm:DelSave}'),mbconfirmation, mb_yesno) = IDYES then
DelTree(ExpandConstant('{userdocs}' + '\My Company\My Game'), True, True, True);
end;
end;
На счёт "ДО УДАЛЕНИЯ ИГРЫ" советую посмотреть справку по поводу
TUninstallStep values
usAppMutexCheck, usUninstall, usPostUninstall, usDone
А как сюда добавить? »
Выше пример, ну куда уж более понятнее то?
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
Name: eng; MessagesFile: compiler:Default.isl
[CustomMessages]
rus.DelMsg=Эта программа или другая её версия уже была ранее установлена.%nВы хотите предварительно удалить её?
rus.ErrorRem=Ошибка удаления.
rus.ErrorRem2=Вероятно, деинсталлятор был перемещён, удалён или переименован.
eng.DelMsg=This program or its other version has already been previously installed.%nDo you want to remove it first?
eng.ErrorRem=Failure to remove.
eng.ErrorRem2=Probably the uninstaller has been moved, deleted or renamed.
[_Code]
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
ResultStr:string;
begin
Result:=True;
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{7216871F-869E-437C-B9BF-2A13F2DCE63F}_is1', 'UninstallString', ResultStr)
then
begin
If ResultStr<>''
then
begin
ResultStr:=RemoveQuotes(ResultStr);
if MsgBox(ExpandConstant('{cm:DelMsg}'), mbInformation, MB_YESNO) = idYes
then
if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
then
MsgBox(ExpandConstant('{cm:ErrorRem} ') #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 ExpandConstant('{cm:ErrorRem2}'), mbError, MB_OK);
end;
end;
end;
end;
No4noylis or All
Спасибо, работает!
Еще два вопроса:
1.А как на кастом пейджах сделать, чтоб оно появлялось?
Ввод кастом пейджа делался так:
procedure CreateTheWizardPages;
var
Page1: TWizardPage;
Button_Install : TButton;
begin
{ TButton and others }
Page1 := CreateCustomPage(wpWelcome, 'Main Menu', 'Please choose desired action: ');
Button_Install := TButton.Create(Page1);
Button_Install.Top := Button_Install.Top + Button_Install.Height - ScaleY(20);
Button_Install.Left:= Button_Install.Left + (Button_Install.Width)*2 - ScaleY(20);
Button_Install.Width := ScaleX(150);
Button_Install.Height := ScaleY(50);
Button_Install.Caption := 'Go to Directory Page';
// Button_Install.OnClick := @ButtonOnClick;
Button_Install.Parent := Page1.Surface;
end;
2. Как сделать переход на страницу Выбора Директории по клику кнопки? А если такая же кастом страница?
Использовать ISSkin.dll и свой скин. »
ISSkin не отрисовывает чекбоксы и радиокнопки, об этом писали даже разработчику. Пишет что решают.
R.i.m.s.k.y.
10-01-2012, 12:41
Извините за тюпые вопросы.
Какими командами можно:
а) прервать итеракцию цикла и перейти в следующую итеракцию?
б) прервать цикл полностью и продолжить дальше по телу функции?
в) прервать выполнение функции в заданном месте?
прервать итеракцию цикла и перейти в следующую итеракцию? »
Continue;
б) прервать цикл полностью и продолжить дальше по телу функции? »
Break;
прервать выполнение функции в заданном месте? »
Exit;
El Sanchez
10-01-2012, 14:22
ISSkin не отрисовывает чекбоксы и радиокнопки, »
Chopser, зависит от автора скина. Если он лентяй и не рисовал ресурсы для чекбоксов и радиокнопок, то понятно, что не отрисует.
об этом писали даже разработчику. Пишет что решают. »
Chopser, можно ссылку переписки?
Gnom_aka_Lexander
10-01-2012, 18:08
можно ссылку переписки? »
ISSkin действительно не все чекбоксы и радиокнопки отрисовывает. Например тасклист и ранлист он уже не рисует, при этом ноикнс и компонетлист - нормально. сам давно уже заметил. но глюковатая работа не является неожиданностью, в конце концов, скины относительно унифицированны, и не являются специализированными файлами для инно.
Доброго времени суток!
Скажите пожалуйста как достучаться до YesRadio и NoRadio (TNewRadioButton) расположенных на странице FinishedPage?
Gnom_aka_Lexander
10-01-2012, 18:25
Както так:
procedure InitializeWizard;
begin
WizardForm.NoRadio.Show;
WizardForm.YesRadio.Show;
end;
TROY Diamond
10-01-2012, 20:17
Как то так
Спасибо! Работает! НО НЕ СОВСЕМ ТАК...
1. "Основная папка" всё-равно ОСТАЁТСЯ, даже если она пустая: Мои документы -> My Company -> My Game
Удаляется ТОЛЬКО "My Game", а как удалить и "My Company" если в ней больше ничего нет?
2. Можно ли окошко с запросом "отдельно вынести", чтобы оно появлялось раньше окна программы, а не во время процесса деинсталляции, а также убрать "Деинсталляция"? Либо заменить эту надпись на "Удаление профилей" и т.п.
http://s018.radikal.ru/i528/1201/69/2c3c29cdb99dt.jpg (http://s018.radikal.ru/i528/1201/69/2c3c29cdb99d.jpg)
Не проверял, но как то так
НЕ работает!
http://s018.radikal.ru/i502/1201/b9/6eb7b340f910t.jpg (http://s018.radikal.ru/i502/1201/b9/6eb7b340f910.jpg)
И вообще этот код можно ли как-то "усовершенствовать", чтобы можно было несколько вариантов названия приложения в "Uninstall" написать.
Приложение может по-разному называться и в реестре у кого-то будет "{7216871F-869E-437C-B9BF-2A13F2DCE63F}_is1", а кого-то просто "My Program_is1"?!
CustomMessages вам в помощь:
Не подходит... Значения AppPublisher, AppPublisherURL, AppCopyright, всё равно остаются, те которые заданы в секции Setup
Может кто-нибудь ответит?!!!
Как добавить задачу в "Назначенные задания" - файл *.job в WINDOWS\Tasks?
Как его "создать" в Inno?
Нужно, чтобы приложение запускалось с Windows и/или в опредённое время.
И чтобы оно устанавливалось ТОЛЬКО если пользователь его выберет при установке, на странице "Дополнительные задачи".
Не подходит... Значения AppPublisher, AppPublisherURL, AppCopyright, всё равно остаются, те которые заданы в секции Setup »
я дал вам абсолютно рабочий пример, где эти значения подставляются через CustomMessages; если вы не можете в нем разобраться, то рекомендую начать с прочтения справки и изучения азов паскаля
Gnom_aka_Lexander
10-01-2012, 21:29
НЕ работает! »
Дык, не работают уже ТВОИ художества, в примере Николая, я не заметил такого стращилища, скрин которого ты показал. учись работать с текстом внутри кода.
По посту 587 (http://forum.oszone.net/post-1832136-587.html) нет мыслей ни у кого?
1.А как на кастом пейджах сделать, чтоб оно появлялось? »
procedure CurPageChanged(CurPageID: Integer);
begin
LogoPanel.Hide;
case CurPageID of
wpWelcome:
begin
LogoPanel.Show;
end;
case CurPageID of
Page1.ID:
begin
LogoPanel.Show;
end;
end;
end;
2. Как сделать переход на страницу Выбора Директории по клику кнопки? А если такая же кастом страница? »
Когда вы создаете кастомную страницу, то указываете, после какой страницы будет отображатся ваша:
Page1 := CreateCustomPage(wpWelcome, 'Main Menu', 'Please choose desired action: '); То есть у вас в примере это страница wpWelcome
@YURSHAT
нет нет, на кастомной странице как видно по коду расположена кнопка. Хотелось бы, чтобы при
Button_Install.OnClick := @ButtonOnClick
Происходил переход, например, на страницу выбора папки или, опять же к примеру, на кастомный page2.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.