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

Статус
В этой теме нельзя размещать новые ответы.

v1nt

Мимокрокодил
ребят мне надо что б инстал сделал ярлык ехе файлу с параметрами
например launcher.exe +ляляляля
как это сделать в секции icons?
 

GVS276

Старожил
Проверенный
v1nt, Так попробуй:

[Icons]
Name: "{userdesktop}\Ярлык"; Filename: "{app}\launcher.exe"; Parameters: -ляляля; WorkingDir: "{app}";
 

ninja

Мимокрокодил
подскажите как сделать текст на первой странице инсталятора прозрачным или убрать вовсе - где эта программа установит на ваш компьютер блаблабла и тд
 

ACtivity

Новичок
подскажите как сделать текст на первой странице инсталятора прозрачным или убрать вовсе - где эта программа установит на ваш компьютер блаблабла и тд
---------------------------------------
Сделать прозрачным так
procedure InitializeWizard();
begin
with TLabel.Create(WizardForm) do begin
AutoSize:=WizardForm.WelcomeLabel1.AutoSize;
Left:=WizardForm.WelcomeLabel1.Left +ScaleX(25);
Top:=WizardForm.WelcomeLabel1.Top
Width:=WizardForm.WelcomeLabel1.Width -ScaleX(7)
Height:=WizardForm.WelcomeLabel1.Height
WordWrap:=WizardForm.WelcomeLabel1.WordWrap;
Font.Name:=WizardForm.WelcomeLabel1.Font.Name;
Font.Size:=WizardForm.WelcomeLabel1.Font.Size;
Font.Color:=clBlack;
Font.Style:=WizardForm.WelcomeLabel1.Font.Style;
Caption:=WizardForm.WelcomeLabel1.Caption;
Parent:=WizardForm.WelcomeLabel1.Parent
Transparent:=True
end;

with TLabel.Create(WizardForm) do begin
AutoSize:=WizardForm.WelcomeLabel2.AutoSize;
Left:=WizardForm.WelcomeLabel2.Left +ScaleX(25);
Top:=WizardForm.WelcomeLabel2.Top
Width:=WizardForm.WelcomeLabel2.Width -ScaleX(17)
Height:=WizardForm.WelcomeLabel2.Height
WordWrap:=WizardForm.WelcomeLabel2.WordWrap;
Font.Name:=WizardForm.WelcomeLabel2.Font.Name;
Font.Size:=WizardForm.WelcomeLabel2.Font.Size;
Font.Color:=clBlack;
Font.Style:=WizardForm.WelcomeLabel2.Font.Style;
Caption:=WizardForm.WelcomeLabel2.Caption;
Parent:=WizardForm.WelcomeLabel2.Parent
Transparent:=True
end;
end;
-------------------------------------
Убрать так
procedure InitializeWizard();
begin
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
end;
 

Spider

Новичок
Люди добрые пожалуйста помогите,как в Inno setup Показать реальный размер установленной игры в удаление и изменении программы?>>>
 

ACtivity

Новичок
Spider,
На windows 7 эта вещь не стабильно работает.
---------------------------------------
* Windows 7 change:
Added new [Setup] section directive: UninstallDisplaySize. On Windows 7 and newer, Setup uses this directive to set the EstimatedSize value in the Uninstall registry key when possible since the Windows 7 Add/Remove Programs Control Panel (called Program and Features) no longer automatically calculates it. If an UninstallDisplaySize is not set, Setup estimates the size itself by taking the size of all files installed and adding any ExtraDiskSpaceRequired values set. Note: Windows 7 only supports the display of values smaller than 4 GB.
---------------------------------------
 

LexBell

Борода
Супер модератор
Одновил сборку Inno Ultra. Максимально оптимизировал инсталлятор, в очередной раз пересмотрел состав лайт-версии, добавлена Inno Script Studio v0.22 - перевод частичный, поскольку в полностью русскоязычной версии, при выборе английского языка, меню остается на русском языке, что неудобно, поскольку большинство работает, все-таки, на английских версиях программ. Не забываем указывать на ошибки. Ссылка в шапке.
 

Spider

Новичок
Доброго вечера всем! Подскажите как сделать строку установки и кнопку установить на первой странице как здесь > > >
 

Edison007

Ветеран
Модератор
Spider
Код:
[_Code]
procedure InitializeWizard();
begin
  WizardForm.WelcomeLabel1.Visible := False;
  WizardForm.WelcomeLabel2.Visible := False;

  WizardForm.DirEdit.Parent:=WizardForm.WelcomePage;
  WizardForm.DirEdit.Left:=ScaleX(170);
  WizardForm.DirEdit.Width:=ScaleX(170);
  WizardForm.DirEdit.Autosize:=False;
  
  WizardForm.DirBrowseButton.Parent:=WizardForm.WelcomePage;
end;

procedure CurPageChanged(CurPage: Integer);
begin
  WizardForm.NextButton.Caption:='Установить';
end;

function  ShouldSkipPage(PageID: Integer): Boolean;
begin
  case PageID of
    wpSelectDir, wpReady, wpSelectDir: Result := True;
  end;
end;
 

Spider

Новичок
Привет всем! Вопрос: Как в конце установки сделать чтобы выводилось сообщение "Программа установлена!" с истечением некоторого времени это окошко закрывалось Автоматически!
Как выводилось это сообщение нашел как сделать, Но как сделать закрытие окошка по времени (к примеру по истечении 5 секунд окошко автоматически закрылось!)
Код:
[COLOR="Blue"]procedure[/COLOR] CurStepChanged(CurStep: TSetupStep);
 [COLOR="blue"]begin[/COLOR]
   [COLOR="blue"]if[/COLOR] CurStep = ssDone [COLOR="blue"]then[/COLOR]
     MsgBox('Программа' + '{#MyAppName}' + ' установлена!', mbInformation, MB_OK);
 [COLOR="blue"]end[/COLOR];
 

LexBell

Борода
Супер модератор
Как вариант(просто не знаю, как нажать на кнопку меседжбокса) можно создать форму выхода, и закрывать эту форму по истечении времени, которое можно задать, например, командой Sleep
 

Edison007

Ветеран
Модератор
Gnom
да, но если делать так:
Код:
var
  FinishForm: TForm;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  case curstep of
    ssDone: begin
      FinishForm := TForm.Create(WizardForm);
      with FinishForm do begin
        Width:=450;
        Height:=227;
        Left:=WizardForm.Left+165;
        Top:=WizardForm.Top+57;
        BorderStyle:=bsNone;
        Show;
      end;

      with Tlabel.Create(FinishForm) do begin
        Autosize:=false;
        SetBounds(ScaleX(1), ScaleY(46), ScaleX(450), ScaleY(150));
        Caption :='Blablabal';     
        Parent := FinishForm;
        Font.Color:=$000000;
        Transparent:=True;
        Alignment := taCenter;
      end;           

      Sleep(1500);
    end;
  end;
end;[/SPOILER]
то лейбл не хочет отображаться
 

LexBell

Борода
Супер модератор
то лейбл не хочет отображаться
Понятно, не хочет :) нужно сперва создать форму, со всеми элементами, в отдельной процедуре, потом вызвать эту процедуру, потом Sleep(1500);, потом - FinishForm.Free;
Хотя..., можно попробовать и твой вариант слегка переделать:
Код:
 var
 FinishForm: TForm;

 procedure CurStepChanged(CurStep: TSetupStep);
 begin
 case curstep of
 ssDone: begin
 FinishForm := TForm.Create(WizardForm);
 with FinishForm do [COLOR="blue"]begin[/COLOR]
 Width:=450;
 Height:=227;
 Left:=WizardForm.Left+165;
 Top:=WizardForm.Top+57;
 BorderStyle:=bsNone;


 with Tlabel.Create(FinishForm) do begin
 Autosize:=false;
 SetBounds(ScaleX(1), ScaleY(46), ScaleX(450), ScaleY(150));
 Caption :='Blablabal'; 
 Parent := FinishForm;
 Font.Color:=$000000;
 Transparent:=True;
 Alignment := taCenter;
 end; 
 Show;
 [COLOR="Blue"]end[/COLOR];
 Sleep(1500);
FinishForm.Free;
 end;
 end;
 end;[/spoiler] но не на 100%, что поможет.
но слип - просто для примера, он блокирует сам инсталл. нужно через таймер делать, тогда все красиво будет.
 
Последнее редактирование:

South

Знаток
Проверенный
Spider,
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

[Files]
Source: CallbackCtrl.dll; Flags: dontcopy

Код:
type
  TTimerProc = procedure (h, msg, idevent, dwTime: Longword);

const
  CaptionMsgBox = 'bla-bla-bla';

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function WrapTimerProc(callback:TTimerProc; paramcount:integer):LongWord; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall';
function GetDlgItem(hDlg: HWND; nIDDlgItem: Integer): HWND;  external 'GetDlgItem@user32.dll stdcall';
function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; external 'MessageBoxA@user32.dll stdcall';

procedure OnTimer(h, msg, idevent, dwTime:Longword); 
var
  wnd,btn:HWND;
begin
  KillTimer(WizardForm.Handle,1);
  wnd:=FindWindowByWindowName(CaptionMsgBox);
  if wnd<>0 then begin
    btn:=GetDlgItem(wnd,2);
    if btn<>0 then SendMessage(btn,$F5,0,0);
  end;
end;

procedure ExampleButtonClick(Sender: TObject);
begin
  SetTimer(WizardForm.Handle,1,3000,WrapTimerProc(@OnTimer,4));
  MessageBox(WizardForm.Handle,'Гаснем через 3 сек.',CaptionMsgBox,0);
  KillTimer(WizardForm.Handle,1);
end;

procedure InitializeWizard;
begin
  with TButton.Create(WizardForm) do begin
    SetBounds(10,310,80,21);
    Caption:='Example';
    Parent:=WizardForm;
    OnClick:=@ExampleButtonClick;
  end;
end;[/SPOILER]
ЗЫ на коленке, не тестил
 

Spider

Новичок
South, а можешь сделать тоже самое, но только на вот это сообщение ("Программа установлена!")...
Код:
[COLOR="Blue"]procedure[/COLOR] CurStepChanged(CurStep: TSetupStep);
 [COLOR="blue"]begin[/COLOR]
   [COLOR="blue"]if[/COLOR] CurStep = ssDone [COLOR="blue"]then[/COLOR]
     MsgBox('Программа' + '{#MyAppName}' + ' установлена!', mbInformation, MB_OK);
 [COLOR="blue"]end[/COLOR];
 

Edison007

Ветеран
Модератор
Spider
Код:
#define MyAppName "Stronghold"

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

[Files]
Source: CallbackCtrl.dll; Flags: dontcopy

[_Code]
type
  TTimerProc = procedure (h, msg, idevent, dwTime: Longword);

const
  CaptionMsgBox = 'Завершение';

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function WrapTimerProc(callback:TTimerProc; paramcount:integer):LongWord; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall';
function GetDlgItem(hDlg: HWND; nIDDlgItem: Integer): HWND; external 'GetDlgItem@user32.dll stdcall';
function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; external 'MessageBoxA@user32.dll stdcall';

procedure OnTimer(h, msg, idevent, dwTime:Longword);
var
  wnd,btn:HWND;
begin
  KillTimer(WizardForm.Handle,1);
  wnd:=FindWindowByWindowName(CaptionMsgBox);
  if wnd<>0 then begin
    btn:=GetDlgItem(wnd,2);
    if btn<>0 then SendMessage(btn,$F5,0,0);
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  case curstep of
    ssDone: begin
      SetTimer(WizardForm.Handle,1,2000,WrapTimerProc(@OnTimer,4));
      MessageBox(WizardForm.Handle,'Программа ' + '{#MyAppName}' + ' установлена!',CaptionMsgBox,0);
      KillTimer(WizardForm.Handle,1);
    end;
  end;
end;
 

Spider

Новичок
Вот теперь то что доктор прописал, Спасибо! ;)
 
Последнее редактирование:

Avangard

Участник
Spider, Вот еще один пример (без использования callbackctrl, innocallback):
Код:
#define MyAppName "Battlefield 3"

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

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

[CustomMessages]
//Заголовок MessageBox'a
rus.CaptionMsgBox=Завершение
//Текст MessageBox'a
rus.MsgBoxText=Программа {#MyAppName} установлена!

[ Code]
var
  MsgTimer: TTimer;

const
  WM_CLOSE = $0010;

function FindWindow(lpClassName, lpWindowName: PAnsiChar): HWND; external 'FindWindowA@user32.dll stdcall';
function MessageBox(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; external 'MessageBoxA@user32.dll stdcall';

procedure DeleteMsgBox(s: TObject);
var
  wnd:HWND;
begin
  MsgTimer.Enabled:= false;
  wnd := FindWindow('#32770', ExpandConstant('{cm:CaptionMsgBox}'));
  if wnd <> 0 then PostMessage(wnd, WM_CLOSE, 0, 0);
end;

procedure InitializeWizard;
begin
  MsgTimer:= TTimer.Create(nil);
  MsgTimer.OnTimer:= @DeleteMsgBox;
  MsgTimer.Interval:= Round(3000); 
  MsgTimer.Enabled:= false;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  case curstep of
    ssDone: begin
      MsgTimer.Enabled:= true;
      MessageBox(WizardForm.Handle, ExpandConstant('{cm:MsgBoxText}'), ExpandConstant('{cm:CaptionMsgBox}'), MB_ICONINFORMATION);
    end;
  end;
end;
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Сверху