1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

Вопрос Описание компонентов

Тема в разделе "Inno Setup", создана пользователем Ekspoint, 27 дек 2014.

  1. Ветеран

    Регистрация:
    9 авг 2014
    Сообщения:
    99
    Симпатии:
    8
    Пол:
    Мужской
    А можно вместо номера компонента в AddDescription сделать его название?
    Код (Text):

    type
      TComponentDesc= record Description:String;Index:Integer;end;var
      Descs: array of TComponentDesc;
      Info:TNewStaticText;
      InfoCaption:TNewStaticText;
      InfoPanel:TPanel;
      Indx:Integer;
    procedure ShowDescription(Sender:TObject; X, Y,Index:Integer;Area:TItemArea);var i:Integer;begin
      Indx:=-1;
      for i:=0 to GetArrayLength(Descs)-1dobegin
      if(Descs[i].Index=Index)thenbeginIndx:=i;Breakend;end;
      if(Indx>=0)and(Area=iaItem)thenInfo.Caption:=Descs[Indx].DescriptionelseInfo.Caption:=ExpandConstant('{cm:ComponentsInfoPanel2}');end;
    procedure AddDescription(AIndex:Integer;ADescription:String);var i, k:Integer;begin
    i:=GetArrayLength(Descs);SetArrayLength(Descs, i+1);Descs[i].Description:=ADescription;Descs[i].Index:=AIndex-1end;
    procedure InitializeWizard();begin
      WizardForm.TypesCombo.Visible:=False;
      WizardForm.ComponentsList.Height:=ScaleY(181)-WizardForm.TypesCombo.Top;
      WizardForm.ComponentsList.Top:=WizardForm.TypesCombo.Top;
      WizardForm.ComponentsList.Width:=ScaleX(417);
      WizardForm.ComponentsList.OnItemMouseMove:=@ShowDescription
      InfoPanel:=TPanel.Create(WizardForm);
      InfoPanel.Parent:=WizardForm.SelectComponentsPage;
      InfoPanel.Caption:='';
      InfoPanel.Top:=ScaleY(190);
      InfoPanel.Left:=ScaleX(0);
      InfoPanel.Width:=ScaleX(417);
      InfoPanel.Height:=ScaleY(40);
      InfoPanel.BevelInner:= bvRaised;
      InfoPanel.BevelOuter:= bvLowered;
      InfoCaption:=TNewStaticText.Create(WizardForm);
      InfoCaption.Parent:=WizardForm.SelectComponentsPage;
      InfoCaption.Caption:=ExpandConstant('{cm:ComponentsInfoPanel1}');
      InfoCaption.Left:=ScaleX(7);
      InfoCaption.Top:=InfoPanel.Top-ScaleY(6);
      InfoCaption.Font.Color:= clActiveCaption;
      Info:=TNewStaticText.Create(WizardForm);
      Info.Parent:=InfoPanel;
      Info.AutoSize:=False;
      Info.Left:=ScaleX(6);
      Info.Width:=ScaleX(403);
      Info.Top:=ScaleY(12);
      Info.Height:=ScaleY(24);
      Info.Caption:=ExpandConstant('{cm:ComponentsInfoPanel2}');
      Info.WordWrap:=true;
      AddDescription(1,'Справка');//первый параметр - это номер компонента, идет последовательно от начала записи компонентов
      AddDescription(2,'Английская справка');//Второй параметр - это собственно описание компонента
      AddDescription(3,'Русская справка');
      AddDescription(4,'Плагины');
      AddDescription(5,'Внутреннего просмотра');
      AddDescription(6,'Архиваторные');
      AddDescription(13,'Системные');
      AddDescription(8,'CanonCam');
      AddDescription(9,'PluginManager');
      AddDescription(10,'Registry');
      AddDescription(11,'Services');
      AddDescription(12,'StartupGuard');
      AddDescription(7,'Другие');
    end;
     
     
  2. Безумный Лорд Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    722
    Симпатии:
    1.050
    Пол:
    Мужской
    Ekspoint
    Если под названием компонента подразумевается его идентификатор типа
    Код (Text):
    Name: "software\directx";
    То нет, т.к. инно хотя и хранит эти значения, но в секции code они недоступны.
    Если же подразумевается его описание типа
    Код (Text):
    Description: "Microsoft DirectX";
    То его использовать можно, но тогда будут проблемы с одноименными компонентами.
     
  3. Ветеран

    Регистрация:
    9 авг 2014
    Сообщения:
    99
    Симпатии:
    8
    Пол:
    Мужской
    жалко,а есть какой нибудь код похожий
    что бы не было номера компонента
     
  4. Безумный Лорд Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    722
    Симпатии:
    1.050
    Пол:
    Мужской
    Была где-то библиотека, но она некорректно работает с collapsed элементами
     
  5. Ветеран

    Регистрация:
    9 авг 2014
    Сообщения:
    99
    Симпатии:
    8
    Пол:
    Мужской
    Можете ее найти пожалуйста и скинуть мне
     
  6. Безумный Лорд Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    722
    Симпатии:
    1.050
    Пол:
    Мужской
    Хм, вроде оно
     

    Вложения:

    • descctrl.rar
      Размер файла:
      3,1 КБ
      Просмотров:
      14
  7. Ветеран

    Регистрация:
    9 авг 2014
    Сообщения:
    99
    Симпатии:
    8
    Пол:
    Мужской
    спасиб,но тут тоже вроде номер компонента идет или нет?
     
  8. Безумный Лорд Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    722
    Симпатии:
    1.050
    Пол:
    Мужской
    Не совсем, здесь описания передаются через разделитель, для всех компонентов. И внутри библиотеки распарсивается.
     
  9. Ветеран

    Регистрация:
    9 авг 2014
    Сообщения:
    99
    Симпатии:
    8
    Пол:
    Мужской
    разделитель это +?
     
  10. Безумный Лорд Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    722
    Симпатии:
    1.050
    Пол:
    Мужской
    Нет, semicolon, оно же точка с запятой
     
  11. Ветеран

    Регистрация:
    9 авг 2014
    Сообщения:
    99
    Симпатии:
    8
    Пол:
    Мужской
    понял,а можно что бы для каждого компонента прописывалось отдельно?
     
  12. Безумный Лорд Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    722
    Симпатии:
    1.050
    Пол:
    Мужской
    Нет, только сразу для группы компонентов. Но ненужные компоненты можно просто пропускать, задав пустое значение между разделителями.
     
  13. Ветеран

    Регистрация:
    9 авг 2014
    Сообщения:
    99
    Симпатии:
    8
    Пол:
    Мужской
    вот так?
    Код (Text):

    function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
    function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

    var
      Info: TNewStaticText;
      InfoCaption: TNewStaticText;
      InfoPanel: TPanel;

    procedure DeinitializeSetup();
    begin
      disabledesc();
    end;

    procedure InitializeWizard();
    begin
      WizardForm.TypesCombo.Visible:=False;
      WizardForm.ComponentsList.Height := ScaleY(181) - WizardForm.TypesCombo.Top;
      WizardForm.ComponentsList.Top := WizardForm.TypesCombo.Top;
      WizardForm.ComponentsList.Width := ScaleX(417);

      InfoPanel := TPanel.Create(WizardForm);
      InfoPanel.Parent := WizardForm.SelectComponentsPage;
      InfoPanel.Caption := '';
      InfoPanel.Top := ScaleY(190);
      InfoPanel.Left := ScaleX(0);
      InfoPanel.Width := ScaleX(417);
      InfoPanel.Height := ScaleY(40);
      InfoPanel.BevelInner := bvRaised;
      InfoPanel.BevelOuter := bvLowered;
      InfoCaption := TNewStaticText.Create(WizardForm);
      InfoCaption.Parent := WizardForm.SelectComponentsPage;
      InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
      InfoCaption.Left := ScaleX(7);
      InfoCaption.Top := InfoPanel.Top - ScaleY(6);
      InfoCaption.Font.Color := clActiveCaption;

      Info := TNewStaticText.Create(WizardForm);
      Info.Parent := InfoPanel;
      Info.AutoSize := False;
      Info.Left := ScaleX(6);
      Info.Width := ScaleX(403);
      Info.Top := ScaleY(12);
      Info.Height := ScaleY(24);
      Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
      Info.WordWrap := true;

      enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
           ExpandConstant('{cm:ComponentsDescription1}; ;{cm:ComponentsDescription3};{cm:ComponentsDescription4};')
           );
    end;
    [/SPOILER]
     
  14. Ветеран

    Регистрация:
    11 окт 2012
    Сообщения:
    33
    Симпатии:
    0
    В Inno Setup FAQ показан пример скрипта "Описание компонентов" через библиотеку descctrl.dll, но там только для секции [Components]. А можно сделать такое же, только для чекбоксов и радиокнопок прописанных в коде без использования секции [Components]? Картинки не нужны, только панель с текстовым описанием при наведении мыши. Заранее премного благодарен.

    И еще вопросик: можно ли сделать аналог кнопки "Завершить", чтоб вставить ее на кастомную страницу, не используя пропуск страниц?
     
  15. Ветеран

    Регистрация:
    28 янв 2016
    Сообщения:
    71
    Симпатии:
    31
    Пол:
    Мужской
    Chopser, как пример с чекбоксом:
    [Code*]
    var
    NewCheckBox1: TNewCheckBox;
    Label2: TLabel;

    procedure ShowHint(Sender: TObject);
    begin
    Label2.show;
    end;

    procedure hideHint(Sender: TObject);
    begin
    Label2.hide;
    end;

    procedure InitializeWizard();
    begin
    NewCheckBox1 := TNewCheckBox.Create(WizardForm);
    with NewCheckBox1 do
    begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(176);
    Top := ScaleY(188);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'NewCheckBox1';
    OnMouseEnter:= @ShowHint;
    OnMouseLeave:= @hideHint;
    end;

    Label2 := TLabel.Create(WizardForm);
    with Label2 do
    begin
    Parent := WizardForm.SelectDirPage;
    Transparent := False;
    Left := ScaleX(208);
    Top := ScaleY(142);
    Width := ScaleX(20);
    Height := ScaleY(39);
    Caption := 'бла' + #13#10 +'бла' + #13#10 +'бла';
    end;
    Label2.hide;
    end;
     
  16. Ветеран

    Регистрация:
    11 окт 2012
    Сообщения:
    33
    Симпатии:
    0
    Что то вместо "бла-бла-бла" показывает вопросительные знаки... Для стандартного Inno нет кода случайно? Стандартный пишет что: OnMouseEnter:= @ShowHint; - неизвестный идентификатор, на Расширенном работает, но кажет вопросительные знаки в описании компонента.
     
  17. Ветеран Супер модератор

    Регистрация:
    5 мар 2016
    Сообщения:
    374
    Симпатии:
    398
    Пол:
    Мужской
    Chopser, попробуйте задействовать текст через секцию CustomMessages (как в примере Exp) и компилировать в Unicode версии Inno (расширенной).

    Код (Inno):
    [Setup]
    AppName=My Application
    AppVersion=1.5
    DefaultDirName={sd}\My Application

    [CustomMessages]
    Text1=бла%nбла%nбла

    [Code]
    var
      NewCheckBox1: TNewCheckBox;
      Label2: TLabel;

    procedure ShowHint(Sender: TObject);
    begin
      Label2.Show;
    end;

    procedure HideHint(Sender: TObject);
    begin
      Label2.Hide;
    end;

    procedure InitializeWizard;
    begin
    NewCheckBox1:=TNewCheckBox.Create(WizardForm);
    with NewCheckBox1 do begin
      SetBounds(ScaleX(176), ScaleY(188), ScaleX(97), ScaleY(17));
      Caption:='NewCheckBox1';
      Parent:=WizardForm.SelectDirPage;
      OnMouseEnter:=@ShowHint;
      OnMouseLeave:=@HideHint;
    end;

    Label2:=TLabel.Create(WizardForm);
    with Label2 do begin
      Transparent:=False;
      SetBounds(ScaleX(208), ScaleY(142), ScaleX(20), ScaleY(39));
      Caption:=CustomMessage('Text1');
      Parent:=WizardForm.SelectDirPage;
      Hide;
     end;
    end;
     
    Последнее редактирование: 23 окт 2018
  18. Ветеран

    Регистрация:
    11 окт 2012
    Сообщения:
    33
    Симпатии:
    0
    Разобрался уже с вопросительными знаками. :) В стандартном Inno сначала открыл скрипт, нормально отображалось, а в расширенном не обратил внимания, потом посмотрел расширенный и в скрипте кажет ???????, прописал в скрипте в расширенном Inno бла-бла- по русски и стало нормально отображаться в скомпилированном инсталляторе. В расширенном Inno ANSI-версии все нормально работает, и в первом и во втором варианте, просто бла-бла было прописано в первом примере в Юникодной кодировке.
    Спасибо всем за помощь.

    Nemko, а вот по этому вопросу не можете подсказать - можно ли сделать аналог кнопки "Завершить", чтоб вставить ее на кастомную страницу, не используя пропуск страниц?

    Просто делаю конфигуратор для программы, одна единственная страница с чекбоксами, радиокнопками, кнопками "ОК" и "Сброс", пишет данные в INI-файл. Вот как бы кнопку "ОК" сделать чтоб работала как кнопка "Завершить", то есть при нажатии чтоб применялись выставленные опции, затем закрытие окна. Ну вобщем как принажатии на кнопку "Завершить" только не использовать пропуск страниц.
     
    Последнее редактирование: 24 окт 2018
  19. Ветеран

    Регистрация:
    28 янв 2016
    Сообщения:
    71
    Симпатии:
    31
    Пол:
    Мужской
    Chopser, как вариант, вешай тогда все нужные тебе действия на клик кнопки "OK", типа
    procedure OKButtonClick(Sender: TObject);
    begin
    нужные действия
    form.Close; - закрытие формы
    end;
     
  20. Old Men Проверенный

    Регистрация:
    17 июн 2011
    Сообщения:
    454
    Симпатии:
    422
    Пол:
    Мужской
    Код (Inno):

    [Setup]
    AppName=Language Settings
    AppVersion=1.0.0.3
    DefaultDirName={src}\
    OutputDir=.
    UsePreviousAppDir=no
    UsePreviousGroup=no
    UsePreviousLanguage=no
    UsePreviousTasks=no
    UsePreviousUserInfo=no
    UsePreviousSetupType=no
    ShowComponentSizes=false
    DirExistsWarning=no
    Uninstallable=no
    OutputBaseFilename=language_setup
    ShowLanguageDialog=auto
    DisableDirPage=yes
    DisableProgramGroupPage=yes
    DisableReadyPage=yes
    DisableFinishedPage=yes
    VersionInfoVersion=1.0.0.3
    VersionInfoCopyright=nik1967
    Compression=lzma2/ultra64
    InternalCompressLevel=ultra64
    SolidCompression=yes
    LZMAUseSeparateProcess=yes
    LZMADictionarySize=262144

    [Languages]
    Name: rus; MessagesFile: compiler:Languages\Russian.isl
    Name: eng; MessagesFile: compiler:Default.isl

    [Code]
    procedure InitializeWizard();                                                
    begin
       with WizardForm do begin
           OuterNotebook.Hide;
           InnerNotebook.Hide;
           Color:= WizardForm.Color;
           BorderIcons:= [biSystemMenu];
           NextButton.Left:= CancelButton.Left;
           CancelButton.SetBounds(ScaleX(0),ScaleY(0),ScaleX(0),ScaleY(0));
           BackButton.SetBounds(ScaleX(0),ScaleY(0),ScaleX(0),ScaleY(0));
           Center;
       end;
    end;

    procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
    begin
      Confirm:= false;
    end;

    procedure CurPageChanged(CurPageID: Integer);
    begin
      WizardForm.NextButton.Caption:= 'Завершить';
    end;

    procedure CurStepChanged(CurStep: TSetupStep);
    begin
       case CurStep of
         ssPostInstall: begin
           SaveStringToFile(ExpandConstant('{src}\example.txt'), 'Записываем действие по кнопке Завершить', false); // Здесь пишем нужные действия
         end;
       end;
    end;
     
     
    agent555 и Nemko нравится это.

Поделиться этой страницей