Войти

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


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 [132] 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

R.i.m.s.k.y.
09-08-2011, 15:03
мелкие ошибки в программировании - это гарантированные баги, на которые потом будешь пялиться день и думать что этот-то кусок точно работает.

как сделать чтобы в ис доне не писалось какие именно файлы распаковываются а просто распаковка файлов? »

[Files]
Source: .\Files\*; DestDir: "{app}"; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath

[*Code]
procedure HideInstallPath();
begin
WizardForm.FileNameLabel.Visible := False;
end;
//*******//
procedure ShowInstallPath();
begin
WizardForm.FileNameLabel.Visible := True;
end;

2. Можешь попробовать и так сделать:
procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Visible:= False;
end;
Это отключит отображение файлов вообще.
В первом случае путь скрывается только для тех файлов, для которых заданы указанные процедуры; во втором - путь скрывается для всех файлов. Первый вариант более гибкий, но если надо скрыть путь абсолютно для всех файлов - предпочтительнее второй вариант.

В примере ниже путь будет скрыт только для файлов, копируемых в системную директорию:

[Files]
Source: .\AppFiles\*; DestDir: "{app}"
Source: .\SysFiles\*; DestDir: "{sys}"; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath
Source: .\DocFiles\*; DestDir: "{app}"

[*Code]
procedure HideInstallPath();
begin
WizardForm.FileNameLabel.Visible := False;
end;
//*******//
procedure ShowInstallPath();
begin
WizardForm.FileNameLabel.Visible := True;
end;

Gnom_aka_Lexander
09-08-2011, 15:14
С другой стороны, именно по специфике исдона, смотрим процедуру отображения распаковки:
function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
if OveralPct<=1000 then ImgPBSetPosition(NewPB,OveralPct);// позиция основного прогрессбара
LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
#ifdef SecondProgressBar
if CurrentPct<=1000 then ImgPBSetPosition(NewPB2,CurrentPct);// позиция дополнительного прогрессбара
LabelPct2.Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
#endif
LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
Result := ISDoneCancel;
end;
Строчка
LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
как раз отвечает за отображение файла, который сейчас распаковывается. Отсюда логически выходит, что достаточно заменить значение Caption на то, что нам нужно:
LabelCurrFileName.Caption:='';// строчка вообще пустая, надписи нет
LabelCurrFileName.Caption:='наша надпись';// наша надпись
insombia, в общем-то этот пост по твоему вопросу - берешь начальный вариант, и в нем, в функции ProgressCallback меняешь LabelCurrFileName.Caption на один из предложеных вариантов, без лишних гемороев с объединением процедур.

insombia
09-08-2011, 15:26
vint56 ты не понял мне нужно именно на CurStepChanged(CurStep: TSetupStep); похожее сделать но оно не пашет

vint56
09-08-2011, 15:43
insombia
procedure CurStepChanged(CurStep: TSetupStep);
begin
CurStepChanged1(CurStep);
CurStepChanged2(CurStep);

end

strelyaev
09-08-2011, 17:38
Всем привет. Я тут впервые - зашел по одному вопросу - надеюсь поможете - уже голова кругом. Скрипт уже имеется, а мне необходимо знать какие файлы куда копируются и как происходит регистрация. То есть я хочу сам скопировать и сам с помощью средств виндоус зарегистрировать библиотеки (regsvr32). То есть нужен алгоритм инсталляции человеческим языком)) ну чтобы батничек написать к примеру. (Папка DEMO не интересует).

http://www.fayloobmennik.net/865254 - вот он. что то не крепится к сообщению

Gnom_aka_Lexander
09-08-2011, 18:11
strelyaev,
Source: "{app}\3dvisbtn.dll"; DestDir: "{app}"; Flags: regserver
DestDir: "{app}" - куда копируется.
{app} указываеш в секции [Setup]: DefaultDirName={pf}\3D Active Button Magic.
соответсятвенно в твоем случае это будет папка програм файлс на системном диске\3D Active Button Magic
Flags: regserver - этот флаг запускает команду regsvr применительно к файлу, указанному перед флагом (в твоем случае, это 3dvisbtn.dll.

Imitri7
10-08-2011, 16:33
давно ничего не делал, но возникла надобность
есть вот такой кусочек
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={sd}\My Program
OutputDir=.
OutputBaseFilename=test


[CustomMessages]
MyRadioCaption_1=(для 32-х разрядной системы)
MyRadioCaption_2=(для 64-х разрядной системы)
MyRadioDeskrip_0=Выберите версию :

[Code]

var
Label0: TLabel;
NewRadioButton1: TNewRadioButton;
NewRadioButton2: TNewRadioButton;

procedure RedesignWizardForm;
begin

{ Label0 }
Label0 := TLabel.Create(WizardForm);
with Label0 do
begin
Name := 'Label0';
Parent := WizardForm.SelectDirPage;
Caption := ExpandConstant('{cm:MyRadioDeskrip_0}');
Transparent := False;
Left := ScaleX(0);
Top := ScaleY(144);
Width := ScaleX(265);
Height := ScaleY(17);
end;

{ NewRadioButton1 }
NewRadioButton1 := TNewRadioButton.Create(WizardForm);
with NewRadioButton1 do
begin
Name := 'NewRadioButton1';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(13);
Top := ScaleY(180);
Width := ScaleX(212);
Height := ScaleY(13);
Caption := ExpandConstant('{cm:MyRadioCaption_1}');
end;

{ NewRadioButton2 }
NewRadioButton2 := TNewRadioButton.Create(WizardForm);
with NewRadioButton2 do
begin
Name := 'NewRadioButton2';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(13);
Top := ScaleY(162);
Width := ScaleX(212);
Height := ScaleY(13);
Caption := ExpandConstant('{cm:MyRadioCaption_2}');
end;

NewRadioButton1.TabOrder := 0;
NewRadioButton2.TabOrder := 1;

end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;

нужно привязать к двум компонентам

vint56
10-08-2011, 17:31
Imitri7, пример
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Files]
Source: 64.txt; DestDir: {app}; Check: RadioButton64Bit and IsWin64
Source: 32.txt; DestDir: {app}; Check: RadioButton32Bit and not IsWin64

[CustomMessages]
RadioButton32=(для 32-х разрядной системы)
RadioButton64=(для 64-х разрядной системы)
Myver=Выберите версию :

[Code]
var
Label1: TLabel;
RadioButton32: TNewRadioButton;
RadioButton64: TNewRadioButton;

function RadioButton32Bit(): Boolean;
begin
Result:= RadioButton32.Checked;
end;

function RadioButton64Bit(): Boolean;
begin
Result:= RadioButton64.Checked;
end;

procedure RedesignWizardForm;
begin
{ Label1 }
Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Name := 'Label1';
Parent := WizardForm.SelectDirPage;
Caption := ExpandConstant('{cm:Myver}');
Transparent := False;
Left := ScaleX(24);
Top := ScaleY(120);
Width := ScaleX(95);
Height := ScaleY(13);
end;

{ RadioButton32 }
RadioButton32 := TNewRadioButton.Create(WizardForm);
with RadioButton32 do
begin
Name := 'RadioButton32';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(24);
Top := ScaleY(136);
Width := ScaleX(200);
Height := ScaleY(17);
Caption := ExpandConstant('{cm:RadioButton32}');
end;

{ RadioButton64 }
RadioButton64 := TNewRadioButton.Create(WizardForm);
with RadioButton64 do
begin
Name := 'RadioButton64';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(24);
Top := ScaleY(160);
Width := ScaleX(200);
Height := ScaleY(17);
Caption := ExpandConstant('{cm:RadioButton64}');
end;

RadioButton32.TabOrder := 5;
RadioButton64.TabOrder := 6;
end;


procedure InitializeWizard();
begin
RedesignWizardForm;
end;

Imitri7
11-08-2011, 09:15
to vint56, благодарю
to all требуется изменить цвет прогрессбара + чтобы обязательно показывались проценты
есть вот такая нараблтка
function SetWindowTheme(hwnd: HWND; pszSubAppName: pchar; pszSubIdList: pchar): Longint; external 'SetWindowTheme@uxtheme.dll stdcall delayload';

Procedure InitializeWizard();
begin
try
SetWindowTheme(wizardform.progressgauge.Handle, ' ', ' ');
except
end
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
SendMessage(wizardform.progressgauge.Handle, $0409, 0, $000977FF);

за ранее благодарю

vint56
11-08-2011, 11:19
Imitri7, как та так
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Files]
Source: compiler:innocallback.dll; Flags: dontcopy
Source: C:\Windows\Help\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs external

[code]
type
TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);

var
PercentsTimer: LongWord;
PercentsLabel: TLabel;

function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): longword; external 'SetTimer@user32';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32 stdcall delayload';

function SetWindowTheme(hwnd: HWND; pszSubAppName: pchar; pszSubIdList: pchar): Longint; external 'SetWindowTheme@uxtheme.dll stdcall delayload';

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

Procedure PercentsProc(h, msg, idevent, dwTime: Longword);
Begin
with WizardForm.ProgressGauge do
begin
PercentsLabel.Caption:= 'Выполнено ' + NumToStr((Position-Min)/((Max - Min)/100)) + ' %';
end;
End;

procedure DeinitializeSetup();
begin
KillTimer(0, PercentsTimer);
end;

Procedure procbar();
begin
try
SetWindowTheme(wizardform.progressgauge.Handle, ' ', ' ');
except
end
end;

procedure InitializeWizard();
begin
procbar();
PercentsLabel:= TLabel.Create(WizardForm);
with PercentsLabel do
begin
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(40);
Width:= WizardForm.StatusLabel.Width;
Height:= WizardForm.StatusLabel.Height;
AutoSize:= False;
Transparent := True;
Width := ScaleX(200);
Height := ScaleY(100);
Font.Style:= [fsBold];
Left := ScaleX(100);
Font.Size:= 13;
Font.Name:= 'Georgia';
Font.Color:= ClBlack;
Parent:= WizardForm.InstallingPage;
end;
end;


procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
SendMessage(wizardform.progressgauge.Handle, $0409, 0, clblue); // здесь меняеш цвет процесбара по умолчанию стоит голубой clblue
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
PercentsTimer:= SetTimer(0, 0, 500, WrapTimerProc(@PercentsProc, 4));
end;
end;

insombia
11-08-2011, 18:12
Как сделать чтобы в Isexec когда указываешь папку с архивом и делаешь установку чтобы файлов setup-1a.bin и так далее не было а просто твой созданный архив и файл setup.exe?

VoLT
11-08-2011, 21:41
Наконец пора поставить точку в плагинах для Inno ею будет проект b2p - b2p.sf.net

b2p это плагин для Inno Setup созданный с целью обеспечить защиту графических элементов интерфейса от копирования. Данный плагин не является самостоятельным и для отрисовки графического интерфейса он использует плагин botva 2 от South.Tver
внутри архива вы найдете сам плагин и немного переписанный под него модуль (модуль вроде был написан Shegorat'ом)

No4noylis
11-08-2011, 21:50
insombia,

если я тебя правильно понял то тебе нужно в [Setup] удалить
DiskSliceSize=2100000000
SlicesPerDisk=1
и
здесь поставить
DiskSpanning=no

insombia
11-08-2011, 22:19
No4noylis блин как я сам не додумался :o

insombia
12-08-2011, 10:21
Подскажите пожалуйста почему здесь http://images.bcm.net.ua/images/30515460173656839166.png нету такой строчки Не создавать ярлык в пуске или что-то такое?

VinTagE
12-08-2011, 10:57
insombia, Попробуй так:

[Setup]
AllowNoIcons=Yes

insombia
12-08-2011, 13:56
Как сделать чтобы возле обзор была картинка как здесь http://fastpic.ru/view/18/2011/0812/b66595ee882eec52fd9ba9f7f0e0a10c.png.html ?

VinTagE
12-08-2011, 14:16
insombia, Как-то так:

var
BmpFile: TBitmapImage;
BmpFilePanel: TPanel;

procedure InitializeWizard();
begin
ExtractTemporaryFile('GameImg.bmp');

BmpFilePanel:= TPanel.Create(WizardForm);
BmpFilePanel.Top:= ScaleY(185);
BmpFilePanel.Left:= ScaleX(360);
BmpFilePanel.Width:= ScaleX(120);
BmpFilePanel.Height:= ScaleY(120);
BmpFilePanel.Parent:= WizardForm;
BmpFilePanel.Hide;

BmpFile:= TBitmapImage.Create(BmpFilePanel);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\GameImg.bmp'));
BmpFile.Width:= BmpFilePanel.Width;
BmpFile.Height:= BmpFilePanel.Height;
BmpFile.Stretch:= True;
BmpFile.AutoSize:=True;
BmpFile.Parent:= BmpFilePanel;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
BmpFilePanel.Hide;
If CurPageID=wpSelectDir then begin
BmpFilePanel.Show;
end;
end;

vint56
12-08-2011, 14:20
insombia,
[Files]
Source: "C:\1.bmp"; Flags: dontcopy solidbreak
[Code]
var
BitmapImage1: TBitmapImage;

procedure InitializeWizard();
begin
{ BitmapImage1 }
BitmapImage1 := TBitmapImage.Create(WizardForm);
with BitmapImage1 do
begin
Name := 'BitmapImage1';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(200);
Top := ScaleY(112);
Width := ScaleX(201);
Height := ScaleY(97);
ExtractTemporaryFile('1.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
end;
end;

insombia
12-08-2011, 15:19
Проблема в Isexec когда идет распаковка архивов то прогресс бар сразу же идет до как-будто уже все установилось а идет установка ПО но при этом все файлы распаковываются как сделать чтобы оно постепенно двигалось?




© OSzone.net 2001-2012