Окно информации

Maxvell

Мимокрокодил
Без имени-1.jpg

Как сделать так, чтоб после наведения на dlc всплывало окно с текстом? Помогите пожалуйста.
 
Последнее редактирование модератором:

Nemko

Дилетант
Модератор
Maxvell, вот пример, только не с TForm, а с TPanel:

Код:
[Setup]
AppName=Test
AppVersion=1
CreateAppDir=no

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: text\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
Name: voice\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 600000000

[Code]
var
  infPanel: TPanel;
  infLabel: TLabel;

procedure CreateInfo;
begin
  infPanel:=TPanel.Create(nil);
  infPanel.SetBounds(ScaleX(32), ScaleY(200), ScaleX(413), ScaleY(50));
  infPanel.ParentBackground:=False;
  infPanel.Color:=clGray;
  infPanel.BorderStyle:=bsNone;
  infPanel.BevelOuter:=bvNone;
  infPanel.Parent:=WizardForm;
  infPanel.Visible:=False;

  infLabel:=TLabel.Create(nil);
  infLabel.AutoSize:=False;
  infLabel.WordWrap:=False;
  infLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(infPanel.Width), ScaleY(infPanel.Height));
  infLabel.Alignment:=paCenter;
  infLabel.Layout:=tlCenter;
  infLabel.Parent:=infPanel;
end;

procedure ShowInfoText(Index: Byte);
var
  cap: String;
begin
case Index of
  0: cap:='0 - ';
  1: cap:='1 - ';
  2: cap:='2 - ';
  3: cap:='3 - ';
  4: cap:='4 - ';
  5: cap:='5 - ';
  else begin
    if infPanel.Visible then infPanel.Visible:=False;
    Exit;
  end;
end;
  infLabel.Caption:=cap + WizardForm.ComponentsList.Items.Strings[Index];
  if not infPanel.Visible then infPanel.Visible:=True;
end;

procedure cmp_MouseEnter(Sender: TObject; X: Integer; Y: Integer; Index: Integer; Area: TItemArea);
begin
  ShowInfoText(Index);
end;

procedure cmp_MouseLeave(Sender: TObject);
begin
  infPanel.Visible:=False;
end;

procedure InitializeWizard;
begin
  with WizardForm do begin
    NextButton.Width:=ScaleX(0);
    OuterNotebook.Hide;
    Bevel.Hide;

  with ComponentsList do begin
    Left:=ScaleX(30);
    Height:=ScaleY(Height+47);
    Parent:=WizardForm;
    OnItemMouseMove:=@cmp_MouseEnter;
    OnMouseLeave:=@cmp_MouseLeave;
  end;
  CreateInfo;
 end;
end;
 

Maxvell

Мимокрокодил
Maxvell, вот пример, только не с TForm, а с TPanel:

Код:
[Setup]
AppName=Test
AppVersion=1
CreateAppDir=no

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: text\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
Name: voice\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 600000000

[Code]
var
  infPanel: TPanel;
  infLabel: TLabel;

procedure CreateInfo;
begin
  infPanel:=TPanel.Create(nil);
  infPanel.SetBounds(ScaleX(32), ScaleY(200), ScaleX(413), ScaleY(50));
  infPanel.ParentBackground:=False;
  infPanel.Color:=clGray;
  infPanel.BorderStyle:=bsNone;
  infPanel.BevelOuter:=bvNone;
  infPanel.Parent:=WizardForm;
  infPanel.Visible:=False;

  infLabel:=TLabel.Create(nil);
  infLabel.AutoSize:=False;
  infLabel.WordWrap:=False;
  infLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(infPanel.Width), ScaleY(infPanel.Height));
  infLabel.Alignment:=paCenter;
  infLabel.Layout:=tlCenter;
  infLabel.Parent:=infPanel;
end;

procedure ShowInfoText(Index: Byte);
var
  cap: String;
begin
case Index of
  0: cap:='0 - ';
  1: cap:='1 - ';
  2: cap:='2 - ';
  3: cap:='3 - ';
  4: cap:='4 - ';
  5: cap:='5 - ';
  else begin
    if infPanel.Visible then infPanel.Visible:=False;
    Exit;
  end;
end;
  infLabel.Caption:=cap + WizardForm.ComponentsList.Items.Strings[Index];
  if not infPanel.Visible then infPanel.Visible:=True;
end;

procedure cmp_MouseEnter(Sender: TObject; X: Integer; Y: Integer; Index: Integer; Area: TItemArea);
begin
  ShowInfoText(Index);
end;

procedure cmp_MouseLeave(Sender: TObject);
begin
  infPanel.Visible:=False;
end;

procedure InitializeWizard;
begin
  with WizardForm do begin
    NextButton.Width:=ScaleX(0);
    OuterNotebook.Hide;
    Bevel.Hide;

  with ComponentsList do begin
    Left:=ScaleX(30);
    Height:=ScaleY(Height+47);
    Parent:=WizardForm;
    OnItemMouseMove:=@cmp_MouseEnter;
    OnMouseLeave:=@cmp_MouseLeave;
  end;
  CreateInfo;
 end;
end;
А можно пожалуйста подробнее, я просто новичок((( или готовый пример
 

Nemko

Дилетант
Модератор
Maxvell, ок, снизу Spoiler, там измененный пример с комментариями:

Код:
[Setup]
AppName=Test
AppVersion=1.5
DefaultDirName={sd}\Test

[Components]
Name: dlc_1; Description: Дополнение №1;
Name: dlc_2; Description: Дополнение №2;
Name: dlc_3; Description: Дополнение №3;
Name: dlc_4; Description: Дополнение №4;

[Code]
/////////////////////////////////////////////////////////////////////////////////////////////////////////
var // Объявляем переменные
  infPanel: TPanel;
  infLabel: TLabel;

procedure CreateInfo; // Создание TPanel и TLabel
begin
  infPanel:=TPanel.Create(nil);
  infPanel.SetBounds(ScaleX(42), ScaleY(225), ScaleX(413), ScaleY(50));
  infPanel.ParentBackground:=False;
  infPanel.Color:=clGray;
  infPanel.BorderStyle:=bsNone;
  infPanel.BevelOuter:=bvNone;
  infPanel.Parent:=WizardForm;
  infPanel.Visible:=False;

  infLabel:=TLabel.Create(nil);
  infLabel.AutoSize:=False;
  infLabel.WordWrap:=False;
  infLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(infPanel.Width), ScaleY(infPanel.Height));
  infLabel.Alignment:=taCenter;
  infLabel.Layout:=tlCenter;
  infLabel.Parent:=infPanel;
end;

procedure ShowInfoText(Index: Byte); // Процедура вывода текста в объект TLabel и последующие проявление TPanel
var
  cap: String;
begin
case Index of
  0: cap:='Установить 1-е DLC'; // здесь указываем текст для компонентов из списка
  1: cap:='Установить 2-е DLC'; // исчисление списка идет с 0 позиции
  2: cap:='Установить 3-е DLC';
  3: cap:='Установить 4-е DLC';
  else begin
    if infPanel.Visible then infPanel.Visible:=False; // если мы не указали выше компонент, то
    Exit;                                             // здесь выполняется скрытие TPanel и выход  из процедуры
  end;
end;
  infLabel.Caption:=cap;                               // если успешно, производится вывод
  if not infPanel.Visible then infPanel.Visible:=True; // и появление TPanel
end;

procedure cmp_MouseEnter(Sender: TObject; X: Integer; Y: Integer; Index: Integer; Area: TItemArea);
begin
  ShowInfoText(Index); // Передача Index'а текущего компонента при наведении
end;

procedure cmp_MouseLeave(Sender: TObject);
begin
  infPanel.Visible:=False; // Скрытие TPanel, при покидании курсора ComponentsList'a
end;
/////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure InitializeWizard;
begin
  WizardForm.ComponentsList.OnItemMouseMove:=@cmp_MouseEnter; // Подключаем наше событие
  WizardForm.ComponentsList.OnMouseLeave:=@cmp_MouseLeave;    // Подключаем наше событие
  CreateInfo; // Создаем наши компоненты
end;
 
Последнее редактирование:

Maxvell

Мимокрокодил
Maxvell, ок, снизу Spoiler, там измененный пример с комментариями:

Код:
[Setup]
AppName=Test
AppVersion=1.5
DefaultDirName={sd}\Test

[Components]
Name: dlc_1; Description: Дополнение №1;
Name: dlc_2; Description: Дополнение №2;
Name: dlc_3; Description: Дополнение №3;
Name: dlc_4; Description: Дополнение №4;

[Code]
/////////////////////////////////////////////////////////////////////////////////////////////////////////
var // Объявляем переменные
  infPanel: TPanel;
  infLabel: TLabel;

procedure CreateInfo; // Создание TPanel и TLabel
begin
  infPanel:=TPanel.Create(nil);
  infPanel.SetBounds(ScaleX(42), ScaleY(225), ScaleX(413), ScaleY(50));
  infPanel.ParentBackground:=False;
  infPanel.Color:=clGray;
  infPanel.BorderStyle:=bsNone;
  infPanel.BevelOuter:=bvNone;
  infPanel.Parent:=WizardForm;
  infPanel.Visible:=False;

  infLabel:=TLabel.Create(nil);
  infLabel.AutoSize:=False;
  infLabel.WordWrap:=False;
  infLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(infPanel.Width), ScaleY(infPanel.Height));
  infLabel.Alignment:=paCenter;
  infLabel.Layout:=tlCenter;
  infLabel.Parent:=infPanel;
end;

procedure ShowInfoText(Index: Byte); // Процедура вывода текста в объект TLabel и последующие проявление TPanel
var
  cap: String;
begin
case Index of
  0: cap:='Установить 1-е DLC'; // здесь указываем текст для компонентов из списка
  1: cap:='Установить 2-е DLC'; // исчисление списка идет с 0 позиции
  2: cap:='Установить 3-е DLC';
  3: cap:='Установить 4-е DLC';
  else begin
    if infPanel.Visible then infPanel.Visible:=False; // если мы не указали выше компонент, то
    Exit;                                             // здесь выполняется скрытие TPanel и выход  из процедуры
  end;
end;
  infLabel.Caption:=cap;                               // если успешно, производится вывод
  if not infPanel.Visible then infPanel.Visible:=True; // и появление TPanel
end;

procedure cmp_MouseEnter(Sender: TObject; X: Integer; Y: Integer; Index: Integer; Area: TItemArea);
begin
  ShowInfoText(Index); // Передача Index'а текущего компонента при наведении
end;

procedure cmp_MouseLeave(Sender: TObject);
begin
  infPanel.Visible:=False; // Скрытие TPanel, при покидании курсора ComponentsList'a
end;
/////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure InitializeWizard;
begin
  WizardForm.ComponentsList.OnItemMouseMove:=@cmp_MouseEnter; // Подключаем наше событие
  WizardForm.ComponentsList.OnMouseLeave:=@cmp_MouseLeave;    // Подключаем наше событие
  CreateInfo; // Создаем наши компоненты
end;
 

Вложения

Nemko

Дилетант
Модератор
Maxvell, закомментируйте данную строку(с выравниванием текста), либо устанавливайте Расширенную UNICODE версию Inno Setup, ибо у меня пашет:

12.png
 

Maxvell

Мимокрокодил
Maxvell, закомментируйте данную строку(с выравниванием текста), либо устанавливайте Расширенную UNICODE версию Inno Setup, ибо у меня пашет:

Все работает, большое спасибо))) Еще вопрос как убрать этот отступ между буквами??
 

Вложения

Сверху