Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
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); похожее сделать но оно не пашет
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.
давно ничего не делал, но возникла надобность
есть вот такой кусочек
[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;
нужно привязать к двум компонентам
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;
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);
за ранее благодарю
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?
Наконец пора поставить точку в плагинах для 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 нету такой строчки Не создавать ярлык в пуске или что-то такое?
insombia, Попробуй так:
[Setup]
AllowNoIcons=Yes
insombia
12-08-2011, 13:56
Как сделать чтобы возле обзор была картинка как здесь http://fastpic.ru/view/18/2011/0812/b66595ee882eec52fd9ba9f7f0e0a10c.png.html ?
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;
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.