Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126

kotyarko@fb
05-03-2015, 18:56
проверка по индексу компонента »
Нуу, это какой-то грубый пример. Рациональнее уже сделать циклом:
Procedure CurStepChanged(CurStep: TSetupStep);
var
I: Integer;
begin
if CurStep = ssDone then
begin
for I := 0 to WizardForm.ComponentsList.Items.Count - 1 do
begin
if WizardForm.ComponentsList.Checked[I] then
SaveStringToFile(ExpandConstant('{app}\components.txt'), WizardForm.ComponentsList.ItemCaption[I] + #13#10, True);
end;
end;
end;

diman_21Ru
05-03-2015, 18:58
Dodakaedr, Вы меня может не поняли компонент надо чтобы выделялся при нажатие на любое место этой строчки а не только при нажатие на галочку или флажок.

Dodakaedr
05-03-2015, 19:02
diman_21Ru, На скрине видно что строка полностью выделена.

kotyarko@fb, можно и так, но в этом случаи весь индекс компонент листа попадает в список, в моем примере только определенный компонент. Грубый, но правильный.
[Setup]
AppName=Apps
AppVersion=1.0
DefaultDirName={pf}\Apps

[Components]
Name: Mode; Description: mode; Types: custom; flags: fixed
Name: Mode/SPOnly; Description: SPOnly; Flags: disablenouninstallwarning
Name: Mode/MPOnly; Description: MPOnly; Flags: disablenouninstallwarning
Name: Mode2; Description: mode; Types: custom; flags: fixed
Name: Mode2/SPOnly2; Description: SPOnly2; Flags: disablenouninstallwarning
Name: Mode2/MPOnly2; Description: MPOnly2; Flags: disablenouninstallwarning


Type: files; Name: "{app}\components.txt"

[Co[u]de]
procedure CreateComponentListDone();
begin
if WizardForm.ComponentsList.Checked[1] then
SaveStringToFile(ExpandConstant('{app}\components.txt'), 'SPOnly' + #13#10, False);
if WizardForm.ComponentsList.Checked[2] then
SaveStringToFile(ExpandConstant('{app}\components.txt'), 'MPOnly' + #13#10, True);
if WizardForm.ComponentsList.Checked[4] then
SaveStringToFile(ExpandConstant('{app}\components.txt'), 'SPOnly2' + #13#10, True);
if WizardForm.ComponentsList.Checked[5] then
SaveStringToFile(ExpandConstant('{app}\components.txt'), 'MPOnly2' + #13#10, True);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
CreateComponentListDone();
end;
end;

kotyarko@fb
05-03-2015, 19:07
можно и так, но в этом случаи весь индекс компонент листа попадает в список, в моем примере только определенный компонент. Грубый, но правильный. »
Правильный, но не в данном случае. Речь шла о всех выбранных компонентах.

Dodakaedr
05-03-2015, 19:08
kotyarko@fb,
Привет форумчане.
Как сделать, чтобы после установки в указанной папке создавался текстовый файл, в который будет выводится список установленных компонентов?
Заранее спасибо за ответ. »

kotyarko@fb
05-03-2015, 19:13
Dodakaedr, внимательнее посмотрите мои примеры.
В первом (http://forum.oszone.net/post-2479228-236.html) будут записываться только компоненты из ReadyMemo (туда попадают только выбранные).
Во втором (http://forum.oszone.net/post-2479254-241.html) идёт проверка, выбран ли компонент вообще:
if WizardForm.ComponentsList.Checked[i] then

Dodakaedr
05-03-2015, 19:24
kotyarko@fb, второй более-менее а почему сразу не предложили? У меня просто без заголовков компонентов(родителя). А первый? http://i67.fastpic.ru/big/2015/0305/4b/a3b4e2ebb289ca0408f1d3834597914b.jpg

kotyarko@fb
05-03-2015, 19:37
второй более-менее а почему сразу не предложили? У меня просто без заголовков компонентов(родителя). А первый? »
Первый я написал как "самый простой способ". А что не так?

Dodakaedr
05-03-2015, 19:38
А что не так? »
Как по мне много лишнего. А что не понятно?

kotyarko@fb
05-03-2015, 19:44
Как по мне много лишнего. А что не понятно? »
Папка установки и тип. Не думаю, что это много.
В любом случае, найдутся те, кому понадобятся эти способы. Так что лишними они тут не будут.

El Sanchez
05-03-2015, 20:23
Как сделать, чтобы после установки в указанной папке создавался текстовый файл, в который будет выводится список установленных компонентов? »
Kashtan007,
procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssPostInstall:
SaveStringToFile(ExpandConstant('{app}\components.txt'), WizardSelectedComponents(False), False);
end;
end;

На скрине видно что строка полностью выделена. »
Dodakaedr, ему не выделять строку надо, а сделать так, чтобы выбрать строку можно было не только по клику мыши по изображению чекбокса/радио, но и по клику по самой строке. WantTabs в True как раз и позволяет такое сделать. Только он не признается куда поделось стандартное свойство WantTabs, может компилятор ругается совсем не на WantTabs, а на что-то другое, только ж ни ругани, ни скрина не представлено.

Dodakaedr
05-03-2015, 21:57
но и по клику по самой строке. »
я ж про то же Видео (http://rghost.ru/private/8NRXXvnjZ/0032a3ca7840304c04f9da1b963a5e8f)

El Sanchez
06-03-2015, 09:44
я ж про то же»
Dodakaedr, diman_21Ru, пардон, ввел всех в заблуждение. Пока сам себя не проверишь, ответа не получишь. Все дело в свойстве TreeViewStyle, которое есть у листа из китайской версии. При значении True (либо в секции Setup директива ComponentsListTVStyle=yes) наблюдаем подобное поведение, WantTabs немного из другой оперы. Для решения проблемы нужно самому обработать мышиные события:

type
TCheckListBoxHelper = record
Index: Integer;
ItemArea: TItemArea;
end;

var
CLBHelper: TCheckListBoxHelper;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure ComponentsListOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
with TNewCheckListBox(Sender) do
begin
if (Button = mbLeft) and (CLBHelper.ItemArea = iaItem) and ItemEnabled[CLBHelper.Index] then
case State[CLBHelper.Index] of
cbUnchecked,
cbGrayed:
CheckItem(CLBHelper.Index, coCheckWithChildren);
cbChecked:
CheckItem(CLBHelper.Index, coUncheck);
end;
end;
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure ComponentsListOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
begin
CLBHelper.Index := Index;
CLBHelper.ItemArea := Area;
end;

///////////////////////////
procedure InitializeWizard;
begin
with WizardForm.ComponentsList do
begin
if TreeViewStyle then
begin
OnMouseDown := @ComponentsListOnMouseDown;
OnItemMouseMove := @ComponentsListOnItemMouseMove;
end;
end;
end;

diman_21Ru
06-03-2015, 11:36
El Sanchez, Не помогло (

nik1967
06-03-2015, 11:37
El Sanchez, замечательно! Только я позволил себе немного подправить скрипт:
type
TCheckListBoxHelper = record
Index: Integer;
ItemArea: TItemArea;
end;

var
CLBHelper: TCheckListBoxHelper;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure ComponentsListOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (Button = mbLeft) and (CLBHelper.ItemArea = iaItem) then
begin
with TNewCheckListBox(Sender) do
begin
if ItemEnabled[CLBHelper.Index] then
begin
case State[CLBHelper.Index] of
cbUnchecked,
cbGrayed:
CheckItem(CLBHelper.Index, coCheckWithChildren);
cbChecked:
CheckItem(CLBHelper.Index, coUncheck);
end;
end;
end;
end;
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure ComponentsListOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
begin
CLBHelper.Index := Index;
CLBHelper.ItemArea := Area;
end;

///////////////////////////
procedure InitializeWizard;
begin
with WizardForm.ComponentsList do
begin
if TreeViewStyle then
begin
OnMouseDown := @ComponentsListOnMouseDown;
OnItemMouseMove := @ComponentsListOnItemMouseMove;
end;
end;
end;
а то компоненты, у которых стоит флаг Fixed, тоже были кликабельны.

diman_21Ru
06-03-2015, 11:39
Как не крути не работает может кто помочь в личку скину .

nik1967, Поможешь? в личку скину скрипт

diman_21Ru
06-03-2015, 12:06
Как снять галочку Filename: "{app}\WoTLauncher.exe"; Description: "Запустить World Of Tanks после установки?"; Flags: postinstall shellexec;

nik1967
06-03-2015, 12:11
diman_21Ru, я так понимаю, секция [Run]? Добавь флаг unchecked - в справку заглядывай! И да, проверь личку.

Кстати, как то diman_21Ru задавал вопрос о переключении 3 языков на лету. Переделал пример - сделал его с комбобоксом - теперь языки можно переключать не по кругу, а выборочно. Может кому пригодится.
ЭТО ТОЛЬКО ПРИМЕР! Что бы переключение происходило для всех надписей - все эти надписи нужно переделать!
[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}
;ShowLanguageDialog=auto

[Languages]
Name: "eng"; MessagesFile: "compiler:Languages\English.isl"
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "ukr"; MessagesFile: "compiler:Languages\Ukrainian.isl"

[CustomMessages]
; Русский
rusButtonBack=< &Назад
rusButtonNext=&Далее >
rusButtonCancel=Отмена
rusSetupWindowTitle=Установка — %1
rusWelcomeLabel1=Вас приветствует Мастер установки %1
rusWelcomeLabel2=Программа установит %1, версия %2 на Ваш компьютер.%n%nРекомендуется закрыть все прочие приложения перед тем, как продолжить.%n%nНажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти из программы установки.

; English
engButtonBack=< &Back
engButtonNext=&Next >
engButtonCancel=Cancel
engSetupWindowTitle=Setup — %1
engWelcomeLabel1=Welcome to the %1 Setup Wizard
engWelcomeLabel2=This will install %1 version %2 on your computer.%n%nIt is recommended that you close all other applications before continuing.%n%nClick Next to continue, or Cancel to exit Setup.

; Ukrainian
ukrButtonBack=< &Назад
ukrButtonNext=&Далi >
ukrButtonCancel=Cкасування
ukrSetupWindowTitle=Встановити — %1
ukrWelcomeLabel1=Вас вітає Майстер установки %1
ukrWelcomeLabel2=Програма встановить %1, версія %2 на Ваш комп'ютер.%n%nРекомендуємо закрити всі інші програми перед тим, як продовжити.%n%nНатисніть «Далі», щоб продовжити, або «Скасувати», щоб вийти з програми установки.

[Code]
var
lang: String;
ComboBox1: TNewComboBox;

procedure ChangeLang();
begin
WizardForm.BackButton.Caption:= CustomMessage(lang+'ButtonBack');
WizardForm.NextButton.Caption:= CustomMessage(lang+'ButtonNext');
WizardForm.CancelButton.Caption:= CustomMessage(lang+'ButtonCancel');
WizardForm.Caption:= FmtMessage(CustomMessage(lang+'SetupWindowTitle'), ['{#SetupSetting('AppName')}']);
WizardForm.WelcomeLabel1.Caption:= FmtMessage(CustomMessage(lang+'WelcomeLabel1'), ['{#SetupSetting('AppName')}']);
WizardForm.WelcomeLabel2.Caption:= FmtMessage(CustomMessage(lang+'WelcomeLabel2'), ['{#SetupSetting('AppName')}', '{#SetupSetting('AppVersion')}']);
end;

procedure ComboBox1OnChange(Sender: TObject);
begin
case TNewComboBox(Sender).ItemIndex of
0: lang:= 'rus';
1: lang:= 'eng';
2: lang:= 'ukr';
end;
ChangeLang();
end;

procedure InitializeWizard;
begin
ComboBox1:= TNewComboBox.Create(WizardForm);
with ComboBox1 do begin
Parent:= WizardForm;
Style:= csDropDownList;
SetBounds(ScaleX(10),WizardForm.CancelButton.Top,WizardForm.CancelButton.Width,WizardForm.CancelButt on.Height);
OnChange:= @ComboBox1OnChange;
Items.Add('Русский');
Items.Add('English');
Items.Add('Українська');
end;

if ActiveLanguage='rus' then begin
lang:= 'rus';
ComboBox1.ItemIndex:= 0;
end else
if ActiveLanguage='eng' then begin
lang:= 'eng';
ComboBox1.ItemIndex:= 1;
end else
if ActiveLanguage='ukr' then begin
lang:= 'ukr';
ComboBox1.ItemIndex:= 2;
end;
end;

diman_21Ru
06-03-2015, 13:10
nik1967, Вообще гуд

nik1967, А можно эту кнопку сделать более красивше ?

nik1967, И как можно размер изменить кнопки?

nik1967
06-03-2015, 13:40
А можно эту кнопку сделать более красивше ? »
Не понятно.
И как можно размер изменить кнопки? »
Можно изменить только ширину.




© OSzone.net 2001-2012