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

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

Автор: elapse
Дата сообщения: 25.07.2008 16:39
antifire, [more=подробнее][no]
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

[Files]
Source: prog.ini; DestDir: {app}; Flags: ignoreversion

[INI]
Filename: {app}\prog.ini; Section: Directories; Key: Structures; String: {code:AddDirBackslash};
Filename: {app}\prog.ini; Section: Directories; Key: Bodies; String: {code:AddDirBackslash};

[Code]
function AddDirBackslash(Param: String): String;
begin
Result := AddBackslash(ExpandConstant('{app}'));
end;[/no][/more].
Автор: ComradG
Дата сообщения: 25.07.2008 19:47
Victor Dobrov, ты не совсем догнал про что я. А именно: на странице выбора компонентов в NSIS есть такие элементы:
ListBox, ComboBox и GroupBox, в котором при наведении курсора на элемент в ListBox'е в GroupBox появляется его описание. Теперь понял. У меня проблемы возникают именно с GroupBox'ом - все остальное могу написать на автопилоте.
Автор: abasov
Дата сообщения: 25.07.2008 19:58
Не нашел в поиске...Подскажите пожалуйста
как в MsgBox сделать активный URL (http://...)?
Автор: Sampron
Дата сообщения: 25.07.2008 20:05
ComradG
В прошлых ветках [more=это]
[Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName=C:\AppName

[Files]
;Source: 1.exe; DestDir: {app}; Check: Checked1
;Source: 2.exe; DestDir: {app}; Check: Checked2
;Source: 3.exe; DestDir: {app}; Check: Checked3

[_Code]
Var
Page: TWizardPage;
Text1,Text2,Text3,Text4: TNewStaticText;
Panel: TPanel;
ListBox: TListBox;
Check1,Check2,Check3: TCheckBox;
NoChecks,Label1,Label2,Label3: TLabel;

Function Checked1: Boolean;
begin
Result:=Check1.Checked
end;

Function Checked2: Boolean;
begin
Result:=Check2.Checked
end;

Function Checked3: Boolean;
begin
Result:=Check3.Checked
end;

Procedure Check1OnClick (Sender: TObject);
begin
Check1.Checked:=Not(Check1.Checked)
end;

Procedure Check2OnClick (Sender: TObject);
begin
Check2.Checked:=Not(Check2.Checked)
end;

Procedure Check3OnClick (Sender: TObject);
begin
Check3.Checked:=Not(Check3.Checked)
end;

procedure Check1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание компонента 1'
end;

procedure Check2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание компонента 2'
end;

procedure Check3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание компонента 3'
end;

procedure NoChecksMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=False
Text4.Caption:='Наведите курсор мыши на название компонента, чтобы прочесть его описание.'
end;

Procedure InitializeWizard();
begin
Page:=CreateCustomPage(2, 'Компоненты устанавливаемой программы', 'Выберите компоненты, которые вы хотите установить.')

Text1:=TNewStaticText.Create(Page)
Text1.Left:=0
Text1.Top:=0
Text1.Width:=417
Text1.Height:=28
Text1.AutoSize:=False
Text1.WordWrap:=True
Text1.Caption:='Выберите компоненты программы, которые вы хотите установить. Нажмите на кнопку "Далее" для продолжения.'
Text1.Parent:=Page.Surface

Text2:=TNewStaticText.Create(Page)
Text2.Left:=0
Text2.Top:=63
Text2.Width:=130
Text2.Height:=42
Text2.AutoSize:=False
Text2.WordWrap:=True
Text2.Caption:='Выберите компоненты программы для установки:'
Text2.Parent:=Page.Surface

Panel:=TPanel.Create(Page)
Panel.Left:=287
Panel.Top:=60
Panel.Width:=130
Panel.Height:=160
Panel.BevelInner:=bvLowered
Panel.Parent:=Page.Surface

Text3:=TNewStaticText.Create(Page)
Text3.Left:=293
Text3.Top:=54
Text3.Font.Color:=clBlue
Text3.Caption:='Описание'
Text3.Parent:=Page.Surface

Text4:=TNewStaticText.Create(Page)
Text4.Left:=4
Text4.Top:=10
Text4.Width:=122
Text4.Height:=140
Text4.AutoSize:=False
Text4.WordWrap:=True
Text4.Parent:=Panel

NoChecks:=TLabel.Create(Page)
NoChecks.Width:=WizardForm.Width
NoChecks.Height:=WizardForm.Height
NoChecks.Autosize:=False
NoChecks.Transparent:=True
NoChecks.OnMouseMove:=@NoChecksMouseMove
NoChecks.Parent:=Page.Surface

ListBox:=TListBox.Create(Page)
ListBox.Left:=135
ListBox.Top:=60
ListBox.Width:=140
ListBox.Height:=160
ListBox.Parent:=Page.Surface

Check1:=TCheckBox.Create(Page)
Check1.Left:=2
Check1.Top:=0
Check1.Checked:=True
Check1.Parent:=ListBox

Check2:=TCheckBox.Create(Page)
Check2.Left:=2
Check2.Top:=16
Check2.Checked:=True
Check2.Parent:=ListBox

Check3:=TCheckBox.Create(Page)
Check3.Left:=2
Check3.Top:=32
Check3.Checked:=True
Check3.Parent:=ListBox

Label1:=TLabel.Create(Page)
Label1.Left:=16
Label1.Top:=2
Label1.Caption:='Компонент 1'
Label1.OnClick:=@Check1OnClick
Label1.OnMouseMove:=@Check1MouseMove
Label1.Parent:=Check1

Label2:=TLabel.Create(Page)
Label2.Left:=16
Label2.Top:=2
Label2.Caption:='Компонент 2'
Label2.OnClick:=@Check2OnClick
Label2.OnMouseMove:=@Check2MouseMove
Label2.Parent:=Check2

Label3:=TLabel.Create(Page)
Label3.Left:=16
Label3.Top:=2
Label3.Caption:='Компонент 3'
Label3.OnClick:=@Check3OnClick
Label3.OnMouseMove:=@Check3MouseMove
Label3.Parent:=Check3
end;
[/more] уже обсуждалось.
Автор: ComradG
Дата сообщения: 25.07.2008 21:47
Sampron, спасибо. Кстати, куда выкладывать свои проги (дополнения к inno)? Я понимаю, что еще до готовности их еще далеко и все же.
Автор: Artem_Butenko
Дата сообщения: 25.07.2008 23:24
Здравствуйте ценители Inno Setup. Большое спасибо Sampron. Извиняюсь, честное слово не знал, что в Inno Setup отсутствует контрол GroupBox (думал по умолчанию он отключен), который есть в Wise Installer, NSIS и некоторых др. инсталляционных системах. Но, тем не менее, Inno на мой взгляд быстрее и функциональнее. Хотелось бы вернуться к вопросу о реализации слайд-шоу из .jpeg-файлов по процентам прогресс-бара (а не по таймеру с помощью библиотеки isxbb.dll!!!). В руководстве от Kindly есть подобный пример («Слайд-шоу без использования dll через функции BeforeInstall или AfterInstall»), но в нём смена изображений осуществляется при копировании определённых файлов. Данный вариант в целом удачный, но что делать, если инсталлируется всего два крупных игровых файла, а все остальное это dll-модули, исполнительные файлы и прочее. Таким образом, изображения будут сменяться через неравные промежутки времени. Помогите решить данную задачу стандартными средствами Inno. Или всё же придется прибегнуть к использованию сторонних библиотек.
Автор: Victor_Dobrov
Дата сообщения: 26.07.2008 01:01
Artem_Butenko, слайдшоу по процентам прогрессбара неудобно: у одного картинка может быть видна 3 сек, у другого 30.
Автор: Artem_Butenko
Дата сообщения: 26.07.2008 04:30
Уважаемый Виктор, в целом с Вами согласен, хотя подобное слайд-шоу (из .jpeg по процентам прогресс-бара) я видел в инсталляторе Quake 4 от 1С. Притом продолжительность показа слайдов и общий функционал одинаков на любом компьютере. Помогите все-таки с примером, заодно шапка пополнится новым скриптом!
Автор: Chanka
Дата сообщения: 26.07.2008 21:14
Victor_Dobrov

Тут есть проблема вот с этим кодом

http://forum.ru-board.com/topic.cgi?forum=5&topic=24767&start=1481&limit=1&m=1#1

если поставить вот эту картинку http://www.rapidshare.ru/740816 , то она неправильно отображается.
Автор: htuos
Дата сообщения: 26.07.2008 23:21
Chanka
картинка не качается
Автор: Victor_Dobrov
Дата сообщения: 27.07.2008 00:45
Chanka, вот исправленный [more=скрипт загрузки jpg]
#define Background "Background.jpg"
#define LoadImageLib "ImgGdiplus.dll"    ;или IPicture.dll, ImgCtx.dll - идут с программой SBRunScr, или здесь: url=http://victor-dobrov.narod.ru/ImgGdiplus.dll

[Setup]
AppName=Picture to Background
AppVerName=Picture to Background
CreateAppDir=false
OutputBaseFilename=PictureToBackground
OutputDir=.

[Files]
Source: {#Background}; Flags: dontcopy noencryption
Source: {#LoadImageLib}; Flags: dontcopy noencryption

[Code]
type hDC = Longint; TSize = record CX, CY: UInt; end; TagMonitorInfo = record cbSize: DWord; Monitor, Work: TRect; dwFlags: DWord; end;
var MonitorInfo: TagMonitorInfo; BackgroundForm: TForm; BackgroundImage: TBitmapImage; Mem: array[0..31] of Integer; n: Integer; FS: TFileStream; Size, PicSize: TSize;
const SRCCOPY = $CC0020;

function GetDC(Wnd: HWnd): hDC; external 'GetDC@user32 stdcall delayload';
function CreateCompatibleDC(DC: hDC): hDC; external 'CreateCompatibleDC@gdi32 stdcall delayload';
function CreateCompatibleBitmap(DC: hDC; Width, Height: Integer): HBitmap; external 'CreateCompatibleBitmap@gdi32 stdcall delayload';
function SelectObject(DC: hDC; p2: LongWord): LongWord; external 'SelectObject@gdi32 stdcall delayload';
function ReleaseDC(Wnd: HWnd; DC: hDC): Longint; external 'ReleaseDC@user32 stdcall delayload';
function DeleteDC(DC: hDC): Boolean; external 'DeleteDC@gdi32 stdcall delayload';
function LoadPicture(Sw: TSize; name: PChar): Longint; external '_LoadPicture@8@files:{#LoadImageLib} stdcall delayload';
procedure StretchImg(Image, hDC: Longint; X,Y,XE,YE, srcX,srcY,srcXE,srcYE: Integer; dwROP: DWord); external '_StretchImg@44@files:{#LoadImageLib} stdcall delayload';
procedure ReleaseImg(LoadedImage: Longint); external '_ReleaseImg@4@files:{#LoadImageLib} stdcall delayload';
function ShowWindow(hWnd, nCmdShow: LongWord): LongWord; external 'ShowWindow@user32';
function GetMonitorInfo(hMonitor: Integer; var lpMonitorInfo: TagMonitorInfo): Boolean; external 'GetMonitorInfoA@user32';

Function ReadFileTag(File, onSet: String; var Tag: String; Buffer: Integer; First: Bool): Integer; var Str: String; Ind, Len: Integer; Begin
    Result:= -1;    FS:= TFileStream.Create(File, fmOpenRead);
if FS.Size < Buffer then Len:= FS.Size - Length(onSet) else Len:= Buffer - Length(onSet)
    for Ind:= 0 to Len do begin    SetLength(Str, Length(onSet))
        FS.Seek(Ind, soFromBeginning)
        FS.ReadBuffer(Str, Length(Str))    //    FS.Position - в следующей позиции
        if Str = onSet then begin Result:= Ind; FS.ReadBuffer(Tag, Length(Tag)); if First then Break; end;
    end;    FS.Free;
End;

Function GetPictureSize(File: String): TSize;    var Buffer: String;    Begin
    Result.CX:= 0; Result.CY:= 0; SetLength(Buffer, $100)    { буфер чтения бинарных данных}
Case Uppercase(ExtractFileExt(File)) of
'.JPG','.JPEG': begin    { тэг JFIF: #FFC2 или #FFC0}
        Mem[11]:= 6; Mem[12]:= 4;    { позиция значений высоты и ширины в формате MotorolaWord}
        n:= ReadFileTag(File, Chr($FF)+Chr($C2), Buffer, $6000, true)    { загрузить в строку данные, если заголовок тэга найден}
        if n < 0 then n:= ReadFileTag(File, Chr($FF)+Chr($C1), Buffer, $4000, true)
        if n < 0 then n:= ReadFileTag(File, Chr($FF)+Chr($C0), Buffer, $8000, false); end;    { расширенный заголовок}
'.BMP':    begin
        Mem[11]:=18; Mem[12]:=22;    n:= ReadFileTag(File, 'BM', Buffer, $200, true); end;
'.GIF':    begin
        Mem[11]:= 4; Mem[12]:= 6;    n:= ReadFileTag(File,'GIF8', Buffer, $200, true); end;
'.PNG':    begin
        Mem[11]:=15; Mem[12]:=19;    n:= ReadFileTag(File, 'PNG', Buffer, $200, true); end;
end;
        if n < 0 then begin MsgBox('Unknown Picture Size!', mbError, MB_OK); end;
    if (Uppercase(ExtractFileExt(File)) = '.BMP') or (Uppercase(ExtractFileExt(File)) = '.GIF') then n:= -1 else n:= 1 { для Bmp и Gif менять мл. и ст. байт}
Result.CX:= Ord(Buffer[Mem[11]]) shl 8 + Ord(Buffer[Mem[11]+n]); Result.CY:= Ord(Buffer[Mem[12]]) shl 8 + Ord(Buffer[Mem[12]+n])
End;

Procedure PictureToBitmap(Parent: TWinControl; Bitmap: TBitmapImage; File: String); var PicStream, MemDC, WinDC: hDC; tmpBitmap: HBitmap; Begin
    Size.CX:= Bitmap.Width; Size.CY:= Bitmap.Height;
    PicSize:= GetPictureSize(File)
    PicStream:= LoadPicture(Size, File);
    WinDC:= GetDC(Parent.Handle);
    MemDC:= CreateCompatibleDC(WinDC);
    tmpBitmap:= CreateCompatibleBitmap(WinDC, Size.CX, Size.CY);
    SelectObject(MemDC, tmpBitmap);    { чтобы рисовать, нужно выбрать битмап в контекст, но напрямую не рисуется, поэтому используется временный}
    StretchImg(PicStream, MemDC, 0, 0, Size.CX, Size.CY, 0, 0, PicSize.CX, PicSize.CY, SRCCOPY);
    Bitmap.Bitmap.Handle:= tmpBitmap;
DeleteDC(MemDC); ReleaseDC(Parent.Handle, WinDC); ReleaseImg(PicStream); Parent.Invalidate;
End;

Procedure BackgroundOnActivate(Sender: TObject); Begin if WizardForm.Visible then WizardForm.Show End;
Procedure BackgroundOnResize(Sender: TObject); Begin
    PictureToBitmap(BackgroundForm, BackgroundImage, ExpandConstant('{tmp}\' + ExtractFileName('{#Background}')));
    if WizardForm.Visible then WizardForm.Show
End;

Procedure InitializeWizard; Begin
    ExtractTemporaryFile(ExtractFileName('{#Background}'));
BackgroundForm:= TForm.Create(nil)
    BackgroundForm.Caption:= WizardForm.Caption
    BackgroundForm.BorderStyle:= bsNone    { убрать для показа заголовка}
//    BackgroundForm.OnResize:= @BackgroundOnResize;
    BackgroundForm.OnActivate:= @BackgroundOnActivate;
MonitorInfo.cbSize:= SizeOf(MonitorInfo); GetMonitorInfo(1, MonitorInfo)
BackgroundImage:= TBitmapImage.Create(BackgroundForm);
    BackgroundImage.SetBounds(0,0, MonitorInfo.Monitor.Right, MonitorInfo.Monitor.Bottom)
    BackgroundImage.Align:= alClient;
//    BackgroundImage.Stretch:= True;
    BackgroundImage.Enabled:= False;
    BackgroundImage.Parent:= BackgroundForm;
    PictureToBitmap(BackgroundForm, BackgroundImage, ExpandConstant('{tmp}\' + ExtractFileName('{#Background}')));
    ShowWindow(BackgroundForm.Handle, sw_ShowMaximized)    // фоновое окно на полный экран
End;

Procedure DeinitializeSetup; Begin BackgroundForm.Free; End;
[/more], укажи свою картинку в ключе Background и проверь с новым вариантом.
Автор: Chanka
Дата сообщения: 27.07.2008 08:34
Victor_Dobrov

Всё работает. Большое пасиба

Victor_Dobrov

Тут такое дело. Вот использую еще одну картинку http://www.rapidshare.ru/741011 с таким же разрешением что и предыдущую и опять неправильно отображается
Автор: Victor_Dobrov
Дата сообщения: 27.07.2008 12:46
Chanka, ну так сконвертируй например через ACDSee jpeg в jpeg. И твой файл не качается.
Автор: Chanka
Дата сообщения: 27.07.2008 13:04
Victor_Dobrov

Да, после конвентирования заработало. Извиняюсь за беспокойство
Но если всё же будет желание посмотреть на этот файл, вот перезалитая ссылка :
http://rapidshare.com/files/132797055/Background.zip.html
Автор: ZheKA767
Дата сообщения: 27.07.2008 15:25
Народ подскажите как в инсталлятор внедрить серийный номер и поле ввода было разбито на ячейки как в InstallShield.
Автор: chrome3
Дата сообщения: 27.07.2008 18:51
Кто может подсказать как сделать в innosetup
Идет подготовка к запуску установки

Автор: ComradG
Дата сообщения: 27.07.2008 21:57
Пардон за трабл, но я тут кое-чаво основательно подзабыл в Паскале (вот что значит крепко подсесть на C++ ). Напомните, плиз, как правильно вяжутся компоненты FolderTreeView и DirEdit на странице выбора директории.
Автор: Artem_Butenko
Дата сообщения: 27.07.2008 22:42
Здравствуйте товарищи. Извиняюсь, что в третий раз задаю один и тот же вопрос. Подскажите, как все-таки реализовать в Inno Setup слайд-шоу по процентам прогресс-бара из .jpeg. Заранее очень благодарен.
Автор: arsenal2
Дата сообщения: 27.07.2008 22:42
ZheKA767
В шапке есть ссылка на коллекцию скриптов, там вариант:
[more=код][Code]
var NewPage: TWizardPage; TopText: TLabel; Edit1,Edit2,Edit3,Edit4,Edit5: TEdit;

const MB_ICONINFORMATION = $40; MB_ICONEXCLAMATION = $30; MB_ICONQUESTION = $20; MB_ICONSTOP = $10; MB_ICONNONE = $0;

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

procedure SerialEdit1OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Length(Edit1.Text) = 5 then WizardForm.ActiveControl := Edit2
end;

procedure SerialEdit2OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// if Length(Edit2.Text) = 0 then WizardForm.ActiveControl := Edit1
if Length(Edit2.Text) = 5 then WizardForm.ActiveControl := Edit3
end;

procedure SerialEdit3OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// if Length(Edit3.Text) = 0 then WizardForm.ActiveControl := Edit2
if Length(Edit3.Text) = 5 then WizardForm.ActiveControl := Edit4
end;

procedure SerialEdit4OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// if Length(Edit4.Text) = 0 then WizardForm.ActiveControl := Edit3
if Length(Edit4.Text) = 5 then WizardForm.ActiveControl := Edit5
end;

procedure SerialEdit5OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
// if Length(Edit5.Text) = 0 then WizardForm.ActiveControl := Edit4
end;

procedure SerialPage;
begin
NewPage:=CreateCustomPage(wpWelcome, 'Ввод кода', 'бла бла бла и т.д. ')

TopText:=TLabel.Create(NewPage)
TopText.Left:=0
TopText.Top:=0
TopText.Width:=417
TopText.Height:=28
TopText.AutoSize:=False
TopText.WordWrap:=True
TopText.Caption:='Введите код, отпечатанный на последней странице обложки Руководства пользователя или на упаковке диска.'
TopText.Parent:=NewPage.Surface

Edit1:=TEdit.Create(NewPage)
Edit1.Left:=0
Edit1.Top:=60
Edit1.Width:=60
Edit1.Height:=21
Edit1.AutoSize:=False
Edit1.MaxLength:=5
Edit1.Font.Size:=12
Edit1.Font.Style:=[fsBold]
Edit1.Font.Name:='Arial'
Edit1.Parent:=NewPage.Surface
Edit1.OnKeyUp := @SerialEdit1OnKeyUp

Edit2:=TEdit.Create(NewPage)
Edit2.Left:=70
Edit2.Top:=60
Edit2.Width:=60
Edit2.Height:=21
Edit2.AutoSize:=False
Edit2.MaxLength:=5
Edit2.Font.Size:=12
Edit2.Font.Style:=[fsBold]
Edit2.Font.Name:='Arial'
Edit2.Parent:=NewPage.Surface
Edit2.OnKeyUp := @SerialEdit2OnKeyUp

Edit3:=TEdit.Create(NewPage)
Edit3.Left:=140
Edit3.Top:=60
Edit3.Width:=60
Edit3.Height:=21
Edit3.AutoSize:=False
Edit3.MaxLength:=5
Edit3.Font.Size:=12
Edit3.Font.Style:=[fsBold]
Edit3.Font.Name:='Arial'
Edit3.Parent:=NewPage.Surface
Edit3.OnKeyUp := @SerialEdit3OnKeyUp

Edit4:=TEdit.Create(NewPage)
Edit4.Left:=210
Edit4.Top:=60
Edit4.Width:=60
Edit4.Height:=21
Edit4.AutoSize:=False
Edit4.MaxLength:=5
Edit4.Font.Size:=12
Edit4.Font.Style:=[fsBold]
Edit4.Font.Name:='Arial'
Edit4.Parent:=NewPage.Surface
Edit4.OnKeyUp := @SerialEdit4OnKeyUp

Edit5:=TEdit.Create(NewPage)
Edit5.Left:=280
Edit5.Top:=60
Edit5.Width:=60
Edit5.Height:=21
Edit5.AutoSize:=False
Edit5.MaxLength:=5
Edit5.Font.Size:=12
Edit5.Font.Style:=[fsBold]
Edit5.Font.Name:='Arial'
Edit5.Parent:=NewPage.Surface
Edit5.OnKeyUp := @SerialEdit5OnKeyUp
end;

procedure InitializeWizard();
begin
SerialPage
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
hWnd: Integer;
begin
Result:=True
if CurPageID = NewPage.ID then
begin
Result:=Edit1.Text = '11111'
Result:=Edit2.Text = '22222'
Result:=Edit3.Text = '33333'
Result:=Edit4.Text = '44444'
Result:=Edit5.Text = '55555'
if not Result then
begin
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
MessageBox(hwnd, 'Неверный серийный номер.', 'Ошибка!', MB_ICONINFORMATION)
Result:=False
end
end
end;[/more]
Автор: Sampron
Дата сообщения: 27.07.2008 22:46
ComradG
Примерно [more=так]
[Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={pf}\MyProg

[_Code]
var
DirTreeView: TFolderTreeView;

procedure DirFolderChange(Sender: TObject);
Begin
WizardForm.DirEdit.Text:=AddBackslash(DirTreeView.Directory) + 'MyProg'
end;

Procedure InitializeWizard;
begin
DirTreeView:=TFolderTreeView.Create(WizardForm)
DirTreeView.SetBounds(0,100,417,110)
DirTreeView.OnChange:=@DirFolderChange
DirTreeView.Parent:=WizardForm.SelectDirPage
//DirTreeView.ChangeDirectory(ExpandConstant('{pf}'), True)
end;
[/more]
Автор: ComradG
Дата сообщения: 27.07.2008 23:04

Цитата:
Примерно так

Спасибо.

Добавлено:
О! нашел еще более элегантный способ. Еще раз спасибо!
Автор: Artem_Butenko
Дата сообщения: 28.07.2008 02:39
Совсем недавно я приступил к изучению библиотеки ISSkin.dll. Обрадовала возможность подгрузки в качестве скина файла темы Windows (.msstyles). Есть много интересных тем для Windows, которые можно подгружать к Inno. Только вот файл темы содержит много лишних для данного инсталлятора ресурсов. Вопрос в том, как, и с помощью какой утилиты можно удалить лишние ресурсы из файла темы, дабы уменьшить ее размер? ResHacker не помогает. Вопрос стороннего характера: можно ли создать 1:1 (в плане геометрии всех компонентов страницы) шаблоны стандартных страниц Inno для использования в ISFD? Извиняюсь за большое количество вопросов, расширенные возможности Inno начал изучать только полгода назад.
Автор: ZheKA767
Дата сообщения: 28.07.2008 11:21
arsenal2
Спасибо
Автор: adamov3
Дата сообщения: 28.07.2008 13:29
[q][/q]
Я жму файлы тем UPX'ом. Например, 8 Мб ужимается до ~200 Кб.
Автор: ComradG
Дата сообщения: 28.07.2008 22:01

Цитата:
в качестве скина файла темы Windows (.msstyles)

Не занимайся ерундой.

Цитата:
Я жму файлы тем UPX'ом

Да, вещь хорошая, тем более в ней есть возможность криптования инсталлера.
А теперь по существу. Если инсталляция делается относительно xml скрипта, то:
1)скин тоже можно поменять используя системные библиотеки винды - информация для тя, Butenko, причем не пихая никаких .msstyles в скрипт непосредственно
2)шифрование инсталлера также можно сделать используя xml
Автор: QIPIC
Дата сообщения: 28.07.2008 23:49
Подскажите как сделать так чтоб при установке программы, автоматически присваивались файлы с опрееленным резрешением к открытию через нее,
вытягивал скрипт инсталяхи инно, там были такие строки
[Tasks]
;Name: "fileassoc"; Description: "{cm:AssocFileExtension,inno,.iss}"; MinVersion: 4.1,4.0;
[Run]
Filename: "{app}\WinDjView-0.5.exe"; Parameters: "/ASSOC"; StatusMsg: "{cm:AssocingFileExtension,inno,.iss}"; Tasks: "fileassoc"; MinVersion: 4.1,4.0;
Пробовал использовать эти строки то никакого результата неполучил..можете обяснить как их использовать возможно я упустил какуюто часть
Автор: Artem_Butenko
Дата сообщения: 29.07.2008 00:15
Уважаемый ComradG называть любое стремление к творчеству ерундой, крайне грубо с Вашей стороны. Причем я не первый, кого Вы ненароком задели за живое. А теперь к сути моего предыдущего вопроса. О каких ресурсах ОС (которые можно использовать в качестве скина для Inno) Вы говорите? Ответ не совсем коректен и непонятен ("и я не в танке!!!!!"). Во-вторых, о использовании файлов .msstyles в качестве скина для Inno сказано на официальном сайте авторов библиотеки ISSkin.dll (code jock.com). Собственно файл .cjstyles от авторов библиотеки, это почти тот же файл темы Windows, но с убранными лишними ресурсами. Так вот, я не спрашивал какой метод скинирования инсталлера лучше, это решает каждый сам для себя. Я просто просил помочь мне разобраться, как адаптировать файлы тем Windows (удалив лишние ресурсы) для скинирования Inno. Вот собственно, уважаемый ComradG и все!
Автор: Unc1e
Дата сообщения: 29.07.2008 00:54
Artem_Butenko, попробуй Restorator 2007 или PE Explorer
Автор: braunberg
Дата сообщения: 29.07.2008 16:03
QIPIC, твой вопрос рассматривался здесь
Artem_Butenko, за основу возьми файл .cjstyles, в нем оставлены только неободимые контролы для inno, оставь одну тему и на ее основе делай свою, только следи за тем, чтобы имя картинки соответствовало тому, что и в NORMAL_INI. В рестораторе ресурс можно вытащить или вставить обычным драг'н'дропом.
А расширение для готового стиля можно любое свое придумать - например .innostyles
Автор: Artem_Butenko
Дата сообщения: 29.07.2008 16:37
Спасибо ребята за помощь. Буду мастерить скины, позже познакомлю Вас с результатами работы! Также постараюсь разобраться с инструментарием авторов библиотеки isskin.dll.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


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