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

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

Автор: SotM
Дата сообщения: 28.05.2008 08:32
AlexDJ666
А зачем тебе там прокрутка до создания списка?! Она ведь сама появляется когда элементов будет больше, чем может поместиться в одном окошке.
Автор: AlexDJ666
Дата сообщения: 28.05.2008 08:42
Genri, я меняю код по примеру:


Код:
//Memo :=TMemo.Create(WizardForm)
//Memo.SetBounds (231,1,288,303)
//Memo.Color :=clBtnFace
//Memo.Enabled :=False
//Memo.BorderStyle :=bsNone
//Memo.Parent :=Page.Surface

Memo := TRichEditViewer.Create(Page);
Memo.ScrollBars := ssVertical;
Memo.Parent := Page.Surface;
Memo.Lines.LoadFromFile(ExpandConstant('{tmp}\ReadMe.rtf'));
Автор: antifire
Дата сообщения: 28.05.2008 08:49
SotM Тома (DATA.001, DATA.002 и т.д.) также как и банарный файл, включающий информацию о их кол-ве формируются другой программой (собственной разработкой, но к сожалению не моей). В них находяться документы в word и pdf формате. они просматриваються программой которая сначала смотрит бинарный файл (где находиться структура каталогов), а при выборе для просмотра конкретного документа грузяться из файлов DATA.001, DATA.002 и т.д.
Автор: SotM
Дата сообщения: 28.05.2008 09:03
antifire
Насчет томов понятно.
Как чтение бинарных файлов сделать в Inno я не в курсе. Может нужно использовать какие нибудь внешние функции из dll, нужно хелп смотреть по MSDN.
Автор: AlexDJ666
Дата сообщения: 28.05.2008 09:10
SotM, не появляется, да и как она может появится, если у элементов заданы отступы сверху (top)?
Автор: SotM
Дата сообщения: 28.05.2008 10:22
AlexDJ666
Какие отступы? Отступы от чего?

В этом коде всё прекрасно работает. Как только элементов становится больше чем может поместиться в одном окне, то сразу появляется полоса прокрутки.


Код:
procedure InitializeWizard;
begin
    ListBox := TListBox.Create(WizardForm)
    ListBox.Left := 15
    ListBox.Top := 0
    ListBox.Width := 200
    ListBox.Height := 149
    ListBox.Parent := WizardForm;

for i := 1 to 40 do
begin
        ListBox.Items.Add( 'Line: ' + IntToStr( i ) );
end;

end;
Автор: antifire
Дата сообщения: 28.05.2008 10:44
SotM

Цитата:
antifire
В kernel32.dll можно найти такие функции:

HFILE OpenFile(
LPCSTR lpFileName, // pointer to filename
LPOFSTRUCT lpReOpenBuff, // pointer to buffer for file information
UINT uStyle // action and attributes
);

BOOL ReadFile(
HANDLE hFile, // handle of file to read
LPVOID lpBuffer, // address of buffer that receives data
DWORD nNumberOfBytesToRead, // number of bytes to read
LPDWORD lpNumberOfBytesRead, // address of number of bytes read
LPOVERLAPPED lpOverlapped // address of structure for data


Так. это уже радует. Но появляеться второй вопрос - как это подцепить к инсталятору?
Автор: alfonser
Дата сообщения: 28.05.2008 10:50
SotM

Цитата:
alfonser
Ты хоть сам понял что написал? Какие скины? Где посмотреть? Какие изменения?
Перефразируй свой вопрос, тут не все могут читать мысли.

Я имел ввиду изменнения внешнего вида инсталлятора. Есть скрипты от Kindly позволяющие изменять внешний вид инсталлятора. Как можно увидеть изменения вносимые мною в скрипт? (Расположение кнопок, их размер и т.д)
Автор: SotM
Дата сообщения: 28.05.2008 12:28
antifire
Пока не знаю, в inno походу нет поддержки указателей.
А в эти функции нужно передавать указатели.
Автор: antifire
Дата сообщения: 28.05.2008 12:56
SotM

Может есть альтернатива? Как можно подцепить библиотеки Delphi или VB? Для них легко найти готовые алгоритмы для чтения бинарника, к примеру для delphi [more]
var
f: file;
c: Char;
begin
AssignFile(f, 'c:\autoexec.bat');
Reset(f, 1);
while not Eof(f) do
begin
BlockRead(f, c, SizeOf(c));
{Теперь обрабатываем c}
end;
CloseFile(f);
end;[/more]
Хотя здесь наверно тож будут проблемы...

Добавлено:
SotM
По сути, Inno Setup должен читать бинарные файлы, так как установке, в папке с unins000.exe есть еще и unins000.dat, а это вроде бинарный файл.
Автор: SotM
Дата сообщения: 28.05.2008 14:49
antifire
Дык, сам Inno разумеется умеет читать/писать двоичные файлы, это и ежу понятно.
Автор видать посчитал, что это не так важно позволить пользователям самим обрабатывать файлы.

Если знаешь как делать библиотеки в Delphi, то можешь сам сделать, а потом их вызывать из скрипта в Inno

Автор: Genri
Дата сообщения: 28.05.2008 16:09
AlexDJ666 -- используй свойство [more=RTFText]
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: ReadMe1.rtf; Flags: dontcopy
Source: ReadMe2.rtf; Flags: dontcopy
Source: ReadMe3.rtf; Flags: dontcopy

[_Code]
var
Page: TWizardPage;
ListBox: TNewCheckListBox;
Memo: TRichEditViewer;
CheckLabel: TLabel;
MouseY: integer;

procedure CheckOnClick (Sender: TObject);
begin
if MouseY < ListBox.Items.Count then
ListBox.Checked[MouseY]:= Not(ListBox.Checked[MouseY]);
end;

procedure CheckMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
MouseY:= Y/ScaleY(16);
if MouseY < ListBox.Items.Count then
Memo.RTFText:= TStrings(ListBox.ItemObject[MouseY]).Text;
end;

Procedure InitializeWizard();
begin
ExtractTemporaryFile('ReadMe1.rtf');
ExtractTemporaryFile('ReadMe2.rtf');
ExtractTemporaryFile('ReadMe3.rtf');

Page:=CreateCustomPage(3, 'Интерфейс', 'Выберите компоненты, которые вы хотите установить.')

ListBox:= TNewCheckListBox.Create(Page);
with ListBox do
begin
Left := 15
Top := 0
Width := 200
Height := 149
Parent := Page.Surface
AddCheckBox('aaa', 'ddd', 0, True, True, False, True, TStringList.Create);
AddCheckBox('bbb', 'eee', 0, True, True, False, True, TStringList.Create);
AddCheckBox('ccc', 'fff', 0, True, True, False, True, TStringList.Create);

TStrings(ItemObject[0]).LoadFromFile(ExpandConstant('{tmp}\ReadMe1.rtf'));
TStrings(ItemObject[1]).LoadFromFile(ExpandConstant('{tmp}\ReadMe2.rtf'));
TStrings(ItemObject[2]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
end;

Memo:= TRichEditViewer.Create(Page);
with Memo do
begin
Left := ListBox.Left + ListBox.Width + 8;
Top := ListBox.Top;
Width := ListBox.Width
Height := ListBox.Height
Color := clBtnFace
Enabled := False
BorderStyle := bsNone
Parent := Page.Surface
end;

CheckLabel:= TLabel.Create(Page);
with CheckLabel do
begin
Width :=ListBox.Width
Height :=ListBox.Height
Autosize :=False
Transparent :=True
OnMouseMove :=@CheckMouseMove
OnClick :=@CheckOnClick
Parent :=ListBox
end;
end; [/more]

antifire, SotM -- для работы с бинарными файлами можно использовать [more=TFileStream]
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: MyProg.exe; DestDir: {app}

[_Code]
procedure WriteToFile();
var
FS: TFileStream;
str: string;
i: integer;
begin
str:= '';
for i:= 0 to 10 do str:= str + IntToStr(Random(10)); // сгенерили рандомную строку
FS := TFileStream.Create(ExpandConstant('{app}\MyProg.exe'), fmOpenReadWrite); // открыли файл
try
FS.Seek(1572,soFromBeginning); // установили курсор по смещению 1572 от начала файла
FS.WriteBuffer(str, Length(str)); // записали рандомную строку в позицию курсора
finally
FS.Free; // освободили файл
end;
end;

procedure ReadFromFile();
var
FS: TFileStream;
str: string;
i: integer;
begin
str:= StringOfChar(' ', 10); // подготовили буфер для чтения длиной 10 байт
FS := TFileStream.Create(ExpandConstant('{app}\MyProg.exe'), fmOpenReadWrite); // открыли файл
try
FS.Seek(1572,soFromBeginning); // установили курсор по смещению 1572 от начала файла
FS.ReadBuffer(str, Length(str)); // считали в буфер 10 байт от позиции курсора
MsgBox(str, mbInformation, MB_OK); // вывели сообщение с тем, что считали
finally
FS.Free; // освободили файл
end;
end;

procedure DeinitializeSetup();
begin
ReadFromFile(); // прочитали строку из файла
WriteToFile(); // записали строку в файл
ReadFromFile(); // опять прочитали
end; [/more]

Автор: SotM
Дата сообщения: 28.05.2008 16:19
Блин, там просто упоминание оказывается есть о нём и больше ничего.
Придется отдельно скачивать инфу об этих классах...

Кстати, а где именно можно скачать инфу? А то ссылки из хелпа на сайт Борланда уже не работают.


Автор: antifire
Дата сообщения: 28.05.2008 16:26
Genri и SotM
Спасибо, попробую разобраться.
Автор: Genri
Дата сообщения: 28.05.2008 16:43
SotM -- http://www.freepascal.org/docs-html/rtl/classes/tfilestream.html
Автор: antifire
Дата сообщения: 28.05.2008 16:45
Genri
Не совсем ясно что происходит в примере, если я правильно понял то происходит проверка на целосность? Можно с комментами пример?
Автор: Genri
Дата сообщения: 28.05.2008 17:05
antifire -- никаких проверок. Просто пример чтения и записи в бинарный файл.
ЗЫ. Комментарии добавил.
Автор: Vitalliano
Дата сообщения: 28.05.2008 22:15
Ребята есть вот такой [more=скрипт]procedure InitializeWizard();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 0;
with WizardSmallBitmapImage do begin
Left := 439;
Top := 0;
Height := 58;
Width := 58;
end;
with PageNameLabel do begin
Width := Width - 0;
Visible:= True
Left := Left + 0;
end;
with PageDescriptionLabel do begin
Width := Width - 0;
Visible:= True
Left := Left + 0;
// Редактирование изображение и первой страници установщика (Welcome)
with WizardForm do begin
with MainPanel do
Height := Height - 0;
with WizardBitmapImage do begin
Left := 0;
Top := 0;
Width := 196;
Height := 314;
end;
with WelcomeLabel1 do begin
Top := 16;
Left := 215;
Width := 275;
Height := 53;
ParentFont := False;
ShowAccelChar := False;
TabOrder := 0;
WordWrap := True;
AutoSize := True;
Visible:= True;
end;
with WelcomeLabel2 do begin
Top := 90;
Left := 215;
Width := 275;
Height := 57;
ParentFont := False;
ShowAccelChar := False;
TabOrder := 1;
WordWrap := True;
AutoSize := True;
Visible:= True;
end;
with WizardForm do begin
with MainPanel do
Height := Height - 0;
with WizardBitmapImage do begin // <- тут необходимо както сделать финш-изображение
Left := 30;
Top := 0;
Width := 196;
Height := 314;
end;
with FinishedHeadingLabel do begin
Top := 16;
Left := 215;
Width := 275;
Height := 121;
ParentFont := False;
ShowAccelChar := False;
TabOrder := 0;
WordWrap := True;
AutoSize := True;
Visible:= True;
end;
with FinishedLabel do begin
Top := 110;
Left := 215;
Width := 275;
Height := 121;
ParentFont := False;
ShowAccelChar := False;
TabOrder := 0;
WordWrap := True;
AutoSize := True;
Visible:= True;
end;
end;
end;[/more].

Мне необходимо что-бы изображение на финишной странице было иного размера чем стандарт, таким как и WizardBitmapImage в скрипте.

Заранее благодарю.
Автор: Sampron
Дата сообщения: 28.05.2008 22:24
Новые скины для Inno Setup с использованием библиотеки: http://isskin.codejock.com/

Добавлено:
Vitalliano
Добавь это:
with WizardBitmapImage2 do begin
Left := 0;
Top := 0;
Width := 196;
Height := 314;
end;
Автор: alfonser
Дата сообщения: 28.05.2008 23:46
Sampron
Спасибо за ответ!

Цитата:
Новые скины для Inno Setup с использованием библиотеки

По этой ссылки скачиваются 4 скина версии 1.02. Написано, что была ещё версия 1.01, только ссылки на неё нет.А что эта за прога устанавливается ( на скинах) ISSkin version 1.5 ?
Автор: Sampron
Дата сообщения: 29.05.2008 00:23
alfonser

Цитата:
По этой ссылки скачиваются 4 скина.А остальные как скачать?

Здесь можно несколько скинов скачать: http://www.vistaglory.com/themes.php
Темы под Windows (*.msstyles) тоже можно использовать.
С помощью какой проги делать скины я пока незнаю, но можно ручками в ресурсах с помощью Restorator.
Едиственное что не скинируется это чекбоксы и радиобаттоны в NewCheckListBox.

Цитата:
И что эта за прога устанавливается ( на скинах) ISSkin version 1.5 ?

Это ты про что?

Добавлено:
Здесь ещё скины есть: http://browse.deviantart.com/customization/skins/windows/visualstyle/?order=9&alltime=yes
Автор: Vitalliano
Дата сообщения: 29.05.2008 00:37
Sampron

Огромная благодарность, буду пробовать!
Автор: alfonser
Дата сообщения: 29.05.2008 00:58
Sampron
Спасибо за ссылки! На Deviantart давно зарегестрирован но в этот раздел не разу не заглядывал. Больше для шопа искал интересное.

Цитата:
Цитата:И что эта за прога устанавливается ( на скинах) ISSkin version 1.5 ?

Это ты про что?

Обрати внимание а скине написано, что будет установленна ISSkin version 1.5 и т.д.
Еще раз спасибо за скины!


Цитата:
но можно ручками в ресурсах с помощью Restorator

В ресурсах винды?
Автор: Sampron
Дата сообщения: 29.05.2008 01:24
alfonser

Цитата:
В ресурсах винды?

В ресурсах *.msstyles файлов, которые включаешь в инсталл.
Автор: Victor_Dobrov
Дата сообщения: 29.05.2008 01:59
Sampron
Цитата:
Новые скины для Inno Setup с использованием библиотеки ISSkin.dll

Эти скины добавляют к инсталлятору 300 Кб и более, а CoronaSkin в мин. комплектации только 40 Кб.
Автор: Sampron
Дата сообщения: 29.05.2008 02:15
Victor_Dobrov

Цитата:
Эти скины добавляют к инсталлятору 300 Кб и более

Это потому что в примере в файл Office2007.cjstyles входит 4 скина и помимо этого там много лишнего мусора (текстур контролов которых в инно сетап нет), потому и нужно ручками править.
Если думать про минимальный размер инсталла то скины лучше вообще не использовать.
Автор: antifire
Дата сообщения: 29.05.2008 08:30
Genri
Спасибо!

Добавлено:
Genri
Вроде все работает, но выводит значение типа char, а нужно в integer. [more=кусок кода..] procedure ReadFromFile();
var
FS: TFileStream;
str: string;
i: integer;
begin
str:= StringOfChar(' ',10);
FS := TFileStream.Create(ExpandConstant('{src}\struct.dat'), fmOpenReadWrite);
try
FS.Seek(21,soFromBeginning);
FS.ReadBuffer(str, Length(str));
MsgBox(str, mbInformation, MB_OK);
finally
FS.Free;
end;
end;
procedure DeinitializeSetup();
begin
ReadFromFile();
end;
[/more]Как это можно сделать?
И второй вопрос - этот код задействуется после установки. Как сделать так, чтоб он срабатывал перед началом копирования установочных файлов? Вот основная часть [more]
[Setup]
AppName=proga 2.1
AppVerName=proga 2.1
DefaultDirName={pf}\my_programm
DefaultGroupName=my_programm
UninstallDisplayIcon={app}\Uninstall.exe
Compression=lzma
SolidCompression=true

[Languages]
Name: russian; MessagesFile: compiler:Russian.isl

[Files]
Source: proga.ini; DestDir: {app}
Source: {src}\proga.exe; DestDir: {app}; Flags: external
Source: {src}\struct.dat; DestDir: {app}; Flags: external
Source: {src}\DATA.*; DestDir: {app}; Flags: external

[Icons]
Name: {group}\TCNTI; Filename: {app}\proga.exe; WorkingDir: {app}
Name: {commondesktop}\Новая программа; Filename: {app}\proga.exe; WorkingDir: {app}
Name: {group}\Uninstall; Filename: {app}\unins000.exe

[Run]
Filename: {app}\proga.exe; Description: Запустить оболочку пользователя; Flags: postinstall shellexec skipifsilent

[UninstallDelete]
Name: {pf}\my_programm; Type: filesandordirs

[/more]
Автор: SotM
Дата сообщения: 29.05.2008 13:23
Genri
Спасибо за ссылку на сайт.

All
На этом сайте есть help в формате PDF, чтобы можно было читать в оффлайне.
Автор: Genri
Дата сообщения: 29.05.2008 13:34
antifire -- если я правильно понял вопросы:
1. Inno Setup Help: Pascal Scripting: Support Functions Reference: String functions: StrToInt
Пример:
i:= StrToInt(str);

2. Inno Setup Help: Pascal Scripting: Event Functions: CurStepChanged
Пример:
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then ReadFromFile();
end;

Добавлено:
SotM -- Если говорить именно об встроенном языке Inno Setup, то ближе будет Essential Pascal (Линк на него есть и на сайте инно). Следует только иметь ввиду, что некоторые вещи в инно не реализованы.
Автор: antifire
Дата сообщения: 29.05.2008 15:01
Genri

Что касаеться пункта 1:
проблема в том, что TFileStream считывает информацию в буфер как тип char, и если i:= StrToInt(str) то в значение i записываеться символ а не число, как должно быть, соответственно при выполнении выдает ошибку несоответствие типов (Type mismatch) Если бы можно считывать в буфер как integer или byte, было бы отлично.



Добавлено:
Genri
при просмотре 21 позиции от начала бинарного файла с помощью HEX редактора:
Type Value
BYTE 5
USHORT 5
UINT 5
ULONGLONG 12884901893
char ''
wchar_t L''
SHORT 5
INT 5

Поэтому TFileStream считывает информацию в буфер как '' и при установке выдает что типы не соответствуют...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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