Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 4]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 4]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1265
Благодарности: 1025


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 22-05-2012
Описание: Закрыто
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]


Продолжение обсуждения
Скрипты Inno Setup. Помощь и советы [часть 5]

Отправлено: 18:01, 29-08-2011

 

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1265
Благодарности: 1025

Профиль | Отправить PM | Цитировать


Цитата Johny777:
вроде есть решение в виде WizardForm.DoubleBuffered := True, которая доступна только в Unicode. Но у меня ANSI
может есть другое решение? »
Johny777, самое простое - задать расширенный стиль WS_EX_COMPOSITED форме:
Код: Выделить весь код
SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED);
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:40, 03-04-2012 | #1381



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Забанен


Сообщения: 216
Благодарности: 62

Профиль | Цитировать


А что это за финтиклюшка такая {ini:{src}\setup.ini,Setup,AppName}? Файлы приложил!
Какие ещё секции могут работать? Ну может Code там, что можно ещё в Setup добавить?
setup.rar

Последний раз редактировалось Devils Night, 02-05-2012 в 12:11.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:18, 03-04-2012 | #1382


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Цитата El Sanchez:
SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED); »
вроде полностью будет так:
читать дальше »
Код: Выделить весь код
const
  GWL_EXSTYLE = 16;
  WS_EX_COMPOSITED = 20;

function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';

procedure initializeWizard();
begin
  SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED)
end;

а чему равны?
GWL_EXSTYLE = ?;
WS_EX_COMPOSITED = ?;
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,
Цитата Devils Night:
что можно ещё в Setup добавить? »
да много чего
вот например El Sanchez выкладывал много страниц назад
не даёт пользователю запустить тот же инсталл несколько раз пока он работает
очень полезная штука!
читать дальше »
Код: Выделить весь код
[Setup]
AppMutex=MyProgramMutexUniqueName

[  code]
procedure InitializeWizard();
begin
  CreateMutex('MyProgramMutexUniqueName');
end;

или
читать дальше »

/// обновить рабочий после установки
ChangesAssociations=true
ChangesEnvironment=true
/// поиск установленной версии через реестр
AppId=MySuperAppid
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID") }_is1,InstallLocation|{pf}\Source Engine 15}
/// максимальное сжатие /// начало
Compression=none
///lzma2/ultra64
LZMAUseSeparateProcess=yes
LZMAMatchFinder=BT
LZMANumFastBytes=273
LZMADictionarySize=262144
///LZMADictionarySize=131072
InternalCompressLevel=ultra64
///SolidCompression=true
MergeDuplicateFiles=true
/// конец
/// описание экзешника инсталла
VersionInfoDescription=не запускай меня
/// версия экзешника
VersionInfoVersion=1.1.1.1
/// не отображать окно выбора язык а при запуске
ShowLanguageDialog=auto
LanguageDetectionMethod=uilanguage

Последний раз редактировалось Johny777, 04-04-2012 в 02:09.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:14, 04-04-2012 | #1383


Забанен


Сообщения: 216
Благодарности: 62

Профиль | Цитировать


Цитата Johny777:
да много чего »
Ну вообще это понятие растяжимое конечно, да и я виноват в том что точнее не выразился что нужно! А так за разъяснение спасибо, кое что не было известно.
Я имею ввиду не в *.iss добавить что-то в секцию [Setup] например DefaultDirName={pf}\My Program, а именно что ещё можно добавить в *.iss для Setup.ini в секцию [Setup]?
Например в iss хотел добавить DefaultDirName={pf}\My Program для ini, т.е DefaultDirName={ini:{src}\setup.ini,Setup,DefaultDirName}, а в ini добавил DefaultDirName={pf}\My Program, так в итоге нифига не получилось, при компиляции выдало ошибку.

Последний раз редактировалось Devils Night, 04-04-2012 в 02:58.


Отправлено: 02:49, 04-04-2012 | #1384


Пользователь


Сообщения: 90
Благодарности: 2

Профиль | Отправить PM | Цитировать


помогите пожалуйста прикрутить к этому скрипту отображение времяни и процентов установки

скрипт
читать дальше »

#define MyAppName "Deus Ex Human Revolution"
#define NeedSize "7168"
#include "Module\Components.iss"


[Setup]
SetupIconFile=1.ico
Diskspanning=yes
AppName=Deus Ex - Human Revolution
AppVerName=Deus Ex - Human Revolution
DefaultDirName={pf}\Deus Ex - Human Revolution
DefaultGroupName=Deus Ex - Human Revolution
DirExistsWarning=no
AppVersion=1.0
OutputBaseFilename=setup
OutputDir=.
VersionInfoCopyright=Me
AppPublisher=Square Enix
WizardImageFile=Files\WizardImage.bmp
WizardSmallImageFile=Files\WizardSmallImage.bmp
UninstallDisplayIcon=1.ico
ShowTasksTreeLines=true

[UninstallDelete]
Type: filesandordirs; Name: {app}


[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
Name: desktopicon; Description: Создать значок на Рабочем столе; GroupDescription: Дополнительные значки:
Name: Redist; Description: Дополнительное программное обеспечение:
Name: Redist\DirectXCheck; Description: Обновить Microsoft DirectX; Flags: unchecked
Name: Redist\VCCheck; Description: Установить Microsoft Visual C++ Redist; Flags: unchecked


[CustomMessages]
rus.Welcome2=Программа установит игру {#MyAppName} на Ваш компьютер.%n%nРекомендуется закрыть антивирусные пакеты, а также все прочие приложения перед тем, как продолжить.
rus.Finished=Игра {#MyAppName} установлена на Ваш компьютер.%n%nПриложение можно запустить с помощью соответствующего значка.%n%nНажмите «Завершить», чтобы выйти из программы установки.

[Files]

Source: Files\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: Files\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: Files\facompress.dll; DestDir: {tmp}; Flags: dontcopy
Source: Files\papka.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Files\Finishe.bmp; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon






[Run]
Filename: {src}\Redist\DirectX\DXSETUP.exe; StatusMsg: Обновление компонентов DirectX...; Tasks: Redist\DirectXCheck; Flags: waituntilterminated; Parameters: "/silent";
Filename: "{src}\Redist\vcredist_x86.exe"; StatusMsg: "Установка Microsoft Visual C++ Redist..."; Tasks: Redist\VCCheck; Flags: waituntilterminated; Parameters: "/Q";


[Registry]

Root: HKLM; Subkey: "SOFTWARE\Deus Ex Human Revolution"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\Deus Ex Human Revolution"; ValueName: "InstallPath"; ValueType: String; ValueData: "{app}";
Root: HKLM; Subkey: "SOFTWARE\Deus Ex Human Revolution"; ValueName: "Version"; ValueType: String; ValueData: "1.0";
Root: HKLM; Subkey: "SOFTWARE\Deus Ex Human Revolution"; ValueName: "Language"; ValueType: String; ValueData: "Russian";



[code]
var
WelcomeLabel1, WelcomeLabel2, FinishedLabel, FinishedHeadingLabel: TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;


procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=True;
end;

procedure Labels();
begin
WelcomeLabel1:= TLabel.Create(WizardForm);
WelcomeLabel1.AutoSize:= False;
with WizardForm.WelcomeLabel1 do
//координаты WelcomeLabel1
WelcomeLabel1.SetBounds(ScaleX(30), ScaleY(10), ScaleX(200), ScaleY(220));
WelcomeLabel1.Font:= WizardForm.WelcomeLabel1.Font
WelcomeLabel1.Font.Color:= clWhite;
WelcomeLabel1.Transparent:= True;
WelcomeLabel1.WordWrap:= true;
WelcomeLabel1.Caption:= WizardForm.WelcomeLabel1.Caption;
WelcomeLabel1.Parent:= WizardForm.WelcomePage

WelcomeLabel2:= TLabel.Create(WizardForm);
WelcomeLabel2.AutoSize:= False;
with WizardForm.WelcomeLabel2 do
//координаты WelcomeLabel2
WelcomeLabel2.SetBounds(ScaleX(30), ScaleY(105), ScaleX(130), ScaleY(220));
WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel2.Font.Color:= clWhite;
WelcomeLabel2.Transparent:= True;
WelcomeLabel2.WordWrap:= true;
WelcomeLabel2.Caption:= ExpandConstant('{cm:Welcome2}');
WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent:= WizardForm.WelcomePage

WizardForm.WizardSmallBitmapImage.SetBounds(ScaleX(0), ScaleY(0), WizardForm.MainPanel.Width, WizardForm.MainPanel.Height);

PageNameLabel:= TLabel.Create(WizardForm)
with WizardForm.PageNameLabel do
PageNameLabel.SetBounds(Left, Top, Width, Height);
PageNameLabel.Transparent:= True;
PageNameLabel.Font:= WizardForm.PageNameLabel.Font;
PageNameLabel.Font.Color:= clWhite; //цвет надписи
PageNameLabel.Parent:= WizardForm.MainPanel;

PageDescriptionLabel:= TLabel.Create(WizardForm)
with WizardForm.PageDescriptionLabel do
PageDescriptionLabel.SetBounds(Left, Top, Width, Height);
PageDescriptionLabel.Transparent:= True;
PageDescriptionLabel.Font:= WizardForm.PageDescriptionLabel.Font;
PageDescriptionLabel.Font.Color:= clWhite; //цвет надписи
PageDescriptionLabel.Parent:= WizardForm.MainPanel;

FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.AutoSize:= False;
with WizardForm.FinishedHeadingLabel do
//координаты FinishedHeadingLabel
FinishedHeadingLabel.SetBounds(ScaleX(30), ScaleY(20), ScaleX(200), ScaleY(220));
FinishedHeadingLabel.Font:= WizardForm.FinishedHeadingLabel.Font
FinishedHeadingLabel.Font.Color:= clWhite;
FinishedHeadingLabel.Transparent:= True;
FinishedHeadingLabel.WordWrap:= true;
FinishedHeadingLabel.Parent:= WizardForm.FinishedPage

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
//координаты FinishedLabel
FinishedLabel.SetBounds(ScaleX(30), ScaleY(120), ScaleX(130), ScaleY(220));
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Parent:= WizardForm.FinishedPage

WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.FilenameLabel.Hide;
WizardForm.StatusLabel.Caption:='Идет распаковка данных, ждем...'
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
end;


procedure InitializeWizard();
Begin
LabelSize();
ButtonTextures();
Labels();
ExtractTemporaryFile('Finishe.bmp');
WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Finishe.bmp'));
ExtractTemporaryFile('papka.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;

end;
Procedure CurPageChanged(CurPageID: Integer);
Begin
UpdateButtons();
FinishedLabel.Caption:= ExpandConstant('{cm:Finished}');
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
//PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;

FinishedHeadingLabel.Caption:= WizardForm.FinishedHeadingLabel.Caption;



begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled := False;
ButtonLabel[bidNext].Enabled := False;
ButtonPanel[bidNext].Enabled := False;
end;
end;
end;


и к нему Components.iss

читать дальше »

[CustomMessages]
rus.Space=Доступно места на диске:
rus.Space1=Требуется места на диске:

[Files]
Source: Files\button2.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
const
ButtonWidth = 80;
ButtonHeight = 23;
Color = clblack;

bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;
bidbtnCancelUnpacking = 5;

var
WizardLabel: TLabel;
ButtonPanel: array of TPanel;
ButtonImage: array of TBitmapImage;
ButtonLabel: array of TLabel;
UsedButtons: array of TButton;
ButtonsCount: Integer;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;

Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.2n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
SetLength(Result, Length(Result)-1);
End;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ NumToStr(round(FreeMB/1024*100)/100) + ' Гб' else
FreeSpaceLabel.Caption := ExpandConstant('{cm:SPACE} ')+ IntToStr(FreeMB)+ ' Мб';
if WizardForm.CurPageID = wpSelectDir then begin //Чтоб не было глюков на других страницах
if FreeMB < NeedSize then begin
WizardForm.NextButton.Enabled := False;
ButtonPanel[bidNext].Enabled:= False;
ButtonLabel[bidNext].Enabled:= False;
end else begin
WizardForm.NextButton.Enabled := True;
ButtonPanel[bidNext].Enabled:= True;
ButtonLabel[bidNext].Enabled:= True; end;
end;
end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ NumToStr(round(NeedSize/1024*100)/100) + ' Гб' else
NeedSpaceLabel.Caption := ExpandConstant('{cm:SPACE1} ')+ NumToStr(NeedSize)+ ' Мб';
end;

procedure LabelSize();
begin
NeedSize:= {#NeedSize};
with WizardForm do
begin
DiskSpaceLabel.Hide;end;
////////////////////// SelectDirPage //////////////////////
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(202);
Width := ScaleX(209);
Height := ScaleY(13);
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
end;

procedure ButtonLabelClick(Sender: TObject);
var Button: TButton; n, i: Integer;
begin
i:= TLabel(Sender).Tag; ButtonImage[i].Left:= 0
for n:=0 to (ButtonsCount-1) do begin
if i = n then Button:= UsedButtons[n];
end;
Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth*2
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure ButtonLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var n, I: Integer;
begin
I:=TLabel(Sender).Tag;
//Сначала восстанавливаем картинку у всех кнопок, так надо иначе могут быть глюки
for n:=0 to (ButtonsCount-1) do begin if (ButtonLabel[n].Enabled)and(ButtonImage[n].Left <> -ButtonWidth*2)and(I<>N) then ButtonImage[n].Left:= 0; end;
//Теперь собственно ставим нужную картинку
if (ButtonLabel[i].Enabled)and(ButtonImage[i].Left <> -ButtonWidth*2) then begin ButtonImage[i].Left:= -ButtonWidth; end;
end;

procedure WizardLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var n: Integer;
begin
//Т.к Sender'ом выступает WizardLabel то не получится испльзовать индекс кнопки
for n:=0 to (ButtonsCount-1) do if (ButtonLabel[n].Enabled)and(ButtonImage[n].Left <> -ButtonWidth*2) then begin ButtonImage[n].Left:= 0; end;
end;

procedure LoadButtonImage(AButton: TButton);
var n: Integer;
begin
n:=ButtonsCount; SetArrayLength(ButtonPanel, n+1);
SetArrayLength(ButtonImage, n+1); SetArrayLength(ButtonLabel, n+1);
SetArrayLength(UsedButtons, n+1); UsedButtons[n]:= AButton;

ButtonPanel[n]:=TPanel.Create(WizardForm)
ButtonPanel[n].SetBounds(AButton.Left, AButton.Top, AButton.Width, AButton.Height)
ButtonPanel[n].Tag:= n
ButtonPanel[n].Enabled:= AButton.Enabled
ButtonPanel[n].Parent:=AButton.Parent

ButtonImage[n]:=TBitmapImage.Create(WizardForm)
ButtonImage[n].SetBounds(ScaleX(0), ScaleY(0), ScaleX(320), ScaleY(23))
ButtonImage[n].Enabled:=False
ButtonImage[n].Bitmap.LoadFromFile(ExpandConstant('{tmp}\Button2.bmp'))
ButtonImage[n].Parent:=ButtonPanel[n]

with TLabel.Create(WizardForm) do begin
Tag:=n
Parent:=ButtonPanel[n]
Width:=AButton.Width
Height:=AButton.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseMove:=@ButtonLabelMove
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end;

ButtonLabel[n]:=TLabel.Create(WizardForm)
ButtonLabel[n].Autosize:=True
ButtonLabel[n].Alignment:=taCenter
ButtonLabel[n].Tag:=n
ButtonLabel[n].Enabled:= AButton.Enabled
ButtonLabel[n].Transparent:=True
ButtonLabel[n].Font.Color:=clWhite
ButtonLabel[n].Caption:=AButton.Caption
ButtonLabel[n].OnClick:=@ButtonLabelClick
ButtonLabel[n].OnDblClick:=@ButtonLabelClick
ButtonLabel[n].OnMouseMove:=@ButtonLabelMove
ButtonLabel[n].OnMouseDown:=@ButtonLabelMouseDown
ButtonLabel[n].OnMouseUp:=@ButtonLabelMouseUp
ButtonLabel[n].Parent:=ButtonPanel[n]

ButtonsCount:= ButtonsCount+1
end;

procedure UpdateButtons();
var n: Integer;
begin
for n:=0 to ButtonsCount-1 do begin
ButtonLabel[n].Caption:=UsedButtons[n].Caption
ButtonPanel[n].Visible:=UsedButtons[n].Visible
if (UsedButtons[n].Enabled = False) then ButtonImage[n].Left:= -ButtonWidth*3 else ButtonImage[n].Left:= 0;
ButtonLabel[n].Enabled:= UsedButtons[n].Enabled;
ButtonPanel[n].Enabled:= UsedButtons[n].Enabled;
//Ставим Left и Top лейбла соразмерно размеру лейбла
ButtonLabel[n].Left:= ButtonPanel[n].Width div 2 - ButtonLabel[n].Width div 2;
ButtonLabel[n].Top:= ButtonPanel[n].Height div 2 - ButtonLabel[n].Height div 2;
end;
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
//Делаем кнопку активной
WizardForm.NextButton.Enabled:= True;
//Обновляем текстурированную кнопку (обновляем активность и текстуру)
UpdateButtons();
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
//Делаем кнопку неактивной
WizardForm.NextButton.Enabled:= False;
//Обновляем текстурированную кнопку (обновляем активность и текстуру)
UpdateButtons()
end;

procedure ButtonTextures();
begin
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;

WizardLabel:= TLabel.Create(WizardForm)
WizardLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(WizardForm.Width), ScaleY(WizardForm.Height))
WizardLabel.Transparent:= True;
WizardLabel.AutoSize:=false;
WizardLabel.OnMouseMove:=@WizardLabelMove
WizardLabel.Parent:= WizardForm;

WizardForm.BackButton.Width:= ButtonWidth
WizardForm.BackButton.Height:= ButtonHeight

WizardForm.NextButton.Width:= ButtonWidth
WizardForm.NextButton.Height:= ButtonHeight

WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:= ButtonHeight

WizardForm.DirBrowseButton.Left:=ScaleX(337)
WizardForm.DirBrowseButton.Width:= ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=ScaleX(337)
WizardForm.GroupBrowseButton.Width:= ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button2.bmp')
LoadButtonImage(WizardForm.BackButton)
LoadButtonImage(WizardForm.NextButton)
LoadButtonImage(WizardForm.CancelButton)
LoadButtonImage(WizardForm.DirBrowseButton)
LoadButtonImage(WizardForm.GroupBrowseButton)
//Сначала текстурируются кнопки, затем выполняется процедура которую мы перенесли
WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;
end;

Отправлено: 06:55, 04-04-2012 | #1385


Забанен


Сообщения: 216
Благодарности: 62

Профиль | Цитировать


Цитата wertulll:
помогите пожалуйста прикрутить »
Так что ли?!

Да и в следующий раз облочай всю свою портянку в CODE и под спойлер
PHP код: Выделить весь код

[more][code][/code][/more

чтоб получилось примерно следующее:

, и какие нибудь файлы к скрипту прикрути, здесь люди не волшебники из страны ОЗ.

Script.7z

Последний раз редактировалось Devils Night, 02-05-2012 в 12:11.


Отправлено: 08:06, 04-04-2012 | #1386


Пользователь


Сообщения: 90
Благодарности: 2

Профиль | Отправить PM | Цитировать


не получается не отображаются время и проценты установки

Последний раз редактировалось wertulll, 22-04-2012 в 19:56.


Отправлено: 08:29, 04-04-2012 | #1387


Аватара для Raf-9600

Старожил


Сообщения: 398
Благодарности: 21

Профиль | Отправить PM | Цитировать


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

Сам код:
читать дальше »
Код: Выделить весь код
procedure InitializeWizard();
begin
  WizardForm.TypesCombo.Visible:=False;
  WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
  WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
  WizardForm.ComponentsList.Width := ScaleX(212);      //чем больше значение, тем уже
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowDescription

  InfoPanel := TPanel.Create(WizardForm);
  InfoPanel.Parent := WizardForm.SelectComponentsPage;
  InfoPanel.Caption := '';
  InfoPanel.Top := WizardForm.ComponentsList.Top;         // поднимает панель, но опускает панель с текстом
  InfoPanel.Left := ScaleX(220);              //сдвигает текстовую панель
  InfoPanel.Width := ScaleX(197);
  InfoPanel.Height := WizardForm.ComponentsList.Height; 
  InfoPanel.BevelInner := bvRaised;
  InfoPanel.BevelOuter := bvLowered;
  InfoCaption := TNewStaticText.Create(WizardForm);
  InfoCaption.Parent := WizardForm.SelectComponentsPage;
  InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
  InfoCaption.Left := ScaleX(234);      // размещение слова Описание, по горизонтали
  InfoCaption.Top := InfoPanel.Top - ScaleY(5);    //поднять слово Описание
  InfoCaption.Font.Color := clActiveCaption;

  Info := TNewStaticText.Create(WizardForm);
  Info.Parent := InfoPanel;
  Info.AutoSize := False;
  Info.Left := ScaleX(6);
  Info.Width := ScaleX(188); //шырина текста
  Info.Top := ScaleY(12);     //Чем больше значение, тем ниже опускаеться полоска текста
  Info.Height := WizardForm.ComponentsList.Height - ScaleY(18);   //Чем больше значение, тем ниже опускаеться полоска текста
  Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
  Info.WordWrap := true;

  AddDescription(1, 'текст1.'); 
  AddDescription(2, 'текст2.');
  AddDescription(3, 'текст3.');

Последний раз редактировалось Raf-9600, 04-04-2012 в 12:17.


Отправлено: 11:41, 04-04-2012 | #1388


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


wertulll,
так сойдёт?
http://rghost.ru/private/37400744/c2...fcdec6682fe96a
*(за скрипт который я добавил спасибо Serega скажи)
_______________________
блин
как вы вкладываете файл в сообщение?
"вложения"
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

Raf-9600,
ты в курсе?
есть всплывающие подсказки в расширенной версии.
Наводишь на элемент и появляется подсказка
вот сделал
если описание большое, то появляется скроллбар (здесь вертикальный)
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
ComponentsListTVStyle=true

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

[CustomMessages]
russian.ComponentsName1=Моя программа™
russian.ComponentsName2=Помощь
russian.ComponentsName2_1=Документация
russian.ComponentsName2_2=Руководство пользователя
russian.ComponentsInfoPanel1=Описание
russian.ComponentsInfoPanel2=Наведите курсор мыши на компонент, чтобы прочитать его описание.
russian.ComponentsDescription1=Устанавливается обязательно
russian.ComponentsDescription2=Помощь
russian.ComponentsDescription3=Прочитать документацию
russian.ComponentsDescription4=Прочитать руководство пользователя

[Components]
Name: readme; Description: Справка; Types: full custom;
Name: readme\en; Description: "Английская "; Types: full custom; Flags: fixed
Name: readme\ru; Description: Русская; Types: full

;*************************************************************************
Name: plugs; Description: Плагины; Types: full ; Flags: collapsed
Name: plugs\wlx; Description: Внутреннего просмотра; Types: full
Name: plugs\wcx; Description: Архиваторные; Types: full
Name: plugs\wfx; Description: Системные; Types: full
Name: plugs\wfx\CanonCam; Description: CanonCam; Types: full
Name: plugs\wfx\PluginManager; Description: PluginManager; Types: full
Name: plugs\wfx\Registry; Description: Registry; Types: full
Name: plugs\wfx\Services; Description: Services; Types: full
Name: plugs\wfx\StartupGuard; Description: StartupGuard; Types: full
Name: plugs\wdx; Description: Другие; Types: full

[   Code]
{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
var
  DRTF: TRichEditViewer;

procedure RedesignWizardForm;
begin
  with WizardForm.ComponentsList do
  begin
    Width := ScaleX(201);
  end;

  { DRTF }
  DRTF := TRichEditViewer.Create(WizardForm);
  with DRTF do
  begin
    Name := 'DRTF';
    Parent := WizardForm.SelectComponentsPage;
    Left := ScaleX(208);
    Top := ScaleY(74);
    Width := ScaleX(209);
    Height := ScaleY(131);
    ScrollBars := ssVertical;
    Text := '';
  end;

  DRTF.TabOrder := 4;

{ ReservationBegin }
  // Вы можете добавить ваш код здесь.

{ ReservationEnd }
end;
// Не изменять эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удалять эту строку!

type
  TComponentDesc = record Description: String; Index: Integer; end;
  
var
  Descs: array of TComponentDesc;
  Indx: Integer;
  
procedure ShowDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var i: Integer;
begin
  Indx:=-1;
  for i:= 0 to GetArrayLength(Descs)-1 do begin
  if (Descs[i].Index=Index) then begin Indx:=i; Break end; end;
  if (Indx >=0)and(Area=iaItem) then DRTF.Text:= Descs[Indx].Description else DRTF.Text:= ExpandConstant('{cm:ComponentsInfoPanel2}');
end;

procedure AddDescription(AIndex: Integer; ADescription: String);
var i, k: Integer;
begin
i:= GetArrayLength(Descs); SetArrayLength(Descs, i+1);
Descs[i].Description:= ADescription; Descs[i].Index:= AIndex-1
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowDescription


  AddDescription(1, 'Справка'); //первый параметр - это номер компонента, идет последовательно от начала записи компонентов
  AddDescription(2, 'Эта сказка возникла в устных рассказах, пока не стала историей Великой Войны Кольца, включая множество эскурсов в более древние времена. Она начала создаваться после того, как был написан "Хоббит", и по его первой публикации в 1937 году: но я не торопился с продолжением, потому что хотел прежде собрать и привести в порядок мифологию и легенды древних дней, а для этого потребовалось несколько лет. Я делал это для собственного удовольствия и мало надеялся, что другие люди заинтересуются моей работой, особенно потому что она была преимущественно лингвистической по побуждениям и возникла из необходимости привести в порядок мои отрывочные сведения о языках эльфов.'); //Второй параметр - это собственно описание компонента
  AddDescription(3, 'Русская справка');
  AddDescription(4, 'Плагины');
  AddDescription(5, 'Внутреннего просмотра');
  AddDescription(6, 'Архиваторные');
  AddDescription(7, 'Системные');
  AddDescription(8, 'CanonCam');
  AddDescription(9, 'PluginManager');
  AddDescription(10, 'Registry');
  AddDescription(11, 'Services');
  AddDescription(12, 'StartupGuard');
  AddDescription(13, 'Другие');

end;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010A802000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167651453656C656374436F6D706F6E656E7473506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED0000F110544E6577436865636B4C697374426F780E436F6D706F6E656E74734C69737405576964746803C9000D4578706C69636974576964746803C9000000F10C544E6577436F6D626F426F780A5479706573436F6D626F0A4974656D486569676874020D00000F5452696368456469745669657765720444525446044C65667403D00003546F70024A05576964746803D100064865696768740383000A5363726F6C6C42617273070A7373566572746963616C085461624F72646572020400000000000000

под расширенную версию
без использования библиотеки

Последний раз редактировалось Johny777, 04-04-2012 в 13:56.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:21, 04-04-2012 | #1389


Пользователь


Сообщения: 90
Благодарности: 2

Профиль | Отправить PM | Цитировать


Johny777, не работает не отображается ни проценты не время

Отправлено: 13:54, 04-04-2012 | #1390



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 4]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Test ferget Тест-форум 0 24-08-2011 01:25
test ! ! Aaa ! ! Тест-форум 0 23-04-2011 11:29
test Santa aka Snt Тест-форум 0 16-04-2011 22:35
test xolod. Программное обеспечение Linux и FreeBSD 0 19-04-2009 21:03
Test memory KEugeNik Хочу все знать 11 23-11-2003 23:11




 
Переход