Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: NumberI
Дата сообщения: 12.09.2011 14:00
ShadowHawk
там не работает Name: {code:gets|org[i]}; Description: {code:gets|org[i]}
я исправил на Name: {code:gets|{#i}}; Description: {code:gets|{#i}};
и определение размерности массива неправильное
но суть не в этом, как мне пояснили "Нужно явно указывать имена типов/компонентов, параметр Name: не должен содержать символов {}, компилятор считает, что {code:gets|{#i}} - это имя типа, а не функция"
Потому что при компиляции пишет что название типа в компонентах не совпадает с именем компонентов
В общем я хз что сейчас делать...
Автор: ShadowHawk
Дата сообщения: 12.09.2011 14:12
NumberI

К сожалению на мой основной вопрос ты так и не ответил
Код "ниже" отдельно работает у тебя или нет?

[more]
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.


[Code]

function GetCountSection(FileNameINI: String): Integer;
var
S: TArrayOfString;
F: String;
i: Integer;
begin
Result := 0;
if FileExists(FileNameINI) then
begin
LoadStringsFromFile(FileNameINI, S);
for i := 0 to GetArrayLength(S)-1 do
begin
if (Pos('[', S[i]) = 1) and (Pos(']', S[i]) = Length(S[i]) ) then
begin
Result := Result + 1;
end;
end;
end;
end;


procedure MyButtonOnClick(Sender: TObject);
begin
MsgBox(IntToStr( GetCountSection('tmp.ini') ) , mbInformation, MB_OK);
end;

procedure PanelButtons();
var
MyButton: TButton;
MyPanel: TPanel;
Begin
MyPanel := TPanel.Create( WizardForm );
with MyPanel do
begin
Parent := WizardForm;
Left := WizardForm.WelcomePage.Left;
Top := WizardForm.WelcomePage.Height + ScaleX(1);
Width := WizardForm.WelcomePage.Width- 200;
Height := WizardForm.ClientHeight - WizardForm.WelcomePage.Height - 2;
Align := alBottom;
End;

WizardForm.NextButton.Parent := MyPanel;
WizardForm.CancelButton.Parent := MyPanel;
WizardForm.BackButton.Parent := MyPanel;
WizardForm.NextButton.Top := WizardForm.NextButton.Top - (WizardForm.WelcomePage.Height + ScaleX(1));
WizardForm.CancelButton.Top := WizardForm.CancelButton.Top - (WizardForm.WelcomePage.Height + ScaleX(1));
WizardForm.BackButton.Top := WizardForm.BackButton.Top - (WizardForm.WelcomePage.Height + ScaleX(1));

MyButton:=TButton.Create( WizardForm );
with MyButton do
begin
Parent:=MyPanel;
Top:=WizardForm.BackButton.Top;
Left:=WizardForm.BackButton.Left - WizardForm.BackButton.Width - 30;
Width:=WizardForm.BackButton.Width + 30;
Height:=WizardForm.BackButton.Height;
Caption:='Сколько секций';
OnClick:=@MyButtonOnClick;
Font.Name:= 'arial';
Font.Size:= 9;
Font.Style:= [fsBold, fsItalic];
end;
end;

procedure InitializeWizard();
begin
PanelButtons();
end;

[/more]
Автор: NumberI
Дата сообщения: 12.09.2011 14:32
ShadowHawk
да, работает, спасибо

а вот как с справиться с той проблемой...
Автор: Mataes
Дата сообщения: 12.09.2011 18:45
vistaw, спасибо
а про это: можно ли как то получить строку, которую пишет inno в Deselected Components? кто нибудь подскажет?
Автор: PRIZ2rak
Дата сообщения: 12.09.2011 21:05
log1stable"
Цитата:
PRIZ2rak, Вот, что-то похожее на твою просьбу. Правда, скрипт немного хиленько выглядит внутри, т.к. создавал через Form Designer, а потом переписывал в InitializeWizard. Внешний вид - норм.
"

Оочень сырой код, выбираю прогу 2, появляются какие-то левые страницы проги 1 и 3.. Эх, как-то все плачевно

Может кто ещё чем поможет? http://forum.ru-board.com/topic.cgi?forum=5&topic=36421&start=1860#7
Автор: Mataes
Дата сообщения: 12.09.2011 21:30
по DirExistsWarning есть вопрос: как то можно задавать значение из [Code]?
делаю DirExistsWarning=IsExistWarn(), но ругается на синтаксис
Автор: ShadowHawk
Дата сообщения: 13.09.2011 09:23
NumberI


Цитата:
а вот как с справиться с той проблемой...


Будем копать дальше

попробуй так:
[more]
//...
[Types]
#define FileNameINI "tmp.ini"
#define FileHandle
#define FileLine
#define CountSection 0
#dim org[100]
#define i

#sub ProcessFileLine
#if (Pos("[", FileLine) == 1) && (Pos(']', FileLine) == Len(FileLine) )
#expr org[CountSection] = FileLine
#expr CountSection = CountSection + 1
#endif
#endsub

#for {FileHandle = FileOpen(FileNameINI); \
FileHandle && !FileEof(FileHandle); FileLine = FileRead(FileHandle)} \
ProcessFileLine
#if FileHandle
#expr FileClose(FileHandle)
#endif

#pragma message 'countSection = '+str(countSection)

#sub AddTypes
#pragma message org[i]
Name: org[i]; Description: org[i]
#endsub

#for {i = 0; i < countSection; i++} AddTypes
//...
[/more]

Автор: NumberI
Дата сообщения: 13.09.2011 15:15
ShadowHawk
объясни что значат эти строчки
#pragma message 'countSection = '+str(countSection)

#sub AddTypes
#pragma message org[i]

и еще можно ли в подпрограмме #sub AddTypes присваивать значения вызовом функций?
ну а больше всего интересует, как обратиться к #countSection из кода?

если пишу

function InitializeSetup(): Boolean;
begin
for I := 1 to {#CountSection} do

то CountSection = 0, то есть как написано в define

и еще, у меня org[CountSection] не равняется FileLine, а находится ниже, запись "org=eco3", можно ли в подпрограмму вставить функцию наподобие GetIniString ???

Name: org[i] выводится как "org[i]", т.е. не значение
Автор: ShadowHawk
Дата сообщения: 13.09.2011 18:10
NumberI

Давай попробуем в контексте проверить - работает код или нет
Я добавил его к уже работающему скрипту ( у тебя старый работал, думаю что и этот тоже должен сработать)

[more]
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={code:MyConst}\My Program
OutputDir=.

[Types]
#define FileNameINI "tmp.ini"
#define FileHandle
#define FileLine
#define CountSection 0
#dim org[100]
#define i

#sub ProcessFileLine
// #pragma message str(Pos('[',FileLine))+" "+ str(Pos(']',FileLine))+" "+ str(len(FileLine))
#if (Pos("[", FileLine) == 1) && (Pos(']', FileLine) == Len(FileLine) )
#expr org[CountSection] = FileLine
#expr CountSection = CountSection + 1

#endif
#endsub

#for {FileHandle = FileOpen(FileNameINI); \
FileHandle && !FileEof(FileHandle); FileLine = FileRead(FileHandle)} \
ProcessFileLine
#if FileHandle
#expr FileClose(FileHandle)
#endif

#pragma message 'countSection = '+str(countSection)

#sub AddTypes
#pragma message org[i]
Name: org[i]; Description: org[i]
#endsub

#for {i = 0; i < countSection; i++} AddTypes


[code]
function MyConst(Param: String): String;
begin
Log('MyConst(''' + Param + ''') called');
Result := ExpandConstant('{pf}');
end;

function GCS: String;
var
S: TArrayOfString;
F: String;
i,n: Integer;
FileNameINI: string;
begin
FileNameINI := 'tmp.ini';
n := 0
Result := '';
if FileExists(FileNameINI) then
begin
LoadStringsFromFile(FileNameINI, S);
for i := 0 to GetArrayLength(S)-1 do
begin
if (Pos('[', S[i]) = 1) and (Pos(']', S[i]) = Length(S[i]) ) then
begin
n := n + 1;
end;
end;
end;
Result := IntToStr(n);

end;


procedure MyButtonOnClick(Sender: TObject);
begin
MsgBox( GCS, mbInformation, MB_OK);
end;

procedure PanelButtons();
var
MyButton: TButton;
MyPanel: TPanel;
Begin
MyPanel := TPanel.Create( WizardForm );
with MyPanel do
begin
Parent := WizardForm;
Left := WizardForm.WelcomePage.Left;
Top := WizardForm.WelcomePage.Height + ScaleX(1);
Width := WizardForm.WelcomePage.Width- 200;
Height := WizardForm.ClientHeight - WizardForm.WelcomePage.Height - 2;
Align := alBottom;
End;

WizardForm.NextButton.Parent := MyPanel;
WizardForm.CancelButton.Parent := MyPanel;
WizardForm.BackButton.Parent := MyPanel;
WizardForm.NextButton.Top := WizardForm.NextButton.Top - (WizardForm.WelcomePage.Height + ScaleX(1));
WizardForm.CancelButton.Top := WizardForm.CancelButton.Top - (WizardForm.WelcomePage.Height + ScaleX(1));
WizardForm.BackButton.Top := WizardForm.BackButton.Top - (WizardForm.WelcomePage.Height + ScaleX(1));

MyButton:=TButton.Create( WizardForm );
with MyButton do
begin
Parent:=MyPanel;
Top:=WizardForm.BackButton.Top;
Left:=WizardForm.BackButton.Left - WizardForm.BackButton.Width - 30;
Width:=WizardForm.BackButton.Width + 30;
Height:=WizardForm.BackButton.Height;
Caption:='Сколько секций';
OnClick:=@MyButtonOnClick;
Font.Name:= 'arial';
Font.Size:= 9;
Font.Style:= [fsBold, fsItalic];
end;
end;



procedure InitializeWizard();
begin
MsgBox ( '{#countSection}', mbInformation, MB_OK);
PanelButtons();
end;
[/more]



Цитата:
ShadowHawk
объясни что значат эти строчки
#pragma message 'countSection = '+str(countSection)


это значит компилятор выдаст строчку типа:
[ISPP] [32] countSection = 3
скажем так просто проверка что же мы получили в результате промежуточных вычислений.



т.е. имя переменной и ее значение.

Но честно говоря я так и не понял чего ты хочешь добиться, и что ты будешь делать с полученным кол-вом секций?
Почему бы тебе не рассказать?
Автор: Mataes
Дата сообщения: 13.09.2011 23:20
подскажите, вот есть WizardForm.ComponentsList хочу узнать имена компонентов указанные в [Components], которые я не отметил. Делаю цикл с этим все нормлаьно, а как получить нужное мне имя а не то описание которое отобращается?
Автор: VendettaDeToli
Дата сообщения: 14.09.2011 00:34
Помогите пожалуйста, может есть у кого ISVideo v0.1

Цитата:
Это плагин позволит вам проигрывать видео файлы в Inno Setup
Автор: NumberI
Дата сообщения: 14.09.2011 09:31
ShadowHawk
я раньше писал

суть следующая, есть ини файл вида:
[Org1]
org=Roseco
ex1=1
ex2=1

[Org2]
org=roseco2
ex1=
ex2=1

где org - название организации, ex - название программы, исходя из org добавляем в Types организацию, а затем узнав в каких организациях программа = 1 добавляем их в Types компонентов, т.е. должно получиться что-то наподобие
[Types]
Name: Roseco; Description: Roseco
Name: roseco2; Description: roseco2

[Components]
Name: n1; Description: gdsgdg ; Types: Roseco
Name: n2; Description: dsfgsgypes; Types: Roseco roseco2
Автор: ShadowHawk
Дата сообщения: 14.09.2011 11:02
NumberI

Понятно, задачка не про игрушку - быстро дешево качественно - выберите ДВА


Жаль что не показал еще связку с [files]

Есть вопросы:
про ini файл


Цитата:
[Org1]
org=Roseco
ex1=1
ex2=1

[Org2]
org=roseco2
ex1=
ex2=1


Как появляется ini файл?

[OrgN] - пусть 'N' это номер фирм, сколько их? Кол-во известно? Или нет, т.е. например, меняется в процессе изменения ini файла? Или оно статично и список фирм [OrgN] всегда один и тот же.

org=Roseco - Теже вопросы про название

ex1= - 'пусто' это значит что у этой фирмы этой программы нет? + те же вопросы про кол-во программ?
ex2=1

Я веду к тому, что возможно комбобокс с выбором вариантов и компонентлист с выбором программ возможно можно настроить без парса ini файла! Либо можно это сделать частично. Ну и без привязки к [files] не обойтись. Т.е. если что то известно то ЭТО проще ввести в массив и использовать его а не создавать динамически, например все фирмы в 1 массив все программы в другой типы создать заранее а мудрить уже на этапе создания компонентлиста и привязки его к типам, файлам и т.д.
Автор: NumberI
Дата сообщения: 14.09.2011 12:15
ShadowHawk
ини файл кладется в папку с сетапом, создан чтобы добавлять в установку организации с различными настройками программ, заново не компилируя установщик

Количество фирм неизвестно, поэтому и выясняется количество секций, они совпадают
секции будут такого вида как написано, т.е. Org1, Org2, Org3... Org10

название организаций неизвестно, названия программ даны, т.е. идут списком после каждой секции, "1" - присутствует, "" - отсутствует
Автор: sergey3695
Дата сообщения: 14.09.2011 16:56

Цитата:
Помогите пожалуйста, может есть у кого ISVideo v0.1

Для этого есть Xvid (проигрывание .avi форматов.)
Автор: ShadowHawk
Дата сообщения: 14.09.2011 18:09
NumberI


Цитата:
Количество фирм неизвестно, поэтому и выясняется количество секций, они совпадают
секции будут такого вида как написано, т.е. Org1, Org2, Org3... Org10


Можно сделать вывод что в каждой компании лежит ini файл с информацией обо всех фирмах?
Мне кажется (ИМХО) это не правильно.
А лучше уж в каждой компании (если так нужен ini файл) держать ini файл только с инфой по текущей фирме
Ну а в нем тогда будет только несколько строк о установленнон наборе и тот можно превратить в одну бинарную строчку типо #0110, т.е. первая и четвертая программы не установлены, а вторая и третья установлены. Но и это думаю не совсем корректно - а если файл грохнули - что устанавливать?

У IS есть ключи которые по умолчанию запоминают предыдущий комплект утсановленных компонентов - может им воспользоваться?

Автор: Dark_Delphin
Дата сообщения: 14.09.2011 18:52
Всем добрый вечер!

У меня вот такая штука получается.
Все кнопке на стекле нормально смотрятся,



а вот эта кнопка плохо.


Подскажите как поправить.
Заранее спасибо.
Автор: vistaw
Дата сообщения: 14.09.2011 19:09
Dark_Delphin
Кнопку отмены ISDone внеси в список Win7
iswin7_add_button(WizardForm.MyCancelButton.Handle);
Автор: Dark_Delphin
Дата сообщения: 14.09.2011 19:11
vistaw
Дак я внес её и она вот так(
Автор: R3Pa4eK
Дата сообщения: 14.09.2011 19:14
Dark_Delphin
Создавай её в InitializeWizard, а не в CurStepChanged.
Автор: Dark_Delphin
Дата сообщения: 14.09.2011 19:20

А кнопка всёровно так(


Код: iswin7_add_button(WizardForm.BackButton.Handle);
iswin7_add_button(WizardForm.NextButton.Handle);
iswin7_add_button(WizardForm.CancelButton.Handle);
iswin7_add_button(WizardForm.CancelButton.Handle);
// iswin7_add_button(WizardForm.MyCancelButton.Handle);
// &#207;&#224;&#240;&#224;&#236;&#229;&#242;&#240; True &#237;&#229; &#242;&#240;&#238;&#227;&#224;&#242;&#252; &#238;&#237; &#228;&#235;&#255; htuos ))
iswin7_add_glass(WizardForm.Handle, 0, 0, 0, 47, True);




WizardForm.MainPanel.Width := ScaleX(673);
WizardForm.OuterNotebook.Width := ScaleX(673);
WizardForm.OuterNotebook.Height := ScaleY(336);
WizardForm.Bevel1.Width := ScaleX(673);
WizardForm.Bevel1.Height := ScaleY(0);

WizardForm.CancelButton.Left := ScaleX(574);
WizardForm.CancelButton.Top := ScaleY(351);
WizardForm.CancelButton.Font.Name := 'Georgia';
WizardForm.CancelButton.ParentFont := False;
WizardForm.CancelButton.Font.Size := 8;
Автор: VendettaDeToli
Дата сообщения: 14.09.2011 22:49

Цитата:
Для этого есть Xvid (проигрывание .avi форматов.)

sergey3695 Если можно ссылочку...
Автор: sergey3695
Дата сообщения: 15.09.2011 17:46
VendettaDeToli
в лс
Автор: Gnom3
Дата сообщения: 15.09.2011 18:23
Dark_Delphin

Цитата:
// iswin7_add_button(WizardForm.MyCancelButton.Handle);

Две ошибки:
// - исключает строчку из работы кода.
WizardForm. - дописывается только к родным кнопкам инсталлятора.
В твоем случае нужно так:

Код: iswin7_add_button(MyCancelButton.Handle);
Автор: Dark_Delphin
Дата сообщения: 15.09.2011 19:36
Gnom3
Я добавил строку которую вы написали в InitializeWizard и выскакивает вот такая ошибочка:




Автор: Gnom3
Дата сообщения: 15.09.2011 19:51
Dark_Delphin
Дык, сперва создать нужно кнопочку, потом уже добавлять. такое сообщение говорит о том, что объекта, с которым собираешся работать, не существует.
Автор: Dark_Delphin
Дата сообщения: 15.09.2011 20:45
Gnom3

Спасибо большое) Я понял теперь)

Автор: crysis1830
Дата сообщения: 15.09.2011 21:50
помогите пожалуйста можно ли подвинуть к центру эту сточку или удалить?

Автор: Vitalliano
Дата сообщения: 16.09.2011 00:05
Здравствуйте!

На форуме уже задавали этот вопрос, но я ненашол ответ. Пожалуйста помогите.

Windows 7

Столкнулся с проблемой установки ярлыка в меню пуск. На предыдущих версиях Windows это была директория {userappdata}\Microsoft\Internet Explorer\Quick Launch. В Windows 7 все по другому, теперь это ярлык в директории "{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\", добавить сам ярлык проблем нет, еще нужно внести информацию в реестр HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband; ValueType: binary; ValueName: Favorites; ValueData:. А тут уже черт ногу сломит. В данном ключе имеется инфа о всех ярлыках закрепленных в панели задач, получается нужно вигрузить информацию из данного ключа, добавить свою инфу о ярлыке и все скопом внести на место. И тут я столкнулся с проблемой, как это сделать? Может есть способ проще, прошу помогите.
Автор: Genri
Дата сообщения: 16.09.2011 00:42
Vitalliano

Цитата:
нужно вигрузить информацию из данного ключа, добавить свою инфу о ярлыке и все скопом внести на место.
-- поищи в хелпе {olddata}

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

Предыдущая тема: поиск


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.