Inno Setup VCL

Leserg

Участник
В скрытии пункта About Setup...
Так его можно скрыть по-другому.
code_language.pascal:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={ autopf }\My Application
OutputDir=.

[Code]
// Функции удаление в инсталляторе пункта меню "О программе..."
function AppendMenu(hMenu: HMENU; uFlags, uIDNewItem: UINT; lpNewItem: String): BOOL;
  external 'AppendMenuW@user32.dll stdcall';
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU;
  external 'GetSystemMenu@user32.dll stdcall';

const
  MF_DELETE = $200;

procedure InitializeWizard();
begin
  // Удаление пункта меню "О программе"
  AppendMenu(GetSystemMenu(Wizardform.Handle, True), MF_DELETE, 0, SetupMessage(msgAboutSetupMenuItem));
end;

Испытываю трудности в применении этой функции
Вот блин!
Теперь эти функции не работают. :$
 

Cyberworm

Новичок
Ещё бы хотелось увидеть функцию Blend on move (активное затемнение) при перемещении основной формы окна инсталлятора, если это возможно реализовать.
 

Leserg

Участник
Встроенным способом намного проще и привычней.
Это не встроенный способ, а ошибка из-за неверной инициализации формы.
Её в любой момент могут закрыть. Лучше использовать легальные способы.

А реально добавить Ваши расширенные функции в подсказки при наборе?
Реально, но тогда многое придется переделывать.
Раньше-то такой функциональности в редакторе не было.
 

Leserg

Участник
Ещё бы хотелось увидеть функцию Blend on move
Пока нет.
У меня нет достаточных знаний и опыта, чтобы сделать это самостоятельно.
Примеров с реализацией подобного функционала я сети не нашел, поэтому отложено на неопределённый срок.
Надеюсь на понимание.
 
Последнее редактирование:

Crachlow

Старожил
@Leserg. В вашей сборке Inno 633EE, при подключении vcl стилей происходит то же самое что и в фмх, на некоторое время появляется окно с пустой формой. Example_BackgroundFormAndNC.iss. В 6.40 так же? Этого не избежать? Второй вопрос, а зачем mainform нужно было вообще убирать?
 

ZVSRus

Участник
Leserg. А можно ли в вашей сборке к компоненту TNewStaticText сделать выравнивание текста по ширине (Alignment) и по высоте (Layout), ну то есть как реализовано у компонента TLabel.
И ещё хотелось бы, когда включена прозрачность у TNewStaticText (Transparent := True) чтобы цвет текста можно было бы менять.
Ну всё то что реализовано у компонента TLabel.
 

Leserg

Участник
В своем основном скрипте получаю такие ошибки
Вернул обратно предыдущую сборку (т.е. начальную), т.к. в этой "исправленной" полезли другие ошибки.
Как их устранить не понимаю. Возможно вообще придется отказаться от тени для VCL Style или, по крайней мере, только для главной формы.
Пока что, если применяете WizardForm.Position := poScreenCenter, то отключайте тень для главной формы.

при подключении vcl стилей происходит то же самое что и в фмх, на некоторое время появляется окно с пустой формой.
Это мелькает окно тени для VCL Style. Да это побочный эффект применения тени для окон с VCL Style.
Тень для главного окна можно отключить так
code_language.pascal:
ShadowFormOnOff(WizardForm, WizardFormShadow, False);
или так
code_language.pascal:
WizardFormShadow.ShadowOn := False;
Одну из этих команд укажите в процедуре InitializeWizard().

Это равноценно для обеих последних сборок Inno Setup VCL 6.3.3 и 6.4.0.

Этого не избежать?
Как только что было сказано выше - отключите тень для главной формы.
Можете потом её снова включить, когда закончится инициализация главной формы.
То есть в начале InitializeWizard() отключаете, а конце включаете.
code_language.pascal:
procedure InitializeWizard();
begin
  // Отключаем видимость тени для главной формы
  WizardFormShadow.ShadowOn := False;
 
  ...
  // остальной код...
  ...

  // Включаем видимость тени для главной формы
  WizardFormShadow.ShadowOn := True;
end;
Попробуйте и сообщите результат.

а зачем mainform нужно было вообще убирать?
Это вопрос к разбработчику. Как говорит Джордан (автор и ведущий разработчик), "это древний функционал родом из 90гг прошлого века, который не соответствует современным стандартам установки, поэтому был полностью удалён, окончательно и безвозвратно."

А можно ли в вашей сборке к компоненту TNewStaticText сделать выравнивание текста по ширине (Alignment)
Ну что сказать... Это свойство у компонента есть ещё с самого начала, когда приступил к разработке Inno Setup VCL, но по какой-то причие я это свойство пропустил и не объявил. То есть свойство есть, а доступа к нему нету - исправлю.

И ещё хотелось бы, когда включена прозрачность у TNewStaticText (Transparent := True) чтобы цвет текста можно было бы менять.
Такое же поведение имеет стандартный компонент TStaticText. Как его изменить - не знаю. Возможно это баг Delphi, а может быть так и задумано.

Ну всё то что реализовано у компонента TLabel.
Ну так используйте TLabel, где вам необходимо!
Поймите, что TNewStaticText (TStaticText) и TLabel это наследники разных классов! То что есть в TLabel нельзя вот так просто и запихнуть в TStaticText. Иначе был бы только один компонент без всего этого разнообразия.
 

tihiy_don

Старожил
@Leserg. В вашей сборке Inno 633EE, при подключении vcl стилей происходит то же самое что и в фмх, на некоторое время появляется окно с пустой формой. Example_BackgroundFormAndNC.iss. В 6.40 так же? Этого не избежать? Второй вопрос, а зачем mainform нужно было вообще убирать?
Мелькает в FMX только на пустой форме. На имейдж форме такого нет. И то там мелькание не у всех проявляется.
 

Leserg

Участник
Небольшое обновление (сборка от 18,01,2025):
1. Удален класс TShadowForm и вся связанная с ним функциональность, включая пример Example_ShadowForm.iss.
Причина: побочные физуальные артефакты, сложность реализации, особенно в версии 6.4.0 в связи с изменившейся инициализацией окон программы установки.

Но включить тень окон мастера установки при использовании VCL стилей можно включением параметра скругления углов - см. директиву SetupRoundedCorner. Проверено на системах Windows 11, на предыдущих версиях ОС не проверялось, но если в них работает DWMAero, то также должно работать. Если же используется значение по умолчанию (когда директива не SetupRoundedCorner не задана), то тень будет отсутствовать, т.е. стандартное поведение окна установки с VCL стилем.

2. Объявлены имеющиеся свойства в компоненте TNewStaticText, а именно:
code_language.pascal:
Alignment: taLeftJustify  - выравнивание текста по левому краю (по умолчанию);
           taRightJustify - выравнивание текста по правому краю;
           taCenter       - выравнивание по центру.

BorderStyle: sbsNone      - рамка отсутствует (по умолчанию);
             sbsSingle    - простая рамка;
             sbsSunken    - 3D рамка.

VerticalAlignment: taAlignTop       - выравнивание текста по верхней границе (по умолчанию);
                   taVerticalCenter - выравнивание текста по центру по вертикали;
Причем свойство выравнивания текста работает только при указании свойства WordWrap := True.
Теперь можно изменить цвет текста, если Transparent := True. Но при использовании VCL стиля, также следует применять свойство StyleElements := [seBorder], иначе выбранный стиль установит собственный цвет шрифта. Кстати свойством StyleElements любой компонент можно "выключать из стиля" или полностью или частично (подробнее).
TNewStaticText.png
3. Добавлена функция Windows API – LoadIcon.
Реализация функции представлена двумя вариантами:
code_language.pascal:
  - function LoadIcon(ResIconName: String): HICON;
    Загрузка значка из ресурсов программы установки по заданному имени.
    Добавить значки (*.ICO) в ресурсы программы установки можно с помощью
    директивы IconResource в секции [Setup].

  - function LoadIconIDI(hInst: Longint; IconIDI: Longword): HICON;
    Загрузка значка из ресурсов по заданному ID номеру. При этом можно
    указывать системные значки, если параметр hInst установлен в 0.
LoadIcon.png
4. Добавлена функция Windows API – MessageBoxTimeout (источник).
Функция MessageBoxTimeout позволяет отобразить сообщение, которое будет автоматически закрыто через указанный промежуток времени.
code_language.pascal:
 function MessageBoxTimeout(hWnd: HWND;           { дескриптор окна        }
                            lpText: String;       { текст сообщения        }
                            lpCaption: String;    { текст заголовка        }
                            uType: UINT;          { тип сообщения / флаги  }
                            wLanguageId: Word;    { идентификатор языка    }
                            dwMilliseconds: DWORD { время отображения в мс }
                           ): Integer;
Пример использования смотрите в файле Example_MessageBoxTimeout.iss.

Inno Setup 6.3.3 FullVCL (скачать)
Inno Setup 6.4.0 FullVCL (скачать)
 

ZVSRus

Участник
Leserg
VerticalAlignment: taAlignTop - выравнивание текста по верхней границе (по умолчанию);
taVerticalCenter - выравнивание текста по центру по вертикали;

Выравнивание текста по центру по вертикали, всё нормально.
Но нету переноса слов. Если слово длинное, выглядит в одну строку, и уходит за кроя рамки.
 

Leserg

Участник
Выравнивание текста по центру по вертикали, всё нормально.
Но нету переноса слов.
ZVSRus, это только для коротких фраз в пределах границ компонента.
Компонент TNewSaticText создаётся средствами Windows API, в котором для этого компонента нет соответствующего функционала. Вот список свойств компонента TSaticText. Как можно заметить, среди них нет свойств для выравнивания текста по вертикали. В данном конкретном случае для имитации выравнивания текста по центру вертикали я добавил флаг SS_CENTERIMAGE, который не имеет отношения к тексту, но работает для него как нужно. Сожалею, но больше ничего нельзя сделать из-за ограничения Windows API. Если вам необходимо такое выравнивание, используйте другой компонент.
 

ZVSRus

Участник
Leserg. Спасибо. Всё понял. Не критично, Нужно было всего для одного компонента WelcomeLabel1 := TNewStaticText
 
Сверху