Скрипты Inno Setup. Помощь и советы [часть 3]

Ответить
 • Просмотры: 29
Аватара пользователя
insombia

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение insombia »

мелкие ошибки в программировании - это гарантированные баги, на которые потом будешь пялиться день и думать что этот-то кусок точно работает.




Цитата insombia:



как сделать чтобы в ис доне не писалось какие именно файлы распаковываются а просто распаковка файлов?
Скрипты Inno Setup. Помощь и советы [часть 3]






Код:

Код: Выделить всё

[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;
Аватара пользователя
R.i.m.s.k.y.

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение R.i.m.s.k.y. »

С другой стороны, именно по специфике исдона, смотрим процедуру отображения распаковки:


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

Код: Выделить всё

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

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение insombia »

Как вставить свой личный нарисованный прогресс бар в скрипт?
Аватара пользователя
insombia

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение insombia »

insombia

procedure CurStepChanged(CurStep: TSetupStep);

begin

CurStepChanged1(CurStep);

CurStepChanged2(CurStep);



end
Аватара пользователя
nik1967

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение nik1967 »

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



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

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение insombia »

подскажите чем создавать скрипты?
Аватара пользователя
valyok666

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение valyok666 »

доброго времени суток)у кого нибудь есть примеры создания авторана в инно?кроме NFS undecaver
Аватара пользователя
VinTagE

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение VinTagE »

valyok666, Вот даю свой AutoRun правдо давно собирал, он на Botva2

Вот скачивай
Изображение
Аватара пользователя
nik1967

Re: Скрипты Inno Setup. Помощь и советы [часть 3]

Сообщение nik1967 »

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


Код: Выделить всё


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;
Ответить

Вернуться в «Автоматическая установка приложений»