Вопрос Класcический стиль системы

Хамик

Старожил
Как можно исправить вот такой косяк при использовании класcического стиля Windows?

Использую кастомные PageNameLabel, PageDescriptionLabel. Для каждой страницы свой текст; при не классическом стиле все нормально отрабатывается, а при классическом текст налаживается друг на друга.
 

Shegorat

Lord of Madness
Администратор
Хамик
Область не перерисовывается. Нужно вызывать методы Invalidate и Update либо Repaint для элемента, на котором лежат данные лейблы.
 

Хамик

Старожил
Shegorat, попробовал вызывать методы Invalidate и Update либо Repaint до и после изменения текста (в процедуре CurPageChanged), не помогло. Вот часть моего кода
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
DisableWelcomePage=yes

[code]
var
PageNameLabel, PageDescriptionLabel: TLabel;

procedure InitializeWizard();
begin
  PageNameLabel:=TLabel.Create(WizardForm);
    with PageNameLabel do begin
    AutoSize := False;
    SetBounds(ScaleX(0), ScaleY(4), ScaleX(258), ScaleY(30));
    Transparent := True;
    Font.Name := 'Tahoma';
    Font.Size := 8;
    Font.Color := clBlack;;
    Font.Style := [fsBold];
    Parent := WizardForm.MainPanel;
  end;

  PageDescriptionLabel:=TLabel.Create(WizardForm);
    with PageDescriptionLabel do begin
    AutoSize := False;
    SetBounds(ScaleX(0), ScaleY(20), ScaleX(200), ScaleY(50));
    Wordwrap := True;
    Transparent := True;
    Font.Name := 'Tahoma';
    Font.Size := 8;
    Font.Color := clblack;;
    Parent := WizardForm.MainPanel;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.PageNameLabel.Hide;
  WizardForm.PageDescriptionLabel.Hide;
 
case CurPageID of
wpReady:
begin
PageDescriptionLabel.Caption:='Моя программа';
PageNameLabel.Caption:='Выбор папки установки';
end;

wpSelectDir:
begin
PageNameLabel.Caption:='Выбор типа и компонентов установки';
PageDescriptionLabel.Caption:='';
end;
end;
end;
 

ZVSRus

Участник
Хамик А чем стандартные PageNameLabel и PageDescriptionLabel не устраивают со своими надписями
 

ZVSRus

Участник
Хамик А если с модулем TransparentStatic.iss правда есть недостаток.
BeveledLabel= выглядит зачеркнутым.
 

SBalykov

Старожил
Хамик
Создаешь лэйблы на WizardForm, а родителя выбираешь WizardForm.MainPanel?
 

Хамик

Старожил
SBalykov, если б не было панелки, то скрипт бы не компилировался. Панелька стандартная. Я специально предоставил рабочий скрипт, чтобы можно было поэкспериментировать, а не сидеть и в догадках теряться.
 

Avengerz13

Участник
Хамик, OS: Windows 10. Inno Setup 5.5.9 (u).
 

Вложения

Последнее редактирование:

ZVSRus

Участник
Хамик У меня также Windows 7. Проверил все свой скрипты, где используются кастомные лейблы на классическом стиле системы.
Выдаёт такую же хрень что в изначальном вопросе в шапке.
Но если за комментировать параметр Transparent := True, везде все корректно
Тоже самое и со ссылкой от Avengerz13.
Спасибо за поднятую тему.
 
Последнее редактирование:

Хамик

Старожил
Всем спасибо кто откликнулся, решение сам уже нашел. Вот пример, может кому то пригодится:
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
DisableWelcomePage=yes

[code]
var
PageNameLabel, PageDescriptionLabel: TLabel;

function IsThemeActive: BOOL; external 'IsThemeActive@UxTheme.dll stdcall delayload';

procedure InitializeWizard();
begin
  PageNameLabel:=TLabel.Create(WizardForm);
    with PageNameLabel do begin
    AutoSize := False;
    SetBounds(ScaleX(0), ScaleY(4), ScaleX(258), ScaleY(30));
    Transparent := IsThemeActive;
    Font.Name := 'Tahoma';
    Font.Size := 8;
    Font.Color := clBlack;;
    Font.Style := [fsBold];
    Parent := WizardForm.MainPanel;
    ParentColor := true;
  end;

  PageDescriptionLabel:=TLabel.Create(WizardForm);
    with PageDescriptionLabel do begin
    AutoSize := False;
    SetBounds(ScaleX(0), ScaleY(20), ScaleX(200), ScaleY(50));
    Wordwrap := True;
    Transparent := IsThemeActive;
    Font.Name := 'Tahoma';
    Font.Size := 8;
    Font.Color := clblack;;
    Parent := WizardForm.MainPanel;
    ParentColor := true;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.PageNameLabel.Hide;
  WizardForm.PageDescriptionLabel.Hide;

case CurPageID of
wpReady:
begin
PageDescriptionLabel.Caption:='Моя программа';
PageNameLabel.Caption:='Выбор папки установки';
end;

wpSelectDir:
begin
PageNameLabel.Caption:='Выбор типа и компонентов установки';
PageDescriptionLabel.Caption:='';
end;
end;
end;
 

ZVSRus

Участник
Хамик Изначально когда вы сказали что параметр Transparent вам нужен, было понятно что вам нужна прозрачность под PageNameLabel и PageDescriptionLabel, после последнего примера я снова спрашиваю для каких нужд (уж сильно интересно) вам нужен параметр Transparent.
Если растянуть картинку Small на всю ширину прозрачности под PageNameLabel и PageDescriptionLabel НЕТ.
И вообще смысл данной темы, объясните если не трудно.
И какое решение в последнем примере вы решили?
 

ZVSRus

Участник
Дааааа!!!!! Решение найдено СУПЕР!
Хамик а если к вашему решенному примеру прикрутить это:
Код:
  with WizardForm.WizardSmallBitmapImage do
  begin
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(58));
  end;
тогда как быть с изначальным вопросом, Transparent := True; он вам очень нужен, ведь так.
 

Хамик

Старожил
ZVSRus, ну и зачем стандартную картинку растягивать? Что вы хотите доказать?
 
Сверху