2016-03-05 4 views
1
[Components] 
Name: "Slasher"; Description: "Dagon Slasher"; Types: Slasher Full 
Name: "Frankenstein"; Description: "Dagon Frankenstein"; Types: Frankenstein Full 

[Types] 
Name: "Full"; Description: "Dagon Video Tools" 
Name: "Slasher"; Description: "Dagon Slasher" 
Name: "Frankenstein"; Description: "Dagon FrankenStein" 

[Tasks] 
Name: "Debug"; Description: "Nothing"; Components: not Slasher 
Name: "Vid"; Description: "Install Extra Codecs for Frankenstein"; Flags: unchecked; Components: not Slasher 

[Code] 
var 
    Warning: TNewStaticText; 

procedure InitializeWizard; 
begin 
    Warning := TNewStaticText.Create(WizardForm); 
    Warning.Parent := WizardForm.SelectTasksPage; 
    Warning.Visible := False; 
    Warning.AutoSize := False; 
    Warning.SetBounds(
    WizardForm.TasksList.Left, 
    WizardForm.TasksList.Top + WizardForm.TasksList.Height, 
    WizardForm.TasksList.Width, 
    50 
); 
    Warning.Font.Color := clRed; 
    Warning.Caption := 'Warning: This will result in a non-functional "Join in FrankenStein" button in the Tools Menu.'; 
end; 

Я использовал еще один удивительный кусок code by TLama. Проблема в том, что мне нужно, чтобы заметка была видимой, когда пользователь выбирает задачу и скрывается в противном случае (на той же странице).Inno Setup - Условно скрыть/показать статический текст на основе выбора задачи

ответ

1

Необходимо обработать событие WizardForm.TasksList.OnClickCheck и обновить видимость ярлыка Warning.

var 
    Warning: TNewStaticText; 

procedure TasksListClickCheck(Sender: TObject); 
begin 
    Warning.Visible := 
    { This (and the task index below) has to be kept in sync with the expression } 
    { in "Components" parameter of the respective task. } 
    { Though note that in your specific case the test } 
    { is redundant as when "Slasher" is selected, you have no tasks, } 
    { and the "Tasks" page is completely skipped, so you do not even get here. } 
    (not IsComponentSelected('Slasher')) and 
    WizardForm.TasksList.Checked[0]; 
end; 

procedure InitializeWizard; 
begin 
    Warning := TNewStaticText.Create(WizardForm); 
    ... 
    { Update Warning label visibility on task selection change } 
    WizardForm.TasksList.OnClickCheck := @TasksListClickCheck 
end; 

procedure CurPageChanged(CurPageID: Integer); 
begin 
    if CurPageID = wpSelectTasks then 
    begin 
    // Update initial visibility 
    TasksListClickCheck(WizardForm.TasksList); 
    end; 
end; 

Task selected

Task unselected


Боковые ноты:

  • не прописывать код высоту до фиксированной 50. Уменьшите его с помощью DPI: ScaleY(50).
  • Вы должны установить Warning.WordWrap := True, так как подпись не соответствует ширине страницы.
  • Вы должны уменьшить толщину TasksList, так как этикетка не подходит под список. Вам не хватает WizardForm.TasksList.Height := WizardForm.TasksList.Height - NoteHeight; из кода @ TLama. Еще раз отметим, что ему не хватает масштабирования NoteHeight.
const 
    NoteHeight = 50; 

procedure InitializeWizard; 
begin 
    WizardForm.TasksList.Height := WizardForm.TasksList.Height - ScaleY(NoteHeight); 

    Warning := TNewStaticText.Create(WizardForm); 
    Warning.Parent := WizardForm.SelectTasksPage; 
    Warning.AutoSize := False; 
    Warning.WordWrap := True; 
    Warning.SetBounds(
    WizardForm.TasksList.Left, 
    WizardForm.TasksList.Top + WizardForm.TasksList.Height, 
    WizardForm.TasksList.Width, 
    ScaleY(NoteHeight) 
); 
    Warning.Font.Color := clRed; 
    { Update Warning label visibility on task selection change } 
    WizardForm.TasksList.OnClickCheck := @TasksListClickCheck 
    Warning.Caption := 
    'Warning: This will result in a non-functional "Join in FrankenStein" button ' + 
    'in the Tools Menu.'; 
end; 
+1

Да! Огромное спасибо. После последнего редактирования он работает (первый, очевидно, повлиял и на другие комбинации компонентов)! Просто так глупо, что решение так просто, и я запутался во всех номерах/комбинациях и т. Д. Клянусь, в тот день, когда я смогу сделать это все в моей голове, поставить его в скрипт будет намного проще. –