Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка приложений (http://forum.oszone.net/forumdisplay.php?f=61)
-   -   Скрипты Inno Setup. Помощь и советы [часть 3] (http://forum.oszone.net/showthread.php?t=190621)

Serega 04-11-2010 00:28 1537848

Скрипты Inno Setup. Помощь и советы [часть 3]
 
Вложений: 2
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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] - Скачать;

  • InnoSetup Script Joiner - Программа для объединения нескольких скриптов InnoSetup в один;

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


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

STRAYKER 08-11-2010 18:41 1537861

Люди помогите мне нада чтобы картнка была только на первых двух страницах инсталятор (Она должна быть на весь инсталятор )




вот пример но она на все страницы инсталятора !!!

shao 08-11-2010 19:51 1537921

Цитата:

Цитата STRAYKER
Люди помогите »

Да вы, уважаемый, не требуйте !
Тут все делают всё на добровольных началах.
Третий или четвёртый раз повторять один и тот же вопрос так настойчиво - это , как минимум, признак дурного тона.

Задали вопрос - и ждите. Если у кого-либо будет ответ на Ваш вопрос - обязательно ответят.

STRAYKER 08-11-2010 21:24 1538006

shao,

извините но мне позарес нада сделать RePack игры :dont-know

R.i.m.s.k.y. 09-11-2010 08:29 1538208

Цитата:

Цитата STRAYKER
извините но мне позарес нада сделать RePack игры »

А похоже Вам позарез надо сделать картинку. Если нужно делать репак - то и вопросы были бы про репак, а не про картинку.

STRAYKER 09-11-2010 19:09 1538689

R.i.m.s.k.y.,
Инсталятор и репак связаные !!!
Как говорят " Сначала книгу судят по обложке а потом о её содержымом "

Petruchodd 09-11-2010 19:51 1538722

Доброго времени суток. Ребята может кто то мне помочь (буду оооочень признателен )как сделать инсталятору проверку на версию программы . В инсталяторе я задаю версию моего приложения (если я правильно понял)
Код:

AppVersion=1.55.5
После того как я изменил версию своего приложения, я изменил ее и в в этой записи( надеялся что там более менее автоматизировано всё ( в инно сетап имею ввиду))
Получается так, что я устанавливаю на "новую" версию - старую ( если пойти с другой стороны, с точки зрения багов) И конечное же тогда меняются файлы :(

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

помогите пожалуйста

THE GUILTY GOD 10-11-2010 12:11 1539185

Всем здрасте!
как сделать так что бы при нажатии на определённую кнопку появлялось окно с изображением.
и как отредактировать скин.
Зарание СПС!

R.i.m.s.k.y. 10-11-2010 12:24 1539196

Цитата:

Цитата THE GUILTY GOD
Всем здрасте!
как сделать так что бы при нажатии на определённую кнопку появлялось окно с изображением.
и как отредактировать скин. »

Form Designer в шапке темы

nik1967 10-11-2010 13:10 1539235

Цитата:

Цитата THE GUILTY GOD
и как отредактировать скин »

Codejock Skin Builder тебе в помощь.

sergey3695 10-11-2010 15:32 1539341

Кто знает помогите пожалуйста, как сделать так:

Чтобы при нажатии менялась форма инстала?

R.i.m.s.k.y. 10-11-2010 15:37 1539345

Оформление очень любят на форуме ru-board.

Imitri7 11-11-2010 17:16 1540207

как исправить ошибку ?

вот код
читать дальше »
Код:

//************************************************ [Íà÷àëî - Íàëîæåíèå òåêñòóðû + öåíòðèðîâàíèå òåêñòà (êíîïêè)] ***************************************************//
const
  ButtonWidth = 80;    //Óêàçûâàåì ðàçìåð êíîïîê
  ButtonHeight = 23;

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

var
  ButtonPanel: array [0..4] of TPanel;
  ButtonImage: array [0..4] of TBitmapImage;
  ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
  case TLabel(Sender).Tag of
    bidBack: Button:=WizardForm.BackButton
    bidNext: Button:=WizardForm.NextButton
    bidCancel: Button:=WizardForm.CancelButton
    bidDirBrowse: Button:=WizardForm.DirBrowseButton
    bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
  else
    Exit
  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
end;

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

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
  Image: TBitmapImage;
  Panel: TPanel;
  Labl: TLabel;

begin
  Panel:=TPanel.Create(WizardForm)
  Panel.Left:=AButton.Left
  Panel.Top:=AButton.Top
  Panel.Width:=AButton.Width
  Panel.Height:=AButton.Height
  Panel.Tag:=AButtonIndex
  Panel.Parent:=AButton.Parent
  ButtonPanel[AButtonIndex]:=Panel

  Image:=TBitmapImage.Create(WizardForm)    //Ðèñóíîê êîòîðûé ëîæèòñÿ íà êíîïêó
  Image.Width:=160                          //Îáÿçàòåëüíî ïðîïèñàòü îðèãèíàëüíûé ðàçìåð ðèñóíêà
  Image.Height:=23
  Image.Enabled:=False
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
  Image.Parent:=Panel
  ButtonImage[AButtonIndex]:=Image

  with TLabel.Create(WizardForm) do begin
    Tag:=AButtonIndex
    Parent:=Panel
    Width:=Panel.Width
    Height:=Panel.Height
    Transparent:=True
    OnClick:=@ButtonLabelClick
    OnDblClick:=@ButtonLabelClick
    OnMouseDown:=@ButtonLabelMouseDown
    OnMouseUp:=@ButtonLabelMouseUp
  end

  Labl:=TLabel.Create(WizardForm)        //Òåêñò êíîïîê
  Labl.Left:=23                          //Óêàçûâàåì ïîëîæåíèå òåêñòà
  Labl.Top:=5
  Labl.Autosize:=True
  Labl.Alignment:=taCenter
  Labl.Tag:=AButtonIndex
  Labl.Transparent:=True
  Labl.Font.Color:=clFont              //Öâåò òåêñòà
  Labl.Caption:=AButton.Caption
  Labl.OnClick:=@ButtonLabelClick
  Labl.OnDblClick:=@ButtonLabelClick
  Labl.OnMouseDown:=@ButtonLabelMouseDown
  Labl.OnMouseUp:=@ButtonLabelMouseUp
  Labl.Parent:=Panel
  ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption:=AButton.Caption
  ButtonPanel[AButtonIndex].Visible:=AButton.Visible
  ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=True
  ButtonPanel[bidNext].Enabled := True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=False
  ButtonPanel[bidNext].Enabled := False
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
  UpdateButton(WizardForm.BackButton,bidBack)
  UpdateButton(WizardForm.NextButton,bidNext)
  UpdateButton(WizardForm.CancelButton,bidCancel)
  ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
  ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
  ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
  ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
  ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
end;

procedure InitializeWizard1();
begin
  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:=337
  WizardForm.DirBrowseButton.Width:=ButtonWidth
  WizardForm.DirBrowseButton.Height:=ButtonHeight

  WizardForm.GroupBrowseButton.Left:=337
  WizardForm.GroupBrowseButton.Width:=ButtonWidth
  WizardForm.GroupBrowseButton.Height:=ButtonHeight

  WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

  WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

  ExtractTemporaryFile('button.bmp')
  LoadButtonImage(WizardForm.BackButton,bidBack)
  LoadButtonImage(WizardForm.NextButton,bidNext)
  LoadButtonImage(WizardForm.CancelButton,bidCancel)
  LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
  LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;
//************************************************ [Êîíåö - Íàëîæåíèå òåêñòóðû + öåíòðèðîâàíèå òåêñòà (êíîïêè)] ****************************************************//

//************************************************ [Íà÷àëî - Ñâîáîäíî ìåñòà íà äèñêå] ****************************************************//
var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel,FreeSpaceLabel: TLabel;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Äîñòóïíî ìåñòà íà äèñêå: '+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := 'Äîñòóïíî ìåñòà íà äèñêå: '+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
begin
    WizardForm.NextButton.Enabled := False;
end else
  begin
    WizardForm.NextButton.Enabled := True;
    ButtonLabel[bidNext].Enabled := True;
    ButtonPanel[bidNext].Enabled := True;
  end;
end;


procedure GetNeedSpaceCaption;
begin
  if NeedSize > 1024 then
  NeedSpaceLabel.Caption := 'Òðåáóåòñÿ ìåñòà íà äèñêå: '+ FloatToStr(round(NeedSize/1024*100)/100) + ' ÃÁ' else
  NeedSpaceLabel.Caption := 'Òðåáóåòñÿ ìåñòà íà äèñêå: '+ IntToStr(NeedSize)+ ' ÌÁ';
end;

procedure InitializeWizard2();
begin
NeedSize := 2048;

WizardForm.DiskSpaceLabel.Hide;

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;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged2(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
end;
end;

//************************************************ [Êîíåö - Ñâîáîäíî ìåñòà íà äèñêå] ****************************************************//
procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
  CurPageChanged2(CurPageID);
end;
procedure InitializeWizard();
begin
  InitializeWizard1();
  InitializeWizard2();
end;



если сделать
Код:

NeedSize := 3072;
то ошибку не выдает

THE GUILTY GOD 11-11-2010 17:31 1540224

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

STRAYKER 11-11-2010 18:30 1540279

помогите со скриптом
Проблема в том что он не создает папки в меню пуск и ярлыки хотя там все прописано
Проблемма возникает тогда когда добавляеш скрипт с расширениям картинки на весь инсталятор


читать дальше »
; Script generated by the Ìàñòåð Inno Setup Script.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{B8A23CB6-D773-43C6-8D08-11ADDB1095D5}
AppName=My Program
AppVersion=1.5
;AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=C:\Users\Striker\Desktop
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
WizardImageFile=D:\1.bmp

[code]
var
pnl: TPanel;

///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
Caption:= WizardForm.WelcomeLabel1.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel1.Font.Color;
Style:= WizardForm.WelcomeLabel1.Font.Style;
Name:= WizardForm.WelcomeLabel1.Font.Name;
Size:= WizardForm.WelcomeLabel1.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
Caption:= WizardForm.WelcomeLabel2.Caption;
with Font do
begin
Color:= WizardForm.WelcomeLabel2.Font.Color;
Style:= WizardForm.WelcomeLabel2.Font.Style;
Name:= WizardForm.WelcomeLabel2.Font.Name;
Size:= WizardForm.WelcomeLabel2.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
with WizardForm do
begin
with DirEdit do
begin
Left:= 40;
Top:= 137;
Parent:= pnl;
end;
with DirBrowseButton do
begin
Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
Top:= WizardForm.DirEdit.Top - 1;
Parent:= pnl;
end;
with SelectDirBitmapImage do
begin
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top - 62;
Stretch:= True;
Parent:= pnl;
end;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirLabel.AutoSize;
SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
WordWrap:= WizardForm.SelectDirLabel.WordWrap;
Caption:= WizardForm.SelectDirLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectDirLabel.Font.Color;
Style:= WizardForm.SelectDirLabel.Font.Style;
Name:= WizardForm.SelectDirLabel.Font.Name;
Size:= WizardForm.SelectDirLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
Caption:= WizardForm.DiskSpaceLabel.Caption;
with Font do
begin
Color:= WizardForm.DiskSpaceLabel.Font.Color;
Style:= WizardForm.DiskSpaceLabel.Font.Style;
Name:= WizardForm.DiskSpaceLabel.Font.Name;
Size:= WizardForm.DiskSpaceLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
ready_str: string;
begin
ready_str:= WizardForm.ReadyMemo.Text;
with TLabel.Create(pnl) do
begin
SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Caption:= ready_str;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TBevel.Create(WizardForm) do
begin
SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.ReadyLabel.AutoSize;
SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
WordWrap:= WizardForm.ReadyLabel.WordWrap;
Caption:= WizardForm.ReadyLabel.Caption;
with Font do
begin
Color:= WizardForm.ReadyLabel.Font.Color;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
with WizardForm.ProgressGauge do
begin
Left:= 40;
Top:= 115;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FilenameLabel.AutoSize;
SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
WordWrap:= WizardForm.FilenameLabel.WordWrap;
Caption:= WizardForm.FilenameLabel.Caption;
with Font do
begin
Color:= WizardForm.FilenameLabel.Font.Color;
Style:= WizardForm.FilenameLabel.Font.Style;
Name:= WizardForm.FilenameLabel.Font.Name;
Size:= WizardForm.FilenameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.StatusLabel.AutoSize;
SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
WordWrap:= WizardForm.StatusLabel.WordWrap;
Caption:= WizardForm.StatusLabel.Caption;
with Font do
begin
Color:= WizardForm.StatusLabel.Font.Color;
Style:= WizardForm.StatusLabel.Font.Style;
Name:= WizardForm.StatusLabel.Font.Name;
Size:= WizardForm.StatusLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
CheckBox: array of TNewCheckBox;

procedure CheckBoxClick(Sender: TObject);
begin
if TNewCheckBox(Sender).Checked then
WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;

procedure LabelClick(Sender: TObject);
begin
if CheckBox[TLabel(Sender).Tag].Checked then
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
CheckBox[TLabel(Sender).Tag].Checked:= False;
end
else
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= True;
CheckBox[TLabel(Sender).Tag].Checked:= True;
end;
end;

procedure HideRunList(Control: TWinControl);
var
i, t: Integer;
str: string;
begin
if WizardForm.RunList.Items.Count > 0 then
begin
WizardForm.RunList.Hide;
SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
for i:= 0 to WizardForm.RunList.Items.Count-1 do
begin
CheckBox[i]:= TNewCheckBox.Create(Control);
with CheckBox[i] do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
Tag:= i;
Checked:= WizardForm.RunList.Checked[i];
Caption:= WizardForm.RunList.Items.Strings[i];
OnClick:= @CheckBoxClick;
Color:= clWhite;
Parent:= Control;
end;
str:= WizardForm.RunList.Items.Strings[i];
with TLabel.Create(WizardForm) do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
WizardForm.RunList.Width,14);
Caption:= str;
Tag:= i;
OnClick:= @LabelClick;
Transparent:= True;
Parent:= Control;
end;
t:= t + 20;
end;
end;
end;

procedure FinishedPage;
begin
HideRunList(pnl);
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedHeadingLabel.Font.Color;
Style:= WizardForm.FinishedHeadingLabel.Font.Style;
Name:= WizardForm.FinishedHeadingLabel.Font.Name;
Size:= WizardForm.FinishedHeadingLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedLabel.AutoSize;
SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
WordWrap:= WizardForm.FinishedLabel.WordWrap;
Caption:= WizardForm.FinishedLabel.Caption;
with Font do
begin
Color:= WizardForm.FinishedLabel.Font.Color;
Style:= WizardForm.FinishedLabel.Font.Style;
Name:= WizardForm.FinishedLabel.Font.Name;
Size:= WizardForm.FinishedLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
pnl:= TPanel.Create(WizardForm);
with pnl do
begin
Align:= alClient;
Parent:= WizardForm;
end;
with WizardForm do
begin
with WizardBitmapImage do
begin
Align:= alClient;
Stretch:= True;
Parent:= pnl;
end;
NextButton.Parent:= pnl;
CancelButton.Parent:= pnl;
BackButton.Parent:= pnl;
Bevel.Parent:= pnl;
pnl.Repaint;
end;

if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
begin
WizardForm.Bevel1.Parent:= pnl;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageNameLabel.AutoSize;
SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
Caption:= WizardForm.PageNameLabel.Caption;
with Font do
begin
Color:= WizardForm.PageNameLabel.Font.Color;
Style:= WizardForm.PageNameLabel.Font.Style;
Name:= WizardForm.PageNameLabel.Font.Name;
Size:= WizardForm.PageNameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
Caption:= WizardForm.PageDescriptionLabel.Caption;
with Font do
begin
Color:= WizardForm.PageDescriptionLabel.Font.Color;
Style:= WizardForm.PageDescriptionLabel.Font.Style;
Name:= WizardForm.PageDescriptionLabel.Font.Name;
Size:= WizardForm.PageDescriptionLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;

if CurPageID = wpWelcome then WelcomePage;
if CurPageID = wpSelectDir then SelectDirPage;
if CurPageID = wpReady then ReadyPage;
if CurPageID = wpInstalling then InstallingPage;
if CurPageID = wpFinished then FinishedPage;
end;


[Files]
; Add the ISSkin DLL used for skinning Inno Setup installations.
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy

; Add the Visual Style resource contains resources used for skinning,
; you can also use Microsoft Visual Styles (*.msstyles) resources.
Source: skin.cjstyles; DestDir: {tmp}; Flags: dontcopy

[code]
// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('skin.cjstyles');
LoadSkin(ExpandConstant('{tmp}\skin.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
// Hide Window before unloading skin so user does not get
// a glimpse of an unskinned window before it is closed.
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "D:\Programs\Setup\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

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

[Run]
Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,My Program}"; Flags: nowait postinstall skipifsilent

[Files]
Source: "isgsg.dll"; DestDir: {tmp}; Flags: dontcopy nocompression
Source: "splash.png"; DestDir: {tmp}; Flags: dontcopy nocompression

[code]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard();
begin

WizardForm.PageNameLabel.Font.Color:=clgreen;
WizardForm.LicenseAcceptedRadio.Font.Color:=clwhite;
WizardForm.LicenseNotAcceptedRadio.Font.Color:=clwhite;
WizardForm.Font.Color:=clwhite;

ExtractTemporaryFile('splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
end;

THE GUILTY GOD 12-11-2010 06:14 1540657

Помигите с расчётом времени.
Тема такая у меня после основной установки идет распаковка архивов из секции RUN, а время к этому моменту еже стоит на нолях, как сделать так что бы она ещё показывало сколько ещё будут распаковыватся, архивы.

STRAYKER 12-11-2010 19:41 1541176

КАК создать такой инсталятор ???

serg aka lain 12-11-2010 20:09 1541208

Цитата:

Цитата STRAYKER
КАК создать такой инсталятор ??? »

Вот тут можно скачать.

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

STRAYKER 13-11-2010 21:16 1542042

Serega,

Помогите
Как сделать каринку на весь инстаялятор но только на первую старницу ???Помогите пожалуйста

jameszero 13-11-2010 21:38 1542064

STRAYKER
Замечание.

При написании сообщений на форум используйте шрифт по умолчанию.

david141 14-11-2010 12:08 1542361

Привет.
Как сюда всунуть StatusMsg над прогресс баром?

Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
ExecAndWait(ExpandConstant('{tmp}\unpacker.exe'), '', '', SW_SHOW, True);
end;


serg aka lain 14-11-2010 13:56 1542416

Цитата:

Цитата david141
Как сюда всунуть StatusMsg над прогресс баром? »

Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
  begin
    WizardForm.StatusLabel.Caption := 'Распаковка ...';
    ExecAndWait(ExpandConstant('{tmp}\unpacker.exe'), '', '', SW_SHOW, True);
  end;
end;


Photon9 14-11-2010 16:37 1542508

Вложений: 1
Такое дело возникла необходимость пересобрать игрушку (Fallout New Vegas Steam версия) вобщем разобрал, создал скрипт, пересобрал но в процессе сборки видимо где-то что-то упустил и при установке лаунчер не находит инишник с конфигом, как выяснилось проблема в реестре, при записи ветки с путём к установленой игре путь должен заканчиватся / но его нет, провожу слияние реестра слеш появляется но вот через скрипт добавить никак не получается.

kotkovets 14-11-2010 17:24 1542535

Цитата:

Цитата Photon9
при записи ветки с путём к установленой игре путь должен заканчиватся / »

Код:

Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\FalloutNV; ValueType: string; ValueName: Installed Path; ValueData: {app}\;

david141 14-11-2010 18:21 1542567

serg aka lain,

Спасибо работает прекрасно.

У меня ещё вопросик. Как можно дать пользователю выбрать только один компонент из списка
то есть выбрал один компонент значит, на другие поставить галку не возможно.

Photon9 14-11-2010 19:38 1542617

kotkovets, спасибо, собрал и всё работает

nik1967 14-11-2010 19:40 1542619

david141,
Пример из 3 чекбоксов
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.7
DefaultDirName={pf}\My Program
OutputDir=.

[_Code]
var
Check: array [0..2] of TCheckBox;

procedure Check0(Sender: TObject);
begin
if Check[0].Checked then
begin
Check[1].Checked := False;
Check[2].Checked := False;
end;

if (Check[0].Checked = False) and (Check[1].Checked = False)
and (Check[2].Checked = False) then Check[0].Checked := True;
end;

procedure Check1(Sender: TObject);
begin
if Check[1].Checked then
begin
Check[0].Checked := False;
Check[2].Checked := False;
end;

if (Check[0].Checked = False) and (Check[1].Checked = False)
and (Check[2].Checked = False) then Check[1].Checked := True;
end;

procedure Check2(Sender: TObject);
begin
if Check[2].Checked then
begin
Check[0].Checked := False;
Check[1].Checked := False;
end;

if (Check[0].Checked = False) and (Check[1].Checked = False)
and (Check[2].Checked = False) then Check[2].Checked := True;
end;

procedure InitializeWizard();
begin
Check[0] := TCheckBox.Create(WizardForm);
with Check[0] do
begin
Parent := WizardForm.SelectDirPage;
Checked := True;
Top := ScaleY(100);
OnClick := @Check0;
Caption := 'Чекбокс №1';
end;

Check[1] := TCheckBox.Create(WizardForm);
with Check[1] do
begin
Parent := WizardForm.SelectDirPage;
Top := ScaleY(120);
OnClick := @Check1;
Caption := 'Чекбокс №2';
end;

Check[2] := TCheckBox.Create(WizardForm);
with Check[2] do
begin
Parent := WizardForm.SelectDirPage;
Top := ScaleY(140);
OnClick := @Check2;
Caption := 'Чекбокс №3';
end;
end;


Shmel 16-11-2010 07:14 1543658

Плиз помогите. Скачал NFC Undecover скрипт, но после компиляции, при запуске пишет, что ошибка в выборе файла в ISArcExtract. Что делать?

STRAYKER 16-11-2010 18:40 1544143

serg aka lain,

Здраствуйте
У меня просьба Как сделат ькартинку только на первой странице инсталятора но на весь екран ???

serg aka lain 16-11-2010 19:38 1544184

Цитата:

Цитата STRAYKER
Как сделат ькартинку только на первой странице инсталятора но на весь екран ??? »

Если имеется в виду в первом окне, то
так
Код:


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

[code]
var
  MyPanel: TPanel;

procedure InitializeWizard();
begin
  MyPanel := TPanel.Create(WizardForm);
  with MyPanel do
  begin
    Align := alClient;
    Parent := WizardForm;
  end;

  with WizardForm.WizardBitmapImage do
  begin
    Align := alClient;
    Parent := MyPanel;
  end;

  with TLabel.Create(WizardForm) do
  begin
    AutoSize := WizardForm.WelcomeLabel1.AutoSize;
    WordWrap := WizardForm.WelcomeLabel1.WordWrap;
    Left := WizardForm.WelcomeLabel1.Left;
    Top := WizardForm.WelcomeLabel1.Top;
    Width := WizardForm.WelcomeLabel1.Width;
    Height := WizardForm.WelcomeLabel1.Height;
    Caption := WizardForm.WelcomeLabel1.Caption;
    Font.Size := WizardForm.WelcomeLabel1.Font.Size;
    Font.Style := WizardForm.WelcomeLabel1.Font.Style;
    Font.Color := clWhite;
    TransParent := True;
    Parent := MyPanel;
  end;
 
  with TLabel.Create(WizardForm) do
  begin
    AutoSize := WizardForm.WelcomeLabel2.AutoSize;
    WordWrap := WizardForm.WelcomeLabel2.WordWrap;
    Left := WizardForm.WelcomeLabel2.Left;
    Top := WizardForm.WelcomeLabel2.Top;
    Width := WizardForm.WelcomeLabel2.Width;
    Height := WizardForm.WelcomeLabel2.Height;
    Caption := WizardForm.WelcomeLabel2.Caption;
    Font.Size := WizardForm.WelcomeLabel2.Font.Size;
    Font.Style := WizardForm.WelcomeLabel2.Font.Style;
    Font.Color := clWhite;
    TransParent := True;
    Parent := MyPanel;
  end;

  WizardForm.NextButton.BringToFront;
  WizardForm.CancelButton.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  MyPanel.Hide;
  if CurPageID = wpWelcome then
    MyPanel.Show;
end;


STRAYKER 16-11-2010 20:30 1544229

serg aka lain,

Спасиба незнаю что говорить я очень признателен

STRAYKER 16-11-2010 21:51 1544296

serg aka lain,

А как зделать в первом и втором окнах ?

serg aka lain 17-11-2010 01:05 1544438

Цитата:

Цитата STRAYKER
А как зделать в первом и втором окнах ? »

Можно попробовать
так
Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
WizardImageFile=compiler:WizModernImage-IS.bmp

[code]
const
  Text_color = clYellow;

var
  MyPanel1, MyPanel2: TPanel;

procedure InitializeWizard();
begin
  MyPanel1 := TPanel.Create(WizardForm);
  with MyPanel1 do
  begin
    Align := alClient;
    Parent := WizardForm;
  end;

  with WizardForm.WizardBitmapImage do
  begin
    Align := alClient;
    Parent := MyPanel1;
  end;

  with TLabel.Create(WizardForm) do
  begin
    AutoSize := WizardForm.WelcomeLabel1.AutoSize;
    WordWrap := WizardForm.WelcomeLabel1.WordWrap;
    Left := WizardForm.WelcomeLabel1.Left;
    Top := WizardForm.WelcomeLabel1.Top;
    Width := WizardForm.WelcomeLabel1.Width;
    Height := WizardForm.WelcomeLabel1.Height;
    Caption := WizardForm.WelcomeLabel1.Caption;
    Font.Size := WizardForm.WelcomeLabel1.Font.Size;
    Font.Style := WizardForm.WelcomeLabel1.Font.Style;
    Font.Color := Text_color;
    TransParent := True;
    Parent := MyPanel1;
  end;
 
  with TLabel.Create(WizardForm) do
  begin
    AutoSize := WizardForm.WelcomeLabel2.AutoSize;
    WordWrap := WizardForm.WelcomeLabel2.WordWrap;
    Left := WizardForm.WelcomeLabel2.Left;
    Top := WizardForm.WelcomeLabel2.Top;
    Width := WizardForm.WelcomeLabel2.Width;
    Height := WizardForm.WelcomeLabel2.Height;
    Caption := WizardForm.WelcomeLabel2.Caption;
    Font.Size := WizardForm.WelcomeLabel2.Font.Size;
    Font.Style := WizardForm.WelcomeLabel2.Font.Style;
    Font.Color := Text_color;
    TransParent := True;
    Parent := MyPanel1;
  end;

  MyPanel2 := TPanel.Create(WizardForm);
  with MyPanel2 do
  begin
    Align := alClient;
    Parent := WizardForm;
  end;

  with WizardForm do
  begin
    with DirEdit do
    begin
      Left := ScaleX(40);
      Top := ScaleY(137);
      Parent := MyPanel2;
    end;
    with DirBrowseButton do
    begin
      Left := WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + ScaleX(10);
      Top := WizardForm.DirEdit.Top - ScaleY(1);
      Parent := MyPanel2;
    end;
  end;

  WizardForm.BackButton.BringToFront;
  WizardForm.NextButton.BringToFront;
  WizardForm.CancelButton.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  MyPanel1.Hide;
  MyPanel2.Hide;

  if CurPageID = wpWelcome then
    MyPanel1.Show;

  if CurPageID = wpSelectDir then
  begin
    with TBitmapImage.Create(MyPanel2) do
    begin
      Align := alClient;
      Bitmap := WizardForm.WizardBitmapImage.Bitmap;
      Stretch := True;
      Parent := MyPanel2;
    end;

    with TLabel.Create(WizardForm) do
    begin
      AutoSize := WizardForm.SelectDirBrowseLabel.AutoSize;
      Left := WizardForm.DirEdit.Left;
      Top := WizardForm.DirEdit.Top - ScaleY(30);
      Width := WizardForm.SelectDirBrowseLabel.Width;
      Height := WizardForm.SelectDirBrowseLabel.Height;
      WordWrap := WizardForm.SelectDirBrowseLabel.WordWrap;
      Caption := WizardForm.SelectDirBrowseLabel.Caption;
      Font.Color := Text_color;
      Font.Style := WizardForm.SelectDirBrowseLabel.Font.Style;
      Font.Size := WizardForm.SelectDirBrowseLabel.Font.Size;
      Transparent := True;
      Parent := MyPanel2;
    end;

    with TLabel.Create(WizardForm) do
    begin
      AutoSize := WizardForm.SelectDirLabel.AutoSize;
      Left := WizardForm.DirEdit.Left + ScaleX(45); 
      Top := WizardForm.DirEdit.Top - ScaleY(55);
      Width := WizardForm.SelectDirLabel.Width;
      Height := WizardForm.SelectDirLabel.Height;
      WordWrap := WizardForm.SelectDirLabel.WordWrap;
      Caption := WizardForm.SelectDirLabel.Caption;
      Font.Color := Text_color;
      Font.Style := WizardForm.SelectDirLabel.Font.Style;
      Font.Size := WizardForm.SelectDirLabel.Font.Size;
      Transparent := True;
      Parent := MyPanel2;
    end;

    with TLabel.Create(WizardForm) do
    begin
      AutoSize := WizardForm.DiskSpaceLabel.AutoSize;
      Left := WizardForm.DirEdit.Left;
      Top := WizardForm.Bevel.Top - ScaleY(25);
      Width := WizardForm.DiskSpaceLabel.Width;
      Height := WizardForm.DiskSpaceLabel.Height;
      WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
      Caption := WizardForm.DiskSpaceLabel.Caption;
      Font.Color := Text_color;
      Font.Style := WizardForm.DiskSpaceLabel.Font.Style;
      Font.Size := WizardForm.DiskSpaceLabel.Font.Size;
      Transparent := True;
      Parent := MyPanel2;
    end;

    with TLabel.Create(WizardForm) do
    begin
      AutoSize := WizardForm.PageNameLabel.AutoSize;
      Left := WizardForm.PageNameLabel.Left;
      Top := WizardForm.PageNameLabel.Top;
      Width := WizardForm.PageNameLabel.Width;
      Height := WizardForm.PageNameLabel.Height;
      Caption := WizardForm.PageNameLabel.Caption;
      Font.Color := Text_color;
      Font.Style := WizardForm.PageNameLabel.Font.Style;
      Font.Size := WizardForm.PageNameLabel.Font.Size;
      Transparent := True;
      Parent := MyPanel2;
    end;

    with TLabel.Create(WizardForm) do
    begin
      AutoSize := WizardForm.PageDescriptionLabel.AutoSize;
      Left := WizardForm.PageDescriptionLabel.Left;
      Top := WizardForm.PageDescriptionLabel.Top;
      Width := WizardForm.PageDescriptionLabel.Width;
      Height := WizardForm.PageDescriptionLabel.Height;
      Caption := WizardForm.PageDescriptionLabel.Caption;
      Font.Color := Text_color;
      Font.Style := WizardForm.PageDescriptionLabel.Font.Style;
      Font.Size := WizardForm.PageDescriptionLabel.Font.Size;
      Transparent := True;
      Parent := MyPanel2;
    end;

    with WizardForm.SelectDirBitmapImage do
    begin
      Left := WizardForm.DirEdit.Left;
      Top := WizardForm.DirEdit.Top - ScaleY(62);
      Stretch := True;
      Parent := MyPanel2;
      BringToFront;
    end;

    MyPanel2.Show;
  end;
end;


Vovochka_s2 17-11-2010 01:46 1544451

Прошу сильно не пинать, но я никак не могу въехать как работает скрипт для распаковки .arc
Сделал инсталлятор для программки, она впринципе небольшая и арк там не нужен, но ради интереса хотел попробовать ужать им.

Цитата:

Для использования скрипта откомпилируйте его и поместите архивы *.arc в один каталог с инсталятором перед тем как запустить его.
Ужал папку с программой FreeArc'ом, помещаю архив file.arc в каталог где лежат файлы программы, собираю инсталлер и получается тупо инсталлятор размер которого больше на объём этого архива и архив arc просто распаковывается вместе с файлами.
Что я не так делаю?

jameszero 18-11-2010 09:57 1545471

STRAYKER,
Цитата:

Цитата STRAYKER
Спасиба незнаю что говорить я очень признателен »

Как я могу отметить сообщение полезным?

STRAYKER 18-11-2010 13:31 1545628

Например мне нада чтобы после установки программы запустилось приложения ЕХЕ без запроса о запуске

И как сделать чтобы был не один пароль а целая комбинация

Pleo 20-11-2010 14:19 1547124

Кто может залить на обменник Inno Script Generator ??? Зарание,спасибо!

RapMan 20-11-2010 16:34 1547188

Здравствуйте, у меня следующий вопрос:
Я создал дополнительную форму с одним edit-ом

[Run]
FileName: {app}\install.exe; Parameters: Edit.Text; Flags: waituntilterminated

[code]
var
Edit: TNewEdit;

почему в install.exe в параметр приходит текст "Edit.Text", а не текст с поля edit?

Заранее спасибо!

Duality 21-11-2010 22:09 1548172

Добрый день, помогите добавить опцию в скрипт Inno. Есть скрипт, в нем есть выбор компонентов (1,2,3,4 - все их можно выбрать как вместе так и отдельно, так же можно отключить все), так вот - нужно чтобы при условии если НЕ выбран НИ один компонент - установщик не давал продолжить установку. т.е. обязательно должно что то быть выбрано....

serg aka lain 21-11-2010 23:03 1548210

Цитата:

Цитата ksunechkin
нужно чтобы при условии если НЕ выбран НИ один компонент - установщик не давал продолжить установку. т.е. обязательно должно что то быть выбрано.... »

Вот так

Код:

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

[Components]
Name: "main"; Description: "Main Files"; Types: full compact custom;
Name: "help"; Description: "Help Files"; Types: full
Name: "help\english"; Description: "English"; Types: full
Name: "help\dutch"; Description: "Dutch"; Types: full

[code]
function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  if WizardSelectedComponents(False) = '' then
  begin
    MsgBox('Ни один из компонентов не выбран!', mbInformation, MB_OK);
    Result := False;
  end;
end;


Duality 21-11-2010 23:27 1548227

ок. спасибо, однако я не доописал ситуацию - есть компоненты:
a. 1
2

b. 1
2
3
4

нужно привязать эту функцию к компонентам b (1,2,3,4) - чтобы функция проверяла имеено их, выбраны они или нет. а компоненты а(1,2) не важны.

просто сам я не могу додумать как это сделать...

serg aka lain 22-11-2010 00:17 1548247

Цитата:

Цитата ksunechkin
нужно привязать эту функцию к компонентам b (1,2,3,4) - чтобы функция проверяла имеено их, выбраны они или нет. а компоненты а(1,2) не важны.
просто сам я не могу додумать как это сделать... »

А так
Код:

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

[Components]
Name: a; Description: a; Types: full compact custom;
Name: a\1; Description: a1; Types: full compact custom;
Name: a\2; Description: a2; Types: full compact custom;
Name: b; Description: b; Types: full compact custom;
Name: b\1; Description: b1; Types: full compact custom;
Name: b\2; Description: b2; Types: full compact custom;
Name: b\3; Description: b3; Types: full compact custom;
Name: b\4; Description: b4; Types: full compact custom;

[code]
function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;

  if (CurPageID = wpSelectComponents) and (IsComponentSelected('b') = False)
  and (IsComponentSelected('b\1') = False) and (IsComponentSelected('b\2') = False)
  and (IsComponentSelected('b\3') = False) and (IsComponentSelected('b\4') = False) then
  begin
    MsgBox('Не выбрано ни одиного из компонентов "b"!', mbInformation, MB_OK);
    Result := False;
  end;
end;


ASMatic 22-11-2010 03:35 1548295

Здравствуйте,
помогите плз,а то вообще не догадываюсь как сделать:

Програмно (в секции CODE) изменить путь к распаковке,т .е. у меня нету страницы по выбору папки, путь получаю с реестра и туда надо распаковывать. {app} := MyPath; - тип того)
???

ASMatic 22-11-2010 04:00 1548299

с этим разобрался:
DefaultDirName=={code:GetInstallPath}\My Program
чудом с СДК нашел)

возник другой вопрос:
Есть набор файлов который надо расположить в определенную папку(как обычно, распакуется и норм) еще есть два файла которые должны быть распакованы в зависимости от версии, версии то я разобрался что и как а вот как в тех ифах повписывать дабы взяло мне именно тот файл что мне надо распаковать....
Как понимаю нужно установить dontcopy флаг при описании файловой секции на тех файлах что не будем копировать,а вот как его заставить именно тот что надо файл распаковать в папку {app} "по требованию" ??
хелп..

Duality 22-11-2010 05:01 1548306

Цитата:

Цитата serg aka lain
А так »

а так спасибо БОЛЬШОЕ помогло :up

R.i.m.s.k.y. 22-11-2010 08:30 1548349

Цитата:

Цитата RapMan
почему в install.exe в параметр приходит текст "Edit.Text", а не текст с поля edit? »

Таков синтаксис этой секции в Инно. А Вам что конкретно надо?

Devils0411 23-11-2010 00:26 1549076

Задачка ))
Необходимо сделать выбор между двумя константами (Допустим Const1=5, Const2=8) Соответственно... при выборе одной из констант, значение добавляется в секцию
Код:

[Settings]
Chislo="значение выбранной константы"

ini-файла.. В начало или в конец секции не важно... Главное чтоб не затирало всю секцию, или того хуже весть ini-файл.

Habetdin 23-11-2010 01:02 1549109

Devils0411,
Код:

[Ini]
filename: {app}\Data.ini; section: Settings; key: Chislo; string: {code:MyNumber};

[Code]
function MyNumber(Param: String): String;
begin
  randomize;
  if random(5)>2 then Result:='8'
    else Result:='5';
end;


Devils0411 23-11-2010 01:16 1549122

Habetdin, Моя ошибка... забыл уточнить... выбор константы выбирается из [Components]
Имеется ввиду, что при запуске инсталлятора, программка остановится на выпадающем меню с выбором константы. После выбранного пункта, константа записывается в ini файл.
Код:

#define Const1 "5"
#define Const2 "8"

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName=.\My Program

[Name]
Name: "russian"; Name: "compiler:Name\Russian.isl"

[Components]
Name: "Const1"; Description: "{#Const1} -> data.ini"; Types: "Const1";
Name: "Const2"; Description: "{#Const2} -> data.ini"; Types: "Const2";

[Types]
Name: "Const1"; Description: "{#Const1} -> data.ini";
Name: "Const2"; Description: "{#Const2} -> data.ini";


truth 23-11-2010 17:58 1549683

Доброго времени суток. Тут вот какая задача..

Код:

[Files]
Source: ..\..\..\ololo\ololo.exe; DestDir: {app}\ololo\; Flags: onlyifdoesntexist
 
[Run]
Filename: {app}\ololo\ololo.exe; WorkingDir: {app}\ololo; Flags: nowait

Как правильно применить параметр Check на запуск (та и на установку можно) файла ololo.exe так, чтобы он запускался только в том случае, если он не запущен ранее? :dont-know
Если есть процесс ololo.exe - не устанавливаем (и не запускаем), если нет - устанавливаем и запускаем.

Habetdin 23-11-2010 18:43 1549726

Devils0411, тогда так:
Код:

#define Const1 "5"
#define Const2 "8"

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Types]
Name: "Const1"; Description: "{#Const1} -> data.ini";
Name: "Const2"; Description: "{#Const2} -> data.ini";

[Components]
Name: "Const1"; Description: "{#Const1} -> data.ini"; Types: "Const1";
Name: "Const2"; Description: "{#Const2} -> data.ini"; Types: "Const2";

[Ini]
filename: {app}\Data.ini; section: Settings; key: Chislo; string: {#Const1}; Components: Const1;
filename: {app}\Data.ini; section: Settings; key: Chislo; string: {#Const2}; Components: Const2;

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


vint56 24-11-2010 09:22 1550179

Помогите пожалуйста как вот это сделать только через код
@echo off
set SRC="L:\Call of Duty- Black Ops_disk1.sim"
set DST="c:\Games\Call of Duty: Black Ops"
SimPack.exe x %SRC% %DST% -g42700 -kD9AD91A8DB3258C4C8210D505DCB0F70 -n1
SimPack.exe x %SRC% %DST% -g42701 -kBAD1EC97BB5FB39A08D70AEDAB239DDC -n1
SimPack.exe x %SRC% %DST% -g42702 -kAC17FBAE013EB5D5A549EBF9907C78A5 -n1
SimPack.exe x %SRC% %DST% -g42709 -kD9AD91A8DB3258C4C8210D505DCB0F70 -n1
pause

Habetdin 24-11-2010 19:07 1550727

vint56, если {app}=c:\Games\Call of Duty: Black Ops и файлы Call of Duty- Black Ops_disk1.sim, SimPack.exe расположены рядом с инсталлятором, то:
Код:

#define SRCFILE '{src}\Call of Duty- Black Ops_disk1.sim'

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Run]
Filename: "{src}\SimPack.exe"; Parameters: "x ""{#SRCFILE}"" ""{app}"" -g42700 -kD9AD91A8DB3258C4C8210D505DCB0F70 -n1"; WorkingDir: {src}; StatusMsg: Распаковка файлов...; Flags: waituntilterminated HideWizard;
Filename: "{src}\SimPack.exe"; Parameters: "x ""{#SRCFILE}"" ""{app}"" -g42701 -kBAD1EC97BB5FB39A08D70AEDAB239DDC -n1"; WorkingDir: {src}; StatusMsg: Распаковка файлов...; Flags: waituntilterminated HideWizard;
Filename: "{src}\SimPack.exe"; Parameters: "x ""{#SRCFILE}"" ""{app}"" -g42702 -kAC17FBAE013EB5D5A549EBF9907C78A5 -n1"; WorkingDir: {src}; StatusMsg: Распаковка файлов...; Flags: waituntilterminated HideWizard;
Filename: "{src}\SimPack.exe"; Parameters: "x ""{#SRCFILE}"" ""{app}"" -g42709 -kD9AD91A8DB3258C4C8210D505DCB0F70 -n1"; WorkingDir: {src}; StatusMsg: Распаковка файлов...; Flags: waituntilterminated HideWizard;

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


vint56 24-11-2010 20:10 1550766

Habetdin,Большое тебе спасибо за помошь и еще один вопрос а как можно сделать чтобы он искал файл на dvd приваде
#define SRCFILE '{drive:{src}}\Call of Duty- Black Ops_disk1.sim' что не работает

Habetdin 24-11-2010 22:07 1550872

vint56, только что проверил, работает:
Код:

#define SRCFILE '{drive:{src}}\Call of Duty- Black Ops_disk1.sim'

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Code]
function InitializeSetup(): Boolean;
begin
  MsgBox(ExpandConstant('{#SRCFILE}'), mbInformation, MB_OK);
end;

Если инсталлятор расположен в корне диска, то использовать {drive:...} не обязательно

vint56 24-11-2010 22:51 1550900

Habetdin, если просто делать с {src} то работает если файлы лежат возле setup.exe а мне хотелось как не будь сделать ставил образ в DAEMON Tools чтобы распаковка шла с диска а не копировать файлы на жёсткий диск
#define SRCFILE '{drive:{src}}\Call of Duty- Black Ops_disk1.sim'

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Run]
Filename: {tmp}\SimPack.exe; Parameters: "x ""{#SRCFILE}"" ""{app}"" -g42700 -kD9AD91A8DB3258C4C8210D505DCB0F70 -n1"; WorkingDir: {drive:{src}}; StatusMsg: Распаковка файлов...; Flags: waituntilterminated HideWizard
Filename: {tmp}\SimPack.exe; Parameters: "x ""{#SRCFILE}"" ""{app}"" -g42701 -kBAD1EC97BB5FB39A08D70AEDAB239DDC -n1"; WorkingDir: {drive:{src}}; StatusMsg: Распаковка файлов...; Flags: waituntilterminated HideWizard
Filename: {tmp}\SimPack.exe; Parameters: "x ""{#SRCFILE}"" ""{app}"" -g42702 -kAC17FBAE013EB5D5A549EBF9907C78A5 -n1"; WorkingDir: {drive:{src}}; StatusMsg: Распаковка файлов...; Flags: waituntilterminated HideWizard
Filename: {tmp}\SimPack.exe; Parameters: "x ""{#SRCFILE}"" ""{app}"" -g42709 -kD9AD91A8DB3258C4C8210D505DCB0F70 -n1"; WorkingDir: {drive:{src}}; StatusMsg: Распаковка файлов...; Flags: waituntilterminated HideWizard

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: SimPack.exe; DestDir: {tmp}
Source: GcfFiles.dat; DestDir: {tmp}

Habetdin 25-11-2010 00:07 1550956

vint56,
Цитата:

Цитата vint56
чтобы распаковка шла с диска а не копировать файлы на жёсткий диск »

Где вы увидели копирование? В приведенных выше примерах и инсталлятор, и SimPack.exe, и Call of Duty- Black Ops_disk1.sim будут на CD/DVD/там, где вы расположите
А вот
Цитата:

Цитата vint56
{tmp} »

...это как раз с копированием на жесткий диск во временную папку :closed-to

Попробуйте скомпилить скрипт из моего предыдущего поста и запустить его с C:\, D:\ итд, посмотреть что он показывает в начале.. :)

shao 25-11-2010 17:12 1551449

Может кто знает - почему после редактирования в Рестораторе версии инсталлятора , созданного в Инно,
при попытке запуска получается вот такая вот ситуация :


Habetdin 25-11-2010 19:23 1551532

shao, потому что проверяется CRC :)
Используйте VersionInfoVersion
По умолчанию VersionInfoVersion=0.0.0.0

necromanster 26-11-2010 12:24 1552008

Здравствуйте господа.

Подскажите пожалуйста, как в этом скрипте, сделать так, чтобы рисунок на первой странице был на весь инсталятор, а в конце установки (на последней странице инсталятора) можно было поставить обычный ресунок (который с боку). И еще. Подскажите пожалуйста, где здесь менять цвет текста в инсталяторе.

Заранее спасибо.


Код:

[\code\]
var
  MyPanel: TPanel;

procedure InitializeWizard();
begin
  MyPanel := TPanel.Create(WizardForm);
  with MyPanel do
  begin
    Align := alClient;
    Parent := WizardForm;
  end;

  with WizardForm.WizardBitmapImage do
  begin
    Align := alClient;
    Parent := MyPanel;
  end;

  with TLabel.Create(WizardForm) do
  begin
    AutoSize := WizardForm.WelcomeLabel1.AutoSize;
    WordWrap := WizardForm.WelcomeLabel1.WordWrap;
    Left := WizardForm.WelcomeLabel1.Left;
    Top := WizardForm.WelcomeLabel1.Top;
    Width := WizardForm.WelcomeLabel1.Width;
    Height := WizardForm.WelcomeLabel1.Height;
    Caption := WizardForm.WelcomeLabel1.Caption;
    Font.Size := WizardForm.WelcomeLabel1.Font.Size;
    Font.Style := WizardForm.WelcomeLabel1.Font.Style;
    Font.Color := clWhite;
    TransParent := True;
    Parent := MyPanel;
  end;
 
  with TLabel.Create(WizardForm) do
  begin
    AutoSize := WizardForm.WelcomeLabel2.AutoSize;
    WordWrap := WizardForm.WelcomeLabel2.WordWrap;
    Left := WizardForm.WelcomeLabel2.Left;
    Top := WizardForm.WelcomeLabel2.Top;
    Width := WizardForm.WelcomeLabel2.Width;
    Height := WizardForm.WelcomeLabel2.Height;
    Caption := WizardForm.WelcomeLabel2.Caption;
    Font.Size := WizardForm.WelcomeLabel2.Font.Size;
    Font.Style := WizardForm.WelcomeLabel2.Font.Style;
    Font.Color := clWhite;
    TransParent := True;
    Parent := MyPanel;
  end;

  WizardForm.NextButton.BringToFront;
  WizardForm.CancelButton.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  MyPanel.Hide;
  if CurPageID = wpWelcome then
    MyPanel.Show;
end;


STRAYKER 26-11-2010 20:55 1552302

Как сделать установку игры быстрее с 25 мин до 10 мин ????

КАК сделать слайдшоу ???

truth 27-11-2010 18:39 1552871

Все доброго времени суток..
Здача: добавить чекбокс "Сделать *** дом. страницей". Сам чекбокс есть, все работает (кусок скрипта ниже). Но ведь хом. страница только в IE прописывается в реестре, правильно?
Например в Opera она хранится в INI-файле. Кто знает как быть? Необходимо ставить страницу во всех браузерах, а не только в IE.

Код:

[Run]
Filename: dummy; Description: Сделать *** домашней страницей; Flags: postinstall nowait skipifdoesntexist

[Сode]
procedure CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssDone then
        if WizardForm.RunList.Checked[0] then
            RegWriteStringValue(HKEY_CURRENT_USER, 'Software\Microsoft\Internet Explorer\Main', 'Start Page', 'http://***');
end;

Этот чекбокс есть во многих инсталляторах, так как же он осуществляется правильно?

R.i.m.s.k.y. 29-11-2010 09:04 1553914

Цитата:

Цитата truth
Этот чекбокс есть во многих инсталляторах, так как же он осуществляется правильно? »

Этот чекбокс от лукавого, инишник оперы я не знаю, но могу предложить функцию замены в текстовом файле
Код:

[_Code]
procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TArrayOfString;
  //str : string;
  i : Integer;
begin
  if not FileExists(FilePath) then begin MsgBox('Файл не найден ' + FilePath, mbError, mb_Ok); Exit;end; // если файла нет, выходим
  LoadStringsFromFile(FilePath, S); // загружаем файл
  for i:= 0 to GetArrayLength(S)-1 do begin
    if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
      StringChangeEx(S[i], find, replace, True);
    end;
  end;
  SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;

//использование в инишнике мегуя заменяется import(" на import(" + путь к папке плагинов + \
RePlaceTextinFile(ExpandConstant('{app}\Megui\allprofiles\AviSynth\AviSynth_dp_ MCTemporalDenoise.xml'), 'import("', 'import("'+plugindir2_5+'\');

Цитата:

Цитата STRAYKER
Как сделать установку игры быстрее с 25 мин до 10 мин »

поставить SSD ;-)
Цитата:

Цитата STRAYKER
КАК сделать слайдшоу »

в шапке коллекция скриптов - там есть

jdsl 29-11-2010 11:00 1553968

помогите чё делать с autorun.iss??? я ни как не пойму.

R.i.m.s.k.y. 29-11-2010 11:14 1553980

Цитата:

Цитата jdsl
помогите чё делать с autorun.iss??? я ни как не пойму. »

Компилить, а в чем проблема

Petruchodd 29-11-2010 12:58 1554042

Можна ли как то из секции [code] запустить UninsHS.exe (либо с параметрами которые используются для запуска из "пуск" )но в ввиде "модификаци,исправить,удалить".
я использую такой код для запуска - но оно просто запускает "удаление" и всё, а мне нужно что бы появилось окно с выбором функций репейр модифи ремов.
Код:

If CurPage=wpSelectDir then
 begin
    if FileExists(ExpandConstant('{app}\file.exe')) then
            begin
                    ShellExec('', ExpandConstant('{app}\UninsHS.exe'), '', '', SW_SHOW, ewNoWait, ErrorCode);
                    Result := False;
                end;
            end;

В примере про UninsHS.exe оно работает только если запустить через пуск -> uninstall my app тогда только появляется окно с репейр модифи и ремов.

Я хочу всунуть именно в сам процесс установки ( аля проверка, если установленно, то предложить варианты "модифи репейр и ремов" )

Подскажите пожалуйста :(((

R.i.m.s.k.y. 29-11-2010 13:36 1554081

Цитата:

Цитата Petruchodd
В примере про UninsHS.exe оно работает только если запустить через пуск -> uninstall my app тогда только появляется окно с репейр модифи и ремов. »

А подсмотреть в "пуск -> uninstall my app" параметры ярлыка и дописать их в код, нет?

Petruchodd 29-11-2010 13:38 1554083

Цитата:

Цитата R.i.m.s.k.y.
А подсмотреть в "пуск -> uninstall my app" параметры ярлыка и дописать их в код, нет? »

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

Код:

[icons]
Name: {group}\Uninstall my_app;Filename: "{app}\UninsHs.exe"; WorkingDir: "{app}";  Parameters: /u0=my_app

Цитата:

Цитата R.i.m.s.k.y.
А подсмотреть в "пуск -> uninstall my app" параметры ярлыка и дописать их в код, нет? »

как это понять ? подсдкажи пожлалуйста



Блин дошло ))) Спасибо большое R.i.m.s.k.y.

R.i.m.s.k.y. 29-11-2010 13:49 1554095

Цитата:

Цитата Petruchodd
как это понять ? подсдкажи пожлалуйста »

Из Вашего поста я понял, что при удалении проги через меню пуск ... выскакивает именно то окошко, что нужно.
В меню пуск на ярлыке ПКМ (правой кнопкой мыши) - свойства - смотрим параметры запуска, копируем их и вставляем в код. И для экзешников лучше использовать просто EXEC
Код:

var res : integer;
...
If CurPage=wpSelectDir then
 begin
    if FileExists(ExpandConstant('{app}\file.exe')) then
            begin
                    Exec(ExpandConstant('{app}\UninsHS.exe'), ' /u0=my_app',ExpandConstant('{app}'),SW_SHOW,ewWaitUntilTerminated,res);
                    Result := False;
                end;
            end;


gvshil 01-12-2010 21:24 1556173

Подскажите пожалуйста, как правильно выгрузить процесс при деинсталяции:
Код:

[UninstallRun]
Filename: {sys}\taskkill.exe; Parameters: /im Proga.exe

так деинсталятор не дожидается выгруки процесса,

а так, на мой взгляд, выгружается как то некорректно
Код:

[UninstallRun]
Filename: {sys}\taskkill.exe; Parameters: /f /im Proga.exe


kotkovets 01-12-2010 22:20 1556234

gvshil,
Если нужно, чтобы деинсталятор, дождался пока не завершится процесс:
Код:

[UninstallRun]
Filename: {sys}\taskkill.exe; Parameters: /f /im Proga.exe; Flags: waituntilidle


gvshil 02-12-2010 07:50 1556378

kotkovets,
Код:

Flags: waituntilidle
тоже не помогает.

ALXIMIK 03-12-2010 01:37 1557169

Кто может помогите добавить расчет свободного места!

Habetdin 03-12-2010 09:49 1557279

gvshil,
Код:

[UninstallRun]
Filename: tskill; Parameters: ProcessName; Flags: runhidden waituntilterminated


Цитата:

Цитата kotkovets
waituntilidle »

Цитата:

If this flag is specified, it will wait until the process is waiting for user input with no input pending, instead of waiting for the process to terminate.

gvshil 03-12-2010 12:05 1557391

Habetdin,
К сожалению, не помогло.

Wilddeer 05-12-2010 11:32 1558662

Привет всем!
Мог бы кто нибудь скинуть простенький пример скрипта с распаковщиком Freearc,ну и чтобы установка красиво была оформлена?

Vitek 07 05-12-2010 15:54 1558822

Wilddeer, а для кого, собственно, шапка сделана?
Цитата:

Цитата Serega
Показать/скрыть: Ссылки на примеры скриптов: »

Цитата:

Цитата Serega
Need for Speed™ Undercover.iss v 2.2 - пример скрипта для игры Need for Speed+FreeArc, одним словом название говорит само за себя, (ссылка на сообщение); »


Wilddeer 05-12-2010 19:29 1558957

Vitek 07

Ну я новичок в inno setup,мне нужен простой пример скрипта где есть распаковка FreeArc архива и картинки в инсталляторе свои можно поставить!

А в need for speed сложный скрипт

Greatest_nO_Ob 06-12-2010 07:56 1559311

Ффсем иномыслящим, здравсте :)
Небольшая просьба.... обновите пожалуйста ссылки в шапке... некоторые уже не работають... :(
Буду Вам очень признателен :)

Andre123123 06-12-2010 15:53 1559589

Помогите пожалуйста со скриптом. Как реализовать идею выбора компонентов и создание из этих компонентов собственного инсталятора (т.е конструктора для создания дистрибутива из выбранных компонентов)? Возможно ли это?

Petruchodd 08-12-2010 18:53 1561267

Люди хелп. Не знаю что делать. Сделал скрипт в котором в середине выполняется UninsHS.exe (пока его не всовывал) скрипт работал норм, он и сейчас работает хорошо. НО он не хочет заменять в папке установки старые файлы на новые :((( Подскажитееее пожалуйста, что можна сделать . Вот скрипт






[Setup]
AppID = asdf
AppName=asdf
AppVersion=1.55.1
AppPublisher=Company
DefaultDirName={pf}\asdf
DefaultGroupName=asdf
AllowNoIcons=yes
LicenseFile=C:\Peter work\instalation script\files for install\legal.txt
OutputBaseFilename=setup
Compression=lzma

SolidCompression=yes
UninstallDisplayIcon = {app}\asdf,0
UninstallDisplayName = Uninstall asdf

; For modify button in control panel
AppModifyPath ="{app}\asdf" /m0=asdf

[Languages]


[Components]


[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1
Name: quicklaunchicon7; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; MinVersion: 0,6.1
[Files]

Source: "C:\Peter work\instalation script\files for install\icon.ico"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Peter work\instalation script\files for install\legal.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Peter work\instalation script\files for install\UninsHs.exe"; DestDir: "{app}"; Flags: restartreplace
Source: "C:\Peter work\instalation script\files for install\play.jpg"; DestDir: "{app}"; Flags: restartreplace
Source: "C:\Peter work\instalation script\files for install\background.jpg"; DestDir: "{app}"; Flags: restartreplace
Source: "C:\Peter work\instalation script\files for install\asdf.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Dirs]
; Create folder for saving installation package
Name: "{userappdata}\$Inst$"; Attribs: hidden; Flags: uninsalwaysuninstall

[Icons]
Name: "{group}\asdf"; Filename: "{app}\asdf.exe"
Name: "{group}\{cm:UninstallProgram,asdf}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\asdf"; Filename: "{app}\asdf.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\asdf"; Filename: "{app}\asdf.exe";
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\asdf"; Filename: "{app}\asdf.exe"
Name: {group}\Uninstall asdf;Filename: "{app}\UninsHs.exe"; WorkingDir: "{app}"; Parameters: /u0=asdf

[InstallDelete]
Type: dirifempty; Name: "{userappdata}\$Inst$"

[Run]
; Register UninsHs to control panel
Filename: "{app}\UninsHS.exe"; Parameters: "/r0=asdf,{language},{srcexe},{userappdata}\$Inst$\setup.exe";WorkingDir: "{app}"; Flags: runhidden runminimized skipifdoesntexist
Filename: "{app}\asdf.exe"; Description: "{cm:LaunchProgram,asdf}"; Flags: nowait postinstall skipifsilent
[UninstallDelete]
; Delete the installation file

Type: files; Name: "{userappdata}\$Inst$\setup"

; Delete the installation folder

Type: dirifempty; Name: "{userappdata}\$Inst$"

[code]
{For UninsHs; Skip some wizard page when repair}
function ShouldSkipPage(CurPage: Integer): Boolean;
begin
if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
case CurPage of
wpLicense, wpPassword, wpInfoBefore,
//UserPage.Id,
wpUserInfo, wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
Result := True;
end;
end;

function NextButtonClick(CurPage: Integer): Boolean;
var
sz:Integer;
s:string;
count:integer;
ErrorCode:integer;
ResultCode:integer;
res:integer;
begin
Result:=True;
count:=0;
If CurPage=wpSelectDir then

begin

if FileExists(ExpandConstant('{app}\UninsHS.exe')) and (count=0) then
begin

ShellExec('', ExpandConstant('{app}\UninsHS.exe'), '/u0=asdf', '', SW_SHOW, ewNoWait, ErrorCode);
Exec('taskkill', '/f /im setup.tmp', '', SW_Hide, ewNoWait, ErrorCode);
// Exec(ExpandConstant('{app}\UninsHS.exe'), ' /u0=asdf',ExpandConstant('{app}'),SW_SHOW,ewWaitUntilTerminated,res);



//
count:=1;

Result := False;
end ;


end;
end;


end .

ну не ужели никто не может помочь ? подсказать - почему файлы после переустановки не обновляються (

death7lord 09-12-2010 01:25 1561533

ровно два дня сижу в инете и пытаюсь разобраться в скриптах по распаковке arc.... но каждый раз возникает какая-нибудь синтаксическая или иная ошибка....
можете показать самый наипростейший пример скрипка по распаковке arc архивов (вернее даже кусок кода)
бары и прочие красивости не интересуют, главное что бы архивы arc распаковывал сам inno setup, а не через батник....
спасибо заранее

p.s.может ли ещё всё зависеть от версии компилятора? обычный с кряком и китайский расширенный работают одинаково
_____________________________
уже сам разобрался с arc-extrator, когда архивы лежат на исходном диске в корне

Imitri7 11-12-2010 18:25 1563385

death7lord, юзай IsDone
---------------------------------------------------------------------------------------------------------------------
Цитата:

Цитата sergey3695
кто знает помогите пожалуйста, как сделать так:

Чтобы при нажатии менялась форма инстала?

+1 ну или хотяб покажите как реализовать смену формы инстлала по клику на чекбокс(как добавить чекбокс знаю)

serg aka lain 11-12-2010 20:11 1563480

Цитата:

Цитата Imitri7
+1 ну или хотяб покажите как реализовать смену формы инстлала по клику на чекбокс(как добавить чекбокс знаю) »

Для этого надо будет писать очень много кода (описание стандартной формы и расположение на ней элементов, и описание новой формы с новым расположением этих элементов),
если готов потрудиться, то вот ->
читать дальше »
Код:


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

[code]
var
  MyCheck: TCheckBox;

procedure StandartForm();
begin
  { описание стандартного расположения элементов WizardForm }
  with WizardForm do
  begin
    ClientWidth := ScaleX(497);
    ClientHeight := ScaleY(360);
    Center;
  end; 
end;

procedure MyNewForm();
begin
  { описание нового расположения элементов WizardForm }
  with WizardForm do
  begin
    ClientWidth := ScaleX(700);
    ClientHeight := ScaleY(500);
    Center;
  end;
end;

procedure GetWizardForm(Sender: TObject);
begin
  if MyCheck.Checked then
    MyNewForm()
  else
  StandartForm();
end;

procedure InitializeWizard();
begin
  MyCheck := TCheckBox.Create(WizardForm);
  with MyCheck do
  begin
    SetBounds(5, 330, 100, 13);
    Caption := 'Сменить размер';
    OnClick := @GetWizardForm;
    Parent := WizardForm;
  end;
end;


Imitri7 11-12-2010 22:45 1563607

serg aka lain, можешь еще пример показать чтоб чекбокс с надписью в другое место перемещались?
+ как на определенной странице сделать(сори за нубство, никогда сам не писал код)

serg aka lain 11-12-2010 23:58 1563672

Цитата:

Цитата Imitri7
можешь еще пример показать чтоб чекбокс с надписью в другое место перемещались?
+ как на определенной странице сделать(сори за нубство, никогда сам не писал код) »

Если подразумевается окно распаковки файлов, то я сделал бы так ->
читать дальше »
Код:

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

[Files]
Source: {sys}\*.dll; DestDir: {app}; Flags: external deleteafterinstall;

[code]
var
  MyCheck: TCheckBox;

procedure StandartForm();
begin
  with WizardForm do
  begin
    ClientWidth := ScaleX(497);
    ClientHeight := ScaleY(360);
    Center;
    Bevel.Show;
    Bevel1.Show;
    MainPanel.Show;
    with InnerNotebook do
    begin
      Left := ScaleX(40);
      Top := ScaleY(72);
      Width := ScaleX(417);
    end;
    with StatusLabel do
      Width := ScaleX(417);

    with FileNameLabel do
    begin
      ScaleY(16);
      Width := ScaleX(417);
    end;
    with ProgressGauge do
    begin
      Top := ScaleY(42);
      Width := ScaleX(417);
    end;
    with CancelButton do
    begin
      Left := ScaleX(412);
      Top := ScaleY(327);
    end;   
  end;
  with MyCheck do
    Top := ScaleY(330); 
end;

procedure MyNewForm();
begin
  with WizardForm do
  begin
    ClientWidth := ScaleX(395);
    ClientHeight := ScaleY(120);
    Center;
    Bevel.Hide;
    Bevel1.Hide;
    MainPanel.Hide;
    with InnerNotebook do
    begin
      Left := ScaleX(10);
      Top := ScaleY(10);
      Width := WizardForm.ClientWidth - ScaleX(20);
    end;
    with StatusLabel do
      Width := InnerNotebook.Width;

    with FileNameLabel do
    begin
      Top := ScaleY(20);
      Width := InnerNotebook.Width;
    end;
    with ProgressGauge do
    begin
      Top := ScaleY(40);
      Width := InnerNotebook.Width;
    end;
    with CancelButton do
    begin
      Left := WizardForm.ClientWidth div 2 - CancelButton.Width div 2;
      Top := WizardForm.ClientHeight - CancelButton.Height - ScaleY(10);
      BringToFront;
    end;
  end;
  with MyCheck do
    Top := WizardForm.CancelButton.Top;
end;

procedure GetWizardForm(Sender: TObject);
begin
  if MyCheck.Checked then
    MyNewForm()
  else
  StandartForm();
end;

procedure InitializeWizard();
begin
  MyCheck := TCheckBox.Create(WizardForm);
  with MyCheck do
  begin
    Left := ScaleX(10);
    Top := ScaleY(330);
    Width := ScaleX(150);
    Caption := 'Компактный размер';
    OnClick := @GetWizardForm;
    Parent := WizardForm;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  MyCheck.Hide;
  if CurPageID = wpInstalling then
    MyCheck.Show;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
  MyCheck.Checked := False;
end;


з.ы. Требуется тестирование, для выявления возможных глюков.

Imitri7 12-12-2010 00:29 1563686

serg aka lain, спасибо большое, глюков вроде нет, пока не заметил

Imitri7 12-12-2010 11:20 1563845

serg aka lain, в инно можно как нибудь границы окна убрать, а кнопку свернуть и закрыть сделать картинками?

serg aka lain 12-12-2010 18:03 1564151

Цитата:

Цитата Imitri7
в инно можно как нибудь границы окна убрать »

Имеется в виду это
Код:

procedure InitializeWizard();
begin
  WizardForm.BorderStyle := bsNone;
end;


Vamp1re 12-12-2010 22:08 1564373

Нужен inno setup скрипт для распаковки архивов winrar

Нужен inno setup скрипт для распаковки архивов winrar

Photon9 12-12-2010 22:39 1564403

Хм, севодня копался с пересборкой одной игрушки, по ходу возникло два вопроса:

1. В свойствах ярлыка есть значение Рабочая папка, каким образом в скрипте прописать его?
2. Как прикрутить через скрипт установки программы, установку дополнительных компонентов, например Games for Windows Live, C++, DX и т.д. , желательно с возможностью выбора ставить или нет.

Habetdin 12-12-2010 22:43 1564409

Photon9,
Цитата:

Цитата Photon9
Рабочая папка »

Код:

[Icons]
Name: {group}\FREE Music Downloader Studio; Filename: {app}\FMD Studio.exe; WorkingDir: {app}


Цитата:

Цитата Photon9
установку дополнительных компонентов »

Пример

TERRAN 12-12-2010 23:18 1564428

Здравствуйте!)
Не получается у меня добавить несколько архивов FreeArc (arc+srep+precomp+7.z) в скрипт Need for Speed™ Undercover [2.4a] +ISDone, первый без проблем распаковывается, а следующие вообще не подхватывает. Можно ли, что-нибудь сделать или нет?

ChVL 13-12-2010 10:36 1564644

Есть ли в Inno идентификатор установленной системы (подобно IsWin64)?
Надо разделить запуск файлов для Win7 и не для Win7:

[Run]
Filename: {app}\file_WinXP.exe; Check: "not IsWin7";
Filename: {app}\file_Win7.exe; Check: "IsWin7";

R.i.m.s.k.y. 13-12-2010 10:48 1564647

Цитата:

Цитата ChVL
Есть ли в Inno идентификатор установленной системы (подобно IsWin64)?
Надо разделить запуск файлов для Win7 и не для Win7: »

Код:

[_Code]
Function Win7():boolean;
var Version: TWindowsVersion;
begin
  GetWindowsVersionEx (Version);
  if (Version.Major = 6) and (Version.Minor = 1) then Result := true else Result := False;
end;

Вин7 - 6,1
Виста - 6,0
ХР - 5,1

Habetdin 13-12-2010 13:58 1564781

ChVL,
Цитата:

Цитата ChVL
[Run]
Filename: {app}\file_WinXP.exe; Check: "not IsWin7";
Filename: {app}\file_Win7.exe; Check: "IsWin7"; »

Код:

[Run]
; "ниже" Win7
Filename: {app}\file_WinXP.exe; OnlyBelowVersion: 0,6.1;
; Win7 и "выше"
Filename: {app}\file_Win7.exe; MinVersion: 0,6.1;

R.i.m.s.k.y., зачем через [code]? ;)

Imitri7 13-12-2010 14:02 1564785

serg aka lain,
PHP код:

procedure InitializeWizard();
begin
  MyCheck 
:= TCheckBox.Create(WizardForm);
  
with MyCheck do
  
begin
    Left 
:= ScaleX(10);
    
Top := ScaleY(330);
    
Width := ScaleX(150);
    
Caption := 'Компактный размер';
    
OnClick := @GetWizardForm;
    
Parent := WizardForm;
  
end;
end

как здесь цвет " Caption := 'Компактный размер';" прописать?
если тупо добавить Font.Color .то не работает, а если просто Color то цвет у области этой надписи меняется

R.i.m.s.k.y. 13-12-2010 14:03 1564786

Цитата:

Цитата Habetdin
R.i.m.s.k.y., зачем через [code] »

Прописывал - не сработало почему то. Пришлось самому делать. И к тому же MinVersion и OnlyBelowVersion не во всех секциях можно прописать, а такая функция работает везде.

Vamp1re 13-12-2010 14:52 1564829

Помогите как вместо распаковки архивов ARC поставить на MZ.Помогите!!! оОчень надо!!!

Цитата:

Цитата Photon9
2. Как прикрутить через скрипт установки программы, установку дополнительных компонентов, например Games for Windows Live, C++, DX и т.д. , желательно с возможностью выбора ставить или нет. »

PHP код:

[Run]
Filename"{src}\[b]НАЗВАНИЕ ПАПКИ[/b]\[b]НАЗВАНИЕ ФАЙЛА.exe[/b]"WorkingDir"{src}\[b]ПАПКА[/b]"Parameters"/silent"Check: [b]ПАПКА[/b]; FlagswaituntilterminatedBeforeInstall: [b]НАЗВАНИЕ ФАЙЛА[/b]Progress

все файлы закинуть в папку с инсталятором

Помогите как вместо распаковки архивов ARC поставить на MZ.Помогите!!! оОчень надо!!!

nik1967 13-12-2010 16:15 1564885

Imitri7,
Так просто изменить цвет лебела, я думаю, не получиться. Только созданием нового лебела:
читать дальше »
Код:

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

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
 
[Files]
Source: {sys}\*.dll; DestDir: {app}; Flags: external deleteafterinstall;
 
[_code]
function GetSystemMetrics(nIndex: Integer): Integer;
 external 'GetSystemMetrics@user32.dll stdcall';
 
var
  MyCheck: TCheckBox;
  MyCheckLabel: TLabel;

procedure MyCheckOnClick(Sender: TObject);
begin
  if MyCheck.Checked = False then
    MyCheck.Checked:= True else
    MyCheck.Checked:= False;
end;
 
procedure StandartForm();
begin
  with WizardForm do
  begin
    ClientWidth := ScaleX(497);
    ClientHeight := ScaleY(360);
    Center;
    Bevel.Show;
    Bevel1.Show;
    MainPanel.Show;
    with InnerNotebook do
    begin
      Left := ScaleX(40);
      Top := ScaleY(72);
      Width := ScaleX(417);
    end;
    with StatusLabel do
      Width := ScaleX(417);
    with FileNameLabel do
    begin
      ScaleY(16);
      Width := ScaleX(417);
    end;
    with ProgressGauge do
    begin
      Top := ScaleY(42);
      Width := ScaleX(417);
    end;
    with CancelButton do
    begin
      Left := ScaleX(412);
      Top := ScaleY(327);
    end;     
  end;
  with MyCheck do
    Top := ScaleY(330);
  with MyCheckLabel do begin
    Top := ScaleY(332);
    Left := ScaleX(30);
    Parent:= WizardForm;
  end;
end;
 
procedure MyNewForm();
begin
  with WizardForm do
  begin
    ClientWidth := ScaleX(395);
    ClientHeight := ScaleY(120);
    Left := GetSystemMetrics(16) - ClientWidth - ScaleX(8);
    Top := GetSystemMetrics(17) - ClientHeight - ScaleY(8);   
    Bevel.Hide;
    Bevel1.Hide;
    MainPanel.Hide;
    with InnerNotebook do
    begin
      Left := ScaleX(10);
      Top := ScaleY(10);
      Width := WizardForm.ClientWidth - ScaleX(20);
    end;
    with StatusLabel do
      Width := InnerNotebook.Width;
 
    with FileNameLabel do
    begin
      Top := ScaleY(20);
      Width := InnerNotebook.Width;
    end;
    with ProgressGauge do
    begin
      Top := ScaleY(40);
      Width := InnerNotebook.Width;
    end;
    with CancelButton do
    begin
      Left := WizardForm.ClientWidth div 2 - CancelButton.Width div 2;
      Top := WizardForm.ClientHeight - CancelButton.Height - ScaleY(10);
      BringToFront;
    end;
  end;
  with MyCheck do
    Top := WizardForm.CancelButton.Top;
  with MyCheckLabel do begin
    Top := WizardForm.CancelButton.Top -8;
    Left := ScaleX(20);
    Parent:= WizardForm.InstallingPage;
  end;
end;
 
procedure GetWizardForm(Sender: TObject);
begin
  if MyCheck.Checked then
    MyNewForm()
  else
  StandartForm();
end;
 
procedure InitializeWizard();
begin
  MyCheck := TCheckBox.Create(WizardForm);
  with MyCheck do
  begin
    Left := ScaleX(10);
    Top := ScaleY(330);
    Width := ScaleX(15);
    OnClick := @GetWizardForm;
    Parent := WizardForm;
  end;
  MyCheckLabel := TLabel.Create(WizardForm);
  with MyCheckLabel do begin
    AutoSize:=False;
    Left := ScaleX(30);
    Top := ScaleY(332);
    Width := ScaleX(150);
    Transparent:=True;
    //Font.Name:= 'Tahoma'
    //Font.Size:= 8;
    Font.Color:=clRed;
    Caption := 'Компактный размер';
    Parent := Wizardform;
    OnClick:= @MyCheckOnClick;
  end;
end;
 
procedure CurPageChanged(CurPageID: Integer);
begin
  MyCheck.Hide;
  MyCheckLabel.Hide;
  if CurPageID = wpInstalling then begin
    MyCheck.Show;
    MyCheckLabel.Show;
  end;
end;
 
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
  MyCheck.Checked := False;
end;


Imitri7 13-12-2010 16:57 1564899

nik1967, спасибо, только чет не так получается [img]del[/img] чекбокс есть, а самой надписи нет

nik1967 13-12-2010 18:00 1564949

Imitri7,
У тебя чекбокс расположен на WizardForm.InstallingPage;, а в примере на WizardForm;. Чтобы у тебя работало, нужно так:
читать дальше »
Код:

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

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
 
[Files]
Source: {sys}\*.dll; DestDir: {app}; Flags: external deleteafterinstall;
 
[_code]
function GetSystemMetrics(nIndex: Integer): Integer;
 external 'GetSystemMetrics@user32.dll stdcall';
 
var
  MyCheck: TCheckBox;
  MyCheckLabel: TLabel;

procedure MyCheckOnClick(Sender: TObject);
begin
  if MyCheck.Checked = False then
    MyCheck.Checked:= True else
    MyCheck.Checked:= False;
end;
 
procedure StandartForm();
begin
  with WizardForm do
  begin
    ClientWidth := ScaleX(497);
    ClientHeight := ScaleY(360);
    Center;
    Bevel.Show;
    Bevel1.Show;
    MainPanel.Show;
    with InnerNotebook do
    begin
      Left := ScaleX(40);
      Top := ScaleY(72);
      Width := ScaleX(417);
    end;
    with StatusLabel do
      Width := ScaleX(417);
    with FileNameLabel do
    begin
      ScaleY(16);
      Width := ScaleX(417);
    end;
    with ProgressGauge do
    begin
      Top := ScaleY(42);
      Width := ScaleX(417);
    end;
    with CancelButton do
    begin
      Left := ScaleX(412);
      Top := ScaleY(327);
    end;     
  end;
  with MyCheck do
    Top := ScaleY(208);
  with MyCheckLabel do begin
    Top := ScaleY(209);
    Left := ScaleX(20);
  end;
end;
 
procedure MyNewForm();
begin
  with WizardForm do
  begin
    ClientWidth := ScaleX(395);
    ClientHeight := ScaleY(120);
    Left := GetSystemMetrics(16) - ClientWidth - ScaleX(8);
    Top := GetSystemMetrics(17) - ClientHeight - ScaleY(8);   
    Bevel.Hide;
    Bevel1.Hide;
    MainPanel.Hide;
    with InnerNotebook do
    begin
      Left := ScaleX(10);
      Top := ScaleY(10);
      Width := WizardForm.ClientWidth - ScaleX(20);
    end;
    with StatusLabel do
      Width := InnerNotebook.Width;
 
    with FileNameLabel do
    begin
      Top := ScaleY(20);
      Width := InnerNotebook.Width;
    end;
    with ProgressGauge do
    begin
      Top := ScaleY(40);
      Width := InnerNotebook.Width;
    end;
    with CancelButton do
    begin
      Left := WizardForm.ClientWidth div 2 - CancelButton.Width div 2;
      Top := WizardForm.ClientHeight - CancelButton.Height - ScaleY(10);
      BringToFront;
    end;
  end;
  with MyCheck do
    Top := WizardForm.CancelButton.Top -7;
  with MyCheckLabel do begin
    Top := WizardForm.CancelButton.Top -6;
    Left := ScaleX(20);
  end;
end;
 
procedure GetWizardForm(Sender: TObject);
begin
  if MyCheck.Checked then
    MyNewForm()
  else
  StandartForm();
end;
 
procedure InitializeWizard();
begin
  MyCheck := TCheckBox.Create(WizardForm);
  with MyCheck do
  begin
    Top := ScaleY(208);
    Width := ScaleX(15);
    OnClick := @GetWizardForm;
    Parent := WizardForm.InstallingPage;
  end;
  MyCheckLabel := TLabel.Create(WizardForm);
  with MyCheckLabel do begin
    AutoSize:=False;
    Left := ScaleX(20);
    Top := ScaleY(209);
    Width := ScaleX(150);
    Transparent:=True;
    //Font.Name:= 'Tahoma'
    //Font.Size:= 8;
    Font.Color:=clRed;
    Caption := 'Компактный размер';
    Parent:= WizardForm.InstallingPage;
    OnClick:= @MyCheckOnClick;
  end;
end;
 
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
  MyCheck.Checked := False;
end;


Imitri7 13-12-2010 18:29 1564980

nik1967,
PHP код:

procedure CurPageChanged(CurPageIDInteger);
begin
 
if CurPageID=wpInstalling then
 begin
   WizardForm
.CancelButton.Left:=ScaleX(122);
   
WizardForm.CancelButton.Top:=ScaleY(70);
   
ButtonPanel[bidCancel].Left := WizardForm.CancelButton.Left;
   
ButtonPanel[bidCancel].Top := WizardForm.CancelButton.Top;
 
end;
end

аналог этого как-то реализовать для StandartForm и MyNewForm можно?

serg aka lain 13-12-2010 20:46 1565071

Цитата:

Цитата Imitri7
как-то реализовать для StandartForm и MyNewForm можно? »

А что конкретно не получается?

Imitri7 13-12-2010 21:26 1565102

serg aka lain нужно сделать текстуринг кнопок с помошью
читать дальше »
PHP код:

const
  
ButtonWidth 80;    //Указываем размер кнопок
  
ButtonHeight 23;

  
bidBack 0;
  
bidNext 1;
  
bidCancel 2;
  
bidDirBrowse 3;
  
bidGroupBrowse 4;

var
  
ButtonPanel: array [0..4of TPanel;
  
ButtonImage: array [0..4of TBitmapImage;
  
ButtonLabel: array [0..4of TLabel;

procedure ButtonLabelClick(SenderTObject);
var
  
ButtonTButton;
begin
  ButtonImage
[TLabel(Sender).Tag].Left:=0
  
case TLabel(Sender).Tag of
    bidBack
Button:=WizardForm.BackButton
    bidNext
Button:=WizardForm.NextButton
    bidCancel
Button:=WizardForm.CancelButton
    bidDirBrowse
Button:=WizardForm.DirBrowseButton
    bidGroupBrowse
Button:=WizardForm.GroupBrowseButton
  
else
    Exit
  
end
  Button
.OnClick(Button)
end;

procedure ButtonLabelMouseDown(SenderTObjectButtonTMouseButtonShiftTShiftStateXYInteger);
begin
  
if ButtonLabel[TLabel(Sender).Tag].Enabled then
     ButtonImage
[TLabel(Sender).Tag].Left:=-ButtonWidth
end
;

procedure ButtonLabelMouseUp(SenderTObjectButtonTMouseButtonShiftTShiftStateXYInteger);
begin
  ButtonImage
[TLabel(Sender).Tag].Left:=0
end
;

procedure LoadButtonImage(AButtonTButtonAButtonIndexinteger);
var
  
ImageTBitmapImage;
  
PanelTPanel;
  
LablTLabel;

begin
  Panel
:=TPanel.Create(WizardForm)
  
Panel.Left:=AButton.Left
  Panel
.Top:=AButton.Top
  Panel
.Width:=AButton.Width
  Panel
.Height:=AButton.Height
  Panel
.Tag:=AButtonIndex
  Panel
.Parent:=AButton.Parent
  ButtonPanel
[AButtonIndex]:=Panel

  Image
:=TBitmapImage.Create(WizardForm)    //Рисунок который ложится на кнопку
  
Image.Width:=160                          //Обязательно прописать оригинальный размер рисунка
  
Image.Height:=23
  Image
.Enabled:=False
  Image
.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
  
Image.Parent:=Panel
  ButtonImage
[AButtonIndex]:=Image

  with TLabel
.Create(WizardForm) do begin
    Tag
:=AButtonIndex
    Parent
:=Panel
    Width
:=Panel.Width
    Height
:=Panel.Height
    Transparent
:=True
    OnClick
:=@ButtonLabelClick
    OnDblClick
:=@ButtonLabelClick
    OnMouseDown
:=@ButtonLabelMouseDown
    OnMouseUp
:=@ButtonLabelMouseUp
  end

  Labl
:=TLabel.Create(WizardForm)        //Текст кнопок
  
Labl.Left:=23                          //Указываем положение текста
  
Labl.Top:=5
  Labl
.Autosize:=True
  Labl
.Alignment:=taCenter
  Labl
.Tag:=AButtonIndex
  Labl
.Transparent:=True
  Labl
.Font.Color:=clFont               //Цвет текста
  
Labl.Caption:=AButton.Caption
  Labl
.OnClick:=@ButtonLabelClick
  Labl
.OnDblClick:=@ButtonLabelClick
  Labl
.OnMouseDown:=@ButtonLabelMouseDown
  Labl
.OnMouseUp:=@ButtonLabelMouseUp
  Labl
.Parent:=Panel
  ButtonLabel
[AButtonIndex]:=Labl
end
;

procedure UpdateButton(AButtonTButton;AButtonIndexinteger);
begin
  ButtonLabel
[AButtonIndex].Caption:=AButton.Caption
  ButtonPanel
[AButtonIndex].Visible:=AButton.Visible
  ButtonLabel
[AButtonIndex].Enabled:=Abutton.Enabled
end
;

procedure LicenceAcceptedRadioOnClick(SenderTObject);
begin
  ButtonLabel
[bidNext].Enabled:=True
  ButtonPanel
[bidNext].Enabled := True
end
;

procedure LicenceNotAcceptedRadioOnClick(SenderTObject);
begin
  ButtonLabel
[bidNext].Enabled:=False
  ButtonPanel
[bidNext].Enabled := False
end
;

procedure CurPageChanged(CurPageIDInteger);
begin
  UpdateButton
(WizardForm.BackButton,bidBack)
  
UpdateButton(WizardForm.NextButton,bidNext)
  
UpdateButton(WizardForm.CancelButton,bidCancel)
  
ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width ButtonLabel[bidBack].Width 2);
  
ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width ButtonLabel[bidNext].Width 2);
  
ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width ButtonLabel[bidCancel].Width 2);
  
ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width ButtonLabel[bidDirBrowse].Width 2);
  
ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width ButtonLabel[bidGroupBrowse].Width 2);
end;

procedure InitializeWizard();
begin
  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:=337
  WizardForm
.DirBrowseButton.Width:=ButtonWidth
  WizardForm
.DirBrowseButton.Height:=ButtonHeight

  WizardForm
.GroupBrowseButton.Left:=337
  WizardForm
.GroupBrowseButton.Width:=ButtonWidth
  WizardForm
.GroupBrowseButton.Height:=ButtonHeight

  WizardForm
.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

  WizardForm
.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

  ExtractTemporaryFile
('button.bmp')
  
LoadButtonImage(WizardForm.BackButton,bidBack)
  
LoadButtonImage(WizardForm.NextButton,bidNext)
  
LoadButtonImage(WizardForm.CancelButton,bidCancel)
  
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
  
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end



чет я как уже не пробовал, все кнопки с текстурой кроме кнопки отмены в StandartForm и MyNewForm :(

serg aka lain 13-12-2010 21:47 1565129

Цитата:

Цитата Imitri7
чет я как уже не пробовал, все кнопки с текстурой кроме кнопки отмены в StandartForm и MyNewForm »

А новые координаты для bidCancel, в процедурах (StandartForm, MyNewForm) пробовал?
Код:

  ButtonPanel[bidCancel].Left := WizardForm.CancelButton.Left;
  ButtonPanel[bidCancel].Top := WizardForm.CancelButton.Top;

з.ы. и удали контрол BringToFront у кнопки CancelButton, т.к. текстура (панелька) будет слетать.

ChVL 13-12-2010 21:53 1565135

Habetdin,

IMHO, при такой записи указание версии относится к файлам, а привязки к версии системы нет

Habetdin 13-12-2010 22:26 1565160

ChVL,
Цитата:

Цитата ChVL
IMHO, при такой записи указание версии относится к файлам, а привязки к версии системы нет »

С точностью до наоборот:
Цитата:

Цитата Справка
MinVersion
A minimum Windows version and Windows NT version respectively for the entry to be processed. If you use "0" for one of the versions then the entry will never be processed on that platform. If you leave one of the versions empty then the entry will use the default MinVersion for that platform. Build numbers and/or service pack levels may be included in the version numbers. This overrides any MinVersion directive in the script's [Setup] section.

An entry without a MinVersion parameter is always processed, unless other parameters say it shouldn't be.

Example:
Код:

MinVersion: 4.0,4.0
MinVersion: 4.1,

OnlyBelowVersion
Basically the opposite of MinVersion. Specifies the minimum Windows and Windows NT version for the entry not to be processed. For example, if you put 4.1,5.0 and the user is running Windows 95 or NT 4.0 the entry will be processed, but if the user is running Windows 98 (which reports its version as 4.1) or Windows 2000 (which reports its version as NT 5.0), it will not be processed. Putting "0" for one of the versions means there is no upper version limit. Build numbers and/or service pack levels may be included in the version numbers. This overrides any OnlyBelowVersion directive in the script's [Setup] section.

An entry without an OnlyBelowVersion parameter is always processed, unless other parameters say it shouldn't be.

Example:
Код:

OnlyBelowVersion: 4.1,5.0


STRAYKER 14-12-2010 17:17 1565747


КАК СОЗДАТЬ ТАКОЕ ???

actavir 14-12-2010 21:51 1565950

Всем привет. Подскажите пожалуйста почему при данном скрипте
--------------------
[CustomMessages]
rus.ArcTitle=Распаковка архивов FreeArc...
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.AllArcProgress=Прогресс распаковки архивов: %1%%
rus.Extracting=Распаковывается: %1
rus.Taskbar=%1%%, ждите %2
rus.ArcRemains=Осталось ждать %1
rus.LongTime=вечно
rus.Ending=завершение
rus.ArcFail=Распаковка архивов не завершена!
rus.ArcBreak=Распаковка архивов прервана!
rus.ArcFinishedHeading=Установка игры {#GameName} не завершена
rus.ArcError=Установка игры {#GameVerName} не была завершена.
rus.ArcTrouble=Пожалуйста, устраните проблему и запустите установку снова.
rus.ArcBroken=Возможно, архив %1 повреждён или недостаточно места на диске назначения.
------------------------
вылетает ошибка: Unknown Language name "rus"

Habetdin 14-12-2010 21:59 1565958

actavir,
Код:

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


actavir 14-12-2010 22:04 1565967

Спосибо за тот ответ у меня сразу же назрел ещё один вопрос:

Код: TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
Ошибка: Unknown indentifier 'PAnsiChar'
Что делать?

RyoTsubaki 14-12-2010 22:36 1566007

Прошу прощения за простой и глупый вопрос.
В конце инсталяции мы видим "Обновить игру" и чекбокс с галочкой. Как сделать что бы галочку нельзя было снять?
Или же как совсем отключить последнее окно?
И как первое?(Здравствуйте, вас приветствует..)
Да, знаю что задаю глупый вопрос, если сегодня не найду ответа сам - буду рад помощи.

serg aka lain 14-12-2010 23:54 1566075

Цитата:

Цитата RyoTsubaki
Как сделать что бы галочку нельзя было снять? »

Если чекбокс один, то так->
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpFinished then
    WizardForm.RunList.ItemEnabled[0] := False;
end;

Цитата:

Цитата RyoTsubaki
Или же как совсем отключить последнее окно? »

Код:

[Setup]
DisableFinishedPage=True

Цитата:

Цитата RyoTsubaki
И как первое?(Здравствуйте, вас приветствует..) »

Код:

[Setup]
DisableWelcomePage=True

Всё это есть в Help'e (можно вызвать нажатием F1)

RyoTsubaki 15-12-2010 00:04 1566079

Цитата:

Цитата serg aka lain
Всё это есть в Help'e (можно вызвать нажатием F1) »

Заставило умереть от стыда =(
Спасибо, надеюсь сегодня закончу работу.

actavir 15-12-2010 10:40 1566301

Вложений: 1
Люди выручайте. Написал вот такой скрипт

Ошибка вылезает на строчке
Код:

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
Посмотрите код, если можно подкорректируйте его.
Заранее спасибо!!!!

Imitri7 15-12-2010 12:30 1566373

serg aka lain, спасибо большое, все работает

STRAYKER 15-12-2010 13:43 1566421

Как создать такую задачу ??

actavir 15-12-2010 15:59 1566515

Народ подскажите как использовать freearc в inno setup. Если можно пример с объяснением. А ещё лучше дайте номер аси и я поспрашиваю что не понятно.
"Не погу разобрать. Заколебался"
Заранее спосибо.

Wilddeer 15-12-2010 17:00 1566566

Цитата:

Народ подскажите как использовать freearc в inno setup. Если можно пример с объяснением. А ещё лучше дайте номер аси и я поспрашиваю что не понятно.
"Не погу разобрать. Заколебался"
Заранее спосибо.
Присоединяюсь!
Жду помощи!

Vamp1re 15-12-2010 18:47 1566621

Цитата:

Цитата actavir
Народ подскажите как использовать freearc в inno setup. Если можно пример с объяснением. А ещё лучше дайте номер аси и я поспрашиваю что не понятно.
"Не погу разобрать. Заколебался"
Заранее спосибо. »

Создаешь FreeArc архив потом кидаешь его в папку с инсталятором и открываешь инсталятор вуоля :) он тебе распакует все с етого архива куда тебе надо :)

У меня похожий вопрос как у actavir, Как использовать архивы c форматом exe в inno setup

Habetdin 16-12-2010 14:04 1567213

Цитата:

Цитата STRAYKER
Как создать такую задачу ?? »

Пример

actavir, попробуй заменить PAnsiChar на PChar

actavir 16-12-2010 15:08 1567272

Вложений: 1
Спасибо большое Habetdin.

У меня возникла проблема с реестром. Я импортировал реестр из игры NFS Shift Получилось следующее:
Код:

Root: HKLM; SubKey: SOFTWARE\Electronic Arts\Electronic Arts\Need for Speed Shift; ValueType: string; ValueName: DisplayName; ValueData: Need for Speed - Shift; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\Electronic Arts\Need for Speed Shift; ValueType: string; ValueName: ProductName; ValueData: Need for Speed - Shift; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\Electronic Arts\Need for Speed Shift; ValueType: string; ValueName: Folder; ValueData: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Need for Speed Shift; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\Electronic Arts\Need for Speed Shift; ValueType: string; ValueName: Install Dir; ValueData: D:\Games\Need for Speed Shift\; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\Electronic Arts\Need for Speed Shift; ValueType: string; ValueName: Installed From; ValueData: D:\Торенты\Need.for.Speed.Shift.2009.PC.1xDVD-5\NFS_Shift\; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\Electronic Arts\Need for Speed Shift; ValueType: string; ValueName: Product GUID; ValueData: {{BBF0A67B-5DBA-452F-9D2E-6F168BC226E4}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\Electronic Arts\Need for Speed Shift; ValueType: string; ValueName: Registration; ValueData: Software\Electronic Arts\Electronic Arts\Need for Speed SHIFT\ergc; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\Electronic Arts\Need for Speed Shift\ergc; ValueType: string; ValueData: R6KK2A2RAU76QAU5ARLD; Flags: uninsdeletevalue uninsdeletekeyifempty

Вроде скомпилировал скрипт и игра устанавливается, только после её запуска она показывает чёрный экран несколько секунд и выдаёт ошибку приложения.
Мне кажется что это из-за реестра. Подскажите пожалуйста.
p.s. На всякий случай прилагаю скрипт может там где то ошибка.
Помогите пожалуйста!!!

R.i.m.s.k.y. 16-12-2010 15:15 1567274

Цитата:

Цитата actavir
Помогите пожалуйста »

Код:

Root: HKLM; SubKey: SOFTWARE\Electronic Arts\Electronic Arts\Need for Speed Shift; ValueType: string; ValueName: Folder; ValueData: {group}\Need for Speed Shift; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\Electronic Arts\Need for Speed Shift; ValueType: string; ValueName: Install Dir; ValueData: {app}\Need for Speed Shift\; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\Electronic Arts\Need for Speed Shift; ValueType: none; ValueName: Installed From; ValueData: ; Flags: uninsdeletevalue uninsdeletekeyifempty

Habetdin,
Сделать в Run запуск разного не фокус, а как там подразделы замутить именно как на скрине?

actavir 16-12-2010 15:35 1567286

Habetdin, огромное спасибо!!!

R.i.m.s.k.y. 16-12-2010 15:36 1567287

Цитата:

Цитата actavir
Habetdin, огромное спасибо!!! »

Да всегда пожалуйста ;)

actavir 16-12-2010 16:03 1567305

R.i.m.s.k.y., прости перепутал ники.
Слушай у меня почему то всё равно игра вылетает не посмотришь мой скрипт чё я там не так сделал?

R.i.m.s.k.y. 16-12-2010 16:09 1567314

Цитата:

Цитата actavir
R.i.m.s.k.y., прости перепутал ники.
Слушай у меня почему то всё равно игра вылетает не посмотришь мой скрипт чё я там не так сделал? »

Жмем полезное сообщение. А скрипт чегой-то не качается. Советую скачать регшот и через него отрегшотить все изменения в реестре и какие файлы куда пишутся.

actavir 16-12-2010 16:20 1567325

Дело в том что я только начал заниматься репаками и тупо понимаю что такое регшот.
А ссылка на файл вот: http://forum.oszone.net/attachment.p...6&d=1292501316

R.i.m.s.k.y. 16-12-2010 16:31 1567337

Цитата:

Цитата actavir
и тупо понимаю что такое регшот »

ну для таких случаев сделали яндекс
http://www.winblog.ru/softall/softad...t08080801.html
Цитата:

Цитата actavir
А ссылка на файл вот: »

Вы делали на фриарк, я с ним вообще никак, ничего подсказать не могу.

А так по мелочи - в секции Run для PhysX waituntilidle поменяйте на waituntilterminated, в секции Icons убрать "Удалить Need For Speed Shift" и в папке/архиве убрать unins000.exe, инно сделает его сам.
правильная строчка
Name: {group}\cm:UninstallProgram,Need For Speed Shift}; Filename: {uninstallexe}

Почему в секции реестра Folder ссылается на С:\ProgramData\Microsoft\Windows\Start Menu\Programs\Need for Speed Shift? на папку меню пуск? странно.

Вообще в скрипте не должно быть абсолютных путей, все на переменных вида {app}. Что это значит смотрим в справку. На клавиатуре даже кнопка есть для этого отдельная - F1.

actavir 16-12-2010 16:37 1567342

Я скачал ту программу. А что делать дальше???

И ещё можете обяснить как вы так переделали ту запись реестра что я вам дал, а то мне приходиться каждый раз обращатся по этой теме???

R.i.m.s.k.y. 16-12-2010 16:53 1567359

Цитата:

Цитата actavir
Я скачал ту программу. А что делать дальше »

Запускать. Читать хелп.
Настраиваем на сканирование папок винды и Users, Делаем снимок 1, ставим оригинальный Шифт и только Шифт, никаких дирексов и тп, делаем снимок 2 и получаем различие в системе до и после, как в реестре так и в файлах. Аккуратненько переносим в скрипт.
Цитата:

Цитата actavir
И ещё можете обяснить как вы так переделали ту запись реестра что я вам дал, а то мне приходиться каждый раз обращатся по этой теме??? »

Клавиатурой.
Не сочтите за хамство, но пожалуйста, прежде чем задавать вопросы - почитайте помощь хотябы по тем функциям, переменным и прочим непонятным вещам, которые уже есть в скрипте, тут в шапке русский хелп к инно лежит. Так вы поймете что и откуда берется и как дальше делать, вопросы уже будут конкретные навроде "как указать путь к папке", а не общие "как сделать заипок".
К примеру {app} - это путь к папке, которая указывается в начале установки, {group} - группа ярлыков в меню пуск. F1 в общем. Хотя бы денек.
Я не лектор в универе, не буду расписывать элементарные вещи, и тут не госслужба - никто за вас не сделает. Мы помощники, добровольные. Да, бывает не понимаем, но знать за вас никто не собирается.

actavir 16-12-2010 16:59 1567364

Спасибо извините за глупые вопросы)))

actavir 16-12-2010 17:24 1567384

Я конечно извиняюсь, но у меня опять запара)))
Я скачал русский хелп инно не хочет его открывать открывает старый английский
Что делать?

R.i.m.s.k.y. 16-12-2010 17:29 1567391

Цитата:

Цитата actavir
Я скачал русский хелп инно не хочет его открывать открывает старый английский »

да нормально открывается, распаковываем и два раза щелкаем левой крысой по ISetup.hlp

actavir 16-12-2010 18:41 1567442

Пишет что не удалось подключить справку по этой программе. У меня Win 7

Habetdin 16-12-2010 18:46 1567447

actavir,
Цитата:

Цитата actavir
Пишет что не удалось подключить справку по этой программе. У меня Win 7 »

Не удается открыть файлы справки, для которых требуется программа ... » Программа "Справка Windows" (WinHlp32.exe) для Windows 7
Цитата:

Цитата R.i.m.s.k.y.
а как там подразделы замутить именно как на скрине? »

Там кроме Run еще и Tasks есть:
Цитата:

Цитата Habetdin
[Tasks]
Name: dxinstall; Description: "Обновить DirectX"; GroupDescription: "Дополнительно:" »


Vamp1re 16-12-2010 19:07 1567456

У меня установка DirectX начинаеться перед распаковкой архивов FreeArc можно ли изменить так чтоб установка DirectX начиналась после распаковки архивов FreeArc? и как ето сделать? (вот мой код)
PHP код:

Filename"{src}\DirectX\DXSETUP.exe"WorkingDir"{src}\DirectX"Parameters"/silent"CheckDirectXFlagswaituntilterminatedBeforeInstallDirectXProgress


Vamp1re 16-12-2010 20:03 1567480

ПомоОгите ПЛиИИз !!!

R.i.m.s.k.y. 16-12-2010 21:27 1567525

Цитата:

Цитата Vamp1re
вот мой Php код »

эээ ... как бы помягче сказать ... тут Inno а не PHP

Цитата:

Цитата actavir
Я скачал русский хелп инно не хочет его открывать открывает старый английский »

Бедный Ёрик...
идем на руборд и качаем патч " Программа "Справка Windows" для просмотра 32-разрядных файлов справки (.HLP) "
http://forum.ru-board.com/topic.cgi?...&limit=1&m=1#1

Цитата:

Цитата Habetdin
Там кроме Run еще и Tasks есть: »

ааа, я то думал что в секции Run такое "деревце иерархическое" можно сделать

Imitri7 17-12-2010 17:50 1568227

помогите плз грамотно объединить

1 (компактный вид)
с
2 (ISDone0.5n)

actavir 17-12-2010 19:12 1568309

Народ подправте пожалуйста реестр:

Код:

[Registry]
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: DisplayName; ValueData: Need for Speed™ Most Wanted; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Registration; ValueData: SOFTWARE\Electronic Arts\EA GAMES\Need for Speed Most Wanted\ergc; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: CacheSize; ValueData: 3171337216; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: SwapSize; ValueData: 73400320; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Language; ValueData: Russian; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Locale; ValueData: ru; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Install Dir; ValueData: {app}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Product GUID; ValueData: {{A48B9CD8-C2BA-4EC9-0081-7260D238C7CF}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Region; ValueData: Europe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Folder; ValueData: {group}\Need for Speed™ Most Wanted\; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Suppression Exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted\1.0; ValueType: dword; ValueName: Language; ValueData: $00000010; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted\1.0; ValueType: string; ValueName: DisplayName; ValueData: Need for Speed™ Most Wanted; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted\1.0; ValueType: string; ValueName: LanguageName; ValueData: Russian; Flags: uninsdeletevalue uninsdeletekeyifempty

Я его вроде и так подредактировал, но может что-то ещё упустил??

Diman19 17-12-2010 20:22 1568370

Всем привет! Скажите пожалуйста где допужена ошибка при создании инсталятора?Проблема в следующем.Создал дерево компонентов при установке,снимаю галочку с комопнентов а они всё равно устанавливаются.Помогите найти ошибку.

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


[Components]
Name: gamefiles; Description: Файлы программы™; Types: full recomend custom; Flags: fixed
Name: components; Description: Компоненты; Types: full
Name: components\cleaner; Description: Очистка диска; Flags: dontinheritcheck
Name: components\reestr; Description: Очистка реестра; Flags: dontinheritcheck
Name: manual; Description: Инструкция; Types: full recomend custom

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "F:\Applications\My program\Myprogram.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "F:\Applications\My program\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: F:\Applications\My Program\external\components\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: components
Source: F:\Applications\My program\external\component\cleaner.exe; DestDir: {app}\external\components; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: components\cleaner
Source: F:\Applications\My Program\external\components\reestr.exe; DestDir: {app}\external\components; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: components\reestr

Habetdin 17-12-2010 21:30 1568428

Diman19, пакуется вся папка:
Цитата:

Цитата Diman19
Source: "F:\Applications\My program\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs »

+ отдельные файлы из этой папки как components :)

Diman19 17-12-2010 21:49 1568444

Нужно убрать эту строчку?

Habetdin 17-12-2010 22:19 1568464

Diman19, переместите F:\Applications\My Program\external\components в F:\Applications\external\components например ;)
И поправьте строки с Components :)

Diman19 17-12-2010 22:34 1568474

Понятно.А по другому никак нельзя сделать?чтобы ничего не перемещать?

Habetdin 17-12-2010 22:50 1568482

Diman19, можно прописать вместо папки:
Цитата:

Цитата Diman19
Source: "F:\Applications\My program\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs »

Каждый файл из нее по отдельности, кроме тех, что в F:\Applications\My Program\external\components

Diman19 18-12-2010 02:09 1568567

Спасибо! А можно пример если можно как это будет выглядеть?Я запутался совсем.

В папке My Program находятся ещё несколько папок включая подпапки которые тоже нужно будет включить в установщик.Скажите пожалуйста как лучше сделать?

Habetdin 18-12-2010 09:43 1568653

Diman19,
Код:

[Files]
Source: "F:\Applications\My program\Myprogram.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "F:\Applications\My program\file1.ext"; DestDir: "{app}"; Flags: ignoreversion
Source: "F:\Applications\My program\file2.ext"; DestDir: "{app}"; Flags: ignoreversion
Source: "F:\Applications\My program\subdir\file.ext"; DestDir: "{app}\subdir"; Flags: ignoreversion
...
Source: F:\Applications\My program\external\component\cleaner.exe; DestDir: {app}\external\components; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: components\cleaner
Source: F:\Applications\My Program\external\components\reestr.exe; DestDir: {app}\external\components; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: components\reestr

Но зачем? Если можно переместить

actavir 18-12-2010 15:51 1568868

Подскажите, что можно убрать из этого кода и как его переделать?
Код:

Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: DisplayName; ValueData: Need for Speed™ Most Wanted; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Installed From; ValueData: L:\; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Registration; ValueData: SOFTWARE\Electronic Arts\EA GAMES\Need for Speed Most Wanted\ergc; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: CacheSize; ValueData: 3171337216; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: SwapSize; ValueData: 73400320; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Language; ValueData: Russian; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Locale; ValueData: ru; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: CD Drive; ValueData: L:\; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Install Dir; ValueData: C:\PROGRA~1\EAGAME~1\NEEDFO~1\; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Product GUID; ValueData: {{A48B9CD8-C2BA-4EC9-0081-7260D238C7CF}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Region; ValueData: Europe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Folder; ValueData: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\EA GAMES\Need for Speed™ Most Wanted\; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Patch URL; ValueData: http://patches.ea.com/nfs_mostwanted/home.html; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Suppression Exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: FirstTime; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: VERSION; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: SIZE; ValueData: $00000084; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_CarEnvironmentMapEnable; ValueData: $00000003; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_CarEnvironmentMapUpdateData; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_RoadReflectionEnable; ValueData: $00000003; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_MotionBlurEnable; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_ParticleSystemEnable; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_WorldLodLevel; ValueData: $00000003; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_CarLodLevel; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_OverBrightEnable; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_FSAALevel; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_RainEnable; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_TextureFiltering; ValueData: $00000002; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_RacingResolution; ValueData: $00000004; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_PerformanceLevel; ValueData: $00000005; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_VSyncOn; ValueData: $00000000; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_ShadowDetail; ValueData: $00000002; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_VisualTreatment; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted\1.0; ValueType: dword; ValueName: Language; ValueData: $00000010; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted\1.0; ValueType: string; ValueName: DisplayName; ValueData: Need for Speed™ Most Wanted; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted\1.0; ValueType: string; ValueName: LanguageName; ValueData: Russian; Flags: uninsdeletevalue uninsdeletekeyifempty


Diman19 18-12-2010 15:52 1568870

Спасибо всем кто помогает.Как я понял вот этой строчки быть не должно

Source: "F:\Applications\My program\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

И нужно прописывать каждый файл в ручную?

если перемещать данную папку

F:\Applications\My Program\external\components\ например сюда C:\my documents\external\components

И в коде прописать

Source: C:\my documents\external\components\cleaner.exe; DestDir: {app}\external\components; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: components\cleaner
Source: C:\my documents\external\components\reestr.exe; DestDir: {app}\external\components; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: components\reestr

Будет рабоать таким образом?

Habetdin 18-12-2010 18:19 1568955

Цитата:

Цитата Diman19
Будет рабоать таким образом? »

Будет

Вся проблема в том, что строка:
Цитата:

Цитата Diman19
Source: "F:\Applications\My program\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs »

Пакует и cleaner.exe, и reestr.exe » они будут распакованы даже если компоненты не выбраны :)

Vamp1re 18-12-2010 20:06 1569048

Я зделал так чтоб у меня распаковывало архивы 7zip в inno setup но там надо выбирать директорию рапаковки а мне етого ненадо так как в инсталяторе от инно ето есть! как мне сделать чтоб 7zip архиватор не запрашивал директорию распаковки?

Vitek 07 18-12-2010 20:57 1569085

actavir,
Цитата:

Цитата actavir
Installed From; ValueData: L:\; »

сменить на {src}
Цитата:

Цитата actavir
CD Drive; ValueData: L:\; »

на {src}
читать дальше »
Но мне кажется, что эти параметры бесполезны без оригинального инсталлятора.
Все параметры начинающиеся с g_ отвечают за графику


Цитата:

Цитата actavir
Install Dir; ValueData: C:\PROGRA~1\EAGAME~1\NEEDFO~1\; »

сменить на {app}


Vamp1re,
Цитата:

Цитата Vamp1re
архивы 7zip »

Уточните тип архивов 7z - 7z sfx или обычные 7z архивы + консольный 7z.exe ?

Vamp1re 18-12-2010 21:50 1569138

Цитата:

Цитата Vitek 07
Уточните тип архивов 7z - 7z sfx или обычные 7z архивы + консольный 7z.exe ? »

тип архивов 7z sfx

Vitek 07 18-12-2010 22:04 1569150

Vamp1re, а модуль sfx обычный или модифицированный от Олега Щербакова?

Если модуль sfx обычный, то можно сделать как то так

Код:

[Run]
Filename: {src}\архив.exe; WorkingDir: {src}; Parameters: "-o""{app}"" -y -aoa"; StatusMsg: Распаковка игровых архивов...; Flags: waituntilterminated;

Все параметры командной строки можно посмотреть в хелпе по 7zip :yes:

Vamp1re 18-12-2010 22:15 1569154

Vitek 07, Обычный

Vamp1re 18-12-2010 22:35 1569176

Vitek 07, ОооОооОооОооОооО !!!!!!!!!!!!!! Чуууувак тыыы ПРО100 ГЕНИЙ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! СПАСИБО!!!

Vamp1re 19-12-2010 00:27 1569245

А незнаете как подключить cab архивы?

Habetdin 19-12-2010 00:41 1569252

Цитата:

Цитата Vamp1re
cab архивы »

Код:

[Run]
Filename: {sys}\Extrac32.exe; Parameters: "/L ""{app}"" /E ""{src}\archive.cab"""; StatusMsg: Распаковка файлов...; Flags: waituntilterminated HideWizard;

{app} - куда распаковать
{src}\archive.cab - имя архива

Vamp1re 19-12-2010 01:32 1569286

Habetdin, непомагает

serg aka lain 19-12-2010 02:24 1569310

Цитата:

Цитата Vamp1re
непомагает »

Допиши: WorkingDir: {src};

Vamp1re 19-12-2010 02:31 1569315

serg aka lain, где? :)

serg aka lain 19-12-2010 02:34 1569317

Цитата:

Цитата Vamp1re
где? »

Код:

[Run]
Filename: {sys}\Extrac32.exe; Parameters: "/L ""{app}"" /E ""{src}\archive.cab"""; WorkingDir: {src}; StatusMsg: Распаковка файлов...; Flags: waituntilterminated HideWizard;


Vamp1re 19-12-2010 03:18 1569335

Habetdin, serg aka lain, Уже помогает!!!!!!

Vitek 07 19-12-2010 09:02 1569376

Vamp1re, код, предложенный Habetdin рабочий на 100%. А вы точно распаковываете Cab архивы от MS?

Vamp1re 19-12-2010 13:24 1569498

Vitek 07, Я знаю что код рабочий но у меня теперь при распаковки архивов cab распаковщик зависает

а не подскажете как сделать чтоб было 2 arc архива и они могли извлекаться в инсталяторе все 2

actavir 19-12-2010 18:40 1569744

Vitek 07, подскажите вот такой вариант правильный (я исправил, как вы говорили + изменил C:\ProgramData\....\Programs\.... на {group}):
Код:

Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: DisplayName; ValueData: Need for Speed™ Most Wanted; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Installed From; ValueData: {src}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Registration; ValueData: SOFTWARE\Electronic Arts\EA GAMES\Need for Speed Most Wanted\ergc; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: CacheSize; ValueData: 3171337216; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: SwapSize; ValueData: 73400320; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Language; ValueData: Russian; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Locale; ValueData: ru; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: CD Drive; ValueData: {src}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Install Dir; ValueData: {app}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Product GUID; ValueData: {{A48B9CD8-C2BA-4EC9-0081-7260D238C7CF}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Region; ValueData: Europe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Folder; ValueData: {group}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Patch URL; ValueData: http://patches.ea.com/nfs_mostwanted/home.html; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: string; ValueName: Suppression Exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: FirstTime; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: VERSION; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: SIZE; ValueData: $00000084; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_CarEnvironmentMapEnable; ValueData: $00000003; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_CarEnvironmentMapUpdateData; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_RoadReflectionEnable; ValueData: $00000003; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_MotionBlurEnable; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_ParticleSystemEnable; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_WorldLodLevel; ValueData: $00000003; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_CarLodLevel; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_OverBrightEnable; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_FSAALevel; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_RainEnable; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_TextureFiltering; ValueData: $00000002; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_RacingResolution; ValueData: $00000004; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_PerformanceLevel; ValueData: $00000005; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_VSyncOn; ValueData: $00000000; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_ShadowDetail; ValueData: $00000002; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted; ValueType: dword; ValueName: g_VisualTreatment; ValueData: $00000001; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted\1.0; ValueType: dword; ValueName: Language; ValueData: $00000010; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted\1.0; ValueType: string; ValueName: DisplayName; ValueData: Need for Speed™ Most Wanted; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA GAMES\Need for Speed Most Wanted\1.0; ValueType: string; ValueName: LanguageName; ValueData: Russian; Flags: uninsdeletevalue uninsdeletekeyifempty

Всё ли я правильно сделал?

Gnom_aka_Lexander 19-12-2010 21:20 1569875

Vamp1re, Чатом пользуешся каким-нибудь? А то мне не очень удобно в браузерном варианте.

R.i.m.s.k.y. 19-12-2010 21:43 1569901

Цитата:

Цитата actavir
подскажите вот такой вариант правильный »

А скомпилить-проверить скрипт кусается? чтож никто самостоятельно думать не хочет.

Vamp1re 19-12-2010 22:47 1569954

Лександер, Нет.

МИШАНЧИК 20-12-2010 05:33 1570088

Подскажите пожалуйста.
При задании расположения исходной папки с файлами для компиляции в виде:
Код:

[Files]
Source: Программа\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

Заметил, что если в исходной папке есть скрытые файлы, то инно их не видит, и не включает в инсталятор. Это можно как-то обойти? Но, не путём "сделать их не скрытыми".

R.i.m.s.k.y. 20-12-2010 07:22 1570113

Цитата:

Цитата МИШАНЧИК
Это можно как-то обойти? Но, не путём "сделать их не скрытыми". »

почитал свои источники и хелп - не нашел, как вариант сделать из нескрытыми, а потом в свойствах дописать Attribs: hidden

serg aka lain 20-12-2010 07:28 1570115

Цитата:

Цитата МИШАНЧИК
Это можно как-то обойти? Но, не путём "сделать их не скрытыми". »

Можно, прописав скрытую папку отдельно.
Код:

[Dirs]
Name: {app}\Скрытая папка; Attribs: hidden;

[Files]
Source: Программа\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: Программа\Скрытая папка\*; DestDir: {app}\Скрытая папка; Flags: ignoreversion;


Sotonisto 20-12-2010 11:24 1570266

Всем добрый день. У меня вопрос (вроде бы такой тут уже звучал когда-то).
Как при помощи инсталла внести запись в реестр из reg файла? Секция [Registry] отпадает сразу. Просто я делаю рэпак японского файтинга, а одна запись в реестре (GameName) имеет японские иероглифы. Инно их заменяет на "???", так что остается использовать только reg файл :(

actavir 20-12-2010 16:06 1570510

Подскажите как вставить картинку на фон инсталятора?
Скрипты которые есть в интернете идут с процедурой Initial..Wizard а она у меня уже есть во распаковке фриарка и они совпадают.
Что делать если можно скрипт????
Только хотелось бы изображение не на весь экран в роли фона, а именно по размеру на инсталятор

R.i.m.s.k.y. 20-12-2010 17:35 1570567

Цитата:

Цитата Sotonisto
Как при помощи инсталла внести запись в реестр из reg файла? Секция [Registry] отпадает сразу. Просто я делаю рэпак японского файтинга, а одна запись в реестре (GameName) имеет японские иероглифы. Инно их заменяет на "???", так что остается использовать только reg файл »

ну никто, никто не хочет пользоваться поиском и читать фак

В секции Run
Filename: {sys}\reg.exe; Parameters: " import ""{tmp}\ffdshow32.reg"""; StatusMsg: Импорт настроек FFDShow; Flags: runhidden waituntilterminated; Check: (not IsWin64)

В коде
if (not IsWin64) then begin
RegEdit := ExpandConstant('{sys}\reg.exe');
reg := ExpandConstant('{tmp}\\') + 'FFDShow32.reg';
Exec(RegEdit, ' import ' + ' ' + AddQuotes(reg),ExpandConstant('{tmp}'),SW_HIDE, ewWaitUntilTerminated, res);
end;

Так же надо учесть что в вин64 есть секции 32битной ОС и 64битной ОС. Для них {sys}\reg.exe заменяется на {syswow64}\reg.exe

BadBoyig 21-12-2010 01:30 1570828

Всем Зд.! Кто нибудь может прикрутить два прогресс-бара...

1. Бар-показывает распаковку файла.....

2. Бар-показывает общий прогресс распаковки.....

Зарание Сп....


Скрипт

Raf96 21-12-2010 18:25 1571425

Скажите кто нибудь пожалуйста как через Inno Setup реализовать автоматическую активацию игр по выбору как тут:
http://img155.imageshack.us/img155/5946/82548928.png и тут: http://img213.imageshack.us/img213/6...71f5f70c03.png

actavir 21-12-2010 22:45 1571635

Подскажите пожалуйста как сделать деинсталятор игры через инно. Просто родной не хочет работать?
Лучше если скрипт будет удалять игру полностью.
Заранее спасибо.

nik1967 22-12-2010 00:31 1571708

actavir,
Что значит "родной не хочет работать?" Попробуй добавить в скрипт до секции [_Code] такие строчки:
Код:

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


R.i.m.s.k.y. 22-12-2010 09:44 1571881

Цитата:

Цитата nik1967
Попробуй добавить в скрипт до секции [_Code] »

помоему порядок расположения секций в скрипте не имеет значения, у инно жеский порядок выполнения секций независимо от их местоположения.
Цитата:

Цитата actavir
Просто родной не хочет работать »

вы просто из папки Source удалили unins*.exe?

Цитата:

Цитата Raf96
как через Inno Setup реализовать автоматическую активацию игр »

Активация игры - это или запись в реестре или файлы в users... Соответсвенно вылавливаем эту активизацию через RegShot.

aerh 22-12-2010 12:35 1572014

Помогите, как сделать так, чтобы программа Filename: "{src}\programm.exe"; запускалась не в конце установки, а на второй странице??

Raf96 22-12-2010 14:13 1572088

Цитата:

Цитата R.i.m.s.k.y.
Активация игры - это или запись в реестре или файлы в users... Соответсвенно вылавливаем эту активизацию через RegShot. »

да но тогда зачем делать выбор активировать игру или нет если можно молча всё сделать

actavir 22-12-2010 14:15 1572090

Можете скинуть полную версию скрипта на удаление. У меня где то ошибка но не могу найти где!!!

R.i.m.s.k.y. 22-12-2010 16:06 1572150

Цитата:

Цитата actavir
Можете скинуть полную версию скрипта на удаление »

скрипт на удаление он в самом скрипте - просто указываете флаги соответствующие.
Цитата:

Цитата actavir
У меня где то ошибка но не могу найти где »

ну давайте скрипт, кстати вы не ответили на мой вопрос - файл unins*.exe в папке источника есть?

Цитата:

Цитата aerh
Помогите, как сделать так, чтобы программа Filename: "{src}\programm.exe"; запускалась не в конце установки, а на второй странице »

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

[_Code]
procedure CurPageChanged(CurPageID: Integer);
var res:integer;
If CurPageID=wpSelectComponents then
begin
Exec(ExpandConstant('{src}\programm.exe'), ' параметры ',ExpandConstant('{src}'),SW_HIDE,ewWaitUntilTerminated,res);
end;
end;

CurPageID может принимать значения: wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished

actavir 22-12-2010 16:30 1572163

Цитата:

Цитата R.i.m.s.k.y.
ну давайте скрипт, кстати вы не ответили на мой вопрос - файл unins*.exe в папке источника есть? »

нет

Код:

[Setup]
AppName=Александр
AppVerName=Александр (2010)
DefaultDirName={pf}\Alexander
DefaultGroupName=Александр
AllowNoIcons=true
OutputBaseFilename=Alexander Setup
OutputDir=S:\[REPACKs]\Alexander\


UsePreviousAppDir=false
DirExistsWarning=no
ShowLanguageDialog=no

Uninstallable = yes
UninstallDisplayIcon=D:\alexander.ico
UninstallIconFile=D:\alexander.ico
UninstallFilesDir={app}
UninstallLogMode=append
UninstallStyle=modern



Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
DiskSpanning=true
DiskSliceSize=1048576000
WizardImageFile=D:\image.bmp
WizardSmallImageFile=D:\imagesmall.bmp

SetupIconFile=D:\alexander.ico


[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: "{group}\Играть в Александр"; Filename: "{app}\dmln.exe"; WorkingDir: "{app}";
Name: "{group}\Все файлы для игр"; Filename: "http://www.play-game-ru.ucoz.ru/"; WorkingDir: "http://";
Name: "{group}\Удалить Александр"; Filename: "{uninstallexe}"; WorkingDir: "{app}";
Name: "{userdesktop}\Александр"; Filename: "{app}\dmln.exe"; WorkingDir: "{app}";
Name: "{userdesktop}\Все файлы для игр"; Filename: "http://www.play-game-ru.ucoz.ru/"; WorkingDir: "http://";

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


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

это только нужная часть там внизу ещё есть рашифровка фриакра и установка директа
вот чёто не получается ничё

и ещё вопрос как сделать так что бы после окончания установки рабочий стол автоматически обновлялся так как ярлык создаваемый перед распаковкой является безликим?

gur74 22-12-2010 17:08 1572190

Спецы помогите пожалуйста начинающему не проигрывается музыка вот скрипт:

Код:


[Setup]
AppName=LikeRusXP Localization
AppVerName={cm:NameAndVersion,LikeRusXP Localization,6.01.12}
AppVersion=6.01.12
DefaultDirName={pf}\LikeRusXP Localization
DefaultGroupName=LikeRusXP Localization
OutputBaseFilename=LikeRusXP 6.01.12
Compression=lzma
LicenseFile=embedded\License.txt
InfoBeforeFile=embedded\InfoBefore.txt
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
SetupIconFile={tmp}\MAINICON.ico
 
[Files]
Source: "{tmp}\isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "{tmp}\Splash.png"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "{app}\bass.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "{app}\sound.mp3"; DestDir: "{tmp}"; Flags: dontcopy
Source: "{tmp}\ISSkin.dll"; DestDir: "{app}"; Flags: dontcopy
Source: "{tmp}\Codejock.cjstyles"; DestDir: "{app}"; Flags: dontcopy
Source: "{app}\LikeRusXP.exe"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\limage.exe"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\LikeRusXP.chm"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\License.txt"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0;
Source: "{app}\Store\elibrary.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\lresdumper.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\sl3core.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\lires.exe"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\lresdumper.dll"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\ResBinder.exe"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\readme.txt"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\english.uil"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\russian.uil"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; MinVersion: 4.1.2222,5.0;
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; MinVersion: 4.1.2222,5.0;

[Icons]
Name: "{group}\LikeRusXP 6.01.12"; Filename: "{app}\LikeRusXP.exe"; MinVersion: 4.1.2222,5.0;
Name: "{group}\{cm:ProgramOnTheWeb,LikeRusXP 6.01.12}"; Filename: "http://likerusxp.ru/"; MinVersion: 4.1.2222,5.0;
Name: "{group}\{cm:UninstallProgram,LikeRusXP 6.01.12}"; Filename: "{uninstallexe}"; MinVersion: 4.1.2222,5.0;
Name: "{commondesktop}\LikeRusXP 6.01.12"; Filename: "{app}\LikeRusXP.exe"; Tasks: "desktopicon"; MinVersion: 4.1.2222,5.0;
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\LikeRusXP"; Filename: "{app}\LikeRusXP.exe"; Tasks: "quicklaunchicon"; MinVersion: 4.1.2222,5.0;

////////////////////// Skin //////////////////////

[Code_]
#ifdef UNICODE
    #define PStr "AnsiString"
#else
    #define PStr "String"
#endif
 
procedure LoadSkin(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
 external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure LoadSkinUninst(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
 external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkin();
 external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkinUninst();
 external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
 external 'ShowWindow@user32.dll stdcall';
 
function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('Codejock.cjstyles');
  CreateDir(ExpandConstant('{sd}\ISSkin'));
  FileCopy(ExpandConstant('{tmp}\Codejock.cjstyles'), ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), True);
  LoadSkin(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), 'NormalBlack.ini');
 
  Result := True;
end;
 
procedure DeinitializeSetup();
begin
    ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
    UnloadSkin();
    DeleteFile(ExpandConstant('{sd}\ISSkin\isskin.dll'));
    DeleteFile(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'));
    RemoveDir(ExpandConstant('{sd}\ISSkin'));
end;
 
function InitializeUninstall(): Boolean;
begin
  FileCopy(ExpandConstant('{app}\isskin.dll'),
                ExpandConstant('{tmp}\isskin.dll'), True);
  FileCopy(ExpandConstant('{app}\Codejock.cjstyles'),
            ExpandConstant('{tmp}\Codejock.cjstyles'), True);
 
    LoadSkinUninst(ExpandConstant('{tmp}\Codejock.cjstyles'), 'NormalBlack.ini');
    Result := True;
end;
 
procedure DeinitializeUninstall();
begin
    UnloadSkinUninst();
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;

////////////////////// Musik //////////////////////

[Code_]
//большее указание смотрите в дельфийских исходниках в архиве с библиотекой
const
  BASS_SAMPLE_LOOP        = 4;  //повторение

type
  HSTREAM = DWORD;      //тип звукового потока

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function  BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function  BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure InitializeWizard2();
var
  Name1: string;
        i: Integer;
begin
  ExtractTemporaryFile('bass.dll');
    ExtractTemporaryFile('sound.mp3');
  if BASS_Init(-1, 44100, 0, 0, 0) then
begin
  BASS_Start();
  Name1:=ExpandConstant('{tmp}\sound.mp3');
    i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
  if i <> 0 then
        begin
  BASS_ChannelPlay(i, True);
end;
end;
end;
procedure DeInitializeSetup2();
begin
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;

procedure CurStepChanged2(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;

////////////////////// Splash //////////////////////

[Code_]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard;
begin
  ExtractTemporaryFile('Splash.png');
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',1000,3000,1000,0,255,False,$FFFFFF,10);
end;

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

[Run]
Filename: "{app}\LikeRusXP.exe"; Description: "{cm:LaunchProgram,LikeRusXP}"; Flags: nowait postinstall skipifsilent


R.i.m.s.k.y. 22-12-2010 17:32 1572203

Цитата:

Цитата actavir
вот чёто не получается ничё »

что конкретно? у вас в скрипте прогу распаковывает внешний распаковщик, так что при удалении надо сносить папку {app} как правильно подсказали через [UninstallDelete]
можно еще через код сносить папки
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then RemoveDir(ExpandConstant('{app}'));
end;
Цитата:

Цитата actavir
как сделать так что бы после окончания установки рабочий стол автоматически обновлялся »

[Setup]
ChangesAssociations=true
ChangesEnvironment=true
Цитата:

Цитата actavir
ярлык создаваемый перед распаковкой является безликим »

[Icons]
Name: "{group}\Играть в Александр"; Filename: "{app}\dmln.exe"; WorkingDir: "{app}"; IconFilename: "{app}\dmln.exe"; IconIndex: 1

actavir 22-12-2010 20:00 1572297

R.i.m.s.k.y., огромное спасибо!!!

aerh 22-12-2010 20:09 1572307

R.i.m.s.k.y., спасибо, всё работает)


У меня еще один вопрос. Как в область, которая выделена на изображении, добавить текст?


Вот код
читать дальше »


Цитата:

;-------CD-Key------------

[Messages]
ClickNext=Вы должны ввести серийный номер, чтобы продолжить, или «Отмена», чтобы выйти из программы установки.

; заносим данные в реестр, 1 вариант
[Registry]
Root: HKLM; SubKey: SOFTWARE\Activision\Call of Duty 4; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Activision\Call of Duty 4; ValueType: string; ValueName: codkey; ValueData: {code:edtText}; Flags: uninsclearvalue

[code]
var
edt:array [1..5] of TEdit;
txt: TNewStaticText;
i, e, t: integer;
NewPage: TWizardPage;
lbl: TLabel;
procedure CurPageChanged1(CurPageID: Integer);
begin
if CurPageID = NewPage.ID then
end;


function edtText(s: string): string; //этот вариант, при записи через секцию [Registry]
//function edtText: string; // а этот, если вносить запись через 2 вариант
//var //
// s: string; //
begin
{ получаем текст из edit'ов и присваем переменной s }
for i:= 1 to 5 do begin
s:= s + edt[i].Text;
end;
{ удаляем лишний знак тире в конце строки }
s:= Copy(s, 1, Length(s) - 1);
Result:= s;
end;

//procedure CurStepChanged(CurStep: TSetupStep);
//begin
// { занасим данные в реестр 2 вариант}
// If CurStep = ssDone then
// RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Program\Settings', 'Serial', edtText);
//end;

//procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
//begin
// { удаляем данные из реестра, 2 вариант
// Здесь надо быть очень внимательным, а то по неосторожности можно удалить весь раздел... :) }
// If CurUninstallStep = usDone then
// RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\My Program');
//end;

procedure edtKeyPress(Sender: TObject; var Key: Char);
begin
{ здесь попытался реализовать, чтоб курсор автоматом перескакивал на следующий edit при вводе,
но есть косяк, если начать удалять через Backspace, то из-за SetFocus курсор снова перескакивает на уже очищенный edit }
for i:= 1 to 4 do begin

end; end;


procedure SerialPage;
begin
NewPage:= CreateCustomPage(wpWelcome, 'Ввод кюча (CD-key)', 'Ключ диска нужен для игры по интернету');

WizardForm.NextButton.Enabled:= False;
t:= 57;
e:= t;
// создаём Label
lbl:=TLabel.Create(NewPage);
with lbl do begin
Left:= 0;
Top:= 0;
Width:= 417;
Height:= 28;
AutoSize:= False;
WordWrap:= True;
Caption:= 'Введите код, отпечатанный на последней странице обложки Руководства пользователя или на упаковке диска';
Parent:= NewPage.Surface;
end;



// создаём 5 edit'ов
for i:= 1 to 5 do begin
edt[i]:= TEdit.Create(NewPage);
with edt[i] do begin
Parent:= NewPage.Surface;
Left:= 0 + (e*i);
Top:= 47;
Width:= 47;
Height:= 21;
MaxLength:= 4;
OnKeyPress:= @edtKeyPress;

end;
end;
end;



procedure InitializeWizard();
begin
SerialPage;
end;



R.i.m.s.k.y. 22-12-2010 20:18 1572313

Цитата:

Цитата actavir
R.i.m.s.k.y., огромное спасибо!!! »

Цитата:

Цитата aerh
R.i.m.s.k.y., спасибо, всё работает) »

Давим внизу сообщения "Полезное сообщение"
Цитата:

Цитата aerh
Как в область, которая выделена на изображении, добавить текст? »

В шапке Inno form Designer
В нем формы рисуются как в ворде (ну почти)

John1992on 22-12-2010 23:38 1572436

Привет, я уже принципиально разобрался в Inno Setup, но не понимаю, как сделать(пробовал в ISTool) такое:

1) Программа установки должна спрашивать желаемый язык, но реализация данного действия осуществляется копированием одного из нескольких языковых файлов в определенную папку с установленной программой. Что для этого нужно сделать?

2) Возможно ли сделать установку 2 в 1: типа установщик установит 2 программы в разные места - например есть программа "пр1" и "пр2", при запуске инсталятора он отображает 2 строки с выбором пути установки:
1. Устновка ПР1; Обзор
2. Устновка ПР2; Обзор

Заранее спасибо, за ответы любого содержания, сори если повторился, т.е. искал но подобной инфы не нашел.

Duality 23-12-2010 08:44 1572601

Подскажите как сделать в инсталляторе "невозможность установки в определенный каталог" (в частности в program files - желательно с выводом сообщения или просто вывод сообщения о нежжелательности/невозможности установки в program files.

Duality 23-12-2010 10:20 1572683

и еще, как добавить несколько функций в скрипт

вот скрипт - при такой компиляции выдает ошибку на дублирование функиций " NextButtonClick", "CurPageID" ....
[code]

Код:

var
  text: TLabel;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  i, n: Integer;
  str: string;
begin
  Result:= True;
  if CurPageID = wpSelectDir then
    begin
      str:= WizardForm.DirEdit.Text;
      for i:= 1 to Length(str) do if str[i] = '\' then n:= n + 1;
      if (n = 1) and (Pos(ExpandConstant('{pf}\'), WizardForm.DirEdit.Text) > 0) then
        begin
          text.Caption:= 'Внимание, в "Program Files" устанавливать нельзя.';
          Result:= False;
        end
      else text.Caption:= '';
    end;
end;

procedure InitializeWizard();
begin
  text:= TLabel.Create(WizardForm);
  with text do
    begin
      SetBounds(WizardForm.DirEdit.Left,120,300,100);
      AutoSize:= True;
      Font.Style:= [fsBold];
      Font.Color:= clRed;
      Parent:= WizardForm.SelectDirPage;
    end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  if (CurPageID = wpSelectComponents) and (IsComponentSelected('d') = False)
  and (IsComponentSelected('d\a') = False) and (IsComponentSelected('d\b') = False)
  and (IsComponentSelected('d\c') = False) and (IsComponentSelected('d\d') = False)
  and (IsComponentSelected('d\e') = False) and (IsComponentSelected('d\f') = False)
  and (IsComponentSelected('d\g') = False) and (IsComponentSelected('d\a') = False) then
  begin
    MsgBox('Не выбрано ни одиного протокола для установки!!!', mbInformation, MB_OK);
    Result := False;
  end;
end;

как разделить эти функции ? или сделать невозможность дублирования функций... будет еще ктстаи 3 код для добавления прозрачности Aero к инсталлятру (там тоже дублирование будет, я не знаю как их применять вместе

ChVL 23-12-2010 11:02 1572703

Обычное добавление строки в hosts:
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall
then
begin
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13 + ' 127.0.0.1 www.site.com', True);
end;
end;

Как прописать удаление этой строки при деинсталляции программы?

R.i.m.s.k.y. 23-12-2010 11:26 1572730

Цитата:

Цитата ksunechkin
скрипт - при такой компиляции выдает ошибку на дублирование функиций »

Ну а в чем ошибка? естественно не должно быть двух одноименных функций, ошибки тут нет.
Цитата:

Цитата ksunechkin
как разделить эти функции ? или сделать невозможность дублирования функций »

Элементарно склеить вместе
Код:


function NextButtonClick(CurPageID: Integer): Boolean;
var
  i, n: Integer;
  str: string;
begin
  Result:= True;
  if CurPageID = wpSelectDir then
    begin
      str:= WizardForm.DirEdit.Text;
      for i:= 1 to Length(str) do if str[i] = '\' then n:= n + 1;
      if (n = 1) and (Pos(ExpandConstant('{pf}\'), WizardForm.DirEdit.Text) > 0) then
        begin
          text.Caption:= 'Внимание, в "Program Files" устанавливать нельзя.';
          Result:= False;
        end
      else text.Caption:= '';
    end; //CurPageID = wpSelectDir

  Result := True;
  if (CurPageID = wpSelectComponents) and (IsComponentSelected('d') = False)
  and (IsComponentSelected('d\a') = False) and (IsComponentSelected('d\b') = False)
  and (IsComponentSelected('d\c') = False) and (IsComponentSelected('d\d') = False)
  and (IsComponentSelected('d\e') = False) and (IsComponentSelected('d\f') = False)
  and (IsComponentSelected('d\g') = False) and (IsComponentSelected('d\a') = False) then
  begin
    MsgBox('Не выбрано ни одиного протокола для установки!!!', mbInformation, MB_OK);
    Result := False;
  end; //(CurPageID = wpSelectComponents) and (IsComponentSelected('d') = False)

end; //NextButtonClick


Duality 23-12-2010 11:30 1572738

Цитата:

Цитата R.i.m.s.k.y.
Элементарно склеить вместе »

ну вот это я как раз и не зналд как сделать....вписал ваш склееный код, ошибка


[code]Compiling
Код:

section
---------------------
Compile Error!
Line: 140
Error: Column 11:
Unknown identifier 'text'


а по первому вопросу не подскажете?
Цитата:

Подскажите как сделать в инсталляторе "невозможность установки в определенный каталог" (в частности в program files - желательно с выводом сообщения или просто вывод сообщения о нежжелательности/невозможности установки в program files.

R.i.m.s.k.y. 23-12-2010 11:33 1572743

Цитата:

Цитата ChVL
Как прописать удаление этой строки при деинсталляции программы »

примерно так:
Код:

[_code]
procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TArrayOfString;
  //str : string;
  i : Integer;
begin
  if not FileExists(FilePath) then begin MsgBox('Файл не найден ' + FilePath, mbError, mb_Ok); Exit;end; // если файла нет, выходим
  LoadStringsFromFile(FilePath, S); // загружаем файл
  for i:= 0 to GetArrayLength(S)-1 do begin
    if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
      StringChangeEx(S[i], find, replace, True);
    end;
  end;
  SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then RePlaceTextinFile(ExpandConstant('{sys}\drivers\etc\hosts'), '127.0.0.1 www.site.com', '');
end;

Цитата:

Цитата ksunechkin
по первому вопросу не подскажете »

знал бы подсказал
Цитата:

Цитата ksunechkin
ну вот это я как раз и не зналд как сделать....вписал ваш склееный код, ошибка »

а самому догадаться слабо что не хватает var text: TLabel;
я ведь только функцию NextButtonClick склеил, тупо скопировать-вставить.

Duality 23-12-2010 12:01 1572773

Цитата:

Цитата R.i.m.s.k.y.
а самому догадаться слабо что не хватает var text: TLabel;
я ведь только функцию NextButtonClick склеил, тупо скопировать-вставить. »

не углядел

Black-J 23-12-2010 12:50 1572800

Помогите....скажите как сделать чёрный инсталятор или кинь скин я просто начинающий...

R.i.m.s.k.y. 23-12-2010 15:27 1572926

Цитата:

Цитата Black-J
скажите как сделать чёрный инсталятор или кинь скин я просто начинающий »

Если начинающий - первым делом бегом в шапку, качать и читать. Искать *black*.iss

serg aka lain 23-12-2010 18:29 1573014

Цитата:

Цитата ksunechkin
Подскажите как сделать в инсталляторе "невозможность установки в определенный каталог" (в частности в program files - желательно с выводом сообщения или просто вывод сообщения о нежжелательности/невозможности установки в program files. »

Попробуйте это, именно так надо?

R.i.m.s.k.y. 23-12-2010 19:17 1573053

Цитата:

Цитата serg aka lain
Попробуйте это, именно так надо »

очень оригинально - экзешник скомпиленный давать.

ChVL 23-12-2010 19:24 1573057

R.i.m.s.k.y.,
Спасибо!
Вторая процедура не работает, изобразил её в классическом виде - всё заработало. Привожу полный код секции, который при деинсталляции программы удаляет указанный текст из указанного файла, например, добавленную при инсталляции строку в hosts. Может ещё кому пригодится. (Первая процедура - Ваша, вторая - классическая).
Код:

[_code]
procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TArrayOfString;
  i : Integer;
begin
 // if not FileExists(FilePath) then begin MsgBox)'Файл не найден' + FilePath, mbError, mb_Ok); Exit;end;
  LoadStringsFromFile(FilePath, S);
  for i:= 0 to GetArrayLength(S)-1 do begin
    if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
      StringChangeEx(S[i], find, replace, True);
    end;
  end;
  SaveStringsToFile(FilePath, S, False);
and;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
If CurUninstallStep=usPostUninstall
then
  begin
  RePlaceTextinFile(ExpandConstant('{sys}\drivers\etc\hosts'), '127.0.0.1 www.site.com', '');
  end;
end;

Одно замечание: удаляется текст, если же в строке больше нет ничего, то остаётся пустая строка. Неплохо бы в этом случае и строку убрать, но, в принципе, можно смириться...
Проверку наличия файла можно убрать.

serg aka lain 23-12-2010 19:27 1573059

Цитата:

Цитата R.i.m.s.k.y.
очень оригинально - экзешник скомпиленный давать. »

не в экзешнике дело, а как он отработает на другой системе.
дал для тестирования, т.к. задача вроде простая, но раньше я с этой идеей не сталкивался.(вдруг облажался с реализацией)

Serega 23-12-2010 19:39 1573067

Цитата:

Цитата ChVL
Неплохо бы в этом случае и строку убрать »

Тогда вам проще использовать в процедуре RePlaceTextinFile не TArrayOfString, а TStringList и уже в нём удалять нужную строку.

P.S.
В процедуре RePlaceTextinFile после того как нашли строку, я бы добавил Break, чтоб не бегать дальше по оставшимся строкам.

Duality 23-12-2010 19:41 1573069

Цитата:

Цитата serg aka lain
Попробуйте это, именно так надо? »

неплохо! можно реализацию?

хех, только если там самому выбрать PF и подписать дальще название папки куда устанавливать - то оно разрешает установку)))

ChVL 23-12-2010 19:56 1573083

Serega,
IMHO, Break не нужен для строк в hosts. По опыту: одинаковых строк может оказаться несколько, например, когда-то они были прописаны до инсталляции программы вручную. Да и файл этот малюсенький - пусть просматривает весь...

R.i.m.s.k.y. 23-12-2010 19:57 1573084

Цитата:

Цитата Serega
Тогда вам проще использовать в процедуре RePlaceTextinFile не TArrayOfString, а TStringList и уже в нём удалять нужную строку. »

А это Ваша процедура, Вы же мне ее давно и написали ;)

Цитата:

Цитата ChVL
Вторая процедура не работает, изобразил её в классическом виде - всё заработало. »

странно, у меня она работает (правда у меня идет вызов удаления папки а не замена текста, так что я думал все рабочее)
Наверное потому что у меня препроцессор стоит.

Цитата:

Цитата serg aka lain
дал для тестирования, т.к. задача вроде простая, но раньше я с этой идеей не сталкивался.(вдруг облажался с реализацией) »

[скандирует] СКРИПТ! СКРИПТ В СТУДИЮ!

serg aka lain 23-12-2010 20:24 1573098

Цитата:

Цитата ksunechkin
хех, только если там самому выбрать PF и подписать дальще название папки куда устанавливать - то оно разрешает установку))) »

Да, я это заметил и вроде пофиксил.
Вот пример

Код:


[Setup]
AppName=My Program 
AppVerName=My Program
DefaultDirName={sd}\My Program
OutputDir=.
OutputBaseFilename=test

[code]
procedure MyFunction(Sender: TObject);
var
  S: String;
begin
  S := Copy(WizardForm.DirEdit.Text, 0, Length(WizardForm.DirEdit.Text)
                  - Length(ExtractFileName(WizardForm.DirEdit.Text)) - 1);

  if IsWin64 then
  begin
    if (S = ExpandConstant('{pf32}')) or (S = ExpandConstant('{pf64}')) then
    begin
      MsgBox('Программу нельзя устанавливать в' + #13#10 + S, mbInformation, MB_OK);
      WizardForm.DirEdit.Text := ExpandConstant('{sd}\My Program');
    end;
  end else
  if S = ExpandConstant('{pf}') then
  begin
    MsgBox('Программу нельзя устанавливать в' + #13#10 + S, mbInformation, MB_OK);
    WizardForm.DirEdit.Text := ExpandConstant('{sd}\My Program');
  end;
end;

procedure InitializeWizard();
begin
  WizardForm.DirEdit.OnChange := @MyFunction;
end;


Duality 23-12-2010 20:30 1573103

serg aka lain, спасибо! работает отлично)) очень хорошо

R.i.m.s.k.y. 23-12-2010 20:31 1573105

serg aka lain,
я бы сделал поиском {pf} в пути установки:
if (Pos(ExpandConstant('{pf}'), S > 0) then begin
MsgBox('Программу нельзя устанавливать в' + #13#10 + S, mbInformation, MB_OK);
WizardForm.DirEdit.Text := ExpandConstant('{sd}\My Program');
end;

Duality 23-12-2010 20:34 1573109

Цитата:

Цитата R.i.m.s.k.y.
я бы сделал поиском {pf} в пути установки:
if (Pos(ExpandConstant('{pf}'), S > 0) then begin
MsgBox('Программу нельзя устанавливать в' + #13#10 + S, mbInformation, MB_OK);
WizardForm.DirEdit.Text := ExpandConstant('{sd}\My Program');
end; »

в чем преимущество?

R.i.m.s.k.y. 23-12-2010 20:38 1573113

Цитата:

Цитата ksunechkin
в чем преимущество »

вообще в програм филесы поставить нельзя с дописко или без

Serega 23-12-2010 20:50 1573123

Цитата:

Цитата ChVL
Да и файл этот малюсенький - пусть просматривает весь... »

Всё в этом мире относительно...

Цитата:

Цитата R.i.m.s.k.y.
А это Ваша процедура, Вы же мне ее давно и написали »

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

serg aka lain 23-12-2010 20:58 1573128

Цитата:

Цитата R.i.m.s.k.y.
я бы сделал поиском {pf} в пути установки: »

Принципиального отличия нет, всё равно код по объёму не уменьшится (pf, pf32, pf64 проверять нужно)
Код:

if (Pos(ExpandConstant('{pf32}'), S) > 0) or (Pos(ExpandConstant('{pf64}'), S) > 0) then
А дописка обрабатывается тут
Код:

  S := Copy(WizardForm.DirEdit.Text, 0, Length(WizardForm.DirEdit.Text)
                  - Length(ExtractFileName(WizardForm.DirEdit.Text)) - 1);

з.ы. Ну это ИМХО. Модифицировать никто не запрещает.

Serega 23-12-2010 21:00 1573131

serg aka lain, строка начинается с 1, а массивы по умолчанию с 0, т.е. при использовании Copy, копировать можно начиная с 1.
И может проще сделать так:
S := ExtractFilePath(WizardForm.DirEdit.Text);
SetLength(S, Length(S)-1);

Duality 23-12-2010 21:10 1573142

все хорошо, но вот если у disk:\program files\ убрать последний слэш, т.е. disk:\program files - все равно дает установить(

R.i.m.s.k.y. 23-12-2010 21:11 1573144

Откуда вы знаете какие переменные инно за что отвечают? К примеру что WizardForm.DirEdit.Text - путь?

serg aka lain 23-12-2010 21:11 1573145

Цитата:

Цитата Serega
И может проще сделать так »

Соглашусь, проще.

serg aka lain 23-12-2010 21:27 1573155

Цитата:

Цитата ksunechkin
все хорошо, но вот если у disk:\program files\ убрать последний слэш, т.е. disk:\program files - все равно дает установить( »

Это защита от "упёртого" юзера, который любой ценой будет пытаться установить в эту папку?
Ну раз надо, то ещё раз пофиксим
исправленный пример
Код:


[Setup]
AppName=My Program 
AppVerName=My Program
DefaultDirName={sd}\My Program
OutputDir=.
OutputBaseFilename=test

[code]
procedure MyFunction(Sender: TObject);
var
  S: String;
begin
  S := ExtractFilePath(WizardForm.DirEdit.Text);
  SetLength(S, Length(S)-1);

  if IsWin64 then
  begin
    if (Pos(ExpandConstant('{pf32}'), S) > 0) or (Pos(ExpandConstant('{pf64}'), S) > 0) then
    begin
      MsgBox('Программу нельзя устанавливать в' + #13#10 + S, mbInformation, MB_OK);
      WizardForm.DirEdit.Text := ExpandConstant('{sd}\My Program');
    end;
  end else
  if Pos(ExpandConstant('{pf}'), S) > 0 then
  begin
    MsgBox('Программу нельзя устанавливать в' + #13#10 + S, mbInformation, MB_OK);
    WizardForm.DirEdit.Text := ExpandConstant('{sd}\My Program');
  end;
  WizardForm.DirEdit.Text := AddBackSlash(WizardForm.DirEdit.Text);
end;

procedure InitializeWizard();
begin
  WizardForm.DirEdit.OnChange := @MyFunction;
end;


Serega 23-12-2010 21:33 1573160

Цитата:

Цитата R.i.m.s.k.y.
Откуда вы знаете какие переменные инно за что отвечают? »

Это кому вопрос адресован?
От себя могу добавить, используйте версию от Restools, у них в редакторе есть много интересных фич.
Допустим набираем в процедуре WizardForm и ставим точку, дальше немного подождём и через секунду появиться список с возможными компонентами.
Принудительный вызов, после набора нескольких букв, списка с подсказками Ctrl+J.
Так же удобно смотреть описание разных функций, набираем название стандартной функции, наводим на нёё мышкой и нажимаем Ctrl+ЛКМ.
Цитата:

Цитата R.i.m.s.k.y.
К примеру что WizardForm.DirEdit.Text - путь? »

Это также можно узнать в редакторе Restools, во вкладке WizardForm Designer открываем страницу SelectDirPage и выделяем искомый Edit, справа увидим, что он называется DirEdit.

Duality 23-12-2010 21:38 1573164

Цитата:

Цитата serg aka lain
Это защита от "упёртого" юзера, который любой ценой будет пытаться установить в эту папку? »

а они такие, что захотят сделать - то доведут до конца))
вот теперь замечательно работает. спасибо

R.i.m.s.k.y. 23-12-2010 22:27 1573199

ksunechkin,
Для проги Налогоплательщик дистр пишешь ;)
Serega,
А можно попросить забацать на инно дистр самого инно со всеми фишками? чтобы не собирать их по всем ссылкам (да и неработает у меня часть, мой инно здесь добрый человек подарил)

Serega 23-12-2010 23:17 1573225

Цитата:

Цитата R.i.m.s.k.y.
дистр самого инно со всеми фишками? »

что конкретно вы имеете ввиду под словом фишки?
Цитата:

Цитата R.i.m.s.k.y.
да и неработает у меня часть »

обновите до последней версии.

gur74 24-12-2010 03:11 1573320

Люди, будьте человеками помогите пожалуйста :help: поправить код, не воспроизводится музыка.
Вот скрипт:
читать дальше »
;InnoSetupVersion=5.3.10

[Setup]
AppName=LikeRusXP Localization
AppVerName={cm:NameAndVersion,LikeRusXP Localization,6.01.12}
AppVersion=6.01.12
DefaultDirName={pf}\LikeRusXP Localization
DefaultGroupName=LikeRusXP Localization
OutputBaseFilename=likerusxp 6.01.12
Compression=lzma
LicenseFile=embedded\License.txt
InfoBeforeFile=embedded\InfoBefore.txt
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
SetupIconFile={tmp}\MAINICON.ico

[Files]
Source: "{tmp}\bass.dll"; DestDir: "{tmp}"; Flags: deleteafterinstall dontcopy
Source: "{tmp}\sound.mp3"; DestDir: "{tmp}"; Flags: deleteafterinstall dontcopy
Source: "{tmp}\ISSkin.dll"; DestDir: "{app}"; Flags: dontcopy
Source: "{tmp}\Codejock.cjstyles"; DestDir: "{app}"; Flags: dontcopy
Source: "{tmp}\Splash.png"; DestDir: "{tmp}"; Flags: deleteafterinstall ignoreversion dontcopy
Source: "{tmp}\isgsg.dll"; DestDir: "{tmp}"; Flags: deleteafterinstall ignoreversion dontcopy
Source: "{app}\LikeRusXP.exe"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\limage.exe"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\LikeRusXP.chm"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\License.txt"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0;
Source: "{app}\Glossary\russian.lg3"; DestDir: "{app}\Glossary"; MinVersion: 4.1.2222,5.0;
Source: "{app}\Store\elibrary.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\lresdumper.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\sl3core.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\lires.exe"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\lresdumper.dll"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\ResBinder.exe"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\readme.txt"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\english.uil"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\russian.uil"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion

[Messages]
BeveledLabel=RePack by Gu® 2010

////////////////////// Skin //////////////////////

[code]
#ifdef UNICODE
#define PStr "AnsiString"
#else
#define PStr "String"
#endif

procedure LoadSkin(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure LoadSkinUninst(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkinUninst();
external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Codejock.cjstyles');
CreateDir(ExpandConstant('{sd}\ISSkin'));
FileCopy(ExpandConstant('{tmp}\Codejock.cjstyles'), ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), True);
LoadSkin(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), 'NormalBlack.ini');

Result := True;
end;

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
DeleteFile(ExpandConstant('{sd}\ISSkin\isskin.dll'));
DeleteFile(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'));
RemoveDir(ExpandConstant('{sd}\ISSkin'));
end;

function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\isskin.dll'),
ExpandConstant('{tmp}\isskin.dll'), True);
FileCopy(ExpandConstant('{app}\Codejock.cjstyles'),
ExpandConstant('{tmp}\Codejock.cjstyles'), True);

LoadSkinUninst(ExpandConstant('{tmp}\Codejock.cjstyles'), 'NormalBlack.ini');
Result := True;
end;

procedure DeinitializeUninstall();
begin
UnloadSkinUninst();
end;

////////////////////// Splash ////////////////////////////

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard();
begin
ExtractTemporaryFile('Splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
end;

////////////////////// Sound ///////////////////////////

const
BASS_SAMPLE_LOOP = 4; //повторение

type
HSTREAM = DWORD; //тип звукового потока

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure InitializeWizard2();
var
Name1: string;
i: Integer;
begin
ExtractTemporaryFile('bass.dll');
ExtractTemporaryFile('sound.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\sound.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
begin
BASS_ChannelPlay(i, True);
end;
end;
end;
procedure DeInitializeSetup2();
begin
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;

////////////////////// Setup end //////////////////////

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;

[Run]
Filename: "{app}\LikeRusXP.exe"; Description: "{cm:LaunchProgram,LikeRusXP}"; MinVersion: 4.1.2222,5.0;

[Icons]
Name: "{group}\LikeRusXP 6.01.12"; Filename: "{app}\LikeRusXP.exe"; MinVersion: 4.1.2222,5.0;
Name: "{group}\{cm:ProgramOnTheWeb,LikeRusXP 6.01.12}"; Filename: "http://likerusxp.ru/"; MinVersion: 4.1.2222,5.0;
Name: "{group}\{cm:UninstallProgram,LikeRusXP 6.01.12}"; Filename: "{uninstallexe}"; MinVersion: 4.1.2222,5.0;
Name: "{commondesktop}\LikeRusXP 6.01.12"; Filename: "{app}\LikeRusXP.exe"; Tasks: "desktopicon"; MinVersion: 4.1.2222,5.0;
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\LikeRusXP"; Filename: "{app}\LikeRusXP.exe"; Tasks: "quicklaunchicon"; MinVersion: 4.1.2222,5.0;

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; MinVersion: 4.1.2222,5.0;
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; MinVersion: 4.1.2222,5.0;

[CustomMessages]
russian.NameAndVersion=%1, версия %2
russian.AdditionalIcons=Дополнительные значки:
russian.CreateDesktopIcon=Создать значок на &Рабочем столе
russian.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
russian.ProgramOnTheWeb=Сайт %1 в Интернете
russian.UninstallProgram=Деинсталлировать %1
russian.LaunchProgram=Запустить %1
russian.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
russian.AssocingFileExtension=Связывание %1 с файлами %2...

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



Habetdin 24-12-2010 07:11 1573350

gur74, попробуйте так:
читать дальше »
Только секция code:
Код:

[code]
#ifdef UNICODE
#define PStr "AnsiString"
#else
#define PStr "String"
#endif
////////////////////// Sound and Skin ///////////////////////////

const
BASS_SAMPLE_LOOP = 4; //повторение

type
HSTREAM = DWORD; //тип звукового потока

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure LoadSkin(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure LoadSkinUninst(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkinUninst();
external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
var Name1: string;
i: Integer;
begin
ExtractTemporaryFile('Codejock.cjstyles');
CreateDir(ExpandConstant('{sd}\ISSkin'));
FileCopy(ExpandConstant('{tmp}\Codejock.cjstyles'), ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), True);
LoadSkin(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), 'NormalBlack.ini');
ExtractTemporaryFile('bass.dll');
ExtractTemporaryFile('sound.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\sound.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
BASS_ChannelPlay(i, True);
end;
Result := True;
end;

procedure DeinitializeSetup();
begin
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
DeleteFile(ExpandConstant('{sd}\ISSkin\isskin.dll'));
DeleteFile(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'));
RemoveDir(ExpandConstant('{sd}\ISSkin'));
end;

function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\isskin.dll'),
ExpandConstant('{tmp}\isskin.dll'), True);
FileCopy(ExpandConstant('{app}\Codejock.cjstyles'),
ExpandConstant('{tmp}\Codejock.cjstyles'), True);

LoadSkinUninst(ExpandConstant('{tmp}\Codejock.cjstyles'), 'NormalBlack.ini');
Result := True;
end;

procedure DeinitializeUninstall();
begin
UnloadSkinUninst();
end;

////////////////////// Splash ////////////////////////////

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard();
begin
ExtractTemporaryFile('Splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
end;

////////////////////// Setup end //////////////////////

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;


R.i.m.s.k.y. 24-12-2010 07:18 1573352

Цитата:

Цитата Serega
что конкретно вы имеете ввиду под словом фишки »

А все что в шапке

gur74 24-12-2010 08:26 1573368

Habetdin

Спасибо огромное!!! Все получилось!!!

Gnom_aka_Lexander 24-12-2010 10:37 1573423

R.i.m.s.k.y., Здесь со всеми фишками, тока скрипт жойнер не стал добавлять, он все равно криво работает. Если гдето чегото неправильно - говорить, не молчать, буду учитывать при обновлениях.

gur74 24-12-2010 10:57 1573430

Habetdin

Еще одна проблема при удалении программы выскакивают ошибки:





и есть ли возможность установить свою иконку на unins000.exe

что бы отображалась в Установка и удаление программ. :help: пожалуйста!!!

gvshil 24-12-2010 11:15 1573441

Цитата:

Цитата gur74
установить свою иконку на unins000.exe
что бы отображалась в Установка и удаление программ »

[Setup]
UninstallDisplayIcon={app}\MyProg.exe,1

gur74 24-12-2010 11:53 1573472

Цитата:

Цитата gvshil
Так она будет отображаться с установленного MyProg.exe, а мне нужно что бы она была другой»

Пример:

иконка программы:



иконка удаления:


Duality 24-12-2010 11:57 1573479

как сделать такую доп.старницу с двумя чекбоксами? не нашел как сделать


Цитата:

Цитата gur74
Так она будет отображаться с установленного MyProg.exe, а мне нужно что бы она была другой »

ну дак а если путь к другой иконке то прописать? ... не?

gur74 24-12-2010 12:11 1573488

Цитата:

Цитата ksunechkin
как сделать такую доп.старницу с двумя чекбоксами? не нашел как сделать.»

Попробуй с помощью IS Form Designer.

Цитата:

Цитата ksunechkin
ну дак а если путь к другой иконке то прописать? ... не? »

А можно образец скрипта.Я чего то туплю.

R.i.m.s.k.y. 24-12-2010 14:50 1573600

Лександер,
чем обусловлено Compil32.exe и Compil321.exe?
Может спросить - какой оставить при установке?
не хватает еще двух архивных веток этого форума
И ссылки-иноки в меню пуск...
и мне оформление не очень :dont-know
Но все равно СПАСИБО!

авиранашла внутри два MALWARE: IsProgressBar.dll и iss.exe

Gnom_aka_Lexander 24-12-2010 15:00 1573608

R.i.m.s.k.y.,
Реакция антивируса - это нормально, сам этот вопрос задавал.
Над оформлением еще работаю :)
Compil32.exe - стандартная версия.
Compil321.exe- расширенный редактор от Рестулс (ярлык забыл на него отдельный сделать) :)
А в меню пуска открой папку Inno Setup - все там.

R.i.m.s.k.y. 24-12-2010 15:12 1573614

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

Gnom_aka_Lexander 24-12-2010 15:28 1573622

R.i.m.s.k.y., Скрипт еще рано, он тоже постоянно оптимизируется, могу выложить отдельно, если кому интересно, а регать лучше на родной все таки, хотя можно отдельный вопрос сделать - ставить оба редактора или только расширенный, но думаю, тоже не стоит, лично я предпочитаю работать в родном, а в расширенном удобно куски кода получать готовые и страницы добавлять, он, кстати с успехом заменяет IS From Designer.
В общем, нужно мнение не одного-двух человек, а десятка, хотябы. А то все качают и молчат..

R.i.m.s.k.y. 24-12-2010 15:45 1573631

Цитата:

Цитата Лександер
ожно отдельный вопрос сделать - ставить оба редактора или только расширенный »

+1
Лично я предпочитаю работать в расширенном - чего метаться туда-сюда-обратно

Gnom_aka_Lexander 24-12-2010 15:55 1573638

R.i.m.s.k.y., Сделаю в следующем обновлении просто две галки - так три варианта будет: простой, расширенный, оба :)

_ToR4OK_ 24-12-2010 17:33 1573709

Подскажите пожалуйста, как менять местами страницы в инстале? Заранее спасибо =)

Gnom_aka_Lexander 24-12-2010 17:49 1573724

_ToR4OK_, Насколько я знаю - никак, только создавать страницы с нужным содержимым в необходимом порядке, только я не уверен, что прокатит...

serg aka lain 24-12-2010 18:56 1573773

Цитата:

Цитата ksunechkin
как сделать такую доп.старницу с двумя чекбоксами? »

На скрине не чекбоксы, а радиокнопки.
А конкретно по вопросу
пример

Код:

[Setup]
AppName=My Program 
AppVerName=My Program
DefaultDirName={sd}\My Program
OutputDir=.
OutputBaseFilename=test

[CustomMessages]
HeaderLabelPage=Выберите тип установки
MyRadioCaption_1=Обычная установка
MyRadioCaption_2=Портативная установка

[code]
var
  MyNewPage: TWizardPage;
  MyRadioBtn_1, MyRadioBtn_2: TRadioButton;

procedure GetMyNewPage();
begin
  MyNewPage := CreateCustomPage(wpWelcome,
    ExpandConstant('{cm:HeaderLabelPage}'), '');

  MyRadioBtn_1 := TRadioButton.Create(WizardForm);
  with MyRadioBtn_1 do
  begin
    Top := ScaleY(50);
    Width := ScaleX(150);
    Height := ScaleY(13);
    Caption := ExpandConstant('{cm:MyRadioCaption_1}');
    Checked := True;
    Parent := MyNewPage.Surface;
  end;

  MyRadioBtn_2 := TRadioButton.Create(WizardForm);
  with MyRadioBtn_2 do
  begin
    Top := ScaleY(120);
    Width := ScaleX(150);
    Height := ScaleY(13);
    Caption := ExpandConstant('{cm:MyRadioCaption_2}');
    Parent := MyNewPage.Surface;
  end;
end;

procedure InitializeWizard();
begin
  GetMyNewPage();
end;


_ToR4OK_ 24-12-2010 19:15 1573791

Цитата:

Цитата _ToR4OK_
Подскажите пожалуйста, как менять местами страницы в инстале? Заранее спасибо =)

Вопрос решен )

serg aka lain 24-12-2010 19:33 1573807

Цитата:

Цитата Лександер
Насколько я знаю - никак, только создавать страницы с нужным содержимым в необходимом порядке, только я не уверен, что прокатит... »

Если очень хочется, то можно. Вот есть прецедент

Baw17 24-12-2010 19:46 1573814

как сделать чтобы при установке Бэкапилась ветка реестра, и потом в неё вносились изменения а при деинсталляции возвращались в исходное положение?

R.i.m.s.k.y. 24-12-2010 20:04 1573824

Цитата:

Цитата Baw17
как сделать чтобы при установке Бэкапилась ветка реестра, и потом в неё вносились изменения а при деинсталляции возвращались в исходное положение? »

Код:

[_Code]

procedure CurStepChanged(CurStep: TSetupStep);
var
  res, i, k: Integer;
  reg0, reg, RegEdit: string;
  Key: TArrayOfString;
begin
if CurStep=ssDone then begin
  RegEdit:= ExpandConstant('{sys}\reg.exe');
  reg0:= ExpandConstant('{pf}\InstallShield Installation Information\$...$\');
  Key:= ['HKLM\SOFTWARE\GNU',
        'HKCR\CLSID\{62CE7E72-4C71-4D20-B15D-452831A87D9D}',
        'HKEY_CURRENT_USER\Software\KMPlayer'
        ];
  for i:= 0 to GetArrayLength(Key)-1 do begin
    reg := reg0 + IntToStr(i) + '.reg';
    if not FileExists(reg) then begin Exec(RegEdit, ' export ' + AddQuotes(Key[i]) + ' ' + AddQuotes(reg), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilTerminated, res);
    end;
end;
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
reg, reg0,RegEdit: string;
res,i: integer;
begin
if CurUninstallStep = usUninstall then begin
RegEdit:= ExpandConstant('{sys}\reg.exe');
reg0:= ExpandConstant('{pf}\InstallShield Installation Information\$...$\\');
  for i:= 0 to 3 do begin
    reg:= reg0 + IntToStr(i) + '.reg';
    if FileExists(reg) = True then Exec(RegEdit, ' import ' + AddQuotes(reg),ExpandConstant('{sys}'),SW_HIDE,ewWaitUntilTerminated,res);
  end;
end;
end;

Код идейно рабочий, ну может где-то пропустил объявление переменной или end.

Baw17 24-12-2010 21:12 1573886

R.i.m.s.k.y., честно в коде не разобрался, есть вопросы
куда сохраняет *.reg?
и где прописать какую ветку бэкапить?
данный скрипт работает в XP and Windows 7 X86 and X64?

R.i.m.s.k.y. 24-12-2010 21:47 1573913

Цитата:

Цитата Baw17
честно в коде не разобрался, есть вопросы »

А что там разбирать, наливай да пей!
Цитата:

Цитата Baw17
куда сохраняет *.reg? »

переменная reg0:= ExpandConstant('{pf}\InstallShield Installation Information\$...$\');
Цитата:

Цитата Baw17
и где прописать какую ветку бэкапить? »

матрица стрингов ;)
Key:= ['HKLM\SOFTWARE\GNU',
Цитата:

Цитата Baw17
данный скрипт работает в XP and Windows 7 X86 and X64? »

везде где работает инно
На 64битных ОС есть заморочки, но они как со всеми, ключи реестра есть 32битные и 64битные (указывается числом на конце, к примеру HKLM32 или HKLM64), так что лучше убедиться на 64битной ОС куда что пишется, в остальном все так.

Imitri7 24-12-2010 22:12 1573941

покажите плыз пример где ISDone по секции [Tasks] компоненты распаковывает

R.i.m.s.k.y. 24-12-2010 23:04 1573967

Baw17,
сказочник я, недоглядел, в процедуре бэкапа реестра надо CurStep=ssInstall (перед стартом установки, когда зеленая колбаса только поползет), CurStep=ssDone - это в самом конце.
Еще при импорте/экспорте реестра в 64битных ОС надо учитывать и где располагается reg.exe - в {sys} (system32) или {syswow64}

Лександер,
верни в сборке английскую справку инно, она намного полнее! к примеру в русифицированной справке нету переменной syswow64, на русифицированную можно просто ярлык в меню пуск сделать.
Спасибо!

gur74 25-12-2010 11:04 1574155

:help: Нужно установить папку в системную Windows, как правильно написать в скрипте чтобы она устанавливалась с файлами скрытыми,системными.

Gnom_aka_Lexander 25-12-2010 12:43 1574209

gur74,
Код:

[Files]
Source: "MyFile.exe"; DestDir: {win}\MiFolder; Attribs: System Hidden;


gur74 25-12-2010 13:17 1574230

Лександер

Спасибо огромное!!!

А MiFolder я так понимаю создаваемая папка!?

Gnom_aka_Lexander 25-12-2010 13:32 1574238

gur74, Ответил тут.
На следующий пост ответ там-же :)

gur74 25-12-2010 14:01 1574264

Лександер

И еще вопрос на засыпку как обозначать папку Program Files, если Windows {win} то Program Files {pf} что ли и где можно скачать все эти обозначения???

Vitek 07 25-12-2010 14:43 1574282

gur74, при открытом Inno Setup Compiler жмешь F1и читаешь всё-всё вдумчиво. Переменные описаны в разделе Constants

Rostlv 25-12-2010 21:39 1574509

Всем здравствуйте!

Проблема первая, как проверить версию .Net Framework при установке программы, запакованной в Inno Setup? В частности мне нужна версия 3.5 и выше. В нете нашёл много примеров, но они мне либо не подходят по функционалу, либо вызывают ошибку ещё на этапе компилляции. Хочется проверять версию .Net в реестре. Сам дистрибутив .Net входит в состав моего пакета, но пока-что устанавливается всегда, даже если в системе уже есть установленный Framework, что естественно плохо. Да и к тому же, на Vista и Seven установка dotNetFx40_Client_x86_x64.exe, который входит в состав моего пакета и устанавливается из секции Run, вызывает автоматическую перезагрузку системы даже с ключем /norestart еще на этапе установки, не позволяя её завершить, на XP такого не замечено.

Проблема вторая, из секции Run кроме .Net Framework устанавливается ещё и другое ПО, установка занимает дополнительное время, но прогресс уже не отображается, стандартный прогрессбар уже показывает все 100%. Вопрос, как добавить второй прогрессбар для программ из секции Run с правильным расчетом процентов при установке доп. ПО (не фейковый)? Ну или хотя бы чтобы было видно только сами проценты при установке каждого пакета из дополнительного ПО, что именно из доп. ПО сейчас устанавливается в мастере отображается. Находил варианты для 7-zip, FreeArc архивов, но мне нужен способ для разных дистрибутивов, в том числе для msi-пакетов. Доп. ПО запускается из {tmp}.

Gnom_aka_Lexander 25-12-2010 21:43 1574514

Rostlv,
Если решиш, особенно по второму вопросу, буду рад узнать это решение, сам ищу...

Serega 25-12-2010 22:37 1574554

Цитата:

Цитата Rostlv
как проверить версию .Net Framework при установке программы »

уже отвечал на похожий вопрос...
Пример

Код:

; определение версии установленного .Net Framework

[Setup]
AppName=NetFramework
AppVerName=NetFramework
DefaultDirName={pf}\NetFramework
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes
VersionInfoCopyright=Serega

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

[Code]
const
  MinNetFrameWork = 'v4.0'; // минимальная версия NetFrameWork
  // Возможные версии = 'v1.0', 'v1.1', 'v2.0', 'v3.0', 'v3.5', 'v4.0'

var
  url: string;

procedure GetUrlNetFrameWork(ver: string);
begin
  // страница загрузок http://www.microsoft.com/downloads/results.aspx?pocId=&freetext=Framework&DisplayLang=ru
  case ver of
    // по этой ссылке v1.1, т.к. ссылку на v1.0, я не нашёл... раритет... ;)
    'v1.0': url := 'http://download.microsoft.com/download/0/8/6/086e7824-ddad-45c0-b765-721e5e28e4c5/dotnetfx.exe';
    'v1.1': url := 'http://download.microsoft.com/download/0/8/6/086e7824-ddad-45c0-b765-721e5e28e4c5/dotnetfx.exe';
    'v2.0': url := 'http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe';
    'v3.0': url := 'http://download.microsoft.com/download/4/d/a/4da3a5fa-ee6a-42b8-8bfa-ea5c4a458a7d/dotnetfx3setup.exe';
    'v3.5': url := 'http://download.microsoft.com/download/7/0/3/703455ee-a747-4cc8-bd3e-98a615c3aedb/dotNetFx35setup.exe';
    'v4.0': url := 'http://download.microsoft.com/download/1/B/E/1BE39E79-7E39-46A3-96FF-047F95396215/dotNetFx40_Full_setup.exe';
  else
    url := 'http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe';
  end;
end;

function CompareMinVer(const ver: string): Boolean;
var
  min_ver: string;
begin
  Result := False;
  min_ver := MinNetFrameWork;
  if (Length(min_ver) > 2) and (Length(ver) > 2) then
    if (min_ver[2] > #47) and (min_ver[2] < #58) and (ver[2] > #47) and (ver[2] < #58) then
      Result := ver[2] > min_ver[2];
end;

function DetectInstallNetFrameWork: Boolean;
var
  VerNetFrameWorkInstalled: TArrayOfString;
  i: Integer;
begin
  Result := False;
  if RegGetSubkeyNames(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP', VerNetFrameWorkInstalled) then
    case CompareMinVer(VerNetFrameWorkInstalled[0]) of
      True : Result := True;
      False:
        for i := 0 to GetArrayLength(VerNetFrameWorkInstalled)-1 do
          if Pos(MinNetFrameWork, VerNetFrameWorkInstalled[i]) > 0 then
            begin
              Result := True;
              Break;
            end;
    end;
end;

function SearchNetFrameWork: Boolean;
var
  ErrorCode: Integer;
begin
  Result := DetectInstallNetFrameWork;
  if not Result then
    if MsgBox('Для этой программы требуется установленный .NET Framework не ниже ' + MinNetFrameWork + '. ' +
              'Пожалуйста загрузите и установите .NET Framework и запустите установку снова. ' +
              'Вы хотите загрузить .NET Framework сейчас?', mbConfirmation, MB_YESNO) = idYes then
      begin
        GetUrlNetFrameWork(MinNetFrameWork);
        ShellExec('open', url, '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
      end;
end;

function InitializeSetup: Boolean;
begin
  Result := SearchNetFrameWork;
end;



Цитата:

Цитата Rostlv
Проблема вторая »

Всё что вы хотите, всё это реализуемо, только если вы заставите свою запускаемую программу отвечать, насколько она процентов выполнилась...
Если это не задано автором программы, то вам это никогда не получиться, отображать реальный процент.
Но как говорится если очень сильно хочится...
1. Вариант:
Берём распакованный размер программы и в момент установки, сверяем размеры папок и уже от этого увеличиваем прогрессбар.
2. Вариант:
Просто задаём прогрессбару стиль, такой же как у прогрессбара при установке IE, т.е. нет реального процента, а полоска бегает и пользователь видит, что программа не зависла.

Duality 25-12-2010 23:46 1574599

Как прявязать к радибаттонам в этом [code]
Код:

var
  MyNewPage: TWizardPage;
  MyRadioBtn_1, MyRadioBtn_2: TRadioButton;

procedure GetMyNewPage();
begin
  MyNewPage := CreateCustomPage(wpWelcome,
    ExpandConstant('{cm:HeaderLabelPage}'), '');

  MyRadioBtn_1 := TRadioButton.Create(WizardForm);
  with MyRadioBtn_1 do
  begin
    Top := ScaleY(50);
    Width := ScaleX(150);
    Height := ScaleY(13);
    Caption := ExpandConstant('{cm:MyRadioCaption_1}');
    Checked := True;
    Parent := MyNewPage.Surface;
  end;

  MyRadioBtn_2 := TRadioButton.Create(WizardForm);
  with MyRadioBtn_2 do
  begin
    Top := ScaleY(120);
    Width := ScaleX(150);
    Height := ScaleY(13);
    Caption := ExpandConstant('{cm:MyRadioCaption_2}');
    Parent := MyNewPage.Surface;
  end;
end;

procedure InitializeWizard();
begin
  GetMyNewPage();
end;

копирование определенного файла (т.е для одной радиокнопки это один из секкции [Files] для второй другой)
например такие
Код:

Source: d:\Programs\!Install\norm\boot1.ini; DestDir: {app}; Components: a;
Source: d:\Programs\!Install\port\boot2.ini; DestDir: {app}; Components: b;

(раньше я их привязывал в секциях компоненты к радиокнопкам, но охота сделать на новой странице это.

serg aka lain 26-12-2010 00:05 1574615

Цитата:

Цитата ksunechkin
Как прявязать к радибаттонам »

Код:

[Files]
Source: d:\Programs\!Install\norm\boot1.ini; DestDir: {app}; Components: a; Check: GetRadio_1Checked;
Source: d:\Programs\!Install\port\boot2.ini; DestDir: {app}; Components: b; Check: GetRadio_2Checked;

[code]
function GetRadio_1Checked(): Boolean;
begin
  Result := MyRadioBtn_1.Checked;
end;

function GetRadio_2Checked(): Boolean;
begin
  Result := MyRadioBtn_2.Checked;
end;


Rostlv 26-12-2010 04:52 1574652

С первой проблемой разобрался путём замены дистрибутива .Net с версии 4.0 на 3.5, которая, в отличие от 4.0, сама проверяет наличие установленной в системе версии .Net Framework и не устанавливает повторно то, что уже есть. Serega, приведённый код на Seven работает некорректно, в указанной ветке реестра на чистой системе есть только v2.0, хотя в системе установлена v3.5.

По второму вопросу полноценный прогрессбар сделать не получится, поэтому придётся довольствоваться фейковым, как при установке IE. Где найти код для него и как "прикрутить" его к секции Run? У меня сейчас уже задействован код для отображения процентов при распаковке всех файлов моего дистрибутива, поэтому нужно соединить обе части кода, первую привожу:


Код:


var
  ProgressLabel, SizeLabel: TLabel;
 
procedure Progress();
var
  size: integer;
 
begin
  with WizardForm.ProgressGauge do
    ProgressLabel.Caption:= IntToStr((Position-Min)/((Max - Min)/100)) + '%';
 
  FileSize(ExpandConstant(CurrentFileName), size);
  SizeLabel.Caption:= IntToStr(size) + ' bytes';
end;
 
procedure InitializeWizard();
begin
  ProgressLabel := TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
      ProgressLabel.Top := Top + Height + ScaleY(8);
      ProgressLabel.Left:= Left + Width/2 - ScaleX(8);
      ProgressLabel.AutoSize := True;
      ProgressLabel.Parent := WizardForm.InstallingPage;
    end;
   
  SizeLabel := TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
      SizeLabel.Top := Top + Height + ScaleY(8);
      SizeLabel.Left:= Left;
      SizeLabel.AutoSize := True;
      SizeLabel.Parent := WizardForm.InstallingPage;
    end;
end;


R.i.m.s.k.y. 26-12-2010 09:37 1574680

Rostlv,
загляни в реестр HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\ - по подключам типа 3.5 можно узнавать какая версия фреймворка стоит

Serega 26-12-2010 19:13 1574923

Цитата:

Цитата Rostlv
Serega, приведённый код на Seven работает некорректно »

Переписал код в предыдущем сообщении, теперь должно работать нормально.
Цитата:

Цитата Rostlv
Где найти код для него »

Только самому написать :)
Вот накидал простой пример:
Пример

Код:

; Прогрессбар без отображения реального процента...

[Setup]
AppName=ProgressBarStyle
AppVerName=ProgressBarStyle v 1.0
DefaultDirName={pf}\ProgressBarStyle
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes
VersionInfoCopyright=Serega

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

[Code]
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';

const
  WM_USER        = $0400;
  PBM_SETMARQUEE = WM_USER + 10;
  GWL_STYLE      = -16;
  PBS_MARQUEE    = $08;

procedure CreateForm;
var
  Form: TSetupForm;
begin
  try
    Form := CreateCustomForm;
    with Form do
      begin
        ClientWidth :=  ScaleX(400); 
        ClientHeight := ScaleY(70); 
        Center;
        Caption := 'Пример';
      end;
    with TLabel.Create(Form) do
      begin
        Parent := Form;
        AutoSize := True;
        Left := ScaleX(12);
        Top := ScaleY(12);
        Font.Size := 9;
        Caption := 'Прогрессбар без отображения реального процента...';
      end;
    with TNewProgressBar.Create(Form) do
      begin
        Parent := Form;
        SetBounds(ScaleX(10), ScaleY(38), Form.ClientWidth - ScaleX(20), ScaleY(17));
        SetWindowLong (Handle, GWL_STYLE, (GetWindowLong (Handle, GWL_STYLE) or PBS_MARQUEE));
        SendMessage(Handle, PBM_SETMARQUEE, 1, 20);
      end;
    Form.ShowModal;
  finally
    Form.Free;
  end;
end;

function InitializeSetup(): Boolean;
begin
  CreateForm;
end;


gur74 26-12-2010 20:39 1575011

Лександер

Спасибо.

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

первая:



а за ней вторая:



Вот скрипт:

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

InnoSetupVersion=5.4.0 (a),ISPP=5.3.9 (a) (build 101211)

[Setup]
AppId={{2E115B70-E98C-463E-908A-E73C9CBFF816}
AppName=LikeRusXP Localization
AppVersion=6.01.12
AppVerName={cm:NameAndVersion,LikeRusXP Localization,6.01.12}
AppPublisher=Radialix, Inc.
AppPublisherURL=http://likerusxp.ru/
AppSupportURL=http://likerusxp.ru/
AppUpdatesURL=http://likerusxp.ru/
DefaultDirName={pf}\LikeRusXP Localization
DefaultGroupName=LikeRusXP Localization
AllowNoIcons=yes
LicenseFile=embedded\License.rtf
InfoBeforeFile=embedded\InfoBefore.rtf
OutputBaseFilename=Setup_LRXP_6.01.12
SetupIconFile={tmp}\MAINICON.ico
UninstallDisplayIcon={app}\Uninstall.ico
CreateUninstallRegKey=yes
Compression=lzma
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
Source: "{tmp}\bass.dll"; DestDir: "{tmp}"; Flags: deleteafterinstall dontcopy
Source: "{tmp}\sound.mp3"; DestDir: "{tmp}"; Flags: deleteafterinstall dontcopy
Source: "{tmp}\ISSkin.dll"; DestDir: "{app}"; Flags: dontcopy
Source: "{tmp}\Codejock.cjstyles"; DestDir: "{app}"; Flags: dontcopy
Source: "{tmp}\Splash.png"; DestDir: "{tmp}"; Flags: deleteafterinstall ignoreversion dontcopy
Source: "{tmp}\isgsg.dll"; DestDir: "{tmp}"; Flags: deleteafterinstall ignoreversion dontcopy
Source: "{app}\*"; DestDir: "{app}"; Components: program
Source: "{app}\LikeRusXP.exe"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\limage.exe"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Doc\LikeRusXP.chm"; DestDir: "{app}\Doc"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Doc\likerusxp-overview.chm"; DestDir: "{app}\Doc"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\License.txt"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0;
Source: "{app}\Store\elibrary.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\lresdumper.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\sl3core.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\lires.exe"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\lresdumper.dll"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\ResBinder.exe"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\readme.txt"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\english.uil"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\russian.uil"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Glossary\russian.lg3"; DestDir: "{app}\Glossary"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "Icons\MAINICON.ico"; DestDir: {win}\Icons; Attribs: System Hidden;
Source: "Icons\Uninstall.ico"; DestDir: {win}\Icons; Attribs: System Hidden;
Source: "Icons\ProgFilesIcon.ico"; DestDir: {win}\Icons; Attribs: System Hidden;
Source: "{app}\desktop.ini"; DestDir: {app}; Attribs: System Hidden;
Source: "{tmp}\desktop.ini"; DestDir: {pf}; Attribs: System Hidden;
;Source: "Components\*"; DestDir: "{app}"; Components: Additions

/////////////////// Components ////////////////////

[Types]
Name: "full"; Description: "Полная"
Name: "custom"; Description: "Выборочная"; Flags: iscustom

[Components]
Name: "program"; Description: "Program Files"; Types: full custom; Flags: fixed
Name: "Additions"; Description: "Словари"; Types: full

[Run]
Filename: "{app}\LikeRusXP.exe"; Description: "{cm:LaunchProgram,LikeRusXP}"; Flags: nowait postinstall skipifsilent; MinVersion: 4.1.2222,5.0;

[Icons]
Name: "{group}\LikeRusXP 6.01.12"; Filename: "{app}\LikeRusXP.exe"; MinVersion: 4.1.2222,5.0;
Name: "{group}\{cm:ProgramOnTheWeb,LikeRusXP 6.01.12}"; Filename: "http://likerusxp.ru/"; MinVersion: 4.1.2222,5.0;
Name: "{group}\{cm:UninstallProgram,LikeRusXP 6.01.12}"; Filename: "{uninstallexe}"; MinVersion: 4.1.2222,5.0;
Name: "{group}\Обзор LikeRusXP"; Filename: "{app}\Doc\likerusxp-overview.chm"; MinVersion: 4.1.2222,5.0;
Name: "{commondesktop}\LikeRusXP Localization"; Filename: "{app}\LikeRusXP.exe"; Tasks: "desktopicon"; MinVersion: 4.1.2222,5.0;
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\LikeRusXP"; Filename: "{app}\LikeRusXP.exe"; Tasks: "quicklaunchicon"; MinVersion: 4.1.2222,5.0;

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; MinVersion: 4.1.2222,5.0;
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; MinVersion: 4.1.2222,5.0;

[CustomMessages]
russian.NameAndVersion=%1, версия %2
russian.AdditionalIcons=Дополнительные значки:
russian.CreateDesktopIcon=Создать значок на &Рабочем столе
russian.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
russian.ProgramOnTheWeb=Сайт %1 в Интернете
russian.UninstallProgram=Деинсталлировать %1
russian.LaunchProgram=Запустить %1
russian.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
russian.AssocingFileExtension=Связывание %1 с файлами %2...

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

[Messages]
BeveledLabel=RePack by Gu® 2010

////////////////////// Skin //////////////////////

[Code_]
{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
procedure RedesignWizardForm;
begin
with WizardForm.BeveledLabel do
begin
Color := cl3DLight;
Font.Height := -13;
ParentColor := False;
ParentFont := False;
Left := ScaleX(10);
Height := ScaleY(17);
end;

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

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

#ifdef UNICODE
#define PStr "AnsiString"
#else
#define PStr "String"
#endif

procedure LoadSkin(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure LoadSkinUninst(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkinUninst();
external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Codejock.cjstyles');
CreateDir(ExpandConstant('{sd}\ISSkin'));
FileCopy(ExpandConstant('{tmp}\Codejock.cjstyles'), ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), True);
LoadSkin(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), 'NormalBlack.ini');

Result := True;
end;

function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\isskin.dll'),
ExpandConstant('{tmp}\isskin.dll'), True);
FileCopy(ExpandConstant('{app}\Codejock.cjstyles'),
ExpandConstant('{tmp}\Codejock.cjstyles'), True);

LoadSkinUninst(ExpandConstant('{tmp}\Codejock.cjstyles'), 'NormalBlack.ini');
Result := True;
end;

procedure DeinitializeUninstall();
begin
UnloadSkinUninst();
end;

////////////////////// Splash ////////////////////////////

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

////////////////////// Sound ///////////////////////////

const
BASS_SAMPLE_LOOP = 4; //повторение

type
HSTREAM = DWORD; //тип звукового потока

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure InitializeWizard();
var Name1: string; i: Integer;
begin
RedesignWizardForm;
////////////////// Spalsh //////////////////////
ExtractTemporaryFile('Splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
///////////////// Splash ///////////////////////
ExtractTemporaryFile('bass.dll');
ExtractTemporaryFile('sound.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\sound.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then begin
BASS_ChannelPlay(i, True);
end;
end;
end;

procedure DeInitializeSetup();
begin
//////////// ISSkin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
DeleteFile(ExpandConstant('{sd}\ISSkin\isskin.dll'));
DeleteFile(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'));
RemoveDir(ExpandConstant('{sd}\ISSkin'));
//////////// ISSkin
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;

////////////////////// Setup end //////////////////////

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010C301000054504630F10B5457697A617264466F726D0A57697A61726 4466F726D0C436C69656E744865696768740366010B436C69656E74576964746803EF010C4578706C696369744C656674020 00B4578706C69636974546F7002000D4578706C69636974576964746803F7010E4578706C696369744865696768740386010 D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724 E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C6963697457696 4746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B5061676509496E6E65725 06167650D4578706C69636974576964746803F1010E4578706C69636974486569676874033901000000F10E544E657753746 1746963546578740C426576656C65644C6162656C044C656674020A06486569676874021105436F6C6F720709636C33444C6 96768740B466F6E742E48656967687402F30B506172656E74436F6C6F72080A506172656E74466F6E74080C4578706C69636 9744C656674020A0E4578706C696369744865696768740211000000


Duality 26-12-2010 20:59 1575035

в дополнение к этому вопросу (который решен) - http://forum.oszone.net/post-1573479-236.html, что сделать в
Скрипте
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={sd}\My Program
OutputDir=.
OutputBaseFilename=test

[CustomMessages]
HeaderLabelPage=Выберите тип установки
MyRadioCaption_1=Обычная установка
MyRadioCaption_2=Портативная установка

[code]
var
MyNewPage: TWizardPage;
MyRadioBtn_1, MyRadioBtn_2: TRadioButton;

procedure GetMyNewPage();
begin
MyNewPage := CreateCustomPage(wpWelcome,
ExpandConstant('{cm:HeaderLabelPage}'), '');

MyRadioBtn_1 := TRadioButton.Create(WizardForm);
with MyRadioBtn_1 do
begin
Top := ScaleY(50);
Width := ScaleX(150);
Height := ScaleY(13);
Caption := ExpandConstant('{cm:MyRadioCaption_1}');
Checked := True;
Parent := MyNewPage.Surface;
end;

MyRadioBtn_2 := TRadioButton.Create(WizardForm);
with MyRadioBtn_2 do
begin
Top := ScaleY(120);
Width := ScaleX(150);
Height := ScaleY(13);
Caption := ExpandConstant('{cm:MyRadioCaption_2}');
Parent := MyNewPage.Surface;
end;
end;

procedure InitializeWizard();
begin
GetMyNewPage();
end;
чтобы под радибаттаноми можно было написать текст - .
попытался просто в секции [CustomMessages] в MyRadioCaption_1 и MyRadioCaption_2 дальше писать - вставив после Обыная установка" и "Портативная" переменную %n (вроде как это же перенос каретки), и написал делее нужный текст, но текст написался в строку и не был виден. (только начало, см на скрине)

Gnom_aka_Lexander 26-12-2010 21:08 1575049

Rostlv, Тут фейковый прогресс-бар, я пока ищу решение для нормального отображения, но, похоже, без перепаковки в главный дистр того, для чего прогресс отображать нужно, не получится.
ksunechkin, сейчас попробую :)

Rostlv 26-12-2010 21:34 1575083

Serega, именно такой прогрессбар и нужен, чтобы брал стиль из системы, но в XP бегунка нет. Только должен быть расположен на странице основного прогрессбара, немного ниже. И привязать его к секции Run, заодно соединить с кодом, который я давал в предыдущем сообщении. Думаю, это пригодится не только мне, но и многим другим, ведь из Run многие устанавливают доп. ПО. К сожалению, сам я не смогу решить эту задачу.
Нашёл как добавить второй прогрессбар ниже основного, но в нём отсутствует бегунок:

читать дальше »
Код:

var
  ProgressBar: TNewProgressBar;

procedure CurPageChanged(CurPageID: Integer);
var
i:Integer;
begin
If CurPageID=wpInstalling
then
 begin
  ProgressBar := TNewProgressBar.Create(WizardForm);
  ProgressBar.Left := ScaleY(40);
  ProgressBar.Top := ScaleX(180);
  ProgressBar.Width := ScaleY(415);
  ProgressBar.Height := ScaleX(18);
  ProgressBar.Parent := WizardForm;
  ProgressBar.Position := 0; //указывает количество заполняемых секторов
end;
begin
If CurPageID=wpFinished
then
ProgressBar.Hide
end;
end;



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

serg aka lain 26-12-2010 21:47 1575096

Цитата:

Цитата Лександер
ksunechkin, сейчас попробую »

Угу, и ещё пару иконок туда нацепить можно попробовать, на подобии ->

Gnom_aka_Lexander 26-12-2010 21:49 1575097

Rostlv, Там библиотечка IsProgressBar.dll, в которой можно попробовать поковырять битмапы, которыми анимация строится, или поискать предыдущую версию, там покрасивше было, глянцевая и объемная :)
serg aka lain, Если не смеешся, то можно и их попробовать, текст почти сделал :)

Duality 26-12-2010 21:53 1575104

serg aka lain, было б неплохо и с иконками) но меня вполне устроит просто подпись...

serg aka lain 26-12-2010 23:05 1575171

Цитата:

Цитата Лександер
Если не смеешся, то можно и их попробовать, текст почти сделал »

Ды нет, можно конечно, вот моя
поделка
Код:


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

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

[CustomMessages]
HeaderLabelPage=Выберите тип установки
MyRadioCaption_1=Обычная установка
MyRadioCaption_2=Выборочная установка
PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.
MyText_1=Установка будет произведена полностью в автоматическом режиме.%n(Подходит для не подготовленных пользователей)                         
MyText_2=Будет предложен выбор директории установки.%n(Для продвинутых пользователей)

[code]
function GetModuleHandle(lpModuleName: LongInt): LongInt;
 external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt;
 external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth,
      cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;
 external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt;
 external 'DestroyIcon@user32.dll stdcall';

const
  DI_NORMAL = 3;

var
  MyNewPage: TWizardPage;
  Rect: TRect;
  HIcon: LongInt;
  AIconFileName: String;
  MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

procedure GetInstTypePage();
begin
  MyNewPage := CreateCustomPage(wpWelcome,
    ExpandConstant('{cm:HeaderLabelPage}'), '');

  try
    // в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.
    // Можно использовать обычные .ico
    AIconFileName := ExpandConstant('{sys}\shell32.dll');
    //

    Rect.Left := 0;
    Rect.Top := 0;
    Rect.Right := 32;
    Rect.Bottom := 32;

    hIcon := ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
    try
      with TBitmapImage.Create(WizardForm) do
      begin
        Left := ScaleX(15);
        Top := ScaleY(68);
        Width := 32;
        Height := 32;
        with Bitmap do
        begin
          Width := 32;
          Height := 32;
          Canvas.Brush.Color := clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent := MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;

    hIcon := ExtractIcon(GetModuleHandle(0), AIconFileName, 19);
    try
      with TBitmapImage.Create(WizardForm) do
      begin
        Left := ScaleX(15);                                               
        Top := ScaleY(138);
        Width := 32;
        Height := 32;
        with Bitmap do
        begin
          Width := 32;
          Height := 32;
          Canvas.Brush.Color := clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent := MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;
  except
  end;

  with TNewStaticText.Create(WizardForm) do
  begin
    Width := WizardForm.InnerNotebook.Width;
    Height := ScaleY(26);
    WordWrap := True;
    Caption := ExpandConstant('{cm:PageTextHeader}');
    Parent := MyNewPage.Surface;
  end;

  MyRadioBtn_1 := TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_1 do
  begin
    Top := ScaleY(50);
    Width := ScaleX(150);
    Caption := ExpandConstant('{cm:MyRadioCaption_1}');
    Checked := True;
    Parent := MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do
  begin
    Left := ScaleX(60);
    Top := ScaleY(68);
    Width := WizardForm.InnerNotebook.Width - ScaleX(60);
    Height := ScaleY(26);
    WordWrap := True;
    Caption := ExpandConstant('{cm:MyText_1}');
    Parent := MyNewPage.Surface;
  end;

  MyRadioBtn_2 := TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_2 do
  begin
    Top := ScaleY(120);
    Width := ScaleX(150); 
    Caption := ExpandConstant('{cm:MyRadioCaption_2}');
    Parent := MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do
  begin
    Left := ScaleX(60);
    Top := ScaleY(138);
    Width := WizardForm.InnerNotebook.Width - ScaleX(60);
    Height := ScaleY(26);
    WordWrap := True;
    Caption := ExpandConstant('{cm:MyText_2}');
    Parent := MyNewPage.Surface;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID >= wpSelectDir) and (PageID < wpReady) and (MyRadioBtn_1.Checked) then
    Result := True;
end;

procedure InitializeWizard();
begin
  GetInstTypePage();
end;


Gnom_aka_Lexander 26-12-2010 23:09 1575176

А вот моя, иконки еще не приделал, но задел под них отвел :), если нужно, завтра сделаю.
читать дальше »
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={sd}\My Program
OutputDir=.
OutputBaseFilename=test
[Files]
Source: NewIconImage1.png; DestDir: {tmp}; Flags: dontcopy;
Source: NewIconImage2.png; DestDir: {tmp}; Flags: dontcopy;
Source: botva2.dll; DestDir: {tmp}; Flags: dontcopy;

[CustomMessages]
HeaderLabelPage=Выберите тип установки
MyRadioCaption_1=Обычная установка
MyRadioCaption_2=Портативная установка
MyRadioDeskrip_1=Текст под первой радиокнопкой
MyRadioDeskrip_2=Текст под второй радиокнопкой

[code]
var
ISCustomPage1: TWizardPage;
NewIconImage1: TNewIconImage;
NewIconImage2: TNewIconImage;
NewRadioButton1: TNewRadioButton;
NewRadioButton2: TNewRadioButton;
NewStaticText1: TNewStaticText;
NewStaticText2: TNewStaticText;

procedure RedesignWizardForm;
begin
{ Creates custom wizard page }
ISCustomPage1 := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

{ NewIconImage1 }
NewIconImage1 := TNewIconImage.Create(WizardForm);
with NewIconImage1 do
begin
Name := 'NewIconImage1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(8);
Top := ScaleY(8);
Width := ScaleX(81);
Height := ScaleY(81);
end;

{ NewIconImage2 }
NewIconImage2 := TNewIconImage.Create(WizardForm);
with NewIconImage2 do
begin
Name := 'NewIconImage2';
Parent := ISCustomPage1.Surface;
Left := ScaleX(8);
Top := ScaleY(120);
Width := ScaleX(81);
Height := ScaleY(81);
end;

{ NewRadioButton1 }
NewRadioButton1 := TNewRadioButton.Create(WizardForm);
with NewRadioButton1 do
begin
Name := 'NewRadioButton1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(112);
Top := ScaleY(8);
Width := ScaleX(185);
Height := ScaleY(17);
Caption := ExpandConstant('{cm:MyRadioCaption_1}');
end;

{ NewRadioButton2 }
NewRadioButton2 := TNewRadioButton.Create(WizardForm);
with NewRadioButton2 do
begin
Name := 'NewRadioButton2';
Parent := ISCustomPage1.Surface;
Left := ScaleX(112);
Top := ScaleY(120);
Width := ScaleX(185);
Height := ScaleY(17);
Caption := ExpandConstant('{cm:MyRadioCaption_2}');
end;

{ NewStaticText1 }
NewStaticText1 := TNewStaticText.Create(WizardForm);
with NewStaticText1 do
begin
Name := 'NewStaticText1';
Parent := ISCustomPage1.Surface;
Caption := ExpandConstant('{cm:MyRadioDeskrip_1}');
Left := ScaleX(112);
Top := ScaleY(32);
Width := ScaleX(185);
Height := ScaleY(57);
end;

{ NewStaticText2 }
NewStaticText2 := TNewStaticText.Create(WizardForm);
with NewStaticText2 do
begin
Name := 'NewStaticText2';
Parent := ISCustomPage1.Surface;
Caption := ExpandConstant('{cm:MyRadioDeskrip_2}');
Left := ScaleX(112);
Top := ScaleY(144);
Width := ScaleX(185);
Height := ScaleY(57);
end;

NewRadioButton1.TabOrder := 0;
NewStaticText1.TabOrder := 1;
NewRadioButton2.TabOrder := 2;
NewStaticText2.TabOrder := 3;
end;
procedure InitializeWizard();
begin
RedesignWizardForm;
end;

serg aka lain, изящненько, только тогда библиотечку-бы со своими иконками, чтоб не ограничиватся системными :)
Я через ботву попробую, правда тяжеловато выходит для простенького скрипта....

Duality 26-12-2010 23:29 1575185

serg aka lain, спасибо - очень классно! Лександер, тоже спасибо за труд!

gur74 27-12-2010 00:02 1575209

Нужна помощь, кто использовал в Inno Setup распаковку архивов FreeArc. Есть архив Glossary.arc нужно чтобы он распаковывался при выборе на SelectComponentsPage в нужную папку. Как это можно осуществить???

serg aka lain 27-12-2010 00:11 1575214

Вложений: 1
Цитата:

Цитата Лександер
если нужно, завтра сделаю »

если не сложно, то будем посмотреть.
Цитата:

Цитата Лександер
только тогда библиотечку-бы со своими иконками, чтоб не ограничиватся системными »


potan 27-12-2010 15:18 1575555

Добрый день! перерыл кучу информации, но так и не смог найти внятного ответа на свой вопрос: как изменить расположение кнопки "Завершить"?
помогите пожалуйста

actavir 27-12-2010 15:27 1575560

Подскажите пожалуйста, как работать с precomp?
Если можно пример скрипта или статью
В инете нашёл только пример в библиотеке и всё(((

nik1967 27-12-2010 15:52 1575573

potan,
Например
Код:

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

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

[_Code]
Procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpFinished then
  WizardForm.NextButton.Left:= WizardForm.NextButton.Left -100;
end;


potan 27-12-2010 16:00 1575575

nik1967,
Супер! спасибо большое!

nik1967 27-12-2010 16:18 1575591

actavir,
Можешь посмотреть тут.

Imitri7 27-12-2010 17:55 1575666

ksunechkin, serg aka lain, такой вариант еще можно, ток вот картинка остаеться(
Код:

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

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

[CustomMessages]
HeaderLabelPage=Выберите тип установки
MyRadioCaption_1=Обычная установка
MyRadioCaption_2=Выборочная установка
PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.
MyText_1=Установка будет произведена полностью в автоматическом режиме.%n(Подходит для не подготовленных пользователей)
MyText_2=Будет предложен выбор директории установки.%n(Для продвинутых пользователей)
MyText_0=Наведите курсор мыши на тип установки, чтобы прочесть его описание.


[_code]
const
  DI_NORMAL = 3;

var
  MyNewPage: TWizardPage;
  Rect: TRect;
  HIcon: LongInt;
  AIconFileName: String;
  MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;
  Text: TNewStaticText;
  NoChecks: TLabel;

function GetModuleHandle(lpModuleName: LongInt): LongInt;
 external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt;
 external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth,
      cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;
 external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt;
 external 'DestroyIcon@user32.dll stdcall';

procedure Check1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text.Enabled:=True
Text.Caption:=ExpandConstant('{cm:MyText_1}')
try
    AIconFileName := ExpandConstant('{sys}\shell32.dll');

    Rect.Left := 0;
    Rect.Top := 0;
    Rect.Right := 32;
    Rect.Bottom := 32;
   
    hIcon := ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
    try
      with TBitmapImage.Create(WizardForm) do
      begin
        Left := ScaleX(15);
        Top := ScaleY(130);
        Width := 32;
        Height := 32;
        with Bitmap do
        begin
          Width := 32;
          Height := 32;
          Canvas.Brush.Color := clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent := MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;
  except
  end;
end;

procedure Check2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text.Enabled:=True
Text.Caption:=ExpandConstant('{cm:MyText_2}')
try
    AIconFileName := ExpandConstant('{sys}\shell32.dll');

    Rect.Left := 0;
    Rect.Top := 0;
    Rect.Right := 32;
    Rect.Bottom := 32;

    hIcon := ExtractIcon(GetModuleHandle(0), AIconFileName, 19);
    try
      with TBitmapImage.Create(WizardForm) do
      begin
        Left := ScaleX(15);
        Top := ScaleY(130);
        Width := 32;
        Height := 32;
        with Bitmap do
        begin
          Width := 32;
          Height := 32;
          Canvas.Brush.Color := clBtnFace;
          Canvas.FillRect(Rect);
          DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
        end;
        Parent := MyNewPage.Surface;
      end;
    finally
    DestroyIcon(hIcon);
    end;
  except
  end;
end;

procedure NoChecksMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text.Enabled:=False
Text.Caption:=ExpandConstant('{cm:MyText_0}')
end;


procedure GetInstTypePage();
begin
  MyNewPage := CreateCustomPage(wpWelcome,
    ExpandConstant('{cm:HeaderLabelPage}'), '');


  with TNewStaticText.Create(WizardForm) do
  begin
    Width := WizardForm.InnerNotebook.Width;
    Height := ScaleY(26);
    WordWrap := True;
    Caption := ExpandConstant('{cm:PageTextHeader}');
    Parent := MyNewPage.Surface;
  end;

  MyRadioBtn_1 := TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_1 do
  begin
    Top := ScaleY(50);
    Width := ScaleX(150);
    Caption := ExpandConstant('{cm:MyRadioCaption_1}');
    Checked := True;
    Parent := MyNewPage.Surface;
    OnMouseMove:=@Check1MouseMove
  end;

  MyRadioBtn_2 := TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_2 do
  begin
    Top := ScaleY(70);
    Width := ScaleX(150);
    Caption := ExpandConstant('{cm:MyRadioCaption_2}');
    Parent := MyNewPage.Surface;
    OnMouseMove:=@Check2MouseMove
  end;


end;

Procedure InitializeWizard();
begin
begin
  GetInstTypePage();
end;
begin
  Text:=TNewStaticText.Create(WizardForm)
  Text.Left := ScaleX(60);
  Text.Top := ScaleY(138);
  Text.Width := WizardForm.InnerNotebook.Width - ScaleX(60);
  Text.Height := ScaleY(26);
  Text.WordWrap := True;
  Text.Parent := MyNewPage.Surface;
end;
begin
  NoChecks:=TLabel.Create(WizardForm)
  NoChecks.Width:=WizardForm.Width
  NoChecks.Height:=WizardForm.Height
  NoChecks.Autosize:=False
  NoChecks.Transparent:=True
  NoChecks.OnMouseMove:=@NoChecksMouseMove
  NoChecks.Parent:=MyNewPage.Surface
end;
end;


function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID >= wpSelectDir) and (PageID < wpReady) and (MyRadioBtn_1.Checked) then
    Result := True;
end;


actavir 27-12-2010 18:31 1575689

Подскажите ещё пожалуйста как поставить картинку на фон инсталятора. Смотрел различные скрипты ничё не понял.
Я только начал разбираться в этом.
Заранее благодарен.

Imitri7 27-12-2010 18:39 1575694

actavir, ты на всю страницу хочешь или обычную?

actavir 27-12-2010 18:42 1575697

как понять на всю страницу (на весь экран) или на форму инсталятора?
>>на форму инсталятора

Imitri7 27-12-2010 18:48 1575701

actavir, вот отсюда взять можно

или вот
для страницы приветствия (по аналогии можно и для финишной написать)
Код:

[Files]
Source: fon.bmp; DestDir: {tmp}; Flags: dontcopy
[_code]
var
WelcomeLabel1, WelcomeLabel2: TLabel;
BmpFile: TBitmapImage;

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

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
BmpFile.SetBounds(0, 0, 497, 320);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.hide;
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
WelcomeLabel1.Alignment:=taCenter;
Left:= ScaleX(110);
Top:= ScaleY(50);
Width:= ScaleX(301);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Name:='Tahoma'
Font.Size:= 14;
Font.Color:=ClGray
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
WelcomeLabel2.Alignment:=taCenter;
Top:= ScaleY(130);
Left:= ScaleX(110);
Width:= ScaleX(280);
Height:= ScaleY(310);
AutoSize:= false;
WordWrap:= true;
Font.Name:='Tahoma'
Font.Size:= 10;
Font.Color:=ClWhite
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;
end;


actavir 27-12-2010 18:58 1575706

Imitri7, а какое изображение в том коде становиться фоновым, просто я не нашёл в директории source ни одной ссылки на изображение

Imitri7 27-12-2010 19:06 1575712

actavir, это вроде ток пример, не дописанный код
зы на пред. страницы код выложил, его попробуй

я лично вот этим вариантом пользуюсь
из скрипта злого деда (на велком и финиш пейдж)

Код:

[Setup]
AppName=Mirror's Edge
AppVerName=Mirror's Edge
DefaultDirName={pf}\EA Games\Mirror's Edge
WizardImageFile=WizardImg.bmp
WizardSmallImageFile=WizardSmallImg.bmp

[_code]
var
WLabel1, WLabel2,
FLabel1, FLabel2: TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;
procedure InitializeWizard();
//WizardImageFile
begin
WizardForm.Caption:='Программа установки игры "Mirrors Edge"';
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.WizardBitmapImage.Width := 497;
WizardForm.WizardBitmapImage.Height := 313;
WizardForm.WizardSmallBitmapImage.Left:=0;
WizardForm.WizardSmallBitmapImage.Width:=497;
WizardForm.WizardSmallBitmapImage.Height:=58;
WizardForm.PageDescriptionLabel.Width:=300;
WizardForm.PageNameLabel.Width:=300;
WizardForm.FileNameLabel.Visible:=False;
WizardForm.ProgressGauge.Top:=ScaleY(100);
WizardForm.StatusLabel.Top:=ScaleY(80);
WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(176);
WLabel1.Top := ScaleY(16);
WLabel1.Width := ScaleX(301);
WLabel1.Height := ScaleY(54);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Font.Size := 11;
WLabel1.Font.Style := [fsBold];
WLabel1.Font.Color:= clBlack;

WLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;
WLabel2 :=TLabel.Create(WizardForm);
WLabel2.Top := ScaleY(76);
WLabel2.Left := ScaleX(176);
WLabel2.Width := ScaleX(301);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.Font.Color:= clBlack;

WLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;
WizardForm.WizardBitmapImage2.Width := 497;
WizardForm.WizardBitmapImage2.Height := 313;
FLabel1 := TLabel.Create(WizardForm);
FLabel1.Left := ScaleX(176);
FLabel1.Top := ScaleY(16);
FLabel1.Width := ScaleX(301);
FLabel1.Height := ScaleY(54);
FLabel1.AutoSize := False;
FLabel1.WordWrap := True;
FLabel1.Font.Size := 11;
FLabel1.Font.Style := [fsBold];
FLabel1.Font.Color:= clBlack;

FLabel1.Caption := WizardForm.FinishedHeadingLabel.Caption;
FLabel1.Transparent := True;
FLabel1.Parent := WizardForm.FinishedPage;
FLabel2 :=TLabel.Create(WizardForm);
FLabel2.Top := ScaleY(76);
FLabel2.Left := ScaleX(176);
FLabel2.Width := ScaleX(301);
FLabel2.Height := ScaleY(53);
FLabel2.AutoSize := False;
FLabel2.WordWrap := True;
FLabel2.Font.Color:= clBlack;


FLabel2.Caption := 'Программа установлена на Ваш компьютер.' #13#13
'Нажмите «Завершить», чтобы выйти из программы установки.';
FLabel2.Transparent := True;
FLabel2.Parent := WizardForm.FinishedPage;
begin
PageNameLabel := TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left := ScaleX(10);
Top := ScaleY(10);
Width := ScaleX(300);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Color := clBlack;
Font.Style := [fsBold];
Transparent := True;
Parent := WizardForm.MainPanel;
end;

PageDescriptionLabel := TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left := ScaleX(15);
Top := ScaleY(25);
Width := ScaleX(400);
Height := ScaleY(30);
AutoSize := False;
WordWrap := True;
Font.Color := clBlack;
Transparent := True;
Parent := WizardForm.MainPanel;
end;

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := Mainpanel.Width;
Height := MainPanel.Height;
end;
end;
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
end;
end;


actavir 27-12-2010 19:26 1575722

Imitri7, слушай я вот тот предыдуший скрипт взял с 29 страницы а как сделать что бы он на другие страницы пошёл?

Imitri7 27-12-2010 19:42 1575732

actavir,
вроде так
Код:

[Files]
Source: fon.bmp; DestDir: {tmp}; Flags: dontcopy
[_code]
var
WelcomeLabel1, WelcomeLabel2,FinishedLabel1,FinishedLabel2: TLabel;
BmpFile1,BmpFile2: TBitmapImage;

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

BmpFile1:= TBitmapImage.Create(WizardForm);
BmpFile1.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
BmpFile1.SetBounds(0, 0, 497, 320);
BmpFile1.Stretch:= true
BmpFile1.Parent:= WizardForm.WelcomePage;

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.hide;
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
WelcomeLabel1.Alignment:=taCenter;
Left:= ScaleX(110);
Top:= ScaleY(50);
Width:= ScaleX(301);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Name:='Tahoma'
Font.Size:= 14;
Font.Color:=ClGray
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
WelcomeLabel2.Alignment:=taCenter;
Top:= ScaleY(130);
Left:= ScaleX(110);
Width:= ScaleX(280);
Height:= ScaleY(310);
AutoSize:= false;
WordWrap:= true;
Font.Name:='Tahoma'
Font.Size:= 10;
Font.Color:=ClWhite
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;

BmpFile2:= TBitmapImage.Create(WizardForm);
BmpFile2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
BmpFile2.SetBounds(0, 0, 497, 320);
BmpFile2.Stretch:= true
BmpFile2.Parent:= WizardForm.FinishedPage;


with WizardForm do
begin
FinishedHeadingLabel.Hide;
FinishedLabel.hide;
end;

FinishedLabel1:= TLabel.Create(WizardForm);
with FinishedLabel1 do
begin
FinishedLabel1.Alignment:=taCenter;
Left:= ScaleX(110);
Top:= ScaleY(50);
Width:= ScaleX(301);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Name:='Tahoma'
Font.Size:= 14;
Font.Color:=ClGray
Parent:= WizardForm.FinishedPage;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
end;

FinishedLabel2:=TLabel.Create(WizardForm);
with FinishedLabel2 do
begin
FinishedLabel2.Alignment:=taCenter;
Top:= ScaleY(130);
Left:= ScaleX(110);
Width:= ScaleX(280);
Height:= ScaleY(310);
AutoSize:= false;
WordWrap:= true;
Font.Name:='Tahoma'
Font.Size:= 10;
Font.Color:=ClWhite
Transparent:= true;
Parent:= WizardForm.FinishedPage;
Caption:= WizardForm.FinishedLabel.Caption;
end;
end;


actavir 27-12-2010 20:33 1575764

Этот код даёт я так понял только на первую и на последнюю страницы??
А как сделать на все?

Vamp1re 27-12-2010 20:54 1575777

Я зделал так чтоб у меня распаковывало RAR архивы в inno setup но там надо выбирать директорию рапаковки а мне етого ненадо так как в инсталяторе от инно ето есть! как мне сделать чтоб RAR архиватор не запрашивал директорию распаковки?

Serega 27-12-2010 21:00 1575783

Цитата:

Цитата Rostlv
но в XP бегунка нет »

У меня XP SP3, всё прекрасно отображается...
Цитата:

Цитата Rostlv
И привязать его к секции Run »

Пример

Код:

; используем прогрессбар без отображения реального процента,
; удобно при установке доп. программ, когда их время установки заранее не известна

[Setup]
AppName=ProgressBarStyle
AppVerName=ProgressBarStyle v 1.0
DefaultDirName={pf}\ProgressBarStyle
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes
VersionInfoCopyright=Serega

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Run]
; при первом и последующем запуске доп. программ, используем - BeforeInstall: AnimatePbMsg('Ваше сообщение')
; при последнем запуске, добавляем - AfterInstall: AnimatePbFree - необходимо для освобождения ресурсов и разрушения прогрессбара
Filename: {app}\MyProg.exe; BeforeInstall: AnimatePbMsg('Первый запуск MyProg.exe'); Flags: skipifsilent
Filename: {app}\MyProg.exe; BeforeInstall: AnimatePbMsg('Тестовый запуск MyProg.exe №2'); Flags: skipifsilent
Filename: {app}\MyProg.exe; BeforeInstall: AnimatePbMsg('Финальный запуск MyProg.exe'); AfterInstall: AnimatePbFree; Flags: skipifsilent

[Code]
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';

const
  PBM_SETMARQUEE = $040A;
  GWL_STYLE      = -16;
  PBS_MARQUEE    = $08;

var
  AnimatePb: TNewProgressBar;

procedure CreateAnimatePb;
begin
  AnimatePb := TNewProgressBar.Create(WizardForm);
  with AnimatePb do
    begin
      Parent := WizardForm.InstallingPage;
      SetBounds(WizardForm.ProgressGauge.Left, WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + ScaleY(10),
                WizardForm.ProgressGauge.Width, WizardForm.ProgressGauge.Height);
      SetWindowLong (AnimatePb.Handle, GWL_STYLE, (GetWindowLong (AnimatePb.Handle, GWL_STYLE) or PBS_MARQUEE));
      SendMessage(AnimatePb.Handle, PBM_SETMARQUEE, 1, 20);
    end;
end;

procedure AnimatePbMsg(const msg: string);
begin
  if AnimatePb = nil then
    CreateAnimatePb;
  WizardForm.FilenameLabel.Caption := msg;
end;

procedure AnimatePbFree;
begin
  if AnimatePb <> nil then
    begin
      AnimatePb.Free;
      AnimatePb := nil;
    end;
end;



Цитата:

Цитата actavir
А как сделать на все? »

по аналогии

Vamp1re 27-12-2010 21:14 1575793

:help: :cool: :drug: ХЕЛП МИ !!!!!!

Serega 27-12-2010 21:28 1575804

Vamp1re, Вы по русски объясните, что конкретно вам надо? При чём тут архиватор?
Если нужна распаковка самораспаковывающегося rar архива, то смотрите справку по командной строке rar и уже с этими параметрами, запускаете свой архив.

actavir 27-12-2010 21:28 1575805

Подскажите, у меня конфликтуют процедуры InitializeWizard, так получилось что их 2 штуки в коде, что делать?
Одна на извлечении фриарка а вторая на фоновом изображении.

Serega 27-12-2010 21:36 1575810

Цитата:

Цитата actavir
так получилось что их 2 штуки в коде, что делать? »

Объединить в одну, руками или с помощью InnoSetup Script Joiner (ссылка в шапке темы).

Vamp1re 27-12-2010 21:50 1575816

а можете мне дать целую готовую командную строку rar?
или изменить параметр в моей строке
PHP код:

Filename: {src}Data.exeWorkingDir: {src}; Parameters"-o""{app}"" -y -aoa"StatusMsgРаспаковка игровых архивов...; Flagswaituntilterminated


Gnom_aka_Lexander 27-12-2010 21:56 1575821

Цитата:

Цитата Vamp1re
Filename: {src}Data.exe; »

Правильно будет так:
Код:

Filename: {src}\Data.exe;

actavir 27-12-2010 22:51 1575864

А можно поставить фон так у инсталлятора что бы изображения справа и в шапке не исчезли?

Rostlv 28-12-2010 01:08 1575943

Serega, огромное Вам спасибо, теперь прогрессбар такой, как надо.
Про бегунок в XP. В стандартных темах, типа Luna, бегунок есть, но в более новых темах для XP под Висту и Севен, где прогрессбар цельный, он не отображается. При этом, основной прогрессбар работает правильно и виден. В самой Seven бегунок есть.
Пожелание, а можно текст "Ваше сообщение" расположить не над основным прогрессбаром, а над фейковым? Было бы резоннее.

А теперь ещё одна небольшая проблема. На странице мастера "Всё готово к установке" в графе "Тип установки:" не переводится "Full installation", "Custom installation", при условии наличия в скрипте секции [Types], без неё перевод есть. Добавление перевода в секцию [CustomMessages] проблему не решает. Сделать два языка в секции [Types] не получается, программа не позволяет дважды добавлять типы full и сustom.

gur74 28-12-2010 02:30 1575959

Как можно сделать что бы IS проверял платформу и устанавливал соответствующую ей 32 bit или 64-bit, или это только можно сделать при помощи страницы выбора компонентов???

R.i.m.s.k.y. 28-12-2010 08:28 1576027

Цитата:

Цитата gur74
Как можно сделать что бы IS проверял платформу и устанавливал соответствующую ей 32 bit или 64-bit, или это только можно сделать при помощи страницы выбора компонентов »

Стандартная функция IsWin64 - True если винда 64
В секциях, кроме Code, можно использовать Check: (IsWin64) и Check: (not IsWin64)
Source: Profiles\*; DestDir: {app}\Profiles\; Flags: ignoreversion recursesubdirs createallsubdirs restartreplace; Check: (IsWin64)

Так же рекомендую в справке инно в поиске набрать x64 и почитать что он там напишет. Там мало, минут 5 читать всего лишь.

Молодой 28-12-2010 11:40 1576145

Доброго времени суток, подскажите как убрать текст

Заранее благодарен ))

Спасибо за помощь!
Вопрос решил, в коде разобрался!

gur74 28-12-2010 12:27 1576178

R.i.m.s.k.y.

Спасибо!!!

Gnom_aka_Lexander 28-12-2010 13:47 1576240

ksunechkin, serg aka lain,
Вот, оценивайте, от ботвы отказался, слишком громоздко, родные средства Инно позмоляют вставлять битмапы и икон-файлы на любые страницы. И скрипт выходит заметно меньше размером :)

R.i.m.s.k.y. 28-12-2010 14:19 1576265

Лександер, разрешите поинтересоваться, как Инно Ультра поживает? есть ли страничка с постоянно обновляемым дистром?

Gnom_aka_Lexander 28-12-2010 14:41 1576292

R.i.m.s.k.y., У меня нету, поскольку это всего лиш комплект уже готовых программ. Обновлять на данный момент пока нечего, единственное могу посоветовать удалить русский язык из расширенной версии, он для предидущей, и на новой пока кривовато работает. Как русик для расширенной версии новый напишут, так обновлю. Сделаю два варианта дистра - нормальный, и для тех, у кого инет не резиновый, без Скин Билдера (полторы сотни метров установленный весит).
Может чего по оформлению посоветуеш?И, да, данный вопрос ближе кэтой теме, там я и выкладываю обновленные пакеты.

R.i.m.s.k.y. 28-12-2010 14:58 1576307

Лександер,
ок

Raf96 28-12-2010 16:12 1576371

Скажите кто нибудь как переместить кнопки, изменить их размер и сместить в них текст?

R.i.m.s.k.y. 28-12-2010 16:25 1576377

Цитата:

Цитата Raf96
Скажите кто нибудь как переместить кнопки, изменить их размер и сместить в них текст? »

В шапке Inno Form Designer

Gnom_aka_Lexander 28-12-2010 16:25 1576379

Raf96, Можно. В расширенном редакторе это легко реализуется :)
R.i.m.s.k.y., Фром дизайнер встроен в расширенную версию, это раз, на семерке он не работает, это два :)
По этим причинам я сбираюсь исключить его из своего пакета :)
Кто-бы справочку сваял нормальную по расширенной версии... Это три :)

serg aka lain 28-12-2010 16:44 1576389

Цитата:

Цитата Лександер
Вот, оценивайте »

Нормально.
Для аккуратности битмапов (белые квадраты фона) можно добавить:
Код:

ReplaceColor := clWhite;
ReplaceWithColor := clBtnFace;


Gnom_aka_Lexander 28-12-2010 16:53 1576393

serg aka lain, Ну, под себя там еще много чего можно сделать :) я уже все перелопатил под темный фон:)

Vamp1re 28-12-2010 17:14 1576406

а как сделать чтоб перед установкой программы (игры) показалась картинка или логотип программы (игры)

Vista-w 28-12-2010 17:25 1576410

Как сделать, чтоб после установки игры, запустилась установка DirrectX ?
как тут

Вот код, сделать не как не могу.

читать дальше »
[Setup]
SourceDir=.
OutputDir=Setup
AppName=Operation 7
AppVerName=Operation 7
AppVersion=Operation 7
AppPublisher=Vista-w
AppCopyright=Vista-w
DefaultDirName={pf}\GFI\Operation 7
DefaultGroupName=Operation 7
AllowNoIcons=yes
OutputBaseFilename=setup
SetupIconFile=C:\Program Files\GFI\Operation 7\OPERATION7.ico
WindowVisible=no
WindowShowCaption=no
WizardImageFile=C:\Documents and Settings\Admin\Рабочий стол\How to RePack\Мои репаки\Operation 7\Типография\WizardImage.bmp
WizardSmallImageFile=C:\Documents and Settings\Admin\Рабочий стол\How to RePack\Мои репаки\Operation 7\Типография\WizardSmallImage.bmp
WindowResizable=no
Compression=lzma/ultra
SolidCompression=yes
DiskSpanning=yes
DiskSliceSize=2100000000
SlicesPerDisk=1

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"

[Files]
Source: C:\Documents and Settings\Admin\Рабочий стол\How to RePack\Мои репаки\Operation 7\1.reg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "C:\Documents and Settings\Admin\Рабочий стол\How to RePack\Мои репаки\Operation 7\Типография\Logo.bmp"; DestDir: "{tmp}"; Flags: dontcopy

Source: "C:\Program Files\GFI\Operation 7\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Icons]
Name: "{group}\Operation 7"; Filename: "{app}\OPERATION7.exe"; WorkingDir: "{app}";
Name: "{userdesktop}\Operation 7"; Filename: "{app}\OPERATION7.exe"; WorkingDir: "{app}"; Tasks: desktopicon;
Name: "{group}\{cm:UninstallProgram,Operation 7}"; Filename: "{uninstallexe}"

[Registry]
Root: HKLM; Subkey: "Software\GFI"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\GFI\Operation 7"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\GFI\Operation 7"; ValueType: string; ValueName: "PATH"; ValueData: "{app}"

[Run]
Description: "{cm:LaunchProgram, Operation 7}"; Filename: "{app}\OPERATION7.exe"; WorkingDir: "{app}"; Flags: nowait postinstall skipifsilent unchecked
Filename: {win}\regedit.exe; Parameters: /s {tmp}\1.reg; StatusMsg: "Вносим изменения в реестр ..."; Flags: waituntilterminated runasoriginaluser

[UninstallDelete]
Type: filesandordirs; Name: "{app}"
Name: {tmp}\1.reg; Type: filesandordirs; Components: ; Tasks: ; Languages:

[code]

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('1.reg');
Result:=True;
end;

var
MyPanel: TPanel;
bottom_img:TBitmapImage;
BmpFile: TBitmapImage;

procedure InitializeWizard();
begin
MyPanel := TPanel.Create(WizardForm);
with MyPanel do
begin
Align := alClient;
Parent := WizardForm;
end;

with WizardForm.WizardBitmapImage do
begin
Align := alClient;
Parent := MyPanel;
end;

with TLabel.Create(WizardForm) do
begin
AutoSize := WizardForm.WelcomeLabel1.AutoSize;
WordWrap := WizardForm.WelcomeLabel1.WordWrap;
Left := WizardForm.WelcomeLabel1.Left;
Top := WizardForm.WelcomeLabel1.Top;
Width := WizardForm.WelcomeLabel1.Width;
Height := WizardForm.WelcomeLabel1.Height;
Caption := WizardForm.WelcomeLabel1.Caption;
Font.Size := WizardForm.WelcomeLabel1.Font.Size;
Font.Style := WizardForm.WelcomeLabel1.Font.Style;
Font.Color := clWhite;
TransParent := True;
Parent := MyPanel;
end;

with TLabel.Create(WizardForm) do
begin
AutoSize := WizardForm.WelcomeLabel2.AutoSize;
WordWrap := WizardForm.WelcomeLabel2.WordWrap;
Left := WizardForm.WelcomeLabel2.Left;
Top := WizardForm.WelcomeLabel2.Top;
Width := WizardForm.WelcomeLabel2.Width;
Height := WizardForm.WelcomeLabel2.Height;
Caption := WizardForm.WelcomeLabel2.Caption;
Font.Size := WizardForm.WelcomeLabel2.Font.Size;
Font.Style := WizardForm.WelcomeLabel2.Font.Style;
Font.Color := clWhite;
TransParent := True;
Parent := MyPanel;
end;

WizardForm.NextButton.BringToFront;
WizardForm.CancelButton.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
MyPanel.Hide;
if CurPageID = wpWelcome then
MyPanel.Show;
begin
with WizardForm do begin
with MainPanel do
Height := Height - 0;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 59; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;
begin
WizardForm.FileNameLabel.Visible:= False;
ExtractTemporaryFile('Logo.bmp');
bottom_img:= TBitmapImage.Create(WizardForm);
bottom_img.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Logo.bmp'));
bottom_img.SetBounds(0, 315, 175, 40);
bottom_img.Parent:= WizardForm;
bottom_img.Stretch:= True;
end;
end;

Gnom_aka_Lexander 28-12-2010 17:33 1576416

Vista-w, А у тебя здесь нет команды на запуск установки ДирекИкса.
В Секцию RUN добавь команду:
Код:

Filename: {src}\DirectX.exe; Parameters: /silent; StatusMsg: Обновляем DirectX...; Flags: postinstall

Vista-w 28-12-2010 17:49 1576428

Цитата:

Цитата Лександер
Filename: {src}\DirectX.exe; Parameters: /silent; StatusMsg: Обновляем DirectX...; Flags: postinstall »

А адрес куда вписать к нему? и куда установочный файл дирекса кидать?

Помогите пожалуйста как тут

как сделать так
чтоб в конце была функция установки Директа ?
и где адрес прописать к Директу?
И куда его нужно кинуть?

gur74 28-12-2010 18:25 1576452

Люди у кого есть русская справка IS 5 в формате chm скиньте пожалуйста или дайте ссылку.

Gnom_aka_Lexander 28-12-2010 19:06 1576475

Vista-w,
Тогда так:
Код:

[Run]
Filename: {src}\DirectX\DXSETUP.exe; WorkingDir: {src}\DirectX; Parameters: /silent; Tasks: dx; Flags: waituntilterminated PostInstall;

[Tasks]
Name: dx; Description: "Установить ДиректИкс";

DirectX соответственно кладеш в папку DirectX рядом с инсталлятором.

R.i.m.s.k.y. 28-12-2010 19:43 1576492

Лександер
если не изменяет склероз для дирекса Parameters: /Q

Цитата:

Цитата gur74
Люди у кого есть русская справка IS 5 в формате chm скиньте пожалуйста или дайте ссылку. »

что в семерке не открывается? качай спецпатчик Программа "Справка Windows" для просмотра 32-разрядных файлов справки (.HLP) отсюда
http://forum.ru-board.com/topic.cgi?...&limit=1&m=1#1

Serega,
добавь, пожалуйста, эти патчики в шапку, второй раз уже отвечаю.
Лександер
и в сборку Ультра Инно

Gnom_aka_Lexander 28-12-2010 20:02 1576505

R.i.m.s.k.y., Про директ, склероз тебе изменяет :) там сайлент или верисайлент (любой из них)
Это я знаю точно :)

R.i.m.s.k.y. 28-12-2010 20:27 1576517

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

Gnom_aka_Lexander 28-12-2010 20:35 1576522

R.i.m.s.k.y., А не работает в семерке не справка старого образца (хтя и она тоже, так что за ссыль спасибо, учту). Не работает в семерке Inno Setup Form Designer, а ето не исправить уже ничем. Но и не нужно, в расширенной версии он интегрирован на последней вкладке.

XNick 28-12-2010 21:13 1576544

Вложений: 1
Товарищи напишите скрипт который делает интерфейс установки черным, а шрифт белым...
Например как на скрине:
Очень надо....

Rostlv 29-12-2010 00:32 1576677

Нужна только выборочная установка, в скрипте оставляю:
Код:

[Types]
Name: custom; Description: Custom installation; Flags: iscustom

Всё работает, но только нет перевода "Custom installation" на русский.
Делаю так:
Код:

[Types]
Name: custom; Description: Custom installation; Languages: english; Flags: iscustom
Name: custom; Description: Выборочная установка; Languages: russian

перевод появляется, но нет выбора компонентов в русской версии, так как не указан флаг "iscustom".
По идее, для правильной работы и перевода должно быть так:
Код:

[Types]
Name: custom; Description: Custom installation; Languages: english; Flags: iscustom
Name: custom; Description: Выборочная установка; Languages: russian; Flags: iscustom

но в таком виде скрипт не компилится, IS не позволяет дважды указывать флаг "iscustom".
Ещё пробовал скомпилировать без "Description", тоже не получилось, ошибка при компиляции. Также добавлял это:
Код:

[CustomMessages]
russian.FullInstallation=Полная установка
russian.CompactInstallation=Компактная установка
russian.CustomInstallation=Выборочная установка

не помогало, да и к тому же это дублирование, перевод этих строк есть в файле Russian.isl.
Вопрос, как сделать перевод "Custom installation" на русский? Версия Inno Setup - 5.4.0.

Habetdin 29-12-2010 00:38 1576681

Rostlv, просто уберите из скрипта секцию [Types], раз
Цитата:

Цитата Rostlv
Нужна только выборочная установка »


Rostlv 29-12-2010 01:09 1576693

Habetdin, имел в виду, что нужна только custom-установка. Мне не нужен выбор между полной, компактной и выборочной.

R.i.m.s.k.y. 29-12-2010 08:16 1576772

Давно я не спрашивал по инно.
Подскажите, пожалуйста, инно может работать с чужими инишниками или надо писать свою функцию чтения/записи? Если может, поделитесь примером.
Заранее спасибо!

Gnom_aka_Lexander 29-12-2010 10:20 1576822

R.i.m.s.k.y., А что иминно тебе нужно делать с ини?

R.i.m.s.k.y. 29-12-2010 10:21 1576825

Цитата:

Цитата Лександер
R.i.m.s.k.y., А что иминно тебе нужно делать с ини? »

параметры поменять в инишнике в зависимости от выбора компоненты

типа
[main]
www=1

на

[main]
www=0

Нет я могу конечно сделать через поиск и замену текста, но вроде нахваливали что инно здорово работает с инишниками, вот и спрашиваю может есть способ попроще.
А если есть готовые функции по работе в коде с инишниками (типа write(имя файла, секция, переменная) - тож спасибо, пригодятся

Gnom_aka_Lexander 29-12-2010 10:31 1576833

R.i.m.s.k.y., открой IStool или InnoIDE, вабери секцию INI в левой стороне окна программы, драг энд дропом брось в прогу любй *.ini- файл, и увидиш чудо :) все, что останется - это удалить ненужные строчки, поменять значения на нужные тебе, и там-же указать принадлежность значения к компонентам :) И все это без паскаля.
В твоем случае как-то так:
Код:

[Ini]
filename: ini; section: [main]; key: www; string: 1; Components: 1;
filename: ini; section: [main]; key: www; string: 0; Components: 0;

[Components]
Name: 1; Description: "компонент 1";
Name: 0; Description: "компонент 0";


R.i.m.s.k.y. 29-12-2010 11:48 1576892

[Setup]
DefaultDirName={code:Path}

[_Code]
function Path () : String;

при компиляции ругается Invalid Prototype for 'Path'

WTF???

Вопрос снят, изменил строчку на function Path(String: String): String; заработало
Спасибо всем прочитавшим!

Gnom_aka_Lexander 29-12-2010 12:37 1576924

R.i.m.s.k.y., Два знака равно - так и должно быть?

R.i.m.s.k.y. 29-12-2010 14:12 1577001

Цитата:

Цитата Лександер
Два знака равно - так и должно быть »

один конечно

Vista-w 29-12-2010 14:58 1577042

Подскажите пожалуйста, как в конце установки сделать картинку?


И как подвинуть текст, и изменить цвет текста?
Заранее Спасибо.

Imitri7 29-12-2010 16:41 1577112

Vista-w, полистай страницы назад, я там несколько примеров выкладывал

R.i.m.s.k.y. 29-12-2010 20:10 1577231

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

Gnom_aka_Lexander 29-12-2010 20:25 1577248

R.i.m.s.k.y., Я удалил, там ошибка была, сейчас перезалил, пост тут.

XNick 30-12-2010 00:36 1577385

Вложений: 3
Товарищи такой вопрос - какой скрипт нужен чтоб при подтверждении удаления игры, отмены установки игры и т.п., исправить эту проблему с белой полосой (см. скриншот)-> ((а использую скин tiger.cjstyle, пробовал это исправить в скине, ничего не помогло))...

Vista-w 30-12-2010 02:43 1577426

XNick ее не удалить, пробуй применить Color.

Vamp1re 30-12-2010 02:44 1577427

Кто знает как изменить цвет инсталятора?

Vista-w 30-12-2010 03:39 1577435

Помогите плиизз!

1) Как изменить цвет текста тут

2) Как сделать картинку на весь инсталл в конце установки (финиш) тут
Чтоб была новая картинка WizardImage
Люди помогите плизз, буду оч-оч признателен.
Вот скрипт
читать дальше »
[Setup]
AppName=Fallout New Vegas
AppVerName=Fallout New Vegas
DefaultDirName={sd}\Games\Biohazard 4
DefaultGroupName=Fallout New Vegas
OutputDir=D:\B
OutputBaseFilename=setup
AllowNoIcons=yes
WizardImageFile=C:\Documents and Settings\Admin\Рабочий стол\How to RePack\Мои репаки\Fallout\Типография\WizardImage.bmp
WizardSmallImageFile=C:\Documents and Settings\Admin\Рабочий стол\How to RePack\Мои репаки\Fallout\Типография\WizardSmallImage.bmp
Compression=lzma/ultra
SolidCompression=no
DiskSpanning=yes
DiskSliceSize=727000000
UninstallLogMode=overwrite

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\Documents and Settings\Admin\Рабочий стол\How to RePack\Мои репаки\Fallout\Типография\button.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "C:\Documents and Settings\Admin\Рабочий стол\How to RePack\Мои репаки\Fallout\Типография\DirBitmap.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "C:\Documents and Settings\Admin\Рабочий стол\How to RePack\Мои репаки\Fallout\Типография\logo.bmp"; DestDir: "{tmp}"; Flags: dontcopy

Source: "C:\Documents and Settings\Admin\Рабочий стол\How to RePack\Мои репаки\Fallout\Типография\WizardImage.bmp"; DestDir: "{tmp}"; Flags: dontcopy

[Icons]
Name: "{group}\Играть в Biohazard 4"; Filename: "{app}\game.exe"; WorkingDir: "{app}";
Name: "{group}\Настройка"; Filename: "{app}\SetupTool.exe"; WorkingDir: "{app}";
Name: "{group}\Удалить Biohazard 4"; Filename: "{uninstallexe}"; WorkingDir: "{app}"
Name: "{userdesktop}\Biohazard 4"; Filename: "{app}\game.exe"; Tasks: desktopicon; WorkingDir: "{app}";

[Registry]
Root: HKLM; Subkey: "Software\CAPCOM"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\CAPCOM\biohazard 4"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\CAPCOM\biohazard 4"; ValueType: string; ValueName: "PATH"; ValueData: "{app}"

[code]
const
ButtonWidth = 80; //Указываем размер кнопок
ButtonHeight = 23;

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

var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
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
end;

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

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm) //Рисунок который ложится на кнопку
Image.Width:=160 //Обязательно прописать оригинальный размер рисунка
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm) //Текст кнопок
Labl.Left:=13 //Указываем положение текста
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite //Цвет текста
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
end;

procedure InitializeWizard1();
begin
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:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

procedure InitializeWizard2();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 55; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Font.Name := 'Tahoma'
Width := Width - 483; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 483; //
end;
with PageDescriptionLabel do begin
Font.Name := 'Tahoma'
Width := Width - 483; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 483; //
end;
end;
end;

const
Color = clblack;

procedure InitializeWizard3();
begin
WizardForm.PageNameLabel.Font.Color:=clWhite;
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.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.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;
end;

procedure InitializeWizard4();
begin
ExtractTemporaryFile('DirBitmap.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
end;

var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;

procedure InitializeWizard5();
begin
ExtractTemporaryFile('logo.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(175);
Height := ScaleY(40);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
end;
end;

var
WelcomeLabel1, WelcomeLabel2: TLabel;
BmpFile: TBitmapImage;

procedure InitializeWizard6();
begin
ExtractTemporaryFile('WizardImage.bmp');

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardImage.bmp'));
BmpFile.SetBounds(0, 0, 497, 313);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.hide;
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
WelcomeLabel1.Alignment:=taCenter;
Left:= ScaleX(176);
Top:= ScaleY(66);
Width:= ScaleX(301);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Name:='Arial'
Font.Size:= 12;
Font.Color:=ClWhite
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
WelcomeLabel2.Alignment:=taCenter;
Top:= ScaleY(136);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(300);
AutoSize:= false;
WordWrap:= true;
Font.Color:=ClWhite
Font.Name:='Tahoma'
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
InitializeWizard6();
end;

XNick 30-12-2010 14:39 1577794

Vista-w,
А можно по подробнее....

Vista-w 30-12-2010 14:47 1577800


Кинь скрипт. Посмотрим

XNick 30-12-2010 14:53 1577804

Vista-w,
От скрипт который я использую - скин

Vista-w 30-12-2010 15:07 1577823

XNick Windows 7 ?

XNick 30-12-2010 15:54 1577863

Vista-w,
Ага она самая (х86)

Gnom_aka_Lexander 30-12-2010 23:04 1578112

Рабочая ссылка на Inno Script Generator v.1.0.3.1

Imitri7 31-12-2010 09:41 1578247

Vista-w,
Код:

procedure InitializeWizard();
begin
WizardForm.Font.Color:=clWhite;
end;

1ый пример растягивания
2ой пример растягивания

Sotonisto 31-12-2010 12:09 1578295

Цитата:

Цитата Vista-w
Помогите плиизз!»

Ну вот тебе готовый инсталл для Fallout New Vegas. Все нужные файлы в архиве.
По сути тут использовано наложение картинки почти как в 2 примере Imitri7'я (только с небольшими отличиями).
Надеюсь скрипт будет тебе полезен :)

СКАЧАТЬ АРХИВ
P.S.: Всех с наступающим! :smile:

Raf96 01-01-2011 01:40 1578594

Когда я создаю свой скин получается фаил формата .skinproj и рядом лежит папка с прилагающими файлами а как сделать так чтоб формат был .sjstyles и рядом папки небыло???? Т. е . как скомпилировать скин??????

ВСЕХ ФОРУМЧАН С НОВЫМ ГОДОМ!!!!!!!!!! :oszone: :beer2: :00: :jump2:

Raf96 01-01-2011 02:00 1578603

Цитата:

Цитата Raf96
Когда я создаю свой скин получается фаил формата .skinproj и рядом лежит папка с прилагающими файлами а как сделать так чтоб формат был .sjstyles и рядом папки небыло???? Т. е . как скомпилировать скин?????? »

вопрос снят разобрался

John1992on 02-01-2011 19:16 1579296

Делаю репак игры, и столкнулся с задачей - нужно в меню инсталятора сделать дополнительное окно выбора языка, а сам выбор должен осуществляется копированием файла из одной директории игры в другую, собственно, должен быть "RadioButton" в котором можно выбрать один из 4 языков, после нажатия кнопки "Next" выбранный файл должен скопироватся в определенную папку....

Объясните пожалуйста мне как новичку, как это делать, хотя бы концептуально... как я понял нужно сделать Компонент, но это правильно сделать, понять не могу, так как не могу изучить хелп программы из-за незнания англ.языка....

Gnom_aka_Lexander 02-01-2011 19:58 1579323

John1992on,
Код:

[Languages]
Name: English; MessagesFile: compiler:Languages\English.isl
Name: German; MessagesFile: compiler:Languages\German.isl
Name: Russian; MessagesFile: compiler:Languages\Russian.isl
Name: Spanish; MessagesFile: compiler:Languages\Spanish.isl
[Files]
Source: FileEn.file; DestDir: {app}; Languages: English;
Source: FileGe.file; DestDir: {app}; Languages: German;
Source: FileRu.file; DestDir: {app}; Languages: Russian;
Source: FileSp.file; DestDir: {app}; Languages: Spanish;

тоесть языки сами являются именами компонентов, только не нужно отключать выбор языка на первой странице, и все будет :)

death7lord 03-01-2011 02:21 1579550

бяда........
делаю репак Arcania, у меня он выходит примерно 4,5Гб
использовал пресомп-среп-арк(ультра2Гб)

в сети люди ужимали до 3,6 и требуется 256Мб

в чём прикол? как же так они сжимают?

nik1967 03-01-2011 05:43 1579571

death7lord,
Ну вообще то это оффтопик, но анпакером распаковываются парочка *.pak-ов, и всё это потом отлично жмётся. Русская версия у меня - 3,30 гб, 3-х язычная - 4,26 гб.

death7lord 03-01-2011 10:27 1579616

nik1967, можно расценивать как оффтоп, а может какие доп.программы кроме InnoSetup

Gnom_aka_Lexander 03-01-2011 17:34 1579865

Кому не сложно, помогите пожалуйста...
Все уже доделал,
читать дальше »
[Setup]
OutputBaseFilename=тест
AppName=тест
AppVerName=тест 1
DefaultDirName={pf}\тест
DisableProgramGroupPage=true
UsePreviousGroup=false
AppendDefaultGroupName=false

[code]
var
ISCustomPage1: TWizardPage;
Nick: TNewStaticText;
NickEdit: TNewEdit;
ISCustomPage2: TWizardPage;
NikInfo: TNewStaticText;
NickInfoEdit: TNewEdit;

procedure RedesignWizardForm;
begin
{ Creates custom wizard page }
ISCustomPage1 := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');
ISCustomPage2 := CreateCustomPage(wpPreparing, 'ISCustomPage2_Caption', 'ISCustomPage2_Description');

{ Nick }
Nick := TNewStaticText.Create(WizardForm);
with Nick do
begin
Name := 'Nick';
Parent := ISCustomPage1.Surface;
Caption := 'Nick';
Left := ScaleX(168);
Top := ScaleY(88);
Width := ScaleX(23);
Height := ScaleY(14);
end;

{ NickEdit }
NickEdit := TNewEdit.Create(WizardForm);
with NickEdit do
begin
Name := 'NickEdit';
Parent := ISCustomPage1.Surface;
Left := ScaleX(136);
Top := ScaleY(120);
Width := ScaleX(121);
Height := ScaleY(21);
Text := ''; //нужно какимто образом ввести это там, где написано {NickEdit.Text - не катит...}, и сделать так, чтобы в случае отсутствия значения здесь, ISCustomPage2 не создавалась.//
end;

Nick.TabOrder := 0;
NickEdit.TabOrder := 1;

{ NikInfo }
NikInfo := TNewStaticText.Create(WizardForm);
with NikInfo do
begin
Name := 'NikInfo';
Parent := ISCustomPage2.Surface;
Caption := 'NikInfo';
Left := ScaleX(168);
Top := ScaleY(56);
Width := ScaleX(35);
Height := ScaleY(14);
end;

{ NickInfoEdit }
NickInfoEdit := TNewEdit.Create(WizardForm);
with NickInfoEdit do
begin
Name := 'NickInfoEdit';
Parent := ISCustomPage2.Surface;
Left := ScaleX(66);
Top := ScaleY(96);
Width := ScaleX(273);
Height := ScaleY(93);
Text := '';
end;

NikInfo.TabOrder := 0;
NickInfoEdit.TabOrder := 1;

end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;
procedure CurStepChanged(CurStep: TSetupStep);
Var
S1: String;
S2: String;
begin
if CurStep = ssPostInstall//запись после распаковки всех файлов
then begin
S1 := '[Account_0]' +#13+#10+ 'Login=' + NickEdit.Text;
SaveStringToFile(ExpandConstant('{app}\test.ini'), S1, false);
begin
if CurStep = ssPostInstall//запись после распаковки всех файлов
then begin
S2 := '[Main]' +#13+#10+ 'Usernotes=' + NickInfoEdit.Text;
SaveStringToFile(ExpandConstant('{app}\{NickEdit.Text - не катит...}\test2.ini'), S2, false);
end;
end;
end;
end;

тут застрял...
Все решено, пост ниже.

Vamp1re 03-01-2011 21:45 1580048

Как изменить панель инсталятора?
(см.рис)
На стандартную от Windows?
(пример,см.рис)

Vamp1re 03-01-2011 23:28 1580130

дайте мне ссылку на файл cjsyles

Black666angel 04-01-2011 02:20 1580195

Vamp1re, Удоли подобные строки
читать дальше »

[Files]
Source: ISSkin.dll; DestDir: {app}; Attribs: hidden system
Source: Angel.cjstyles; DestDir: {app}; Attribs: hidden system

[code]
function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure LoadSkin(lpszPath: String; lpszIniFileName: String ); external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure LoadSkinA(lpszPath: String; lpszIniFileName: String ); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Angel.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Angel.cjstyles'), '');
Result:= true
end;

function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\isskin.dll'), ExpandConstant('{tmp}\isskin.dll'), False);
FileCopy(ExpandConstant('{app}\Angel.cjstyles'), ExpandConstant('{tmp}\Angel.cjstyles'), False);
LoadSkinA(ExpandConstant('{tmp}\Angel.cjstyles'), '');
Result:=True;
end;


Или вазми фаил из папки x:\WINDOWS\Resources\Themes\*\*.msstyles ипереименуи в *.cjstyles
и вот радуися (стандартная тема luna.msstyles)

Gnom_aka_Lexander 04-01-2011 15:29 1580515

Вот, добил, пример сложной работы с *.ini-файлами, с созданием файла полностью и вводом множества данных из окна инсталлятора, а также создание подпапки по имени одного из параметров, на примере инсталлятора клиента чата Коммфорт.
Может, комуто этот пример поможет избежать множества мучений :)
Огромное спасибо Shegoratу с Ру-Борда, за помощь на последнем этапе :)
зеркало

actavir 04-01-2011 19:08 1580671

Подскажите, у меня есть несколько freearc архивов, как сделать выбор какой из них устанавливать? (в каждом архиве отдельная игра)

Gnom_aka_Lexander 04-01-2011 19:12 1580678

actavir, Тут есть привязка архивов к компонентам.

Vamp1re 04-01-2011 21:08 1580765

Black666angel, СПС

XNick 04-01-2011 22:05 1580803

Сделал репак, и столкнулся со следующей проблемой - установка влезает на 2ва диска(1й диск - setup.exe, с setup-1.bin по setup-4.bin:2й диск - с setup-5.bin по setup-8.bin), так вот когда запускаю setup.exe, появляется окно с просьбой вставить диск 8(он же setup-8.bin), я так понял что в этом
setup-8.bin, находятся скин и сплеш для инстла... Подскажите как мне сделать чтобы файлы которые использует инстал. размещались в setup-1.bin или в самом setup.exe????? помогите товарищи...

serg aka lain 04-01-2011 23:09 1580855

Цитата:

Цитата XNick
Подскажите как мне сделать чтобы файлы которые использует инстал. размещались в setup-1.bin или в самом setup.exe????? помогите товарищи... »

Их надо размещать в начале секции Files

XNick 04-01-2011 23:32 1580884

serg aka lain,
Спасибо товарищ выручил...
Цитата:

Цитата serg aka lain
Их надо размещать в начале секции Files »

Такая мелочь а я и не заметил......

Vista-w 05-01-2011 19:05 1581439

Помогите плизз, подкиньте скрипт для автоматической активации игры?

Gnom_aka_Lexander 05-01-2011 19:29 1581468

Vista-w, А что мешает проактивированную игру запаковать?

R.i.m.s.k.y. 05-01-2011 19:35 1581479

Цитата:

Цитата Vista-w
Помогите плизз, подкиньте скрипт для автоматической активации игры? »

А она для всех игр одинаковая?

duxa 05-01-2011 20:44 1581531

Лександер, не тот случай, здесь может быть связан HardWare ID
Vista-w, не туда обратился, иди в эту ветку форума и решай на чем будешь писать свой активатор.

Vista-w 05-01-2011 22:21 1581602

Лександер,
Помогите пожалуйста, как убрать вот это?

Черную обводку.
Вот скрипт
читать дальше »
#define MyAppExeName "Честь и доблесть 2.exe"
#define MyAppName "Честь и доблесть 2"

[Setup]
OutputDir=.
AppName=Честь и доблесть 2
AppVersion=1.0.9 RUS
AppPublisher=Alcohol
DefaultDirName={pf}\Честь и доблесть 2
DefaultGroupName=Честь и доблесть 2
OutputBaseFilename=setup
SetupIconFile=C:\Program Files\Честь и доблесть 2\icon1.ico
WizardImageFile=D:\Антон\How to RePack\Мои репаки\Честь и доблесть 2\Типография\img.bmp
AllowNoIcons=yes
WizardSmallImageFile=D:\Антон\How to RePack\Мои репаки\Честь и доблесть 2\Типография\WizardSmallImage.bmp
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=lzma/ultra
SolidCompression=yes
InternalCompressLevel=ultra64
DiskSpanning=yes
DiskSliceSize=723517440
SlicesPerDisk=1
PrivilegesRequired=poweruser

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
Name: dxinstall1; Description: "Обновить DirectX (рекомендуется)"; GroupDescription: "Дополнительное програмное обеспечение:"
Name: dxinstall2; Description: "Выполнить активацию игры (требуется)"; GroupDescription: "Дополнительно:"

[Files]
Source: "D:\Антон\How to RePack\Мои репаки\Fallout\Флат\skin\isskin.dll"; DestDir: "{app}"; Flags: dontcopy
Source: "D:\Антон\How to RePack\Мои репаки\Fallout\Флат\skin\tiger_v2.cjstyles"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\Антон\How to RePack\Мои репаки\Инсталл\papka.bmp"; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: "D:\Антон\How to RePack\Мои репаки\Честь и доблесть 2\Типография\img.bmp"; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: "D:\Антон\How to RePack\Мои репаки\Инсталл\logo.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "{app}\install\DirectX\DXSETUP.exe"; DestDir: "{app}\install\DirectX"; Flags: ignoreversion
Source: "{app}\install\keygen.exe"; DestDir: "{app}\install\"; Flags: ignoreversion
Source: "{app}\install\DirectX\dsetup.dll"; DestDir: "{app}\install\DirectX\"; Flags: ignoreversion

Source: "C:\Program Files\Inno Setup 5\Examples\MyPorg.exe*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Icons]
Name: "{group}\Честь и доблесть 2"; Filename: "{app}\K6.exe"; WorkingDir: "{app}";
Name: "{userdesktop}\Честь и доблесть 2"; Filename: "{app}\K6.exe"; WorkingDir: "{app}"; Tasks: desktopicon;
Name: "{group}\Деинсталлировать Честь и доблесть 2"; Filename: "{uninstallexe}"; WorkingDir: "{app}"

[Run]
Filename: "{app}\install\DirectX\DXSETUP.exe"; Parameters: "/SILENT"; WorkingDir: "{app}\install\DirectX\"; StatusMsg: "Устанавливается DirectX"; Tasks: dxinstall1
Filename: {app}\install\keygen.exe; Description: Запустить Keygen; Flags: postinstall skipifsilent unchecked runascurrentuser waituntilidle; WorkingDir: {app}; StatusMsg: Активация; Tasks: dxinstall2
Description: "{cm:LaunchProgram,окно активации продукта}"; Filename: "{app}\K6.exe"; WorkingDir: "{app}"; Flags: nowait postinstall skipifsilent unchecked

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

[code]

[Messages]
SetupWindowTitle=Честь и доблесть 2

[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

var
LogoImage: TBitmapImage;
WLabel1, WLabel2,
FLabel1, FLabel2: TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;
BmpFile: TBitmapImage;

procedure InitializeWizard();
begin
WizardForm.BorderStyle:= bsDialog;
WizardForm.Bevel.Hide
WizardForm.Bevel1.Hide

WizardForm.PageNameLabel.Font.Color:=clwhite;
WizardForm.LicenseAcceptedRadio.Font.Color:=clwhite;
WizardForm.LicenseNotAcceptedRadio.Font.Color:=clwhite;
WizardForm.Font.Color:=clwhite;

ExtractTemporaryFile('Logo.bmp');
LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
SetBounds(ScaleX(10), ScaleY(320), ScaleX(175), ScaleY(40));
Bitmap.LoadFromFile(ExpandConstant('{tmp}\Logo.bmp'));
Parent := WizardForm;
end;

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;

ExtractTemporaryFile('img.bmp');
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\img.bmp'));
BmpFile.SetBounds(0, 0, 497, 313);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.WizardBitmapImage.Width := 497;
WizardForm.WizardBitmapImage.Height := 313;
WizardForm.WizardSmallBitmapImage.Left:=0;
WizardForm.WizardSmallBitmapImage.Width:=497;
WizardForm.WizardSmallBitmapImage.Height:=58;
WizardForm.PageDescriptionLabel.Width:=300;
WizardForm.PageNameLabel.Width:=300;
WizardForm.FileNameLabel.Visible:=False;
WizardForm.ProgressGauge.Top:=ScaleY(100);
WizardForm.StatusLabel.Top:=ScaleY(80);
WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(50);
WLabel1.Top := ScaleY(80);
WLabel1.Width := ScaleX(301);
WLabel1.Height := ScaleY(54);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Font.Size := 11;
WLabel1.Font.Style := [fsBold];

WLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;
WLabel2 :=TLabel.Create(WizardForm);
WLabel2.Top := ScaleY(130);
WLabel2.Left := ScaleX(50);
WLabel2.Width := ScaleX(301);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;

WLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;
WizardForm.WizardBitmapImage2.Width := 497;
WizardForm.WizardBitmapImage2.Height := 313;
FLabel1 := TLabel.Create(WizardForm);
FLabel1.Left := ScaleX(50);
FLabel1.Top := ScaleY(80);
FLabel1.Width := ScaleX(301);
FLabel1.Height := ScaleY(54);
FLabel1.AutoSize := False;
FLabel1.WordWrap := True;
FLabel1.Font.Size := 11;
FLabel1.Font.Style := [fsBold];

FLabel1.Caption := WizardForm.FinishedHeadingLabel.Caption;
FLabel1.Transparent := True;
FLabel1.Parent := WizardForm.FinishedPage;
FLabel2 :=TLabel.Create(WizardForm);
FLabel2.Top := ScaleY(130);
FLabel2.Left := ScaleX(50);
FLabel2.Width := ScaleX(301);
FLabel2.Height := ScaleY(53);
FLabel2.AutoSize := False;
FLabel2.WordWrap := True;

FLabel2.Caption := '{#MyAppName} установлена на Ваш компьютер.' #13#13
'Нажмите «Завершить», чтобы выйти из программы установки.';
FLabel2.Transparent := True;
FLabel2.Parent := WizardForm.FinishedPage;
begin
PageNameLabel := TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left := ScaleX(10);
Top := ScaleY(10);
Width := ScaleX(300);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Style := [fsBold];
Transparent := True;
Parent := WizardForm.MainPanel;
end;

PageDescriptionLabel := TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left := ScaleX(15);
Top := ScaleY(25);
Width := ScaleX(400);
Height := ScaleY(30);
AutoSize := False;
WordWrap := True;
Transparent := True;
Parent := WizardForm.MainPanel;
end;

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := Mainpanel.Width;
Height := MainPanel.Height;
end;
end;
end;
end;
end;

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('tiger_v2.cjstyles');
LoadSkin(ExpandConstant('{tmp}\tiger_v2.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
end;
end;

Gnom_aka_Lexander 05-01-2011 22:29 1581611

Vista-w, Я не вижу у тебя этих чекбоксов в скрипте, скинь скрипт с файлами на обменник, завтра посмотю.

Vista-w 05-01-2011 22:33 1581616

Лександер,
А можно просто сделать, чтоб запуск был без этого потверждения?

Gnom_aka_Lexander 05-01-2011 22:39 1581621

Vista-w,
Код:

[Run]
Filename: {app}\install\keygen.exe; Flags: postinstall ; WorkingDir: {app}; StatusMsg: Активация;
Filename: "{app}\K6.exe"; WorkingDir: "{app}"; Flags: nowait postinstall

Так както.

Vista-w 05-01-2011 22:44 1581624

Лександер,
Все равно появляются чексбоксы с надписями запустить, и черная обводка вокруг них.

Gnom_aka_Lexander 05-01-2011 22:49 1581634

Vista-w, точно, блин. Секцию [Tasks] удали, а из секции [RUN] части строк с Tasks. Вот так:
Код:

[Run]
Filename: "{app}\install\DirectX\DXSETUP.exe"; Parameters: "/SILENT"; WorkingDir: "{app}\install\DirectX\"; StatusMsg: "Устанавливается DirectX";
Filename: {app}\install\keygen.exe; Description: Запустить Keygen; Flags: postinstall skipifsilent unchecked runascurrentuser waituntilidle; WorkingDir: {app}; StatusMsg: Активация;
Filename: "{app}\K6.exe"; WorkingDir: "{app}"; Flags: nowait postinstall skipifsilent


Vista-w 05-01-2011 22:59 1581638

Лександер,
Все равно(
Надо чтоб потверждение активации, именно шло через [Tasks]
Но чтоб не было в конце установки потверждения о запуске. а зарускалась сразу

Gnom_aka_Lexander 05-01-2011 23:02 1581642

Vista-w, Дык, секция таск - это чекбоксы на последней странице, либо удалить ее, либо чекбоксы будут. Скрипт на обменник кинь, завтра поколдую.

Vista-w 05-01-2011 23:10 1581646

Лександер,
http://rghost.ru/3876790

vahe-91 05-01-2011 23:55 1581673

возможно в Inno Setup добавить свои ключи командной строки ? Скажем в установщике который я хочу создать должен быть файл х.exe. Мне нужно, чтобы когда запускаешь установщик просто двойным кликом, запустился этот x.exe. А когда запускаешь установщик с ключом /z запустился x.exe c ключом /z. Это можно сделать разными и очень простыми методами, но мне нужно именно в Inno Setup !

Gnom_aka_Lexander 06-01-2011 11:09 1581897

vahe-91, Теоретически через секцию [CОDE] можно попробовать подключить дополнительные ключи, фактически нужно просить кого-то, кто хорошо знает паскаль-дельфи, можно еще в справке поковырятся, в английской (русская довольно ущербная).

R.i.m.s.k.y. 06-01-2011 12:11 1581970

Цитата:

Цитата vahe-91
возможно в Inno Setup добавить свои ключи командной строки ? Скажем в установщике который я хочу создать должен быть файл х.exe. Мне нужно, чтобы когда запускаешь установщик просто двойным кликом, запустился этот x.exe. А когда запускаешь установщик с ключом /z запустился x.exe c ключом /z. Это можно сделать разными и очень простыми методами, но мне нужно именно в Inno Setup ! »

Код:

[_Code]
var paramZ : boolean;

function InitializeSetup(): Boolean;
var i : integer; s, st : string; 
begin
  for i:=2 to ParamCount do begin
    st := Lowercase(ParamStr(i)); StringChangeEx(st, '/', '', True); StringChangeEx(st, '\', '', True); StringChangeEx(st, '-', '', True);
    case st of
      Lowercase('z') : paramZ := true;
    end;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var res : integer;
begin
  if ( CurStep=ssDone) and (paramZ) ) then Exec(x.exe, ' /z ' ,ExpandConstant('{...}'),SW_HIDE,ewWaitUntilTerminated,res);
end;


Gnom_aka_Lexander 06-01-2011 13:00 1582034

R.i.m.s.k.y., Только тут по другому чуток, параметр нужно задать снаружи, тоесть если инсталлятор запускается из командной строки, как инсталл шилд+ МСиАй - первый параметра для инстлшилда, 2-й для МСиАй, но это можно попробовать компонентами решить, в инно есть возможнось подключения и отключения компонентов из командной строки, тогда именами параметров назвать названия компонентов, типа - компонента1 - запуск с такимто ключем, компонента2 - запуск с такимто ключем, и т.п..
Мне такто тоже это интересно, буду рад увидеть решение :)

R.i.m.s.k.y. 06-01-2011 13:57 1582069

Лександер,
Так это и есть снаружи, параметр z передаешь инсталлеру, InitializeSetup проверяет задан ли он (в виде \z, /z, -z), если есть такой переменной paramZ присваивается Тру
И вот тут у меня ошибочка, paramZ : boolean; должен объявляться в начале секции Code что быть доступным все функциям.
Потом в конце установки (процедура CurStepChanged) если параметр тру - выполняем чего там хотели.
Цитата:

Цитата Лександер
можно попробовать компонентами решить »

Я не буду фрагментировать моск мифическими Param1, дам прям кусок из своего инсталлера, повырезав лишнее, так что если будет ругаться что не объявлены переменные или Энда не хватает - допишите сами.
Код:

[Components]
# define haaliaviDesc "Haali - воспроизводить avi"
Name: haaliavi; Description: {#haaliaviDesc}; Check: HaaliExists

[_Code]
var paramZ, silent, haaliavi : integer;

function InitializeSetup(): Boolean;
var i : integer; s, st : string; 
begin
  paramZ:= -1; silent:= -1; haaliavi := -1; // три состояния: -1 - не изменялось, 0 - нет, 1 - да
  for i:=2 to ParamCount do begin
    if ( (Lowercase(ParamStr(i)) = Lowercase('/silent')) or (Lowercase(ParamStr(i)) = Lowercase('/verysilent')) ) then begin
      silent := 1;
      break;
    end;
  end;
  for i:=2 to ParamCount do begin
    st := Lowercase(ParamStr(i)); StringChangeEx(st, '/', '', True); StringChangeEx(st, '\', '', True); StringChangeEx(st, '-', '', True);
    case st of
      Lowercase('z') : paramZ := 1;
      Lowercase('haaliavi') : haaliavi := 1;
    end;
  end;
end;


procedure InitializeWizard();
  if (silent = 1) then begin
    if ( (haaliavi = 1) and haaliexists) then WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#haaliaviDesc}')]:=True;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var res : integer;
begin
  if ( CurStep=ssDone) and (paramZ = 1) ) then Exec('x.exe', ' /z ' ,ExpandConstant('{...}'),SW_HIDE,ewWaitUntilTerminated,res);
end;


Gnom_aka_Lexander 06-01-2011 14:31 1582116

R.i.m.s.k.y., Я неточно выразился, а что если для разных случаев нужно разные параметры? Для одного случая один ключ, для другог другой...

R.i.m.s.k.y. 06-01-2011 14:49 1582139

Цитата:

Цитата Лександер
Я неточно выразился, а что если для разных случаев нужно разные параметры? Для одного случая один ключ, для другог другой... »

поточнее чего хотим

Gnom_aka_Lexander 06-01-2011 16:27 1582247

R.i.m.s.k.y., Смотри, комуто нужно ставить с ключем \z, комуто \r, комуто \a, комуто \s, и может еще полтора десятка, я не говорю о возможности их комбинации - можно это как-то реализовать? Или каждый ключ и комбинацию в коде прописывать?

R.i.m.s.k.y. 06-01-2011 17:55 1582333

Цитата:

Цитата Лександер
Или каждый ключ и комбинацию в коде прописывать? »

да, каждый поотдельности
инно понимает параметры только со слэшэм "/", т.е. если ему написать -silent или \silent он не поймет.
В моем примере выше собственные параметры можно писать вообще одной буквой z, но параметры инно надо писать как положено, /norestart к примеру.

vahe-91 06-01-2011 19:03 1582384

R.i.m.s.k.y.,
брат, насколько знаю вместо [_code] в скрипте должен быть [code], а в конце вместо ; ТОЧКА. Если да, то во время компиляции пишет unknown identifier 'x'

R.i.m.s.k.y. 06-01-2011 20:02 1582423

Цитата:

Цитата vahe-91
насколько знаю вместо [_code] »

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

Цитата vahe-91
а в конце вместо ; ТОЧКА »

секция Code закрывается end.
если есть ошибки - исправь код, брат, он не кусается.
Цитата:

Цитата vahe-91
то во время компиляции пишет unknown identifier 'x' »

там подразумевается что человек сам подставит путь к его запускному файлу x.exe для которого нужны параметры. Возьми в апострофы 'x.exe'.

vahe-91 06-01-2011 20:15 1582434

R.i.m.s.k.y.,
спасибо, ты очень добр

nik1967 06-01-2011 21:03 1582467

Здравствуйте, уважаемые форумчане! Подскажите, как можно организовать постоянное сканирование реестра и файлов, а не только в момент запуска инсталлятора? Для чего:
Код:

  if RegValueExists({#ValueExists}) then
  if RegQueryStringValue({#ValueExists}, GamePath) then
  if FileExists({#FileExists}) then GameAlreadyInstall:=True else GameAlreadyInstall:=False;

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


С помощью операторов while и do пробовал зациклить, но не могу условия сообразить.
А для чего? Делаю авторан на Inno, если нет записи в реестре - установить игру, авторан сворачивается, после установки игры (и соответственно появления записи в реестре) авторан разворачивается и - запустить игру. В AutoPlay Media Studio всё это реализуется довольно просто, но мне надо в Inno :modesty: .

vahe-91 06-01-2011 21:44 1582514

R.i.m.s.k.y.,
для примера скомпилировал это, ничего не получилось. Установщик даже не запускается. Что не правильно ?

Код:


[Setup]
AppId={{5B88473B-FA3C-4A80-8D78-C8960C9C3377}
AppName=X 
AppVersion=1.0.0
AppPublisher=Ya
CreateAppDir=no
OutputBaseFilename=setup
Compression=none

[Files]
Source: "C:\Documents and Settings\Administrator\Desktop\x.exe";
DestDir: "{tmp}"; Flags: ignoreversion

[_Code]
var paramZ:boolean;
function InitializeSetup(): Boolean;
var i:integer; x,s, st:string;
begin    for i:=2 to ParamCount do
begin st:=Lowercase(ParamStr(i));
StringChangeEx(st, '/', '', True);
StringChangeEx(st, '\', '', True); StringChangeEx(st, '-', '', True);
case st of  Lowercase('z') : paramZ := true;
end; 
end; 
end;
procedure CurStepChanged(CurStep: TSetupStep); 
var res : integer; 
begin    if (CurStep=ssDone) and (paramZ) then
Exec('{tmp}\x.exe', ' /z ' ,ExpandConstant('{...}'),SW_HIDE,ewWaitUntilTerminated,res); 
end; end.


R.i.m.s.k.y. 06-01-2011 22:40 1582563

Цитата:

Цитата vahe-91
спасибо, ты очень добр »

Всегда пожалуйста, если я знаю ответ, то отвечаю на конкретные вопросы. Вопросы общего плана "Как сделать заипок" проходят мимо. Желающие получить код на халяву так же идут следом. Если есть вопросы - сначала почитай что в шапке, поверь, это уменьшит вопросы наполовину. Я сам начинал с шапки.

Цитата:

Цитата vahe-91
Что не правильно »

InitializeSetup - это сис.функция, если она вернет Фалсе* инсталлер закроется и не пикнет. Что-то возвращает Фалсе. Потыкай Result := True в разные места, примерно так.
Код:


[_Code]
var paramZ:boolean;
function InitializeSetup(): Boolean;
var i:integer; x,s, st:string;
begin   
Result := True;
for i:=2 to ParamCount do
begin st:=Lowercase(ParamStr(i));
StringChangeEx(st, '/', '', True);
StringChangeEx(st, '\', '', True); StringChangeEx(st, '-', '', True);
case st of  Lowercase('z') : paramZ := true;
Result := True;
end; 
end; 
end;

Такая фенька с расстановкой Result := True; у меня была на старой версии инно. тут Лександер страниц 5 назад выкладывал ультра инно с препроцессором и тп., на нем у меня без этих подстановок робит

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

* ничего что я по-английски ;)

vahe-91 06-01-2011 23:55 1582615

R.i.m.s.k.y.,
после result:=true вообще не компилируется, пишет begin ему нужен, пишу в этом месте begin, а он мне, что result это unknown identifier. Поставил инно с препроцессором, которые выкладывал Лександр не работает.

Serega 07-01-2011 00:02 1582620

Цитата:

Цитата Vamp1re
а можете мне дать целую готовую командную строку rar? »

к сожалению с ним не знаком, т.к. rar'ом не пользуюсь, на мой взгляд 7z лучше.

Цитата:

Цитата Rostlv
но в более новых темах для XP под Висту и Севен, где прогрессбар цельный, он не отображается »

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

Цитата Rostlv
расположить не над основным прогрессбаром, а над фейковым? Было бы резоннее. »

Как говорят, на вкус и цвет...
Можете сами нарисовать дополнительный статик и выводить в нём сообщения.
Цитата:

Цитата Rostlv
Добавление перевода в секцию [CustomMessages] проблему не решает. Сделать два языка в секции [Types] не получается »

Решается это двумя способами:
1. В каждом своём скрипте прописываете через [CustomMessages] перевод для каждого языка и уже указываете в [Types] свою переменную, т.е.:
Код:

[CustomMessages]
russian.CustomInstallation=Выборочная установка
english.CustomInstallation=Custom installation

[Types]
Name: custom; Description: {cm:CustomInstallation}; Flags: iscustom

2. Открываете языковой файл, допустим Russian.isl, распаложен в папке Languages, находите в конце файла секцию [CustomMessages] и добавляете в неё новой строкой
Код:

CustomInstallation=Выборочная установка
и так далее для каждого языка, т.е. для English.isl:
Код:

CustomInstallation=Custom installation
а в скрипте уже просто пишите
Код:

[Types]
Name: custom; Description: {cm:CustomInstallation}; Flags: iscustom

Цитата:

Цитата nik1967
С помощью операторов while и do пробовал зациклить, но не могу условия сообразить. »

Код:

  while True do
    begin
      GameAlreadyInstall := RegQueryStringValue({#ValueExists}, GamePath) and FileExists({#FileExists});
      case GameAlreadyInstall of
        True:
          begin
            // здесь что-то делаем
          end;
        False:
          begin
            // здесь что-то делаем
          end;
      end;
//      if условие then
        Break; // выходим из цикла
    end;


Serega 07-01-2011 00:53 1582643

Цитата:

Цитата vahe-91
вообще не компилируется »

Код:

[Code]
var
  paramZ: Boolean;
 
function InitializeSetup(): Boolean;
var
  i: Integer;
  st: string;
begin
  Result := True;
  for i := 2 to ParamCount do
    begin
      st := Lowercase(ParamStr(i));
      StringChangeEx(st, '/', '', True);
      StringChangeEx(st, '\', '', True);
      StringChangeEx(st, '-', '', True);
      paramZ := st = 'z';
    end;
end;


vahe-91 07-01-2011 10:36 1582771

Serega,
а сейчас компилируется, установщик запускается, а если запустить с ключом /z, то будет тоже самое что и без него

Serega 07-01-2011 11:05 1582787

Цитата:

Цитата vahe-91
а если запустить с ключом /z, то будет тоже самое что и без него »

Если вы просто скопировали из предыдущего поста, то естественно.
Я лишь подкорректировал код R.i.m.s.k.y., чтоб было понятней:
Код:

var
  paramZ: Boolean;

function InitializeSetup(): Boolean;
var
  i: Integer;
  st: string;
begin
  Result := True;
  for i := 2 to ParamCount do
    begin
      st := Lowercase(ParamStr(i));
      StringChangeEx(st, '/', '', True);
      StringChangeEx(st, '\', '', True);
      StringChangeEx(st, '-', '', True);
      paramZ := st = 'z';
    end;
  if paramZ then
    MsgBox('Ключ "z", присутствует в командной строке.', mbInformation, MB_OK);
end;


Sotonisto 07-01-2011 11:37 1582807

Цитата:

Цитата Vista-w
Помогите пожалуйста, как убрать черную обводку?»

Ну вот тебе прозрачный текст :wink:

"Новая" версия инсталла для Fallout NV :)
Изменения: добавил чебоксы и музыку во время инсталляции, немного подправил скрипт.
СКАЧАТЬ АРХИВ
P.S.: Спасибо за помощь с чебоксами vint56'у с Ru-board.

vahe-91 07-01-2011 11:39 1582808

Цитата:

Цитата Serega
Если вы просто скопировали из предыдущего поста, то естественно. »

а как именно должно быть ? я всего 2 дня изучаю Инно

Serega 07-01-2011 12:11 1582819

Цитата:

Цитата vahe-91
я всего 2 дня изучаю Инно »

Нашёл на предыдущей странице ваш пост, с запуском файла x.exe, должно быть так:
Пример

Код:

[Files]
Source: C:\Documents and Settings\Administrator\Desktop\x.exe; Flags: dontcopy

[Code]
var
  paramZ: Boolean;

function GetKeyParamStr(const key: string): Boolean;
{ функция вернёт True, если ключ key присутствует в командной строке }
var
  i: Integer;
  s, t: string;
begin
  try
    Result := False;
    t := Lowercase(key);
    for i := 2 to ParamCount do
      begin
        s := Lowercase(ParamStr(i));
        if Pos(t, s) > 0 then
          begin
            StringChangeEx(s, '/', '', True);
            StringChangeEx(s, '\', '', True);
            StringChangeEx(s, '-', '', True);
            Result := t = s;
          end;
        if Result then Break;
      end;
  finally
    SetLength(s, 0);
    SetLength(t, 0);
  end;
end;

function InitializeSetup(): Boolean;
begin
  Result := True;
  paramZ := GetKeyParamStr('z');
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  res: Integer;
begin
  if (CurStep = ssDone) and paramZ then
    begin
      ExtractTemporaryFile('x.exe');
      Exec(ExpandConstant('{tmp}\x.exe'), '/z', ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, res);
    end;
end;


vahe-91 07-01-2011 13:32 1582878

Serega,
:up получилось, спасибо тебе большое :jump2: . А что еще добавить, чтобы без ключа /z запустилась x.exe без каких либо ключей. Если его запуск прописать в [run], то он запустится и во время запуска с ключом /z. :dont-know

Vista-w 07-01-2011 13:35 1582882

Sotonisto, Чуваккккк)))))) Спасибо тебе огромное))))
Очень благодарен))))))))
Только в этот скрипт можно как то вшить распаковку 7z архивов?

Serega 07-01-2011 13:56 1582897

Цитата:

Цитата vahe-91
чтобы без ключа /z запустилась x.exe без каких либо ключей »

Тогда сделать надо так:
Пример

Код:

[Files]
Source: C:\Documents and Settings\Administrator\Desktop\x.exe; DestDir: {tmp}; Flags: ignoreversion

[Run]
Filename: {tmp}\x.exe; Parameters: {code:KeyStr}; WorkingDir: {tmp}; Flags: runhidden

[Code]
var
  paramZ: Boolean;

function KeyStr(const s: string): string;
begin
  case paramZ of
    True : Result := '/z';
    False: Result := '';
  end;
end;

function GetKeyParamStr(const key: string): Boolean;
{ функция вернёт True, если ключ key присутствует в командной строке }
var
  i: Integer;
  s, t: string;
begin
  try
    Result := False;
    t := Lowercase(key);
    for i := 2 to ParamCount do
      begin
        s := Lowercase(ParamStr(i));
        if Pos(t, s) > 0 then
          begin
            StringChangeEx(s, '/', '', True);
            StringChangeEx(s, '\', '', True);
            StringChangeEx(s, '-', '', True);
            Result := t = s;
          end;
        if Result then Break;
      end;
  finally
    SetLength(s, 0);
    SetLength(t, 0);
  end;
end;

function InitializeSetup(): Boolean;
begin
  Result := True;
  paramZ := GetKeyParamStr('z');
end;


а про флаги секции [Run] почитайте в Справке

vahe-91 07-01-2011 14:08 1582904

Serega,
Спасибо :beer2:

Sotonisto 07-01-2011 19:05 1583237

Цитата:

Цитата Vista-w
Только в этот скрипт можно как то вшить распаковку 7z архивов? »

Вот тебе cамый простой способ (не забываем [_Сode] изменить на [Сode] :wink:):
читать дальше »
Код:

[Run]
Filename: {src}\1.exe; WorkingDir: {src}; Parameters: "-y -o""{app}"""; StatusMsg: Установка русификации...; Flags: waituntilterminated

[_Сode]
procedure CurStepChanged(CurStep: TSetupStep);
var
  res:Integer;
  app, arc, dest:string;
begin
If CurStep=ssPostInstall
then
begin
  app:=ExpandConstant('{src}')+'\1.exe';
  dest:=ExpandConstant('{app}');
  Exec(app, 'x "'+ arc + '" -y -o"'+ dest + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);
end;
end;


Или тебе нужен скрипт распаковки с отдельным прогресс-баром?

Gnom_aka_Lexander 07-01-2011 22:10 1583386

Sotonisto, Есть способ еще проще: Пакуется 7z sfx с без параметров (ну, может сайлент-моде=1+ самоудаление после распаковки) и запускается из секции РАН безо всякого паскаля :)

Sotonisto 07-01-2011 23:26 1583444

Лександер, да это первое что пришло в голову :happy:
Хотя 7zip уже не так популярен как раньше :) Сейчас всем FreeArc подавай :sleep:

Vista-w 08-01-2011 12:59 1583679

Sotonisto,
Мне нужен с отдельным прогресс баром, чтоб потом этот архив удалился?
Можно такой?
Буду благодарен.

vahe-91 08-01-2011 15:11 1583777

как сделать, чтобы команды в секции [Run] выполнялись после распаковки архива freearc, а не до него

Serega 08-01-2011 15:45 1583806

Цитата:

Цитата vahe-91
как сделать, чтобы команды в секции [Run] выполнялись после распаковки архива freearc »

Переместить запускаемые файлы из секции [Run] в сам код, т.е. добавить их выполнение после распаковки архива.

vahe-91 08-01-2011 16:26 1583833

Serega,

Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin     
if CurStep = ssInstall then begin         
StartInstall:= GetTickCount    {время начала извлечения файлов}
WndHookID:= SetWindowsHookEx(WH_CALLWNDPROC, WrapCWPSTRUCTProc(@OnWndHook, 3), 0, GetCurrentThreadID);    {установка SendMessage хука}         
TimerID:= SetTimer(0, 0, 500 {полсекунды}, WrapTimerProc(@MyTimerProc, 4));    {установка таймера}
if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1; // не считать файл unins000.exe      end;     
if CurStep = ssPostInstall then     
begin
StartInstall:= GetTickCount    {время начала распаковки}
UnPackError:= UnPack('{#Archives}')
if UnPackError <> 0 then begin // Error occured, uninstall it then
 if not {#isFalse(SetupSetting("Uninstallable"))} then  // деинсталляция разрешёна
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);    // откат установки из-за ошибки unarc.dll
WizardForm.caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
SetTaskBarTitle(SetupMessage(msgErrorTitle))          end else
SetTaskBarTitle(SetupMessage(msgSetupAppTitle));

if CurStep=ssDone then Exec('{tmp}\setup.exe', sw_Hide, ewWaitUntilTerminated)  //это я добавил

  end;  end;

в конце того что я добавил пишет invalid number of parameters

Serega 08-01-2011 16:40 1583838

Цитата:

Цитата vahe-91
пишет invalid number of parameters »

Правильно, вы посмотрите в Справке описание этой функции, ну или хотя бы сделали по аналогии, у вас же выше написана эта же функция...
Должно быть так:
Код:

  Exec(ExpandConstant('{tmp}\setup.exe'), '', '', SW_HIDE, ewWaitUntilTerminated, n);
И совет, привыкайте сразу к форматированию кода, вам самому читать будет легче.
Цитата:

Цитата vahe-91
if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1; // не считать файл unins000.exe end; »

В этой строке вы загнали end; в комментирование, т.е. переведите его на следующую строку.

vahe-91 08-01-2011 17:08 1583857

Цитата:

Цитата Serega
В этой строке вы загнали end; в комментирование, т.е. переведите его на следующую строку »

когда жму 'вставить тег [_CODE]' и вставляю текст, он весь скрипт пишет на одной строке, поэтому и так получилось

Спасибо тебе

vahe-91 08-01-2011 19:36 1583941

Serega,

решил сделать так, но после окончания процесса setup.exe выдает ошибку runtime error (at 127:28) acces violation at address0044694c. read of address 00000000

И еще в коде можно поставить setup.exe флаг hidewizard ?

Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssInstall then begin
        StartInstall:= GetTickCount    {время начала извлечения файлов}
        WndHookID:= SetWindowsHookEx(WH_CALLWNDPROC, WrapCWPSTRUCTProc(@OnWndHook, 3), 0, GetCurrentThreadID);    {установка SendMessage хука}
        TimerID:= SetTimer(0, 0, 500 {полсекунды}, WrapTimerProc(@MyTimerProc, 4));    {установка таймера}
        if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1; // не считать файл unins000.exe
    end;
    if CurStep = ssPostInstall then
    begin
        StartInstall:= GetTickCount    {время начала распаковки}
        UnPackError:= UnPack('{#Archives}')
        if UnPackError <> 0 then begin // Error occured, uninstall it then
            if not {#isFalse(SetupSetting("Uninstallable"))} then  // деинсталляция разрешёна
                Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);    // откат установки из-за ошибки unarc.dll
            WizardForm.caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
            SetTaskBarTitle(SetupMessage(msgErrorTitle))
        end else  begin
            SetTaskBarTitle(SetupMessage(msgSetupAppTitle));
            Exec(ExpandConstant('{tmp}\setup.exe'), '', '', SW_HIDE, ewWaitUntilTerminated, n)  end;
end;
end;


Serega 09-01-2011 01:00 1584133

Цитата:

Цитата vahe-91
после окончания процесса setup.exe выдает ошибку runtime error (at 127:28) acces violation »

Выдаёт ошибку setup.exe, это ваш инсталлятор или тот, который вы запускаете?
Без запуска стороннего setup.exe ошибка есть?
Ошибка acces violation говорит о том, что идёт обращение к объекту, которого нет, т.е. он ещё не создан или уже разрушен. Чтоб было понятней:
Пример

Код:

procedure InitializeWizard();
var
  lbl: TLabel;
begin
  // создаём контрол
  lbl := TLabel.Create(WizardForm);
  with lbl do
    begin
      Parent := WizardForm;
      AutoSize := True;
      Left := ScaleX(20);
      Top := ScaleY(330);
    end;
  lbl.Free; // разрушаем контрол
  // при попытке обращения к контролу после разрушения,
  lbl.Caption := 'Пример...'; // получаем acces violation в этой строке
end;


Цитата:

Цитата vahe-91
можно поставить setup.exe флаг hidewizard ? »

Подробней объясните, что именно вы хотите сделать?

vahe-91 09-01-2011 12:07 1584300

Цитата:

Цитата Serega
Выдаёт ошибку setup.exe, это ваш инсталлятор или тот, который вы запускаете? »

мой инсталятор Инно. Без запуска setup.exe все нормально

Цитата:

Цитата Serega
Подробней объясните, что именно вы хотите сделать? »

чтобы во время выполнения setup.exe мастер установки был скрыт

nik1967 09-01-2011 13:39 1584367

Цитата:

Цитата vahe-91
чтобы во время выполнения setup.exe мастер установки был скрыт »

А так:
Код:

WizardForm.Hide;
  Exec(ExpandConstant('{tmp}\setup.exe'), '', '', SW_HIDE, ewWaitUntilTerminated, n);
WizardForm.Show;


Serega 09-01-2011 14:47 1584420

Цитата:

Цитата vahe-91
Без запуска setup.exe все нормально »

Тогда эта ошибка инсталлятора, который вы запускаете, может ему не нравиться, что вы запускаете его скрыто, попробуйте запустить его с параметром SW_SHOWNORMAL.
Хотя я больше чем уверен, что без этого инсталлятора вы не пробовали запускать и эта ошибка у вас в скрипте.
Запустите инсталляцию прямо из редактора и в момент ошибки, в самом скрипте у вас будет выделена строка, на которой произошла ошибка.

vahe-91 09-01-2011 17:54 1584546

nik1967,
во время выполнения setup.exe мастер скрывается, но по окончания получаю прежную ошибку и мастер не восстанавливается

Цитата:

Цитата Serega
Тогда эта ошибка инсталлятора, который вы запускаете, может ему не нравиться, что вы запускаете его скрыто, попробуйте запустить его с параметром SW_SHOWNORMAL »

не помогает

Цитата:

Цитата Serega
Хотя я больше чем уверен, что без этого инсталлятора вы не пробовали запускать и эта ошибка у вас в скрипте »

пробовал, ошибок нету

Цитата:

Цитата Serega
Запустите инсталляцию прямо из редактора и в момент ошибки, в самом скрипте у вас будет выделена строка, на которой произошла ошибка »

вот что получается



line 344 out of range

Код:

if (Status.stage = cm('ArcTitle')) and (GetArrayLength(Arcs) > 0) then begin
    ExtractFile.Caption:= FmtMessage(cm('ArcInfo'), [IntToStr(ArcInd+1), IntToStr(GetArrayLength(Arcs)),    // это строка 344
ByteOrTB(Arcs[ArcInd].Size, true), Format('%.0n', [Status.mb/(Arcs[ArcInd].Size/oneMB)*100]), ByteOrTB(Status.allsize, true)])
    ProgressBar.Position:= round(ProgressBar.Max * Status.mb/trunc(Arcs[ArcInd].Size/oneMB))
  end;


e2e44 09-01-2011 18:33 1584587

Доброго вечера
Задачка
По завершении установки необходимо появление диалогового окна, с выбором ник нейма
Ник в последствии должен быть прописан в определенной части файла *.ini
Помогите если не трудно.

Serega 09-01-2011 19:39 1584641

Цитата:

Цитата vahe-91
пробовал, ошибок нету »

Чудес не бывает
Цитата:

Цитата vahe-91
line 344 out of range »

Ошибка out of range, означает выход за пределы, эта ошибка связана с выходом за пределы массива или множества.
Следовательно внимательно посмотрите, что вы ещё меняете при добавлении запуска другого инсталлятора.
Так же попробуйте, закоментируйте запуск стороннего инсталлятора в скрипте и запустите также через редактор.

Цитата:

Цитата e2e44
необходимо появление диалогового окна, с выбором ник нейма »

Пример

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[UninstallDelete]
; при деинсталляции не забываем удалить config.ini
Type: files; Name: {app}\config.ini

[Code]
var
  Form: TSetupForm;

procedure ButtonClick(Sender: TObject);
begin
  Form.Close;
end;

function GetNikName: string;
var
  edt: TEdit;
begin
  try
    Form := CreateCustomForm;
    with Form do
      begin
        ClientWidth :=  ScaleX(200);
        ClientHeight := ScaleY(100);
        Center;
        Caption := 'Ввод данных...';
      end;
    with TLabel.Create(Form) do
      begin
        Parent := Form;
        AutoSize := True;
        Left := ScaleX(12);
        Top := ScaleY(12);
        Font.Size := 9;
        Caption := 'Введите свой Логин:';
      end;
    edt := TEdit.Create(Form);
    with edt do
      begin
        Parent := Form;
        SetBounds(ScaleX(10), ScaleY(35), Form.ClientWidth - ScaleX(20), ScaleY(17));
      end;
    with TButton.Create(Form) do
      begin
        Parent := Form;
        SetBounds((Form.Width - Width) div 2, ScaleY(65), ScaleX(75), ScaleY(23));
        Caption := 'OK';
        OnClick := @ButtonClick;
      end;
    Form.ShowModal;
  finally
    Result := edt.Text;
    Form.Free;
    Form := nil;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssDone then
    SetIniString('Section', 'Key', GetNikName, ExpandConstant('{app}\config.ini'))
end;


Описание всех функций, можете найти в Справке.

vahe-91 09-01-2011 19:52 1584652

Serega,
я запускал установщик с редактора без запуска setup.exe, нету ошибок. В скрипт добавляю только эту строку
Код:

Exec(ExpandConstant('{tmp}\setup.exe'), '', '', SW_HIDE, ewWaitUntilTerminated, n)
(получается как в посту 423 )

если запустить setup.exe во время CurStep=ssDone, ошибок нет

можно я потом выложу весь скрипт, если будет время посмотришь ?

Serega 09-01-2011 20:02 1584661

vahe-91, вы сами приводите скриншот, какая там ошибка и на какой строке?
Цитата:

Цитата vahe-91
я запускал установщик с редактора без запуска setup.exe, нету ошибок. »

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

Gnom_aka_Lexander 09-01-2011 21:15 1584744

e2e44, Во вложении мой пример по твоему вопросу, если непонятно чтото - подскажу (сам полгода решал подобный вопрос :) ). Только ник вводится на второй странице, а на последней вводится куча данных о пользователе, если ник был введен, но это не принципиально, создаются *.ini все равно после установки.

Imitri7 09-01-2011 22:18 1584827

как сделать свой заголовок во всплывающем MsgBox ?
типа как "информация"

e2e44 09-01-2011 22:18 1584829

Serega, Лександер
спасибо большое за оказанную помощь

если не трудно подскажите алгоритм проверки установлено приложение или нет если установлено авто запуск эксешника

Sotonisto )))) L4d собираю первый

Sotonisto 09-01-2011 22:20 1584832

Все решили помочь e2e44'у :)
Пример создания диалогового окна и создания *.ini файла (еще с Скрипты Inno Setup. Помощь и советы [часть 2])

читать дальше »
Код:

[_Code]
var
Page: TInputQueryWizardPage;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
SaveStringToFile(ExpandConstant('{app}\rev.ini'),

'[Emulator]' + #13#10
'CacheEnabled=False' + #13#10
'Language=Russian' + #13#10
'Logging=False' + #13#10
'SteamDll=bin\steam\Steam.dll' + #13#10
'SteamClient=True' + #13#10
'SteamUser=RG PKS USER' + #13#10
'' + #13#10
'[steamclient]' + #13#10
'PlayerName=' + '"' + Page.Values[0] + '"' + #13#10
'Logging=False' + #13#10
'ClientDll=bin\steam\steamclient.dll' + #13#10, False);
end;

Procedure InitializeWizard();
begin
Page := CreateInputQueryPage(wpWelcome, 'Настройка компонентов', 'Введите ник, под которым Вы будете играть в Left 4 Dead 2 (только англ. буквы, пробелы разрешены)', 'Введите желаемый ник');
Page.Add('', False);
end;


Если кому-то необходимо - вот сам скрипт.

Gnom_aka_Lexander 09-01-2011 22:27 1584838

Sotonisto, Спасибо, появилась сразу мысль, как мой пример оптимизировать :)

Serega 10-01-2011 09:45 1585055

Цитата:

Цитата Imitri7
свой заголовок во всплывающем MsgBox ? »

Есть несколько вариантов, самый простой, это использовать системный MessageBox:
Пример

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[Code]
function MessageBox(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: LongWord): Integer;  external 'MessageBoxA@user32.dll stdcall';

procedure ButtonClick(Sender: TObject);
begin
  MessageBox(WizardForm.Handle, 'Текст сообщения', 'Заголовок', MB_ICONINFORMATION);
end;

procedure InitializeWizard();
begin
  with TButton.Create(WizardForm) do
    begin
      Parent := WizardForm;
      SetBounds(ScaleX(30), WizardForm.NextButton.Top, WizardForm.NextButton.Width, WizardForm.NextButton.Height);
      Caption := 'Сообщение';
      OnClick := @ButtonClick;
    end;
end;


Более сложный, это создавать отдельную форму и уже на ней создавать все контролы, пример создания формы можете взглянуть в этом сообщении

Imitri7 10-01-2011 10:21 1585073

находил похожие примеры, но они почему то не работали
Serega, спс

2all и еще подскажите плыз как решит проблему
такую

если не заметно в чем разница, то тут косяк с кнопками с английским языком - они друг на друга налазят
скрипт

Код:

  const
  ButtonWidth = 80;    //Указываем размер кнопок
  ButtonHeight = 23;

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

var
  ButtonPanel: array [0..4] of TPanel;
  ButtonImage: array [0..4] of TBitmapImage;
  ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
  case TLabel(Sender).Tag of
    bidBack: Button:=WizardForm.BackButton
    bidNext: Button:=WizardForm.NextButton
    bidCancel: Button:=WizardForm.CancelButton
    bidDirBrowse: Button:=WizardForm.DirBrowseButton
    bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
  else
    Exit
  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
end;

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

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
  Image: TBitmapImage;
  Panel: TPanel;
  Labl: TLabel;

begin
  Panel:=TPanel.Create(WizardForm)
  Panel.Left:=AButton.Left
  Panel.Top:=AButton.Top
  Panel.Width:=AButton.Width
  Panel.Height:=AButton.Height
  Panel.Tag:=AButtonIndex
  Panel.Parent:=AButton.Parent
  ButtonPanel[AButtonIndex]:=Panel

  Image:=TBitmapImage.Create(WizardForm)    //Рисунок который ложится на кнопку
  Image.Width:=160                          //Обязательно прописать оригинальный размер рисунка
  Image.Height:=23
  Image.Enabled:=False
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
  Image.Parent:=Panel
  ButtonImage[AButtonIndex]:=Image

  with TLabel.Create(WizardForm) do begin
    Tag:=AButtonIndex
    Parent:=Panel
    Width:=Panel.Width
    Height:=Panel.Height
    Transparent:=True
    OnClick:=@ButtonLabelClick
    OnDblClick:=@ButtonLabelClick
    OnMouseDown:=@ButtonLabelMouseDown
    OnMouseUp:=@ButtonLabelMouseUp
  end

  Labl:=TLabel.Create(WizardForm)        //Текст кнопок
  Labl.Left:=23                          //Указываем положение текста
  Labl.Top:=5
  Labl.Autosize:=True
  Labl.Alignment:=taCenter
  Labl.Tag:=AButtonIndex
  Labl.Transparent:=True
  Labl.Font.Color:=clFont              //Цвет текста
  Labl.Caption:=AButton.Caption
  Labl.OnClick:=@ButtonLabelClick
  Labl.OnDblClick:=@ButtonLabelClick
  Labl.OnMouseDown:=@ButtonLabelMouseDown
  Labl.OnMouseUp:=@ButtonLabelMouseUp
  Labl.Parent:=Panel
  ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption:=AButton.Caption
  ButtonPanel[AButtonIndex].Visible:=AButton.Visible
  ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=True
  ButtonPanel[bidNext].Enabled := True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=False
  ButtonPanel[bidNext].Enabled := False
end;

procedure CurPageChanged0(CurPageID: Integer);
begin
  UpdateButton(WizardForm.BackButton,bidBack)
  UpdateButton(WizardForm.NextButton,bidNext)
  UpdateButton(WizardForm.CancelButton,bidCancel)
  ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
  ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
  ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
  ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
  ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
end;

procedure InitializeWizard0();
begin
  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:=337
  WizardForm.DirBrowseButton.Width:=ButtonWidth
  WizardForm.DirBrowseButton.Height:=ButtonHeight

  WizardForm.GroupBrowseButton.Left:=337
  WizardForm.GroupBrowseButton.Width:=ButtonWidth
  WizardForm.GroupBrowseButton.Height:=ButtonHeight

  WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

  WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

  ExtractTemporaryFile('button.bmp')
  LoadButtonImage(WizardForm.BackButton,bidBack)
  LoadButtonImage(WizardForm.NextButton,bidNext)
  LoadButtonImage(WizardForm.CancelButton,bidCancel)
  LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
  LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;


+ как наложит текстуру с помошью этого скрипта на
такую кнопку
Код:

var
 SystemButton: TNewButton;
 
procedure InitializeWizard();
begin
SystemButton := TNewButton.Create(WizardForm);
    with SystemButton do begin
    Parent := WizardForm;
    Caption := '?';
    Left:= 190
    Top:=WizardForm.BackButton.Top
    Width:=WizardForm.DirBrowseButton.Height
    Height:=WizardForm.DirBrowseButton.Height
    OnClick:=@SystemButtonOnClick
    ShowHint := True;
    Hint:= 'Показать/Cкрыть "Системные требования"'
    end;
end;



Gnom_aka_Lexander 10-01-2011 14:06 1585222

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

    AutoSize := True;
и поиграться со значениями True и False

duxa 10-01-2011 14:36 1585247

Одной из проблем различных Repack'ов является съезд элементов на ПК у которых установлено нестандартное разрешение\кол-во точек на дюйм. Каким образом это можно исправить в своих работах?

serg aka lain 10-01-2011 15:16 1585270

Цитата:

Цитата duxa
Каким образом это можно исправить в своих работах? »

Left, Width = ScaleX
Top, Height = ScaleY

Цитата:

Цитата Imitri7
как наложит текстуру с помошью этого скрипта »

По аналогии, расширить array [0..5], bidSystemButton = 5, добавить в процедуру ButtonLabelClick (bidSystemButton: Button := SystemButton), и.т.д

Vista-w 10-01-2011 18:04 1585353

Помогите пожалуйста, нужно чтоб при установке игры создались папки вот по такому адресу
C:\Documents and Settings\Admin\Мои документы\1C\Папка1\Папка2
Что нужно прописать в скрипте?
Жирным выделены папки, которые нужно создать.

Vitek 07 10-01-2011 18:29 1585373

Vista-w,
Код:

[Dirs]
Name: "{userdocs}\1C\Три Богатыря\SAVEGAMES"

Всё описано в справке.

vahe-91 10-01-2011 22:39 1585634

не смог решить проблему ( Пост 428 ), вот весь скрипт , помогите пожалуйста

Serega 10-01-2011 23:53 1585737

Цитата:

Цитата vahe-91
не смог решить проблему ( Пост 428 ), вот весь скрипт , »

Сразу вопрос, каким образом у вас внешний setup.exe оказывается в папке Temp? т.к. в дистрибутив вы его не включаете, то отсюда я делаю вывод, что он там заранее расположен...
Что я сделал, просто добавил в секцию [Files]:
Код:

Source: compiler:Examples\MyProg.exe; DestDir: {tmp}; Flags: ignoreversion
в секции кода заменил название запускаемого файла и отображение:
Код:

  Exec(ExpandConstant('{tmp}\MyProg.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, n);
После распаковки архива, был благополучно запущен MyProg.exe, в результате работы инсталлятора никаких ошибок не возникло.

vahe-91 11-01-2011 11:40 1585972

Цитата:

Цитата Serega
каким образом у вас внешний setup.exe оказывается в папке Temp? »

он в архиве FreeArc, который распаковывается в Temp

Serega 11-01-2011 16:29 1586200

Цитата:

Цитата vahe-91
не смог решить проблему »

Цитата:

Цитата Serega
благополучно запущен MyProg.exe, в результате работы инсталлятора никаких ошибок не возникло »


Vista-w 11-01-2011 20:25 1586370

Дайте пожалуйста скриптик чтоб окно установки сворачивалось в правый нижний угол рабочего стола.

Imitri7 11-01-2011 22:49 1586490

Цитата:

Цитата serg aka lain
Цитата Imitri7:
как наложит текстуру с помошью этого скрипта »
По аналогии, расширить array [0..5], bidSystemButton = 5, добавить в процедуру ButtonLabelClick (bidSystemButton: Button := SystemButton), и.т.д »

покажи плыз как будет выглядеть, а то у меня не выходит

Vista-w,
Цитата:

Цитата serg aka lain
Если подразумевается окно распаковки файлов, то я сделал бы так»


serg aka lain 12-01-2011 00:39 1586555

Вложений: 1
Цитата:

Цитата Imitri7
покажи плыз как будет выглядеть »


SCOOTERTECHNO 12-01-2011 11:51 1586796

Уважаемые прграммисты, помогите пожалуйста со скриптом. Я распаковал инсталятор из дистрибутива игры с помощью Universal Extractor, заменил только один файл xrEngine.exe на патченый, далее открыл install_script.iss в программе Inno Setup, при компиляции инсталятора вылетает ошибка в файле ru.isl. Скрипт оригинальный от инсталятора игры, в нем я ничего не менял. Почему вылетает ошибка при запаковке? Как можно решить эту проблему?

Вот окно с ошибкой:



файл ru.isl имеет такой вид:

[LangOptions]
LanguageName=<0420><0443><0441><0441><043A><0438><0439>
LanguageID=$0419
LanguageCodePage=1251
TitleFontName=Arial
WelcomeFontName=Verdana
CopyrightFontName=Arial
LicenseText=Здесь написано лицензионной соглашение

InfoAfterText=Здесь описание издателя, системные требования и прочее.

DialogFontSize=8
TitleFontSize=29
WelcomeFontSize=12
CopyrightFontSize=8

Vitek 07 12-01-2011 12:49 1586827

SCOOTERTECHNO, удалите строки из ru.isl
Цитата:

Цитата SCOOTERTECHNO
LicenseText=Здесь написано лицензионной соглашение
InfoAfterText=Здесь описание издателя, системные требования и прочее. »

Это прописано уже в скрипте

Цитата:

[Languages]
; These files are stubs ; To achieve better results after recompilation, use the real language files
Name: "ru"; MessagesFile: "embedded\ru.isl";
LicenseFile: "embedded\ruLicense.txt";
InfoAfterFile: "embedded\ruInfoAfter.txt";

SCOOTERTECHNO 12-01-2011 13:02 1586839

Удалил, но вышла новая ошибка:



Скрипт:



А это нужно удалять из файла ru.isl?

DialogFontSize=8
TitleFontSize=29
WelcomeFontSize=12
CopyrightFontSize=8


Что мне делать?

vint56 12-01-2011 13:08 1586841

SCOOTERTECHNO, или Покажи весь скрипт
[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl

Vitek 07 12-01-2011 13:10 1586843

Цитата:

Цитата SCOOTERTECHNO
А это нужно удалять из файла ru.isl? »

нет.
Покажите секцию CODE, а лучше прикрепите к сообщению весь скрипт.

SCOOTERTECHNO 12-01-2011 13:14 1586850

Извиняюсь за размер, я не знаю как в миниатюре скрипт выложить.

Вот весь скрипт:

;InnoSetupVersion=5.3.3

[Setup]
AppName=S.T.A.L.K.E.R. - Зов Припяти
AppVerName=S.T.A.L.K.E.R. - Зов Припяти [v1.6.00]
DefaultDirName={pf}\GSC World Publishing\S.T.A.L.K.E.R. - Зов Припяти
DefaultGroupName=GSC World Publishing\S.T.A.L.K.E.R. - Зов Припяти
OutputBaseFilename=setup
Compression=lzma
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\stalker_cop.ico"; DestDir: "{app}"; Flags: overwritereadonly
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\stalker_cop_save.ico"; DestDir: "{app}"; Flags: overwritereadonly
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\uninstall.ico"; DestDir: "{app}"; Flags: overwritereadonly
; the following file spans setup-1.bin to setup-3.bin
Source: "{tmp}\get_hw_caps.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall dontcopy
; the following file spans setup-1.bin to setup-3.bin
Source: "{tmp}\get_hw_caps.dll"; DestDir: "{tmp}"; Flags: deleteafterinstall dontcopy
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\GameuxInstallHelper.dll"; DestDir: "{app}"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\FirewallInstallHelper.dll"; DestDir: "{app}"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\Stalker-COP.exe"; DestDir: "{app}"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\fsgame.ltx"; DestDir: "{app}"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\BugTrap.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\crypto.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\dbghelp.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\eax.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\lua.JIT.1.1.4.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\luabind.beta7-devel.rc4.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\Microsoft.VC80.CRT.manifest"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\msvcr80.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\ode.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\OpenAL32.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\wrap_oal.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrAPI.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrCDB.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrCore.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrCPU_Pipe.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrD3D9-Null.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrGame.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrGameSpy.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrNetServer.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrParticles.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrPhysics.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrRender_R1.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrRender_R2.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrRender_R3.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrRender_R4.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrSound.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrXMLParser.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\dedicated\OpenAL32.dll"; DestDir: "{app}\bin\dedicated"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\dedicated\xrEngine.exe"; DestDir: "{app}\bin\dedicated"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\levels\levels.db0"; DestDir: "{app}\levels"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\levels\levels.db1"; DestDir: "{app}\levels"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_agroprom.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_atp.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_autostation.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_bath.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_darkvalley.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_factory.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_firestation.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_garbage.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_limansk.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_lost_village.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_pool.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_pripyat.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_railroad.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_rembasa.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_rostok.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_sport_center.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_workshop.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\resources\configs.db"; DestDir: "{app}\resources"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\resources\resources.db0"; DestDir: "{app}\resources"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\resources\resources.db1"; DestDir: "{app}\resources"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\resources\resources.db2"; DestDir: "{app}\resources"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\resources\resources.db3"; DestDir: "{app}\resources"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\resources\resources.db4"; DestDir: "{app}\resources"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\protect.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\protect.exe"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\protect.x64"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\protect.x86"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrEngine.exe"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{commondocs}\S.T.A.L.K.E.R. - Зов Припяти\user.ltx"; DestDir: "{commondocs}\S.T.A.L.K.E.R. - Зов Припяти"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\License.txt"; DestDir: "{app}"; Check: "MyProgCheckLang( 'ru' )"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\ReadMe.txt"; DestDir: "{app}"; Check: "MyProgCheckLang( 'ru' )"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\STALKER-COP.pdf"; DestDir: "{app}"; Check: "MyProgCheckLang( 'ru' )"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\localization\xrussian.db"; DestDir: "{app}\localization"; Check: "MyProgCheckLang( 'ru' )"; Flags: overwritereadonly ignoreversion

[Registry]
Root: HKLM; Subkey: "Software\GSC Game World"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallPath"; ValueType: String; ValueData: "{app}";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallLang"; ValueType: String; ValueData: "{language}";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallSource"; ValueType: String; ValueData: "stkcop-sj-rus-pack-r";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallVers"; ValueType: String; ValueData: "1.6.00";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallCDKEY"; ValueType: String;
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallUserName"; ValueType: String;
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "UnInstConfirm"; ValueType: String; ValueData: "{cm:CM_DELETE_SAVED_GAMES}";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallPatchID"; ValueType: Dword; ValueData: "$2EDA";
Root: HKCU; Subkey: "Software\GSC Game World\STALKER-COP\Keys"; Flags: uninsdeletekey
Root: HKCR; Subkey: ".scop"; Flags: uninsdeletekey
Root: HKCR; Subkey: ".scop"; ValueType: String; ValueData: "STALKER-COP.SAVED.GAME";
Root: HKCR; Subkey: "STALKER-COP.SAVED.GAME"; Flags: uninsdeletekey
Root: HKCR; Subkey: "STALKER-COP.SAVED.GAME"; ValueType: String; ValueData: "{cm:CM_SAVED_GAME}";
Root: HKCR; Subkey: "STALKER-COP.SAVED.GAME\DefaultIcon"; ValueType: String; ValueData: "{app}\stalker_cop_save.ico,0";
Root: HKCR; Subkey: "STALKER-COP.SAVED.GAME\shell"; ValueType: String; ValueData: "Play";
Root: HKCR; Subkey: "STALKER-COP.SAVED.GAME\shell\Play"; ValueType: String; ValueData: "{cm:CM_PLAY_SAVED}";
Root: HKCR; Subkey: "STALKER-COP.SAVED.GAME\shell\Play\command"; ValueType: String; ValueData: "{app}\Stalker-COP.exe ""%1""";

[Run]
Filename: "{app}\bin\xrEngine.exe"; WorkingDir: "{app}"; Description: "&{cm:LaunchProgram,S.T.A.L.K.E.R. - Зов Припяти}";

[Icons]
Name: "{group}\S.T.A.L.K.E.R. - Зов Припяти"; Filename: "{app}\bin\xrEngine.exe"; WorkingDir: "{app}"; IconFilename: "{app}\stalker_cop.ico"; Comment: "{cm:CM_LAUNCH_NOW}";
Name: "{group}\{cm:CM_VISIT_GAME_SITE}"; Filename: "{app}\gamesite.url"; Comment: "{cm:CM_VISIT_GAME_SITE_HINT}";
Name: "{group}\{cm:CM_VISIT_PUB_SITE}"; Filename: "{app}\publisher.url"; Comment: "{cm:CM_VISIT_PUB_SITE_HINT}";
Name: "{group}\{cm:ViewFile,ReadMe.txt}"; Filename: "{app}\ReadMe.txt"; Comment: "{cm:CM_README_HINT}";
Name: "{group}\{cm:CM_USER_MANUAL}"; Filename: "{app}\STALKER-COP.pdf"; Comment: "{cm:CM_USER_MANUAL_HINT}";
Name: "{group}\{cm:UninstallProgram,S.T.A.L.K.E.R. - Зов Припяти}"; Filename: "{uninstallexe}"; IconFilename: "{app}\uninstall.ico"; Comment: "{cm:CM_DELETE_NOW}";
Name: "{commondesktop}\S.T.A.L.K.E.R. - Зов Припяти"; Filename: "{app}\bin\xrEngine.exe"; WorkingDir: "{app}"; IconFilename: "{app}\stalker_cop.ico"; Tasks: "desktopicon";
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\S.T.A.L.K.E.R. - Зов Припяти"; Filename: "{app}\bin\xrEngine.exe"; WorkingDir: "{app}"; IconFilename: "{app}\stalker_cop.ico"; Tasks: "quicklaunchicon";

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}";
Name: "directx"; Description: "{cm:CM_UPDATE_DIRECT}"; GroupDescription: "{cm:CM_ADDITIONAL_TASKS}";
Name: "comrade"; Description: "{cm:CM_INSTALL_COMRADE}"; GroupDescription: "{cm:CM_ADDITIONAL_TASKS}";
Name: "adobe"; Description: "{cm:CM_INSTALL_ACROREADER}"; GroupDescription: "{cm:CM_ADDITIONAL_TASKS}";

[CustomMessages]
ru.NameAndVersion=%1, версия %2
ru.AdditionalIcons=Дополнительные значки:
ru.CreateDesktopIcon=Создать значок на &Рабочем столе
ru.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
ru.ProgramOnTheWeb=Сайт %1 в Интернете
ru.UninstallProgram=Деинсталлировать %1
ru.LaunchProgram=Запустить %1
ru.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
ru.AssocingFileExtension=Связывание %1 с файлами %2...
ru.NotFound=%1 не найдены
ru.ViewFile=Просмотреть %1
ru.CM_ALREADY_INSTALLED=Игра уже установлена.
ru.CM_YOUR_CHOICE=Вы хотите:
ru.CM_LAUNCH_NOW=Запустить игру
ru.CM_DELETE_NOW=Удалить игру
ru.CM_DELETE_SAVES=Удалить сохраненные игры?
ru.CM_INSTALL_ACROREADER=Установить Adobe Acrobat Reader
ru.CM_INSTALL_DIRECTX=Установить обновленную версию Microsoft DirectX
ru.CM_TECHSUPPORT_REQUEST=Обращение в техподдержку
ru.CM_TECHSUPPORT_REQUEST_HINT=Создать файл отчета конфигурации компьютера
ru.CM_VISIT_DEV_SITE=WEB сайт разработчиков
ru.CM_VISIT_DEV_SITE_HINT=Посетить WEB сайт разработчиков
ru.CM_VISIT_PUB_SITE=WEB сайт издателя
ru.CM_VISIT_PUB_SITE_HINT=Посетить WEB сайт издателя
ru.CM_VISIT_GAME_SITE=WEB сайт игры
ru.CM_VISIT_GAME_SITE_HINT=Посетить WEB сайт игры
ru.CM_VISIT_REG_SITE=Регистрация игры
ru.CM_VISIT_REG_SITE_HINT=Зарегистрировать игру в интернете
ru.CM_ONLINE_RESOURCES=Онлайн ресурсы
ru.CM_COLLECT_INFO=Идет сбор данных о конфигурации компьютера
ru.CM_LOW_HARDWARE=Производительности вашей системы недостаточно для запуска игры
ru.CM_ASK_CONTIUNUE=Продолжить установку?
ru.CM_ASK_REGISTER=Зарегистрировать игру online?
ru.CM_REGISTER_ADVANTAGES=Только зарегистрированным пользователям доступен сайт технической поддержки и эксклюзивный контент.
ru.CM_SPECIAL_CODE=Если у вас есть специальный "бонусный" код, введите его для установки дополнительного контента
ru.CM_UNLOCK_CODE=Код разблокировки
ru.CM_BONUS_PACK=Бонусный материал
ru.CM_EXTRA_CONTENT=Дополнительный контент
ru.CM_INVALID_CODE=Неверный код разблокировки
ru.CM_UPDATE_DIRECT=Обновить DirectX
ru.CM_ADDITIONAL_TASKS=Системные задачи:
ru.CM_DELETE_SAVED_GAMES=Удалить сохраненные игры и профили?
ru.CM_README_HINT=Просмотреть ReadMe
ru.CM_USER_MANUAL=Руководство пользователя
ru.CM_USER_MANUAL_HINT=Просмотреть руководство пользователя
ru.CM_HARDWARE_INFO=Аппаратное обеспечение
ru.CM_HARDWARE_INFO_HINT=Программа установки обнаружила следующие необходимые компоненты
ru.CM_HW_PROCESSOR=Процессор
ru.CM_HW_VIDEO_CARD=Видеоадаптер
ru.CM_HW_SOUND_CARD=Звуковая карта
ru.CM_HW_PHYS_RAM=Память
ru.CM_HW_VIRT_RAM=Файл подкачки
ru.CM_HARDWARE_COMMENT_RED=Компоненты, выделенные красным, не удовлетворяют требованиям игры. Проверьте соответствие системным требованиям.
ru.CM_HARDWARE_COMMENT_GOOD=Все компоненты удовлетворяют требованиям игры.
ru.CM_SETUP_LOCATION=Выберите пользователя
ru.CM_SETUP_LOCATION_HINT=Игра может быть установлена как для текущего так и для всех пользователей системы
ru.CM_4CURRENT_USER=Для текущего пользователя
ru.CM_4ALL_USERS=Для всех пользователей
ru.CM_DRIVES_LIST=Список жестких дисков и свободного места
ru.CM_CD_KEY_DESC=Для игры в S.T.A.L.K.E.R. по сети Интернет, пожалуйста, введите желаемое имя пользователя и соответствующий ключ, указанный на коробке.
ru.CM_CD_KEY=Ключ
ru.CM_REGISTER_TITLE=Регистрация игры
ru.CM_REGISTER_DESC=Зарегистрировать вашу копию игры S.T.A.L.K.E.R.?
ru.CM_REGISTER_GOODS=Только зарегистрированным пользователям доступен сайт технической поддержки и эксклюзивный контент.
ru.CM_REGISTER_ASK=Да, зарегистрировать игру.
ru.CM_UPDATE_TITLE=Обновление до версии %1
ru.CM_GAME_NOT_FOUND=Программа обновления не смогла найти игру.%n%nОбновление невозможно без установленной игры.
ru.CM_UPDATE_FROM_TO=Программа произведет обновление с версии %1 до версии %2.
ru.CM_NOT_NEEDED=Обновление не требуется.
ru.CM_ALREADY_UPDATED=У Вас уже установлено обновление версии %1, которое включает в себя все предыдущие обновления.
ru.CM_ASK_UPDATE=Установить обновление?
ru.CM_UPDATE=Обновление
ru.CM_PLEASE_WAIT=Подождите пожалуйста...
ru.CM_CHECKING_CHECKSUMS=Сравнение контрольных сумм файлов...
ru.CM_WRONG_CHECKSUM=Контрольная сумма для файла %1 не совпадает с эталонной.%n%nВозможно файл не является оригинальным или поврежден.%n%nРекомендуеться переустановить игру с оригинального носителя.
ru.CM_PATCHING=Обновление файлов
ru.CM_PATCH_ERROR=Произошла ошибка обновления файла %1.%n%nПопробуйте отключить антивирусные программы и запустить обновление снова.
ru.CM_CANT_CONTINUE=Продолжение установки обновления невозможно.
ru.CM_BAD_VERSION=Обнаружена установленная версия %1.%n%nЭтот пакет обновлений предназначен только для обновления версии %2.
ru.CM_US_SKU=Unites States
ru.CM_WW_SKU=World Wide
ru.CM_DD_SKU=Digital Distribution
ru.CM_RU_SKU=Russia and CIS
ru.CM_HW_OS=ОС
ru.CM_HW_OLD_OS=Устаревшая операционная система
ru.CM_HW_DEP_OS=Неподдерживаемая операционная система
ru.CM_HARDWARE_SURVEY=Разрешить отправить эту информацию для участия в онлайн-анкетировании
ru.CM_USER_NICK=Введите желаемое имя игрока
ru.CM_SAVED_GAME=Сохранённая игра S.T.A.L.K.E.R.: Зов Припяти
ru.CM_PLAY_SAVED=Загрузить
ru.CM_PREV_NOT_FOUND=Для установки S.T.A.L.K.E.R.: Зов Припяти необходима версия игры S.T.A.L.K.E.R. или S.T.A.L.K.E.R.: Чистое Небо.%n%nПрограмма установки не нашла указанных версий на Вашем компьютере.
ru.CM_INSTALL_COMRADE=Установить GameSpy Comrade

[Languages]
; These files are stubs
; To achieve better results after recompilation, use the real language files
Name: "ru"; MessagesFile: "embedded\ru.isl"; LicenseFile: "embedded\ruLicense.txt"; InfoAfterFile: "embedded\ruInfoAfter.txt";

Vitek 07 12-01-2011 13:22 1586858

Цитата:

Цитата SCOOTERTECHNO
Check: "MyProgCheckLang( 'ru' )" »

Удалите это. Запускается проверка языка, а самой функции или процедуры в скрипте нет, т.к. не самой секции CODE

SCOOTERTECHNO 12-01-2011 13:31 1586865

Удалить все 4 строчки?


Vitek 07 12-01-2011 13:36 1586870

Цитата:

Цитата SCOOTERTECHNO
Source: "{app}\License.txt"; DestDir: "{app}"; Flags: overwritereadonly ignoreversion
Source: "{app}\ReadMe.txt"; DestDir: "{app}"; Check: "MyProgCheckLang( 'ru' )"; Flags: overwritereadonly ignoreversion
Source: "{app}\STALKER-COP.pdf"; DestDir: "{app}"; Flags: overwritereadonly ignoreversion
Source: "{app}\localization\xrussian.db"; DestDir: "{app}\localization"; Flags: overwritereadonly ignoreversion »


SCOOTERTECHNO 12-01-2011 14:00 1586888

Большое вам спасибо за помощь!!!! Сейчас поробую, все сделать.

SCOOTERTECHNO 12-01-2011 15:32 1586957

Опять ошибка, но уже в конце компиляции игры, до конца остаеться 7 минут выходит окно с ошибкой. Что это могло бы значить?

Окно ошибки:



Компиляция прерываеться:



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

SteamShip 12-01-2011 16:05 1586980

[Setup]
DiskSpanning=yes
;Размер тома в байтах (здесь 695 мегабайт)
DiskSliceSize=730000000

SCOOTERTECHNO 12-01-2011 16:23 1586996

Так правильно? Он не будет делить игру на 2 части? Если добавить SlicesPerDisk=2 то он разделит игру?
Какой размер нужно прописать? Игра весит 4.37 ГБ.

[Setup]
DiskSpanning=yes
DiskSliceSize=2100000000
AppName=S.T.A.L.K.E.R. - Зов Припяти
AppVerName=S.T.A.L.K.E.R. - Зов Припяти [v1.6.00]
DefaultDirName={pf}\GSC World Publishing\S.T.A.L.K.E.R. - Зов Припяти
DefaultGroupName=GSC World Publishing\S.T.A.L.K.E.R. - Зов Припяти
OutputBaseFilename=setup
Compression=lzma
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

SteamShip 12-01-2011 16:25 1586998

Помогите пожалуйста решить ошибку:
читать дальше »

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

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

[Icons]
Name: {group}\My Program; Filename: {app}\MyProg.exe

[code]
var
pnl: TPanel;


procedure SelectGroupFolderPage;
begin
with WizardForm do
begin
with GroupEdit do
begin
Left:= 40;
Top:= 167;
Parent:= pnl;
end;
with GroupBrowseButton do
begin
Left:= WizardForm.GroupEdit.Left + WizardForm.GroupEdit.Width + 10;
Top:= WizardForm.GroupEdit.Top - 1;
Parent:= pnl;
end;
with SelectGroupBitmapImage do
begin
Left:= WizardForm.GroupEdit.Left;
Top:= WizardForm.GroupEdit.Top - 62;
Stretch:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectStartMenuFolderLabel.AutoSize;
SetBounds(WizardForm.GroupEdit.Left,WizardForm.GroupEdit.Top - 60,
WizardForm.SelectStartMenuFolderLabel.Width, WizardForm.SelectStartMenuFolderLabel.Height);
WordWrap:= WizardForm.SelectStartMenuFolderLabel.WordWrap;
Caption:= WizardForm.SelectStartMenuFolderLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectStartMenuFolderLabel.Font.Color;
Style:= WizardForm.SelectStartMenuFolderLabel.Font.Style;
Name:= WizardForm.SelectStartMenuFolderLabel.Font.Name;
Size:= WizardForm.SelectStartMenuFolderLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectStartMenuFolderlabel.AutoSize;
SetBounds(WizardForm.GroupEdit.Left,WizardForm.GroupEdit.Top - 60,
WizardForm.SelectStartMenuFolderLabel.Width, WizardForm.SelectStartMenuFolderLabel.Height);
WordWrap:= WizardForm.SelectStartMenuFolderLabel.WordWrap;
Caption:= WizardForm.SelectStartMenuFolderLabel.Caption;
with Font do
begin
Color:= WizardForm.SelectStartMenuFolderLabel.Font.Color;
Style:= WizardForm.SelectStartMenuFolderLabel.Font.Style;
Name:= WizardForm.SelectStartMenuFolderLabel.Font.Name;
Size:= WizardForm.SelectStartMenuFolderLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;

end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.NoIconsCheck.AutoSize;
SetBounds(WizardForm.GroupEdit.Left,WizardForm.GroupEdit.Top - 60,
WizardForm.NoIconsCheck.Width, WizardForm.NoIconsCheck.Height);
WordWrap:= WizardForm.NoIconsCheck.WordWrap;
Caption:= WizardForm.NoIconsCheck.Caption;
with Font do
begin
Color:= WizardForm.NoIconsCheck.Font.Color;
Style:= WizardForm.NoIconsCheck.Font.Style;
Name:= WizardForm.NoIconsCheck.Font.Name;
Size:= WizardForm.NoIconsCheck.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
pnl:= TPanel.Create(WizardForm);
with pnl do
begin
Align:= alClient;
Parent:= WizardForm;
end;
with WizardForm do
begin
with WizardBitmapImage do
begin
Align:= alClient;
Stretch:= True;
Parent:= pnl;
end;
NextButton.Parent:= pnl;
CancelButton.Parent:= pnl;
pnl.Repaint;
end;

if CurPageID = wpSelectProgramGroup then SelectGroupFolderPage
end;

SteamShip 12-01-2011 17:23 1587043

SCOOTERTECHNO, Чтобы разделить игру (4.37 гб) на 2 равные части нужно либо прописать: DiskSpanning=yes
DiskSliceSize= 2 295 035 971 либо SlicesPerDisk=2 DiskSpanning=true(ну или yes без разницы)

SlicesPerDisk=2 писать не нужно эта функция не делит установку на части она лишь отвечает за название томов а чтобы разделить установку на 2 равные части пиши: DiskSpanning=yes
DiskSliceSize= 2 295 035 971

SCOOTERTECHNO 12-01-2011 17:45 1587065

SteamShip, Спасибо за помощь, я создал игру, установил, игра работает но я зык меню на английском и имеет такой вид надписей menu_options Кривой инсталятор получился, :) вроде скрипт правильный, чего ему не хватает :dont-know

SteamShip 12-01-2011 18:16 1587085

SCOOTERTECHNO, язык меню в игре?

actavir 12-01-2011 19:40 1587126

Лександер, вы мне давали пример привязки архивов к компонентам, я не смог там разобраться.
Если вам не сложно не могли бы вы дать пример тупо с freearc и компонентами.
И сразу же я до конца не могу разобраться как если выбираешь что устанавливать то ярлыки только для того устанавливались?
Помогите кто-нибудь!!!!!
Заранее огромное спасибо!!!

SCOOTERTECHNO 12-01-2011 20:12 1587146

SteamShip, язык меню на английском, хотя он должен быть на русском, слова в меню идут через черточку например: menu_options. Скринтош уже не смогу сделать я удалил свой Repack "STALKER - Зов Припяти" . Я делал Repack не из установленной игры а из распакованного инсталлятора из лицензионного дистрибутива, непонятно даже почему при компиляции игры вылетали ошибки в скрипте, iss скрипт тоже оригинальный,он распоковался вместе с дистрибутивом. Я заменил лиш файл xrEngine.exe в папке bin на патченый файл xrEngine.exe (чтобы запускать игру без диска) Замена этого файла ни в коем случае не влияет на скрипт. Интересно каким софтом разработчики поковали игру? В Inno Setup собрать репак из оригинального скрипта не получается, хотя с помощью этого скрипта они как то запаковали игру.

actavir 12-01-2011 20:20 1587152

SCOOTERTECHNO, вы не могли бы мне помочь? Вопрос одним сообщением выше.

Habetdin 12-01-2011 20:23 1587158

Цитата:

Цитата Sotonisto
Пример создания диалогового окна и создания *.ini файла »

Забыли:
Код:

var
        Page: TInputQueryWizardPage;


SCOOTERTECHNO 12-01-2011 20:24 1587161

actavir, Про какие архивы идет речь?

actavir 12-01-2011 20:28 1587165

SCOOTERTECHNO, про freearc. Я хотел сделать установку из нескольких архивов с возможностью выбора того, что хочешь устанавливать.

SCOOTERTECHNO 12-01-2011 20:33 1587171

actavir, Я не работал с этим архиватором. Зайдите сюда http://forum.ru-board.com/topic.cgi?forum=5&topic=24319 возможно найдете ответ. Там подробное описание используйте поиск по форуму.

actavir 12-01-2011 20:45 1587181

Блин я там искал ничё путного не нашёл. Буду ждать помощь у кого-нибудь ещё! Может есть у кого-нибудь пример???

actavir 12-01-2011 21:00 1587193

SCOOTERTECHNO, а вы вот лично с какими архиваторами можете дать пример на этот вопрос?

SteamShip 12-01-2011 21:09 1587198

SCOOTERTECHNO, у установки лицензионного сталкера есть фаил-пустышка если вы не умеете их создавать то я поясню, также важны файлы реестра и у лицензии через секцию код осуществляются многие функции скрытые для распаковщиков вообщем завтра я сам распакую игру и всё проанализирую P.S. А вообще лучше и проще использовать уже готовые скрипты

SCOOTERTECHNO 12-01-2011 21:24 1587211

SteamShip, хорошо, спасибо! Кстати в предыдущих сообщениях есть описанные мной ошибки которые возникали при компиляции игры Там я вылажил и оригинальный iss скрипт, советую прочитать http://forum.oszone.net/thread-190621-46.html Пустой файл, это случайно не sj.rpk?

SCOOTERTECHNO 12-01-2011 21:50 1587236

Цитата:

Цитата actavir
SCOOTERTECHNO, а вы вот лично с какими архиваторами можете дать пример на этот вопрос? »

actavir я занимаюсь перепаковкой лицензионных игр через скрипты Inno Setup, когда это мне необходимо. Распаковку делаю с Universal Extractor. Я не смогу вам помочь с вашим вопросом, :dont-know Здесь и тема соответственно про скрипты Inno Setup.

actavir 12-01-2011 22:08 1587258

ДАк я и прошу скрипт inno setup но с модулем распаковки freearc :)

SCOOTERTECHNO 12-01-2011 22:12 1587265

Цитата:

Цитата actavir
ДАк я и прошу скрипт inno setup но с модулем распаковки freearc »

Я таким модулем freearc не пользуюсь, не знаю. :) Потом скачаю, может и мне пригодиться. Что вы хотите скомпилировать, игру или программу?

actavir 12-01-2011 22:33 1587290

Хочу сделать пак программ, а то при переустановке винды влом каждый раз ставить всё заного)))

SteamShip 13-01-2011 09:16 1587474

http://rghost.ru/2927495 скрипт распаковки фри арка

R.i.m.s.k.y. 13-01-2011 09:20 1587476

Цитата:

Цитата actavir
Хочу сделать пак программ »

а проги работают копированием или на реестр завязано? системных либ нету? их только ставить.

SteamShip 13-01-2011 10:33 1587540

Вложений: 1
SCOOTERTECHNO, вот скрипт пробуйте сразу говорю у себя не тестировал (мало свободного места на диске)

SteamShip 13-01-2011 10:33 1587543

http://rghost.ru/3920322

SCOOTERTECHNO 13-01-2011 10:53 1587573

SteamShip, Спассибо сейчас протестирую!

Gnom_aka_Lexander 13-01-2011 10:59 1587579

actavir, Дай свой скрипт и названия архивов, с компонентами.

SCOOTERTECHNO 13-01-2011 11:38 1587608

SteamShip, При компиляции выходят ошибки. Сначала в ru.isl потом LicenseText и тд. Больше не могу. :closed-to Игра с оригинальным процессом установки не получаеться. :drug: Мне бы найти отдельный распаковщик и запаковщик bin файлов, чтобы поменять файл и обратно запаковать bin, тогда и инсталятор бы не пришлось перепаковывать.

Gnom_aka_Lexander 13-01-2011 11:49 1587614

SCOOTERTECHNO, такого нет. если подождеш до вечера, то сделаю тебе оригинальный скрипт.

SCOOTERTECHNO 13-01-2011 11:54 1587617

Лександер, Вот ригинальный скрипт дистрибутива игры и процесс установки мне нужен оригинальный без изменений, но такого не выйдет это 100%, даже на оригинальном скрипте при компиляции выходят ошибки. Здесь описаны ошибки которые у меня выходят с этим скриптом http://forum.oszone.net/thread-190621-46.html Мне не нравяться репаки из установленных игр я хочу сделать из распакованного дистрибутива.

;InnoSetupVersion=5.3.3

[Setup]
AppName=S.T.A.L.K.E.R. - Зов Припяти
AppVerName=S.T.A.L.K.E.R. - Зов Припяти [v1.6.00]
DefaultDirName={pf}\GSC World Publishing\S.T.A.L.K.E.R. - Зов Припяти
DefaultGroupName=GSC World Publishing\S.T.A.L.K.E.R. - Зов Припяти
OutputBaseFilename=setup
Compression=lzma
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\stalker_cop.ico"; DestDir: "{app}"; Flags: overwritereadonly
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\stalker_cop_save.ico"; DestDir: "{app}"; Flags: overwritereadonly
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\uninstall.ico"; DestDir: "{app}"; Flags: overwritereadonly
; the following file spans setup-1.bin to setup-3.bin
Source: "{tmp}\get_hw_caps.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall dontcopy
; the following file spans setup-1.bin to setup-3.bin
Source: "{tmp}\get_hw_caps.dll"; DestDir: "{tmp}"; Flags: deleteafterinstall dontcopy
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\GameuxInstallHelper.dll"; DestDir: "{app}"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\FirewallInstallHelper.dll"; DestDir: "{app}"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\Stalker-COP.exe"; DestDir: "{app}"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\fsgame.ltx"; DestDir: "{app}"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\BugTrap.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\crypto.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\dbghelp.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\eax.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\lua.JIT.1.1.4.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\luabind.beta7-devel.rc4.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\Microsoft.VC80.CRT.manifest"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\msvcr80.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\ode.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\OpenAL32.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\wrap_oal.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrAPI.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrCDB.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrCore.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrCPU_Pipe.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrD3D9-Null.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrGame.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrGameSpy.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrNetServer.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrParticles.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrPhysics.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrRender_R1.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrRender_R2.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrRender_R3.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrRender_R4.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrSound.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrXMLParser.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\dedicated\OpenAL32.dll"; DestDir: "{app}\bin\dedicated"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\dedicated\xrEngine.exe"; DestDir: "{app}\bin\dedicated"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\levels\levels.db0"; DestDir: "{app}\levels"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\levels\levels.db1"; DestDir: "{app}\levels"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_agroprom.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_atp.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_autostation.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_bath.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_darkvalley.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_factory.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_firestation.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_garbage.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_limansk.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_lost_village.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_pool.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_pripyat.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_railroad.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_rembasa.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_rostok.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_sport_center.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\mp\mp_workshop.db"; DestDir: "{app}\mp"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\resources\configs.db"; DestDir: "{app}\resources"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\resources\resources.db0"; DestDir: "{app}\resources"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\resources\resources.db1"; DestDir: "{app}\resources"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\resources\resources.db2"; DestDir: "{app}\resources"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\resources\resources.db3"; DestDir: "{app}\resources"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\resources\resources.db4"; DestDir: "{app}\resources"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\protect.dll"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\protect.exe"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\protect.x64"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\protect.x86"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\bin\xrEngine.exe"; DestDir: "{app}\bin"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{commondocs}\S.T.A.L.K.E.R. - Зов Припяти\user.ltx"; DestDir: "{commondocs}\S.T.A.L.K.E.R. - Зов Припяти"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\License.txt"; DestDir: "{app}"; Check: "MyProgCheckLang( 'ru' )"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\ReadMe.txt"; DestDir: "{app}"; Check: "MyProgCheckLang( 'ru' )"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\STALKER-COP.pdf"; DestDir: "{app}"; Check: "MyProgCheckLang( 'ru' )"; Flags: overwritereadonly ignoreversion
; the following file spans setup-1.bin to setup-3.bin
Source: "{app}\localization\xrussian.db"; DestDir: "{app}\localization"; Check: "MyProgCheckLang( 'ru' )"; Flags: overwritereadonly ignoreversion

[Registry]
Root: HKLM; Subkey: "Software\GSC Game World"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallPath"; ValueType: String; ValueData: "{app}";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallLang"; ValueType: String; ValueData: "{language}";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallSource"; ValueType: String; ValueData: "stkcop-sj-rus-pack-r";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallVers"; ValueType: String; ValueData: "1.6.00";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallCDKEY"; ValueType: String;
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallUserName"; ValueType: String;
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "UnInstConfirm"; ValueType: String; ValueData: "{cm:CM_DELETE_SAVED_GAMES}";
Root: HKLM; Subkey: "Software\GSC Game World\STALKER-COP"; ValueName: "InstallPatchID"; ValueType: Dword; ValueData: "$2EDA";
Root: HKCU; Subkey: "Software\GSC Game World\STALKER-COP\Keys"; Flags: uninsdeletekey
Root: HKCR; Subkey: ".scop"; Flags: uninsdeletekey
Root: HKCR; Subkey: ".scop"; ValueType: String; ValueData: "STALKER-COP.SAVED.GAME";
Root: HKCR; Subkey: "STALKER-COP.SAVED.GAME"; Flags: uninsdeletekey
Root: HKCR; Subkey: "STALKER-COP.SAVED.GAME"; ValueType: String; ValueData: "{cm:CM_SAVED_GAME}";
Root: HKCR; Subkey: "STALKER-COP.SAVED.GAME\DefaultIcon"; ValueType: String; ValueData: "{app}\stalker_cop_save.ico,0";
Root: HKCR; Subkey: "STALKER-COP.SAVED.GAME\shell"; ValueType: String; ValueData: "Play";
Root: HKCR; Subkey: "STALKER-COP.SAVED.GAME\shell\Play"; ValueType: String; ValueData: "{cm:CM_PLAY_SAVED}";
Root: HKCR; Subkey: "STALKER-COP.SAVED.GAME\shell\Play\command"; ValueType: String; ValueData: "{app}\Stalker-COP.exe ""%1""";

[Run]
Filename: "{app}\bin\xrEngine.exe"; WorkingDir: "{app}"; Description: "&{cm:LaunchProgram,S.T.A.L.K.E.R. - Зов Припяти}";

[Icons]
Name: "{group}\S.T.A.L.K.E.R. - Зов Припяти"; Filename: "{app}\bin\xrEngine.exe"; WorkingDir: "{app}"; IconFilename: "{app}\stalker_cop.ico"; Comment: "{cm:CM_LAUNCH_NOW}";
Name: "{group}\{cm:CM_VISIT_GAME_SITE}"; Filename: "{app}\gamesite.url"; Comment: "{cm:CM_VISIT_GAME_SITE_HINT}";
Name: "{group}\{cm:CM_VISIT_PUB_SITE}"; Filename: "{app}\publisher.url"; Comment: "{cm:CM_VISIT_PUB_SITE_HINT}";
Name: "{group}\{cm:ViewFile,ReadMe.txt}"; Filename: "{app}\ReadMe.txt"; Comment: "{cm:CM_README_HINT}";
Name: "{group}\{cm:CM_USER_MANUAL}"; Filename: "{app}\STALKER-COP.pdf"; Comment: "{cm:CM_USER_MANUAL_HINT}";
Name: "{group}\{cm:UninstallProgram,S.T.A.L.K.E.R. - Зов Припяти}"; Filename: "{uninstallexe}"; IconFilename: "{app}\uninstall.ico"; Comment: "{cm:CM_DELETE_NOW}";
Name: "{commondesktop}\S.T.A.L.K.E.R. - Зов Припяти"; Filename: "{app}\bin\xrEngine.exe"; WorkingDir: "{app}"; IconFilename: "{app}\stalker_cop.ico"; Tasks: "desktopicon";
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\S.T.A.L.K.E.R. - Зов Припяти"; Filename: "{app}\bin\xrEngine.exe"; WorkingDir: "{app}"; IconFilename: "{app}\stalker_cop.ico"; Tasks: "quicklaunchicon";

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}";
Name: "directx"; Description: "{cm:CM_UPDATE_DIRECT}"; GroupDescription: "{cm:CM_ADDITIONAL_TASKS}";
Name: "comrade"; Description: "{cm:CM_INSTALL_COMRADE}"; GroupDescription: "{cm:CM_ADDITIONAL_TASKS}";
Name: "adobe"; Description: "{cm:CM_INSTALL_ACROREADER}"; GroupDescription: "{cm:CM_ADDITIONAL_TASKS}";

[CustomMessages]
ru.NameAndVersion=%1, версия %2
ru.AdditionalIcons=Дополнительные значки:
ru.CreateDesktopIcon=Создать значок на &Рабочем столе
ru.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
ru.ProgramOnTheWeb=Сайт %1 в Интернете
ru.UninstallProgram=Деинсталлировать %1
ru.LaunchProgram=Запустить %1
ru.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
ru.AssocingFileExtension=Связывание %1 с файлами %2...
ru.NotFound=%1 не найдены
ru.ViewFile=Просмотреть %1
ru.CM_ALREADY_INSTALLED=Игра уже установлена.
ru.CM_YOUR_CHOICE=Вы хотите:
ru.CM_LAUNCH_NOW=Запустить игру
ru.CM_DELETE_NOW=Удалить игру
ru.CM_DELETE_SAVES=Удалить сохраненные игры?
ru.CM_INSTALL_ACROREADER=Установить Adobe Acrobat Reader
ru.CM_INSTALL_DIRECTX=Установить обновленную версию Microsoft DirectX
ru.CM_TECHSUPPORT_REQUEST=Обращение в техподдержку
ru.CM_TECHSUPPORT_REQUEST_HINT=Создать файл отчета конфигурации компьютера
ru.CM_VISIT_DEV_SITE=WEB сайт разработчиков
ru.CM_VISIT_DEV_SITE_HINT=Посетить WEB сайт разработчиков
ru.CM_VISIT_PUB_SITE=WEB сайт издателя
ru.CM_VISIT_PUB_SITE_HINT=Посетить WEB сайт издателя
ru.CM_VISIT_GAME_SITE=WEB сайт игры
ru.CM_VISIT_GAME_SITE_HINT=Посетить WEB сайт игры
ru.CM_VISIT_REG_SITE=Регистрация игры
ru.CM_VISIT_REG_SITE_HINT=Зарегистрировать игру в интернете
ru.CM_ONLINE_RESOURCES=Онлайн ресурсы
ru.CM_COLLECT_INFO=Идет сбор данных о конфигурации компьютера
ru.CM_LOW_HARDWARE=Производительности вашей системы недостаточно для запуска игры
ru.CM_ASK_CONTIUNUE=Продолжить установку?
ru.CM_ASK_REGISTER=Зарегистрировать игру online?
ru.CM_REGISTER_ADVANTAGES=Только зарегистрированным пользователям доступен сайт технической поддержки и эксклюзивный контент.
ru.CM_SPECIAL_CODE=Если у вас есть специальный "бонусный" код, введите его для установки дополнительного контента
ru.CM_UNLOCK_CODE=Код разблокировки
ru.CM_BONUS_PACK=Бонусный материал
ru.CM_EXTRA_CONTENT=Дополнительный контент
ru.CM_INVALID_CODE=Неверный код разблокировки
ru.CM_UPDATE_DIRECT=Обновить DirectX
ru.CM_ADDITIONAL_TASKS=Системные задачи:
ru.CM_DELETE_SAVED_GAMES=Удалить сохраненные игры и профили?
ru.CM_README_HINT=Просмотреть ReadMe
ru.CM_USER_MANUAL=Руководство пользователя
ru.CM_USER_MANUAL_HINT=Просмотреть руководство пользователя
ru.CM_HARDWARE_INFO=Аппаратное обеспечение
ru.CM_HARDWARE_INFO_HINT=Программа установки обнаружила следующие необходимые компоненты
ru.CM_HW_PROCESSOR=Процессор
ru.CM_HW_VIDEO_CARD=Видеоадаптер
ru.CM_HW_SOUND_CARD=Звуковая карта
ru.CM_HW_PHYS_RAM=Память
ru.CM_HW_VIRT_RAM=Файл подкачки
ru.CM_HARDWARE_COMMENT_RED=Компоненты, выделенные красным, не удовлетворяют требованиям игры. Проверьте соответствие системным требованиям.
ru.CM_HARDWARE_COMMENT_GOOD=Все компоненты удовлетворяют требованиям игры.
ru.CM_SETUP_LOCATION=Выберите пользователя
ru.CM_SETUP_LOCATION_HINT=Игра может быть установлена как для текущего так и для всех пользователей системы
ru.CM_4CURRENT_USER=Для текущего пользователя
ru.CM_4ALL_USERS=Для всех пользователей
ru.CM_DRIVES_LIST=Список жестких дисков и свободного места
ru.CM_CD_KEY_DESC=Для игры в S.T.A.L.K.E.R. по сети Интернет, пожалуйста, введите желаемое имя пользователя и соответствующий ключ, указанный на коробке.
ru.CM_CD_KEY=Ключ
ru.CM_REGISTER_TITLE=Регистрация игры
ru.CM_REGISTER_DESC=Зарегистрировать вашу копию игры S.T.A.L.K.E.R.?
ru.CM_REGISTER_GOODS=Только зарегистрированным пользователям доступен сайт технической поддержки и эксклюзивный контент.
ru.CM_REGISTER_ASK=Да, зарегистрировать игру.
ru.CM_UPDATE_TITLE=Обновление до версии %1
ru.CM_GAME_NOT_FOUND=Программа обновления не смогла найти игру.%n%nОбновление невозможно без установленной игры.
ru.CM_UPDATE_FROM_TO=Программа произведет обновление с версии %1 до версии %2.
ru.CM_NOT_NEEDED=Обновление не требуется.
ru.CM_ALREADY_UPDATED=У Вас уже установлено обновление версии %1, которое включает в себя все предыдущие обновления.
ru.CM_ASK_UPDATE=Установить обновление?
ru.CM_UPDATE=Обновление
ru.CM_PLEASE_WAIT=Подождите пожалуйста...
ru.CM_CHECKING_CHECKSUMS=Сравнение контрольных сумм файлов...
ru.CM_WRONG_CHECKSUM=Контрольная сумма для файла %1 не совпадает с эталонной.%n%nВозможно файл не является оригинальным или поврежден.%n%nРекомендуеться переустановить игру с оригинального носителя.
ru.CM_PATCHING=Обновление файлов
ru.CM_PATCH_ERROR=Произошла ошибка обновления файла %1.%n%nПопробуйте отключить антивирусные программы и запустить обновление снова.
ru.CM_CANT_CONTINUE=Продолжение установки обновления невозможно.
ru.CM_BAD_VERSION=Обнаружена установленная версия %1.%n%nЭтот пакет обновлений предназначен только для обновления версии %2.
ru.CM_US_SKU=Unites States
ru.CM_WW_SKU=World Wide
ru.CM_DD_SKU=Digital Distribution
ru.CM_RU_SKU=Russia and CIS
ru.CM_HW_OS=ОС
ru.CM_HW_OLD_OS=Устаревшая операционная система
ru.CM_HW_DEP_OS=Неподдерживаемая операционная система
ru.CM_HARDWARE_SURVEY=Разрешить отправить эту информацию для участия в онлайн-анкетировании
ru.CM_USER_NICK=Введите желаемое имя игрока
ru.CM_SAVED_GAME=Сохранённая игра S.T.A.L.K.E.R.: Зов Припяти
ru.CM_PLAY_SAVED=Загрузить
ru.CM_PREV_NOT_FOUND=Для установки S.T.A.L.K.E.R.: Зов Припяти необходима версия игры S.T.A.L.K.E.R. или S.T.A.L.K.E.R.: Чистое Небо.%n%nПрограмма установки не нашла указанных версий на Вашем компьютере.
ru.CM_INSTALL_COMRADE=Установить GameSpy Comrade

[Languages]
; These files are stubs
; To achieve better results after recompilation, use the real language files
Name: "ru"; MessagesFile: "embedded\ru.isl"; LicenseFile: "embedded\ruLicense.txt"; InfoAfterFile: "embedded\ruInfoAfter.txt";

Gnom_aka_Lexander 13-01-2011 12:02 1587625

SCOOTERTECHNO, убирай такие портянки под [_more][/more] без "_"

SCOOTERTECHNO 13-01-2011 12:04 1587627

Лександер, я тебя не понял. :drug: Поконкретнее. Ты сможешь подготовить этот скрипт ли нет?

Gnom_aka_Lexander 13-01-2011 12:12 1587633

SCOOTERTECHNO, вечером сделаю.

SteamShip 13-01-2011 12:15 1587636

Вложений: 1
Помогите пожалуйста в этом скрипте сделать страницу выбора папки в меню пуск и страницу выбора задач

SCOOTERTECHNO 13-01-2011 12:23 1587643

Лександер, хорошо спасибо. Надеяться не буду :drug: "Оставь надежду всяк сюда входящий" Удачи.

Gnom_aka_Lexander 13-01-2011 12:51 1587662

Цитата:

Цитата SCOOTERTECHNO
Оставь надежду всяк сюда входящий »

Нельзя так говорить :)
Держи
читать дальше »

;InnoSetupVersion=5.3.3

[Setup]
AppName=S.T.A.L.K.E.R. - Зов Припяти
AppVerName=S.T.A.L.K.E.R. - Зов Припяти [v1.6.00]
AppVersion=1.6.00
DefaultDirName={pf}\GSC World Publishing\S.T.A.L.K.E.R. - Зов Припяти
DefaultGroupName=GSC World Publishing\S.T.A.L.K.E.R. - Зов Припяти
OutputBaseFilename=setup
Compression=lzma/Ultra
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
SolidCompression=true
InternalCompressLevel=Ultra
DiskSpanning=true
DiskSliceSize=1566000000
SlicesPerDisk=3
ShowLanguageDialog=auto
LanguageDetectionMethod=locale
ShowUndisplayableLanguages=true

[Files]
Source: {app}\*; DestDir: {app}\; Flags: ignoreversion recursesubdirs createallsubdirs;

[Registry]
Root: HKLM; Subkey: Software\GSC Game World; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: Software\GSC Game World\STALKER-COP; Flags: uninsdeletekey
Root: HKLM; Subkey: Software\GSC Game World\STALKER-COP; ValueName: InstallPath; ValueType: String; ValueData: {app}
Root: HKLM; Subkey: Software\GSC Game World\STALKER-COP; ValueName: InstallLang; ValueType: String; ValueData: {language}
Root: HKLM; Subkey: Software\GSC Game World\STALKER-COP; ValueName: InstallSource; ValueType: String; ValueData: stkcop-sj-rus-pack-r
Root: HKLM; Subkey: Software\GSC Game World\STALKER-COP; ValueName: InstallVers; ValueType: String; ValueData: 1.6.00
Root: HKLM; Subkey: Software\GSC Game World\STALKER-COP; ValueName: InstallCDKEY; ValueType: String
Root: HKLM; Subkey: Software\GSC Game World\STALKER-COP; ValueName: InstallUserName; ValueType: String
Root: HKLM; Subkey: Software\GSC Game World\STALKER-COP; ValueName: UnInstConfirm; ValueType: String; ValueData: {cm:CM_DELETE_SAVED_GAMES}
Root: HKLM; Subkey: Software\GSC Game World\STALKER-COP; ValueName: InstallPatchID; ValueType: Dword; ValueData: $2EDA
Root: HKCU; Subkey: Software\GSC Game World\STALKER-COP\Keys; Flags: uninsdeletekey
Root: HKCR; Subkey: .scop; Flags: uninsdeletekey
Root: HKCR; Subkey: .scop; ValueType: String; ValueData: STALKER-COP.SAVED.GAME
Root: HKCR; Subkey: STALKER-COP.SAVED.GAME; Flags: uninsdeletekey
Root: HKCR; Subkey: STALKER-COP.SAVED.GAME; ValueType: String; ValueData: {cm:CM_SAVED_GAME}
Root: HKCR; Subkey: STALKER-COP.SAVED.GAME\DefaultIcon; ValueType: String; ValueData: {app}\stalker_cop_save.ico,0
Root: HKCR; Subkey: STALKER-COP.SAVED.GAME\shell; ValueType: String; ValueData: Play
Root: HKCR; Subkey: STALKER-COP.SAVED.GAME\shell\Play; ValueType: String; ValueData: {cm:CM_PLAY_SAVED}
Root: HKCR; Subkey: STALKER-COP.SAVED.GAME\shell\Play\command; ValueType: String; ValueData: "{app}\Stalker-COP.exe ""%1"""

[INI]
FileName: {app}\publisher.url; Section: InternetShortcut; Key: URL; String: http://www.gsc-game.ru/
FileName: {app}\gamesite.url; Section: InternetShortcut; Key: URL; String: http://cop.stalker-game.ru/

[Languages]
Name: ru; MessagesFile: compiler:\Languages\Russian.isl; LicenseFile: embedded\ruLicense.txt; InfoAfterFile: embedded\ruInfoAfter.txt

[CustomMessages]
ru.NameAndVersion=%1, версия %2
ru.AdditionalIcons=Дополнительные значки:
ru.CreateDesktopIcon=Создать значок на &Рабочем столе
ru.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
ru.ProgramOnTheWeb=Сайт %1 в Интернете
ru.UninstallProgram=Деинсталлировать %1
ru.LaunchProgram=Запустить %1
ru.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
ru.AssocingFileExtension=Связывание %1 с файлами %2...
ru.NotFound=%1 не найдены
ru.ViewFile=Просмотреть %1
ru.CM_ALREADY_INSTALLED=Игра уже установлена.
ru.CM_YOUR_CHOICE=Вы хотите:
ru.CM_LAUNCH_NOW=Запустить игру
ru.CM_DELETE_NOW=Удалить игру
ru.CM_DELETE_SAVES=Удалить сохраненные игры?
ru.CM_INSTALL_ACROREADER=Установить Adobe Acrobat Reader
ru.CM_INSTALL_DIRECTX=Установить обновленную версию Microsoft DirectX
ru.CM_TECHSUPPORT_REQUEST=Обращение в техподдержку
ru.CM_TECHSUPPORT_REQUEST_HINT=Создать файл отчета конфигурации компьютера
ru.CM_VISIT_DEV_SITE=WEB сайт разработчиков
ru.CM_VISIT_DEV_SITE_HINT=Посетить WEB сайт разработчиков
ru.CM_VISIT_PUB_SITE=WEB сайт издателя
ru.CM_VISIT_PUB_SITE_HINT=Посетить WEB сайт издателя
ru.CM_VISIT_GAME_SITE=WEB сайт игры
ru.CM_VISIT_GAME_SITE_HINT=Посетить WEB сайт игры
ru.CM_VISIT_REG_SITE=Регистрация игры
ru.CM_VISIT_REG_SITE_HINT=Зарегистрировать игру в интернете
ru.CM_ONLINE_RESOURCES=Онлайн ресурсы
ru.CM_COLLECT_INFO=Идет сбор данных о конфигурации компьютера
ru.CM_LOW_HARDWARE=Производительности вашей системы недостаточно для запуска игры
ru.CM_ASK_CONTIUNUE=Продолжить установку?
ru.CM_ASK_REGISTER=Зарегистрировать игру online?
ru.CM_REGISTER_ADVANTAGES=Только зарегистрированным пользователям доступен сайт технической поддержки и эксклюзивный контент.
ru.CM_SPECIAL_CODE=Если у вас есть специальный "бонусный" код, введите его для установки дополнительного контента
ru.CM_UNLOCK_CODE=Код разблокировки
ru.CM_BONUS_PACK=Бонусный материал
ru.CM_EXTRA_CONTENT=Дополнительный контент
ru.CM_INVALID_CODE=Неверный код разблокировки
ru.CM_UPDATE_DIRECT=Обновить DirectX
ru.CM_ADDITIONAL_TASKS=Системные задачи:
ru.CM_DELETE_SAVED_GAMES=Удалить сохраненные игры и профили?
ru.CM_README_HINT=Просмотреть ReadMe
ru.CM_USER_MANUAL=Руководство пользователя
ru.CM_USER_MANUAL_HINT=Просмотреть руководство пользователя
ru.CM_HARDWARE_INFO=Аппаратное обеспечение
ru.CM_HARDWARE_INFO_HINT=Программа установки обнаружила следующие необходимые компоненты
ru.CM_HW_PROCESSOR=Процессор
ru.CM_HW_VIDEO_CARD=Видеоадаптер
ru.CM_HW_SOUND_CARD=Звуковая карта
ru.CM_HW_PHYS_RAM=Память
ru.CM_HW_VIRT_RAM=Файл подкачки
ru.CM_HARDWARE_COMMENT_RED=Компоненты, выделенные красным, не удовлетворяют требованиям игры. Проверьте соответствие системным требованиям.
ru.CM_HARDWARE_COMMENT_GOOD=Все компоненты удовлетворяют требованиям игры.
ru.CM_SETUP_LOCATION=Выберите пользователя
ru.CM_SETUP_LOCATION_HINT=Игра может быть установлена как для текущего так и для всех пользователей системы
ru.CM_4CURRENT_USER=Для текущего пользователя
ru.CM_4ALL_USERS=Для всех пользователей
ru.CM_DRIVES_LIST=Список жестких дисков и свободного места
ru.CM_CD_KEY_DESC=Для игры в S.T.A.L.K.E.R. по сети Интернет, пожалуйста, введите желаемое имя пользователя и соответствующий ключ, указанный на коробке.
ru.CM_CD_KEY=Ключ
ru.CM_REGISTER_TITLE=Регистрация игры
ru.CM_REGISTER_DESC=Зарегистрировать вашу копию игры S.T.A.L.K.E.R.?
ru.CM_REGISTER_GOODS=Только зарегистрированным пользователям доступен сайт технической поддержки и эксклюзивный контент.
ru.CM_REGISTER_ASK=Да, зарегистрировать игру.
ru.CM_UPDATE_TITLE=Обновление до версии %1
ru.CM_GAME_NOT_FOUND=Программа обновления не смогла найти игру.%n%nОбновление невозможно без установленной игры.
ru.CM_UPDATE_FROM_TO=Программа произведет обновление с версии %1 до версии %2.
ru.CM_NOT_NEEDED=Обновление не требуется.
ru.CM_ALREADY_UPDATED=У Вас уже установлено обновление версии %1, которое включает в себя все предыдущие обновления.
ru.CM_ASK_UPDATE=Установить обновление?
ru.CM_UPDATE=Обновление
ru.CM_PLEASE_WAIT=Подождите пожалуйста...
ru.CM_CHECKING_CHECKSUMS=Сравнение контрольных сумм файлов...
ru.CM_WRONG_CHECKSUM=Контрольная сумма для файла %1 не совпадает с эталонной.%n%nВозможно файл не является оригинальным или поврежден.%n%nРекомендуеться переустановить игру с оригинального носителя.
ru.CM_PATCHING=Обновление файлов
ru.CM_PATCH_ERROR=Произошла ошибка обновления файла %1.%n%nПопробуйте отключить антивирусные программы и запустить обновление снова.
ru.CM_CANT_CONTINUE=Продолжение установки обновления невозможно.
ru.CM_BAD_VERSION=Обнаружена установленная версия %1.%n%nЭтот пакет обновлений предназначен только для обновления версии %2.
ru.CM_US_SKU=Unites States
ru.CM_WW_SKU=World Wide
ru.CM_DD_SKU=Digital Distribution
ru.CM_RU_SKU=Russia and CIS
ru.CM_HW_OS=ОС
ru.CM_HW_OLD_OS=Устаревшая операционная система
ru.CM_HW_DEP_OS=Неподдерживаемая операционная система
ru.CM_HARDWARE_SURVEY=Разрешить отправить эту информацию для участия в онлайн-анкетировании
ru.CM_USER_NICK=Введите желаемое имя игрока
ru.CM_SAVED_GAME=Сохранённая игра S.T.A.L.K.E.R.: Зов Припяти
ru.CM_PLAY_SAVED=Загрузить
ru.CM_PREV_NOT_FOUND=Для установки S.T.A.L.K.E.R.: Зов Припяти необходима версия игры S.T.A.L.K.E.R. или S.T.A.L.K.E.R.: Чистое Небо.%n%nПрограмма установки не нашла указанных версий на Вашем компьютере.
ru.CM_INSTALL_COMRADE=Установить GameSpy Comrade

[Run]
Filename: {app}\Stalker-COP.exe; WorkingDir: {app}; Description: &{cm:LaunchProgram,S.T.A.L.K.E.R. - Зов Припяти}; Flags: postinstall

[Icons]
Name: {group}\S.T.A.L.K.E.R. - Зов Припяти; Filename: {app}\Stalker-COP.exe; WorkingDir: {app}; IconFilename: {app}\stalker_cop.ico; Comment: {cm:CM_LAUNCH_NOW}
Name: {group}\{cm:CM_VISIT_GAME_SITE}; Filename: {app}\gamesite.url; Comment: {cm:CM_VISIT_GAME_SITE_HINT}
Name: {group}\{cm:CM_VISIT_PUB_SITE}; Filename: {app}\publisher.url; Comment: {cm:CM_VISIT_PUB_SITE_HINT}
Name: {group}\{cm:ViewFile,ReadMe.txt}; Filename: {app}\ReadMe.txt; Comment: {cm:CM_README_HINT}
Name: {group}\{cm:CM_USER_MANUAL}; Filename: {app}\STALKER-COP.pdf; Comment: {cm:CM_USER_MANUAL_HINT}
Name: {group}\{cm:UninstallProgram,S.T.A.L.K.E.R. - Зов Припяти}; Filename: {uninstallexe}; IconFilename: {app}\uninstall.ico; Comment: {cm:CM_DELETE_NOW}
Name: {commondesktop}\S.T.A.L.K.E.R. - Зов Припяти; Filename: {app}\Stalker-COP.exe; WorkingDir: {app}; IconFilename: {app}\stalker_cop.ico; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\S.T.A.L.K.E.R. - Зов Припяти; Filename: {app}\Stalker-COP.exe; WorkingDir: {app}; IconFilename: {app}\stalker_cop.ico; Tasks: quicklaunchicon

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}
Name: directx; Description: {cm:CM_UPDATE_DIRECT}; GroupDescription: {cm:CM_ADDITIONAL_TASKS}
Name: comrade; Description: {cm:CM_INSTALL_COMRADE}; GroupDescription: {cm:CM_ADDITIONAL_TASKS}
Name: adobe; Description: {cm:CM_INSTALL_ACROREADER}; GroupDescription: {cm:CM_ADDITIONAL_TASKS}

У меня работает, если нужно, то могу еще страницу системных требований встроить.

SCOOTERTECHNO 13-01-2011 12:58 1587666

Лександер, спасибо, сейчас попробую. Ты имеешь ввиду страницу системных требований отображающееся на этом окне?


Gnom_aka_Lexander 13-01-2011 12:59 1587667

SCOOTERTECHNO, Именно. Нужно?

SCOOTERTECHNO 13-01-2011 13:02 1587669

Лександер, Давай если не трудно :)

SteamShip 13-01-2011 13:06 1587671

Системные требования:
читать дальше »

[code]
type
PDisplay_Device = record
cb: DWord;
DeviceName: array [0..31] of char;
DeviceString: array [0..127] of char;
StateFlags: DWord;
DeviceID, DeviceKey: array [0..127] of char;
end;

TMixerCaps = record
vPid, vDriverVersion: DWord;
sName: array [0..31] of char;
Support, cDestinations: DWord;
end;

// Проверка версии Windows
#if Pos("4.", GetFileVersion(AddBackslash(GetEnv("windir")) + "Explorer.exe")) == 1
{Win9x}
TMemoryStatusEx = record
dwLength, dwMemoryLoad: DWord;
LoTotalPhys, LoAvailPhys, LoTotalPageFile, LoAvailPageFile,
LoTotalVirtual, LoAvailVirtual, LoAvailExtendedVirtual, HiTotalPhys,
HiAvailPhys, HiTotalPageFile, HiAvailPageFile, HiTotalVirtual, HiAvailVirtual,
HiAvailExtendedVirtual: Integer;
end;
function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
external 'GlobalMemoryStatus@kernel32.dll stdcall';
#else
{WinNT}
TMemoryStatusEx = record
dwLength, dwMemoryLoad: DWord;
LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,
LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,
LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,
HiAvailExtendedVirtual: Integer;
end;
function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
#endif

const
DISPLAY_DEVICE_PRIMARY_DEVICE = 4;
oneMB = 1024*1024;
NeedMHz = 1800;
NeedVideoRAM = 128;
NeedSoundCard = 'Creative X-Fi';
NeedMB = 512;
NeedPageFile = 1024;

var
InfoPage: TWizardPage;
TopText, BottomText: TNewStaticText;
ChangeText: Boolean;
SystemPanel, ProcessorPanel, VideoPanel,
AudioPanel, RAMPanel, PageFilePanel: TMemo;
SystemVersionPanel, ProcessorMHzPanel, VideoRAMPanel,
AudioNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
lpCaps: TMixerCaps;
Version: TWindowsVersion;
MemoryEx: TMemoryStatusEx;
n, errCode: Integer;
Keys: TArrayOfString;
DeviceValue: Cardinal;
lpDisplayDevice: PDisplay_Device;

function GetSystemMetrics(nIndex: Integer): Integer;
external 'GetSystemMetrics@user32.dll stdcall';

function GetDeviceCaps(hDC, nIndex: Integer): Integer;
external 'GetDeviceCaps@GDI32 stdcall';

function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer;
external 'CreateDCA@GDI32 stdcall';

function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean;
external 'EnumDisplayDevicesA@user32.dll stdcall';

function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TMixerCaps; uSize: LongInt): LongInt;
external 'mixerGetDevCapsA@winmm.dll stdcall';

function mixerGetNumDevs: Integer;
external 'mixerGetNumDevs@winmm.dll stdcall';

// Дополнить число до кратного Multiple
function ToMultiple(Bytes, Multiple: Integer): Integer;
begin
if Abs(Bytes/Multiple) > Bytes/Multiple then
Result := (Bytes/Multiple + 1)*Multiple
else
Result := Bytes
end;

// Перевод числа в значение Бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)
function ByteOrTB(Bytes: Extended; noMB: Boolean): String;
begin
if not noMB then
Result := FloatToStr(Int(Bytes)) + ' Мб'
else
if Bytes < 1024 then
Result := FloatToStr(Int(Bytes)) + ' Бт'
else
if Bytes/1024 < 1024 then
Result := FloatToStr(round((Bytes/1024)*10)/10) + ' Кб'
else
if Bytes/oneMB < 1024 then
Result := FloatToStr(round(Bytes/oneMB*100)/100) + ' Мб'
else
if Bytes/oneMB/1000 < 1024 then
Result := FloatToStr(round(Bytes/oneMB/1024*1000)/1000) + ' Гб'
else
Result := FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) + ' Тб'
StringChange(Result, ',', '.')
end;

// Удаление начальных, конечных и повторных пробелов
function DelSp(String: String): String;
begin
while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1)
Result := Trim(String)
end;

function Size64(Hi, Lo: Integer): Extended;
begin
Result := Lo
if Lo < 0 then
Result := Result + $7FFFFFFF + $7FFFFFFF + 2
for Hi := Hi-1 downto 0 do Result := Result + $7FFFFFFF + $7FFFFFFF + 2
end;

function CheckCPU(NeedMHz: Integer): Boolean;
var
String: String;
begin
String := 'Hardware\Description\System\CentralProcessor'; RegGetSubkeyNames(HKLM, String, Keys) // Количество ядер
for n := 0 to GetArrayLength(Keys)-1 do
RegQueryStringValue(HKLM, String + '\' + Keys[n], 'ProcessorNameString', Keys[n])
if not RegQueryDWordValue(HKLM, String + '\0', '~MHz', DeviceValue) or (DeviceValue < NeedMHz) then
Exit
else
Result := True
end;

function CheckMemorySize(NeedRAM: Integer): Boolean;
begin
MemoryEx.dwLength := SizeOf(MemoryEx)
if not GlobalMemoryStatusEx(MemoryEx) then
MsgBox('Ошибка функции:' + #13 + 'GlobalMemoryStatusEx', mbError, mb_Ok)
else
if (ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) < NeedRAM) then
Exit
else
Result := True
end;

procedure CreateCheckForm();
begin

TopText := TNewStaticText.Create(InfoPage)
with TopText do
begin
Parent := InfoPage.Surface
Left := 0
AutoSize := True
end

BottomText := TNewStaticText.Create(InfoPage)
with BottomText do
begin
Parent := InfoPage.Surface
Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».'
Font.Color := clBlack
Left := 0
Top := 200
AutoSize := True
end

SystemPanel := TMemo.Create(InfoPage)
with SystemPanel do
begin
Text := 'Система'
Alignment := taCenter
Parent := InfoPage.Surface
Left := ScaleX(0)
Top := ScaleY(33)
Width := ScaleX(100)
Height := ScaleY(22)
ReadOnly := True
Color := $EEEEEE
end

SystemVersionPanel := TMemo.Create(InfoPage)
with SystemVersionPanel do
begin
Alignment := taLeftJustify
Parent := InfoPage.Surface
Left := ScaleX(104)
Top := SystemPanel.Top
Width := ScaleX(310)
Height := ScaleY(22)
ReadOnly := True
end

ProcessorPanel := TMemo.Create(InfoPage)
with ProcessorPanel do
begin
Text := 'Процессор'
Alignment := taCenter
Parent := InfoPage.Surface
Left := ScaleX(0)
Top := SystemPanel.Top + 27
Width := ScaleX(100)
Height := ScaleY(22)
ReadOnly := True
Color := $EEEEEE
end

ProcessorMHzPanel := TMemo.Create(InfoPage)
with ProcessorMHzPanel do
begin
Alignment := taLeftJustify
Parent := InfoPage.Surface
Left := ScaleX(104)
Top := ProcessorPanel.Top
Width := ScaleX(310)
Height := ScaleY(22)
ReadOnly := True
end

VideoPanel := TMemo.Create(InfoPage)
with VideoPanel do
begin
Text := 'Видеоадаптер'
Alignment := taCenter
Parent := InfoPage.Surface
Left := ScaleX(0)
Top := ProcessorPanel.Top + 27
Width := ScaleX(100)
Height := ScaleY(22)
ReadOnly := True
Color := $EEEEEE
end

VideoRAMPanel := TMemo.Create(InfoPage)
with VideoRAMPanel do
begin
Alignment := taLeftJustify
Parent := InfoPage.Surface
Left := ScaleX(104)
Top := VideoPanel.Top
Width := ScaleX(310)
Height := ScaleY(22)
ReadOnly := True
end

AudioPanel := TMemo.Create(InfoPage)
with AudioPanel do
begin
Text := 'Звуковая карта'
Alignment := taCenter
Parent := InfoPage.Surface
Left := ScaleX(0)
Top := VideoPanel.Top + 27
Width := ScaleX(100)
Height := ScaleY(22)
ReadOnly := True
Color := $EEEEEE
end

AudioNamePanel := TMemo.Create(InfoPage)
with AudioNamePanel do
begin
Alignment := taLeftJustify
Parent := InfoPage.Surface
Left := ScaleX(104)
Top := AudioPanel.Top
Width := ScaleX(310)
Height := ScaleY(22)
ReadOnly := True
end

RAMPanel := TMemo.Create(InfoPage)
with RAMPanel do
begin
Text := 'Объём памяти'
Alignment := taCenter
Parent := InfoPage.Surface
Left := ScaleX(0)
Top := AudioPanel.Top + 27
Width := ScaleX(100)
Height := ScaleY(22)
ReadOnly := True
Color := $EEEEEE
end

RAMTotalPanel := TMemo.Create(InfoPage)
with RAMTotalPanel do
begin
Alignment := taLeftJustify
Parent := InfoPage.Surface
Left := ScaleX(104)
Top := RAMPanel.Top
Width := ScaleX(310)
Height := ScaleY(22)
ReadOnly := True
end

PageFilePanel := TMemo.Create(InfoPage)
with PageFilePanel do
begin
Text := 'Файл подкачки'
Alignment := taCenter
Parent := InfoPage.Surface
Left := ScaleX(0)
Top := RAMPanel.Top + 27
Width := ScaleX(100)
Height := ScaleY(22)
ReadOnly := True
Color := $EEEEEE
end;

PageFileTotalPanel := TMemo.Create(InfoPage)
with PageFileTotalPanel do
begin
Alignment := taLeftJustify
Parent := InfoPage.Surface
Left := ScaleX(104)
Top := PageFilePanel.Top
Width := ScaleX(310)
Height := ScaleY(22)
ReadOnly := True
end

end;

procedure UpdateInfo();
var
DeviceName, DeviceKey: String;
begin
ChangeText := False

GetWindowsVersionEx(Version)

// Операционная система:
SystemVersionPanel.Color := $CCFFCC

DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'
if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')
RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)
if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then
DeviceName := DeviceName + ' ' + DeviceKey
StringChange(DeviceName, 'Microsoft ', '')
SystemVersionPanel.Text := ' ' + DeviceName + ' сборка ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +
'.' + IntToStr(Version.Build)

if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and // Windows 2000 SP4
(Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and // Windows XP SP2
(Pos('Vista', SystemVersionPanel.Text) = 0) and // Windows Vista (c любым SP или без него)
(Pos('Windows 7', SystemVersionPanel.Text) = 0) then
begin
SystemVersionPanel.Color := $CCCCFF
ChangeText := True
end

// Процессор:
ProcessorMHzPanel.Color := $CCFFCC

if not CheckCPU(NeedMHz) then
begin
ProcessorMHzPanel.Color := $CCCCFF
ChangeText := True
end

ProcessorMHzPanel.Text := ' ' + DelSp(Keys[0]) + ' @' + IntToStr(DeviceValue) + ' MHz'
if GetArrayLength(Keys) > 1 then
ProcessorPanel.Text := 'Процессоры' // + ' (' + IntToStr(GetArrayLength(Keys)) + ')'

// Видеокарта:
VideoRAMPanel.Color := $CCFFCC

lpDisplayDevice.cb := SizeOf(lpDisplayDevice)
DeviceKey := ''
n := 0
while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and
(lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n := n + 1
for n := 0 to 127 do DeviceKey := DeviceKey + lpDisplayDevice.DeviceKey[n]
Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127) // Ключ драйвера получаем из API
StringChange(DeviceKey, '\Registry\Machine\', '')
errCode := 1
DeviceValue := 0
if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName) then
for n := 1 to Length(DeviceName) do
begin
DeviceValue := DeviceValue + Ord(DeviceName[n])*errCode
errCode := errCode*$100
end
else
if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then
else
RegQueryDWordValue(HKLM, DeviceKey + '\Info', 'VideoMemory', DeviceValue)
DeviceName := ''
for n := 0 to 127 do DeviceName := DeviceName + lpDisplayDevice.DeviceString[n]
Delete(DeviceName, Pos(Chr(0), DeviceName), 127)

if DeviceName <> '' then
if DeviceValue > 0 then
VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ', '+ ByteOrTB(DeviceValue/oneMB, False)
else
VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ' (Standard), '+ ByteOrTB(DeviceValue/oneMB, False)
else
begin
VideoRAMPanel.Text := ' Драйвер устройства не обнаружен'
VideoRAMPanel.Color := $CCCCFF
ChangeText := True
end
if (DeviceValue/oneMB < NeedVideoRAM) then
begin
VideoRAMPanel.Color := $CCCCFF
ChangeText := True
end
VideoRAMPanel.Text := VideoRAMPanel.Text + ', ' + IntToStr(GetSystemMetrics(0)) + 'x' +
IntToStr(GetSystemMetrics(1)) + ' (' + IntToStr(GetDeviceCaps(CreateDC('DISPLAY','','',0),14) *
GetDeviceCaps(CreateDC('DISPLAY','','',0),12)) + ' bit)'

// Звуковая карта:
AudioNamePanel.Color := $CCFFCC

// for errCode := 0 to 1 do // Вывод основного звукового устройства
for errCode := 0 to mixerGetNumDevs do
begin
mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps))
DeviceName := ' '
for n := 0 to 31 do DeviceName := DeviceName + lpCaps.sName[n]
Delete(DeviceName, Pos(Chr(0), DeviceName), 31)
Delete(DeviceName, Pos(' [', DeviceName), 31)
StringChange(DeviceName, 'SB ', 'Creative ')
Delete(DeviceName, Pos(' Audio', DeviceName), 31)
SetArrayLength(Keys, errCode)
if errCode > 0 then Keys[errCode-1] := DeviceName
end

if GetArrayLength(Keys) > 1 then
begin
AudioPanel.Text := 'Звуковые карты'
// AudioPanel.Text := 'Звуковые карты (' + IntToStr(GetArrayLength(Keys)) +')'
AudioNamePanel.Text := ''
for n := 1 to GetArrayLength(Keys) do
AudioNamePanel.Text := AudioNamePanel.Text + Keys[n-1] // + '(' + IntToStr(n) + ')'
end
else
if GetArrayLength(Keys) = 0 then
begin
AudioNamePanel.Text := ' Драйвер устройства не обнаружен'
AudioNamePanel.Color := $CCCCFF
ChangeText := True
end
else
AudioNamePanel.Text := Keys[0]
if Pos(NeedSoundCard, AudioNamePanel.Text) = 0 then
AudioNamePanel.Text := AudioNamePanel.Text + ' (рекомендуется ' + NeedSoundCard + ')'

// Объём памяти:
RAMTotalPanel.Color := $CCFFCC
if not CheckMemorySize(NeedMB) then
begin
RAMTotalPanel.Color := $CCCCFF
ChangeText := True
end
RAMTotalPanel.Text := ' ' + ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16), False) + ' всего, ' +
ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) -
Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' используется, ' +
ByteOrTB(Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' свободно'

// Виртуальная память:
PageFileTotalPanel.Color := $CCFFCC
PageFileTotalPanel.Text := ' ' + ByteOrTB(Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB, False) + ' всего, ' +
ByteOrTB((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
Size64(MemoryEx.HiAvailPageFile, MemoryEx.LoAvailPageFile))/oneMB, False) + ' занято системным кэшем'
if Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB < NeedPageFile then
begin
PageFileTotalPanel.Color := $CCCCFF
ChangeText := True
end

if ChangeText = True then
begin
TopText.Top := 0
TopText.Caption := 'Не все компоненты удовлетворяют минимальным требованиям игры.' #13
'Пожалуйста, проверьте позиции, выделенные красным цветом.'
TopText.Font.Color := clRed
// WizardForm.NextButton.Enabled := False
end
else
begin
TopText.Caption := 'Все компоненты соответствуют минимальным требованиям игры.'
TopText.Font.Color := clGreen
TopText.Top := 8
// WizardForm.NextButton.Enabled := True
end
end;

procedure InitializeWizard();
begin
InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
'Программа установки обнаружила следующие наобходимые компоненты.')
CreateCheckForm() // Создание объектов TMemo, в которых будет выводится информация о системе
UpdateInfo() // Обновление информации о системе
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = InfoPage.ID then UpdateInfo() // Обновление информации о системе
end;

SCOOTERTECHNO 13-01-2011 13:10 1587675

А как их в скрипт вписать?

Gnom_aka_Lexander 13-01-2011 13:19 1587680

SCOOTERTECHNO, Просто добавь весь текст внизу скрипта.

SCOOTERTECHNO 13-01-2011 13:21 1587684

Ясно спасибо, вам всем огромное Лександер, и SteamShip, Респект вам парни. Если будут ошибки отпишусь.

SCOOTERTECHNO 13-01-2011 14:55 1587751

Лександер, Скрипт работает, все в порядке, но при добавлении второго скрипта с системными требованиями выходит ошибка компиляции.

Окно ошибки:



Ошибка в скрипте:


Vitek 07 13-01-2011 15:12 1587763

SCOOTERTECHNO, поставь это в папку inno setup

SCOOTERTECHNO 13-01-2011 15:17 1587767

Цитата:

Цитата Vitek 07
SCOOTERTECHNO, поставь это в папку inno setup »

Поставил, теперь вообще не компилирует :read: :o :) :) :)

Окно ошибки:



Придется переустановить программу. :) Хотя файл ISCmplr.dll на месте.

actavir 13-01-2011 15:35 1587785

SteamShip, SCOOTERTECHNO, огромное вам спасибо я разобрался!!! :)

Gnom_aka_Lexander 13-01-2011 15:39 1587793

SCOOTERTECHNO, Поставь мою сборку и проблем не будет.

SCOOTERTECHNO 13-01-2011 15:58 1587808

Цитата:

Цитата Лександер
SCOOTERTECHNO, Поставь мою сборку и проблем не будет. »

Лександер, респект за сборку! Отличная работа! Компиляция пошла нормально. Ошибка компиляции системных требований исчезла! :)

А как можно реализовать в скрипт вот это:


Gnom_aka_Lexander 13-01-2011 16:03 1587809

SCOOTERTECHNO, Если действительно очень нужно, могу сделать и это, но оно очнь нужно? эти данные пишутся в реестр, и их можно заложить зарание.

SCOOTERTECHNO 13-01-2011 16:21 1587820

Цитата:

Цитата Лександер
SCOOTERTECHNO, Если действительно очень нужно, могу сделать и это, но оно очнь нужно? эти данные пишутся в реестр, и их можно заложить
зарание. »

Лександер, Сделай пожалуйста, если не трудно, меня еще интересует что нужно написать в скрипт чтобы на инсталяторе setup.exe была родная иконка.

Я наверно уже всех вас тут замучал своими проблемами :)

R.i.m.s.k.y. 13-01-2011 16:29 1587825

тут половина форума перепаковывает сталкера

SCOOTERTECHNO 13-01-2011 16:31 1587827

Цитата:

Цитата Лександер
А пароль потом сделаю, через пару часов, сейчас некогда. »

Лександер, хорошо, спасибо тебе! Я сделал репак сейчас буду тестировать. :)

Gnom_aka_Lexander 13-01-2011 16:50 1587842

R.i.m.s.k.y., Человеку хочется оригинальный инсталлятор :0 мож сделаеш страницу ввода пароля и имени юзера?

R.i.m.s.k.y. 13-01-2011 17:12 1587862

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

Gnom_aka_Lexander 13-01-2011 17:26 1587872

R.i.m.s.k.y., А запись в реестр из кода - не знаеш, а то у меня с нерусскими языками туго... страницу сделал, там аналогично с моим примером сложной работы с *.ini-файлами, только я использую команду на создание *.ini-файла, а тут создание записи в реестр.

R.i.m.s.k.y. 13-01-2011 17:29 1587875

Лександер,
Знаю, позже, пиши конкретней

Gnom_aka_Lexander 13-01-2011 17:44 1587887

R.i.m.s.k.y., Сейчас :)
читать дальше »
Код:

var
  ISCustomPage1: TWizardPage;
  key1: TNewEdit;
  key2: TNewEdit;
  key3: TNewEdit;
  key4: TNewEdit;
  user: TNewEdit;

procedure RedesignWizardForm;
begin
  { Creates custom wizard page }
  ISCustomPage1 := CreateCustomPage(wpInstalling, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

  { key1 }
  key1 := TNewEdit.Create(WizardForm);
  with key1 do
  begin
    Name := 'key1';
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(48);
    Top := ScaleY(136);
    Width := ScaleX(65);
    Height := ScaleY(21);
    Text := 'key';
  end;

  { key2 }
  key2 := TNewEdit.Create(WizardForm);
  with key2 do
  begin
    Name := 'key2';
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(136);
    Top := ScaleY(136);
    Width := ScaleX(65);
    Height := ScaleY(21);
    Text := 'key';
  end;

  { key3 }
  key3 := TNewEdit.Create(WizardForm);
  with key3 do
  begin
    Name := 'key3';
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(224);
    Top := ScaleY(136);
    Width := ScaleX(65);
    Height := ScaleY(21);
    Text := 'key';
  end;

  { key4 }
  key4 := TNewEdit.Create(WizardForm);
  with key4 do
  begin
    Name := 'key4';
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(312);
    Top := ScaleY(136);
    Width := ScaleX(65);
    Height := ScaleY(21);
    Text := 'key';
  end;

  { user }
  user := TNewEdit.Create(WizardForm);
  with user do
  begin
    Name := 'user';
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(48);
    Top := ScaleY(56);
    Width := ScaleX(329);
    Height := ScaleY(21);
    Text := 'user';
  end;

  key1.TabOrder := 0;
  key2.TabOrder := 1;
  key3.TabOrder := 2;
  key4.TabOrder := 3;
  user.TabOrder := 4;

end;


Нужно две записи в реестр делать:
Код:

Root: HKLM; Subkey: Software\GSC Game World\STALKER-COP; ValueName: InstallCDKEY; ValueType: string; ValueData: {тут примерно так:key1.Text+-+key2.Text+-+key3.Text+-+key4.Text}
Root: HKLM; Subkey: Software\GSC Game World\STALKER-COP; ValueName: InstallUserName; ValueType: string; ValueData: {тут user.Text}


SteamShip 13-01-2011 18:52 1587946

У меня много скриптов ввода имя пользователя и пароля завтра выложу

Gnom_aka_Lexander 13-01-2011 19:01 1587954

SteamShip, Где-ж ты был, целых полгода, когда я мучился с этим вопросом? :) Дай пример записи в реестр из кода.

R.i.m.s.k.y. 13-01-2011 19:19 1587967

Цитата:

Цитата Лександер
Нужно две записи в реестр делать »

var s: string;
....
s := {тут примерно так:key1.Text+-+key2.Text+-+key3.Text+-+key4.Text}
RegWriteStringValue(HKLM, 'Software\GSC Game World\STALKER-COP', 'InstallCDKEY', s);
RegWriteStringValue(HKLM, 'Software\GSC Game World\STALKER-COP', 'InstallUserName', user.Text);
RegWriteStringValue записывает переменную стринг в корень HKLM, подключ Software\GSC Game World\STALKER-COP, ключ InstallUserName, переменная стринг user.Text.

запись
function RegWriteStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteExpandStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; const Data: Cardinal): Boolean;
function RegWriteBinaryValue(const RootKey: Integer; const SubKeyName, ValueName: String; const Data: AnsiString): Boolean;

чтение
function RegQueryStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;
function RegQueryMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;
function RegQueryDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultDWord: Cardinal): Boolean;
function RegQueryBinaryValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: AnsiString): Boolean;

функции булевые, т.е. можно написать if RegWriteStringValue ... then если_записалось else не_записалось

Vitek 07 13-01-2011 19:20 1587969

Лександер, SteamShip, качайте Inno Mega 2. Там этих скриптов и примеров ну очень много. Каждый найдет для себя что-нибудь, обязательно.

Gnom_aka_Lexander 13-01-2011 19:26 1587976

Vitek 07, там ссылки нерабочие, к томуже, все эти примеры, и еще куча сверх того у меня есть, только этого нигде нету, редко у кого возникает продобная необходимость.

Gnom_aka_Lexander 13-01-2011 19:41 1587986

R.i.m.s.k.y., А есть возможность ограничить количество знаков здесь:
Код:

  key1 := TNewEdit.Create(WizardForm);
  with key1 do
  begin
    Name := 'key1';
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(48);
    Top := ScaleY(136);
    Width := ScaleX(65);
    Height := ScaleY(21);
    Text := 'key';{тут, вот}
  end;


SCOOTERTECHNO 13-01-2011 19:47 1587987

Лександер, Если это трудно найти, то не нужно,обойдусь без настроек сетевого профиля, вы и так мне достаточно помогли, огромная уважуха вам за это. :good:

serg aka lain 13-01-2011 19:49 1587988

Цитата:

Цитата Лександер
А есть возможность ограничить количество знаков здесь: »

В справку никто не смотрит чтоли?
Код:

property MaxLength: Integer; read write;

Gnom_aka_Lexander 13-01-2011 19:50 1587990

SCOOTERTECHNO, Почти :) еще чуток осталось.
serg aka lain, я понерусски не очень, а в русской мало чего есть..

SteamShip 13-01-2011 20:16 1588006

Запись в реестр серийного номера введенного в userinfoserial:
[setup]
userinfopage=true
(code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then
begin
RegWriteStringValue (HKLM, 'SOFTWARE\GSC\STALKER','Serial', Expand Constant
('{userinfoserial}'));
end;
end;
написал на скорую руку так что путь в реестре надо править

Vista-w 13-01-2011 20:39 1588026

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

В чем может быть проблема?

SCOOTERTECHNO 13-01-2011 21:10 1588056

Цитата:

Цитата Vista-w
В чем может быть проблема? »

Может вы не прописали в скрипт параметры юнисталера или что то в этом роде. Попробуйте удалить все записи игры из реестра ,а потом заново переустановите игру и снова попробовать удалить игру.

Gnom_aka_Lexander 13-01-2011 21:15 1588063

Вложений: 1
SCOOTERTECHNO,
Вот, твой скрипт :)
Только перед установкой, и ограничить количество знаков я так и не сообразил как :)

SCOOTERTECHNO 13-01-2011 21:21 1588069

Цитата:

Цитата Лександер
SCOOTERTECHNO,
Вот, твой скрипт »

Лександер, :yahoo: :yahoo: :) Круто!!!Огромное спасибо за труды!!!Вы настоящий праграммист, респект и уважуха! :good: :good: :good:

Gnom_aka_Lexander 13-01-2011 21:31 1588085

SCOOTERTECHNO, Отнюдь, я тоже еще только учусь, настоящий гуру добил-бы до конца :)

serg aka lain 13-01-2011 21:34 1588086

Цитата:

Цитата Лександер
ограничить количество знаков я так и не сообразил как »

Код:

  key1 := TNewEdit.Create(WizardForm);
  with key1 do
  begin
    Name := 'key1';
    Parent := ISCustomPage1.Surface;
    Left := ScaleX(48);
    Top := ScaleY(136);
    Width := ScaleX(65);
    Height := ScaleY(21);
    Text := '';
    MaxLength := 5;
  end;


Gnom_aka_Lexander 13-01-2011 21:35 1588087

serg aka lain, И больше нигде ничего не нужно дописать?

serg aka lain 13-01-2011 21:38 1588089

Цитата:

Цитата Лександер
И больше нигде ничего не нужно дописать? »

Во всех едитах, где нужно.

SCOOTERTECHNO 13-01-2011 21:45 1588094

Цитата:

Цитата serg aka lain
Код:
key1 := TNewEdit.Create(WizardForm);
with key1 do
begin
Name := 'key1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(48);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 5;
end; »

Я уже паковать игру начал :) Мне нужно поправить скрипт? :)

Gnom_aka_Lexander 13-01-2011 21:50 1588099

Подскажите, как сделать правильно?
Код:

[Run]
Filename: {app}\KB917607-x86.msu; WorkingDir: {app}; Parameters: " /passive /norestart"; Check: not IsWin64; Flags: waituntilterminated 32bit
Filename: {app}\KB917607-x64.msu; WorkingDir: {app}; Parameters: " /passive /norestart"; Check: IsWin64; Flags: waituntilterminated 64bit

Не работает на х64, хотя на системе х32, думаю, запустится... Ощибку выдает, чегото там не является приложением Win32...
SCOOTERTECHNO,
Цитата:

Мне нужно править скрипт?
Там не сложно, лучше поправить, только вроде не 5 а 4 значение.

SCOOTERTECHNO 13-01-2011 21:55 1588102

Цитата:

Цитата Лександер
Там не сложно, лучше поправить, только вроде не 5 а 4 значение. »

Ясно, сначало испытаю эту перепаковку а потом попробую поправить. :)

serg aka lain 13-01-2011 22:17 1588117

Цитата:

Цитата Лександер
Ощибку выдает, чегото там не является приложением Win32... »

Какой код возвращает (code: 193),
надо запускать встроенным установщиком обновлений wusa.exe
Код:

wusa <обновление> [/quiet] [/norestart]
Поробно, можно узнать, запустив в командной строке: wusa -> enter

R.i.m.s.k.y. 13-01-2011 23:06 1588152

Цитата:

Цитата Лександер
Ощибку выдает, чегото там не является приложением Win32 »

конечно, это не экзешник а пакет виндового инсталлера, запускать надо через wusa
И ключи ком.строки не те. Любая нормальная прога напишет про себя если запустить ее с ключом /? или -help или -h
Это пакеты для висты/семеры? тогда надо добавить MinVersion: 0, 6.0 (сработает для висты и семеры, версия семеры 6.1, свисты 6.0)

Попробуй так
[Run]
Filename: {sys}\wusa.exe; WorkingDir: {app}; Parameters: {app}\KB917607-x86.msu /quiet /norestart; Check: not IsWin64; Flags: waituntilterminated 32bit; MinVersion: 0, 6.0
Filename: {sys}\wusa.exe; WorkingDir: {app}; Parameters: {app}\KB917607-x64.msu /quiet /norestart; Check: IsWin64; Flags: waituntilterminated 64bit; MinVersion: 0, 6.0

Или можно попробовать c флагом shellexec
[Run]
Filename: {app}\KB917607-x86.msu; WorkingDir: {app}; Parameters: " /quiet /norestart"; Check: not IsWin64; Flags: waituntilterminated 32bit shellexec; MinVersion: 0, 6.0
Filename: {app}\KB917607-x64.msu; WorkingDir: {app}; Parameters: " /quiet /norestart"; Check: IsWin64; Flags: waituntilterminated 64bit shellexec; MinVersion: 0, 6.0

R.i.m.s.k.y. 13-01-2011 23:40 1588167

Народ вы перед компиляцией положите скрипт сюда в теги [ C ode] [/ C ode], краем уха гляну чего там.

Gnom_aka_Lexander 14-01-2011 10:15 1588392

R.i.m.s.k.y., По твоей-же просьбе делаю в своем пакете установку проги для чтения файлов *.hlp :)
serg aka lain, R.i.m.s.k.y., спасибо за помощь, заработало так:
Код:

[Run]
Filename: {sys}\wusa.exe; WorkingDir: {app}; Parameters: {app}\KB917607-x86.msu /quite /norestart; Check: not IsWin64; Flags: waituntilterminated; MinVersion: 0, 6.0
Filename: {sys}\wusa.exe; WorkingDir: {app}; Parameters: {app}\KB917607-x64.msu /quite /norestart; Check: IsWin64; Flags: waituntilterminated; MinVersion: 0, 6.0

Только я из папки темп запустил, поскольку эти пакеты потом уже не нужны :)

R.i.m.s.k.y. 14-01-2011 10:19 1588399

Цитата:

Цитата Лександер
R.i.m.s.k.y., По твоей-же просьбе делаю в своем пакете установку проги для чтения файлов *.hlp »

Это патчи для семеры, MinVersion: 0, 6.1

Но я пользуюсь своей функцией
Код:


Function isWin7():boolean;
var Version: TWindowsVersion;
begin
  GetWindowsVersionEx (Version);
  if (Version.Major = 6) and (Version.Minor = 1) then Result := true else Result := False;
end;

Попробуй так
[Run]
Filename: {sys}\wusa.exe; WorkingDir: {app}; Parameters: {app}\KB917607-x86.msu /quite /norestart; Check: ((not IsWin64) and isWin7); Flags: waituntilterminated 32bit;
Filename: {sys}\wusa.exe; WorkingDir: {app}; Parameters: {app}\KB917607-x64.msu /quite /norestart; Check: (IsWin64 and isWin7); Flags: waituntilterminated 64bit;

Или можно попробовать c флагом shellexec
[Run]
Filename: {app}\KB917607-x86.msu; WorkingDir: {app}; Parameters: " /quite /norestart"; Check: ((not IsWin64) and isWin7); Flags: waituntilterminated 32bit shellexec;
Filename: {app}\KB917607-x64.msu; WorkingDir: {app}; Parameters: " /quite /norestart"; Check: (IsWin64 and isWin7); Flags: waituntilterminated 64bit shellexec;


Gnom_aka_Lexander 14-01-2011 10:39 1588411

R.i.m.s.k.y., А что дает shellexec?
Кстати, только сейчас обнаружил, из командной строки команда такая:
Код:

start /wait wusa.exe %~dp0Update09\Windows6.1-KB917607-x86.msu /quiet /norestart

R.i.m.s.k.y. 14-01-2011 10:44 1588417

Цитата:

Цитата Лександер
А что дает shellexec »

запуск средствами оболочки, т.е прогой которая по умолчанию привязана к этому типа файлов, примеру хелпы запускаются так, и странички вебовские

Цитата:

Цитата Лександер
Кстати, только сейчас обнаружил, из командной строки команда такая:
Код:
start /wait wusa.exe %~dp0Update09\Windows6.1-KB917607-x86.msu /quiet /norestart »

те если файловые ассоциации не сбиты shellexec запускает start /wait wusa.exe %~dp0Update09\Windows6.1-KB917607-x86.msu /quiet /norestart

Vista-w 14-01-2011 13:27 1588595

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

В чем может быть проблема?

Gnom_aka_Lexander 14-01-2011 13:29 1588598

Vista-w, Скрипт где?

SteamShip 14-01-2011 13:37 1588607

Vista-w, выкладывай код здесь экстрасенсов нет

R.i.m.s.k.y. 14-01-2011 13:39 1588608

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

Gnom_aka_Lexander 14-01-2011 13:46 1588611

Не, на ру-борде правильно ответили, он упорно пакует старые unins000.exe и unins000.dat, отсюда эта ошибка.

R.i.m.s.k.y. 14-01-2011 13:49 1588612

Цитата:

Цитата Лександер
Не, на ру-борде правильно ответили, он упорно пакует старые unins000.exe и unins000.dat, отсюда эта ошибка »

Епт, я ж кажется ему писал удалить их оттудова, ну и ССЗБ.

Imitri7 14-01-2011 15:19 1588653

есть люди готовые бескорыстно помочь?

R.i.m.s.k.y. 14-01-2011 15:23 1588657

Цитата:

Цитата Imitri7
есть люди готовые бескорыстно помочь? »

А мы чем здесь занимаемся?

Imitri7 14-01-2011 15:26 1588659

у меня как бы вопросы не для публикации, есть кто готов помочь?

R.i.m.s.k.y. 14-01-2011 15:42 1588677

Цитата:

Цитата Imitri7
у меня как бы вопросы не для публикации »

а ты и задавай в отвлеченном виде. Какая хоть тематика?

Imitri7 15-01-2011 10:23 1589117

R.i.m.s.k.y., нужно посмотреть скрипт - такая фигня: у меня все компилиться, работает, а вот если я кому нибудь скину сетапник или скрипт то у них уже начинаются проблемы

Vista-w 15-01-2011 15:03 1589268

Дайте пожалуйста скрипт для распаковки 7z архивов, чтоб в после установки он удалился.

Vamp1re 15-01-2011 16:11 1589297

Как подключить модуль AutoRun.iss?

SteamShip 15-01-2011 17:41 1589339

Vamp1re, #include "Autorun.iss"

R.i.m.s.k.y. 15-01-2011 19:05 1589391

Лександер,
скачал твой инно ультра
пара замечаний:
1. в списке компонентов:
- старый добрый Istool - две точки на конце
- РКЕдатор скинов инсталляции
2. Не программа для просмотра HLP, а патч для семеры, там кстати делается проверка что запуск только на семерке? (Check: isWin7, код ее тут есть)
3. че-то ты намудрил с запуском патча для HLP, выскакивает окно помощи.
4. иконки в Пуск - помоЩник.
5. На интеловском SSD чето очень долго ставится, 2 минуты. У тебя SolidCompression чтоли?

русская мая радная языка, все татары кроме я ;)

Можно скрипт инно ультра глянуть?

А так отличный пак, спасибо.

Vamp1re 15-01-2011 19:25 1589405

SteamShip, я в курсе но ето не все! етот авторан от шаблона nfs undercover и там еще какието коды нужны

actavir 15-01-2011 20:36 1589459

Народ дайте кто-нибудь скрипт плиз чтобы после запуска установщика на определённое время выскакивала картинка, а потом по истечении определённого времени исчезала и запускался уже сам инсталятор????

Vitek 07 15-01-2011 20:49 1589466

actavir,
Код:


[Setup]
AppName=Splash
AppVerName=Splash
CreateAppDir=false
DisableDirPage=true
DisableProgramGroupPage=true
UninstallDisplayName=Splash

[Files]
Source: compiler:WizModernImage.bmp; DestDir: {tmp}; DestName: Splash.bmp; Flags: dontcopy

[)))))Code] ; скобки удалить
procedure InitializeWizard();
var
  SplashImage: TBitmapImage;
  SplashForm: TForm;
  SplashFileName: String;
  I: Integer;

begin

  SplashFileName := ExpandConstant('{tmp}\splash.bmp');
  ExtractTemporaryFile(ExtractFileName(SplashFileName));
  SplashForm := TForm.create(nil);
  with SplashForm do
  begin
    BorderStyle := bsNone;
    Position := poScreenCenter;//poDesigned poDefault poDefaultPosOnly poDefaultSizeOnly
    ClientWidth := 405;        // Минимальный размер 320х200 !
    ClientHeight := 310;
  end;
  SplashImage := TBitmapImage.Create(SplashForm);
  with SplashImage do
    begin
    Bitmap.LoadFromFile(SplashFileName);
    Stretch := false;
    Align := alClient;
    Parent := SplashForm;
    end;

  with SplashForm do
  begin
    Show;
    for I := 1 to 1 do
      begin
      Repaint;
      Sleep(1000); // показ изображения в милисекундах
      end;
//    Close;
//    Free;
  end;
end;


Gnom_aka_Lexander 15-01-2011 21:13 1589481

R.i.m.s.k.y., Спасибо, хоть ктото по делу скажет, а то полсотни человек скачало, и никто ни гугу, а окно помощи вылазит, если пач уже стоит, если не из инно запускать - то просто говорит, что обнова не требуется - тоже заморочка. И да, ставится только на семерку.
Скрипт в личку скину, выкладывать пока не буду, как доточу, приложу в примеры.
Vamp1re, Поиск рулит
Отдельно компилиш авторан, отдельно игру, если нужно, то прикрутить, думаю, подскажут. А так, кнопа запуска запускает файл setup.exe, рядом с автораном. Сделали по моей просьбе :)

potan 17-01-2011 12:48 1590575

Привет всем! У меня такая проблема: запускаю инсталлятор на английской windows, все надписи в окнах установщика отображаются нормально на русском языке, но вот сообщения, которые я вывожу с помощью msgbox отображаются кракозябрами. в скрите вроде бы всё, что нужно для русского языка прописал
Код:

[Languages]  Name: russian; MessagesFile: compiler:Languages\Russian.isl)
Подскажите как сделать, чтобы сообщения выводились на русском языке.

Gnom_aka_Lexander 17-01-2011 12:52 1590581

potan, Попробуй сообщения вписать в файлик Russian.isl и считывать их из него, гдето видел подобный совет.

Wilddeer 17-01-2011 15:26 1590725

Каким архиватором лучше всего сжимать чтобы весил мало?

И что это за метод precomp?

Gnom_aka_Lexander 17-01-2011 15:44 1590739

Wilddeer, Тут есть все, что тебе хочется знать :)
По прекомп вот:
читать дальше »

Precomp v0.4.1
--------------
1. Что такое Precomp?
2. Что такое Precomp Комфорт?
3. Типы файлов
4. Как его использовать
5. Вопросы и ответы
6. Контакты
7. Кредиты
8. Официальная часть

1. Что такое Precomp?
-------------------
Precomp является precompressor командной строки. Вы можете использовать его для достижения лучшего сжатия на некоторые типы файлов (работает на файлы, сжатые с ZLib или метод Deflate сжатия, а на GIF-файлы). Precomp пытается распаковать потоки в этих файлах, и если они могут быть распакованы и "Re-" сжатые так, что они бит-в-бит-совпадает с оригинальным поток, распаковать поток может быть использован вместо сжатого один.

Результат. PCF файл (PCF = PreCompressedFile), который содержит больше данных, чем распаковать исходный файл. Обратите внимание, что данный файл является большей, чем исходный файл, но если вы сжимаете его метод сжатия сильнее, чем Deflate, сжатия лучше, чем раньше.

2. Что такое Precomp Комфорт?
---------------------------
Precomp Комфорт изменения Precomp. Он поддерживает перетаскивание отдельные файлы и использует файл INI для параметров.
Выполнить precomp.exe для оригинальной версии, precomf.exe для Комфорт версии.

3. Типы файлов
------------
Вот список типов файлов, которые могут в конечном итоге достигнуть лучшего сжатия с Precomp и как вы можете проверить, если они могут.
Обратите внимание, что этот список не является полным, и что другие типы файлов могут содержать Deflate или ZLib потоков, тоже, но вы должны использовать медленный режим параметр (-медленно) для них.

PDF
PDF Adobe's файлы часто используют ZLib сжатие сжать их документов.
Проверьте: "FlateDecode" появляется в файл, но не в паре с "ASCII85Decode".

JPG
Precomp использует packJPG Маттиасом Штирнер (http://www.elektronik.htw-aalen.de/packjpg/index.htm) в losslessy сжатия JPG изображения.

MJPEG
MJPEG является видео-формате, который состоит из JPG изображений без Хаффмана таблиц.
Precomp вставляет их так, что packJPG способна сжимать изображения.

ZIP / JAR
Большинство ZIP файлы используют для сжатия Deflate. JAR-файлы основном ZIP файлы с дополнительной манифест для использования с Java.

PNG
PNG использует Deflate сжать ее фильтруют данные изображения.

GIF
Формат GIF использует LZW для сжатия свои данные изображения.

GZ
GZip файлы используют для сжатия Deflate.

BZ2
bzip2 является формат часто используется в среде Linux.

SWF
Компании Macromedia Shockwave Flash файлов можно использовать ZLib сжатия, начиная с версии 6.
Проверьте: первые три байта файла CWS (вместо FWS для несжатых файлов).

MIME Base64
Эта кодировка используется для подключения бинарные файлы по электронной почте.

SVGZ
Эти файлы содержат SVG-файлов, сжатых с GZip.

ODT
Документ OpenOffice файлов состоят из молнии данных XML.

SIS (только в режиме медленной)
Эти файлы содержат информацию о программном обеспечении установки на Symbian OS для мобильных телефонов. Они используют ZLib сжатие.

3DM (медленно режиме)
Это файл формата 3D геометрии используется Rhino3D, который содержит ZLib потоков.

Зенон (медленно режиме)
Зенон это формат файлов, используемых например, Немецкая Википедия DVD.

4. Как его использовать
----------------
Простейший способ (Precomp Комфорт):
Перетащите файл на precomf.exe к precompress файл в. PCF файл с таким же названием
Чтобы вернуть исходный файл, сделать то же самое с. PCF файл.

Или использовать в командной строке: (Precomp)
"PRECOMP input_filename" в precompress файл в. PCF файл с таким же названием
"PRECOMP-rpcf_filename" для восстановления исходного файла (-D-прежнему в силе, тоже)

Для пакетных заданий, вы найдете эти errorlevels полезным, которые возвращаются:

0 Нет ошибки
1 Различные ошибки (f.e. ошибки доступа к файлам)
2 Не потоков может быть извлечен из архива
3 Диск заполнен
4 Временные файл исчез
5 Параметр ошибки: игнорировать позицию слишком большой
6 параметров ошибка: Идентичные байт размер слишком большой
7 значений ошибки: Рекурсия уровня слишком большой
8 параметров ошибка: Рекурсия множество уровня более чем один раз
9 параметров ошибка: Минимальные одинакового размера байт установить более одного раза
10 Параметр об ошибке: Не используйте пробел после-O
11 Параметр ошибки: более одного выходного файла
12 Параметр об ошибке: более одного входного файла

Дополнительные ключи:

-O [имя файла]:

Задает имя выходного файла. Для предварительного сжатия, по умолчанию это имя исходного файла с расширением. PCF, для
"Декомпрессии", это имя исходного файла. Если выходной файл существует, Вам будет предложено, если вы хотите переписать его. Тем не менее, вы можете указать другое имя выходного файла с этой опцией.

-C [b]: (Комфорт: Compression_Method)

Первый шаг, который Precomp нужно, чтобы распаковать все потоки в исходном файле. После этого, он может пережать файл с помощью bzip2 ("СВ", по умолчанию) или оставить все как есть ("-с-"), поэтому вы можете сжать файл PCF с сильным метод сжатия.

-ZL: (Комфорт: zLib_Levels)

После precompressing файл с Precomp, он говорит вам, как использовать этот параметр для ускорения предварительного сжатия следующий раз, когда вы precompress этого файла. Это одно или несколько двузначных чисел. Первая цифра является степень сжатия, вторая цифра настройки памяти, которые пытались на этот файл. Однако, используя это на другой файл может привести к Precomp отсутствуют некоторые сжатого ее части.

-T: (Комфорт: Compression_Types)
Включает или отключает обнаружения определенных типов сжатия. Для использования командной строки, Есть два варианта:
T + позволяет определенных типов и выключает другие, в то время как T-отключает определенных типов и позволяет другим.
Использование-TJ например рекомпрессии отключает JPEG и оставляет все другие типы как и прежде, используя-T + PF позволяет только PDF и GIF предварительного сжатия, отключив все остальное.

-L: (Комфорт: Maximal_Recursion_Level)
Устанавливает максимальный уровень рекурсии. Несколько потоков могут содержать дополнительные потоки внутри, например,
ZIP или MIME Base64 потоков. Этот параметр указывает максимальный "глубины", где Precomp будет выглядеть для потоков.
Значение 0 отключает рекурсии, по умолчанию 10, которые должны быть достаточно для большинства типов файлов.

-F: (Комфорт: Fast_Mode)

Быстрый режим для ускорения Precomp. При этом используется первый найденный сжатия для всех потоков, а не пытаться все 81 комбинации, когда не уверен. Это будет прекрасно работать с файлами, которые используют только несколько методов сжатия, но это приведет к ухудшению сжатия для файлов с многих методов сжатия используется. Хорошие кандидаты PDF и ZIP / JAR / GZ файлов. Bad кандидатов архивов, содержащих большое количество файлов.
В не-быстром режиме, то сообщение, когда только один уровень используется комбинация. Это означает, что быстрый режим будет делать абсолютно то же самое на этот файл, но быстрее.

-Медленно: (Комфорт: Slow_Mode)

Медленный режим будет замедляться Precomp много. Он смотрит на сырье заголовки ZLib, и признает более форматы файлов, как SIS и SWF или специальных форматов, используемых только для одной программы. Однако, ZLib заголовок содержит только 2 байта, поэтому не может быть много ложных обнаружены потоки, которые не ZLib потоков, но обрабатываются как их, что приводит к более медленным и нестабильным поведением.
Медленный режим может быть объединен с быстром режиме, но это могло случиться, что ложно-обнаружена поток первого потока и предотвращает дальнейшее реальных потоков быть обнаружены, поэтому объединить их с осторожностью.
Используйте этот режим, если у вас есть файлы, которые используют ZLib сжатие, но не поддерживаются (SIS, SWF, файлы игры ISO ...).

-Грубая: (Комфорт: Brute_Mode)

Brute режиме будет замедляться Precomp очень много. Он предполагает, что не может быть ZLib потоков без заголовков во всем мире. Это даже признает самые экзотические форматы файлов, которые не включают ZLib заголовки, но займет очень много времени (более минуты даже для filesizes около 10 КБ). Если у Вас есть данные, которые должны быть обработаны в этом режиме, лучше попробовать добавить ZLib заголовков по своему усмотрению.
Brute режим может быть объединен с быстром режиме, но отключает медленном режиме.

-Pdfbmp [+-]: (Комфорт: PDF_BMP_Mode)

Это предшествует PDF изображений с заголовка BMP для улучшения сжатия и скорости, особенно для PAQ.

-Progonly [+-]: (Комфорт: JPG_progressive_only)

Recompresses прогрессивных JPGs только. Опять же, это особенно полезно для PAQ которые обычно лучше JPG сжатия, чем packJPG, но ему не хватает прогрессивной Поддержка графических форматов JPG.

-MJPEG [+-]: (Комфорт: MJPEG_recompression)

Позволяет MJPEG рекомпрессии, вставив Хаффмана таблиц в JPG данных.

-V: (Комфорт: Verbose)

Verbose (Debug) режиме, чтобы получить дополнительную информацию об обнаруженных потоков и рекомпрессии успеха / неуспеха. Если Вы хотите файл с этим информация, вперед выход на него, как это: "PRECOMP-V input_filename> verbose.txt".

-Я: (Комфорт: Ignore_Positions)

В подробном режиме, вы можете видеть положение потоков в файл. С помощью этого параметра, вы можете игнорировать определенные потоки.

-S: (Комфорт: Minimal_Size)

С помощью этого параметра вы можете выбрать минимальный размер потока, который будет обработан. По умолчанию используется 4 байта. Установка в более высокие значения (около 50-200 байт), иногда улучшает рекомпрессии, особенно в медленных или грубой режиме.

5. Вопросы и ответы
------
Q: Я пытался сжать файл precompressed с Precomp и не становятся меньше.

: Precomp не смогли найти никаких сжатых потоков в файл и bzip2 сжатие не помогло.

Вопрос: Является ли исходный код для Precomp доступны?

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

Вопрос: Известны ли ошибок?

: Есть несколько ошибок, которые приводят к сбоям на особый поврежденных файлов, но это очень необычно. Тем не менее, Precomp далеко от завершения, поэтому если вы нашли ошибку, пришлите мне сообщение об ошибке.

Q: Я обнаружил ошибку. Как сообщить о ней?

: Отправить письмо schnaader@gmx.de, желательно с "[Precomp]" в тему с описанием ошибка, и если вы
хотите (и если он составляет менее 10 Мб), файл, который вы хотели precompress / восстановления.

Вопрос: В чем разница между использованием Precomp или Многолистные для файлов PDF?

: Основное отличие в том, что PDF файлы, сжатые с Многолистные не могут быть восстановлены бит-в-бит-идентичны, поскольку
Многозначные является метод сжатия с потерями (хотя это и не теряет содержание PDF). Так что если вы просто хотите сжать файлы PDF и иметь быстрый доступ к ним позже, использование Многолистные. Если вы хотите, чтобы они меньше, чем Многолистные (даже в компактном режиме) делает, или хотите быть уверены, файл бит-в-бит-совпадает с оригинальным PDF, используйте Precomp. Вы можете также использовать Precomp на PDF файлы, сжатые с Многолистные.

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

: Декомпрессии этих файлов хорошо определены, но Есть много способов для повторного их. Особенно ZLib могут быть настроены с deflateTune (), которая не поддерживается Precomp поскольку Есть просто слишком много изменений, чтобы попробовать. Я работаю над этим.

6. Контакты
----------
Христианский Шнайдер
schnaader@gmx.de
http://schnaader.info

7. Кредиты
----------
Спасибо за поддержку, помощь и комментарии:
Стефан Busch (Squeeze Диаграмма Автор, http://www.squeezechart.de)
Вернер Бергманс (максимальное сжатие Benchmark Автор, http://www.maximumcompression.com)
Маттиас Штирнер (PackJPG, http://www.elektronik.htw-aalen.de/packjpg/index.htm)
Марк Адлер (http://www.zlib.net)
Мэтт Махоуни (http://www.mattmahoney.net, http://www.cs.fit.edu/ ~ mmahoney / сжатие)
Малкольм Тейлор (http://www.msoftware.co.nz/WinRK_about.php)
Симон Бергер (помогла исправить многие ошибки)
Весь форум ENCODE.RU (http://encode.ru/forum)

8. Официальная часть
--------------
PackJPG v2.4WIP4 (http://www.elektronik.htw-aalen.de/packjpg/index.htm) Маттиасом Штирнер используется для сжатия / декомпрессии файлов JPG.
bzip2 1,05 (http://www.bzip.org) Джулиан Сьюард используется для сжатия / декомпрессии bzip2 потоков.
ZLib 1.2.3 (http://www.zlib.net) Жан-Лу Gailly и Марк Адлер используется для сжатия / декомпрессии ZLib потоков.
GifLib 4.1.4 (http://sourceforge.net/projects/libungif) используется для компрессии / декомпрессии файлов GIF.
Распределение GIFLIB является Copyright (C) 1997 Eric S. Raymond

! Пожалуйста, обратите внимание, что использование Precomp в любые коммерческие продукты, не допускается без моего разрешения! !

Precomp сама не имеет лицензии еще нет, но я планирую выпустить исходный код и лицензия под LGPL.

Перевод кривоватый, но все понятно вроде.

R.i.m.s.k.y. 17-01-2011 16:16 1590774

Цитата:

Цитата Лександер
По прекомп вот »

это двухпроходное сжатие чтоле?

Gnom_aka_Lexander 17-01-2011 16:23 1590779

R.i.m.s.k.y., это прекомпрессор для улучшения ПОСЛЕДУЮЩЕГО сжатия, он ищет ZLib-потоки в файлах и(или) архивах, и РАЗЖИМАЕТ их, в результате чего, последующее сжатие на порядок выше :)
Извиняюсь за оффтоп, но лучший, на мой взгляд вариант - паковать в 7-зип БЕЗ сжатия, прогонять прекомпом, после чего паковать снова ужем чем нравится с максимально возможным сжатием. Таким образом я в игре Стар варс форс анлишед 20 гиг игровых архивов сжал до 3 гиг :)

R.i.m.s.k.y., во, поможеш? Нужно сюда:
читать дальше »


function HLP: Boolean;
begin
ProgressInfoLabel.Visible:=False;
FilenameLabel.Hide;
Result:= BtnGetChecked(HLPCheck);
end;....
........
procedure HLPClick(hBtn:HWND);
begin
if BtnGetChecked(hBtn) then HLPLabel.Font.Color:=$00FFFF else HLPLabel.Font.Color:=$FFFFFF;
end;

procedure HLPLabelClick(Sender:TObject);
begin
BtnSetChecked(HLPCheck, not BtnGetChecked(HLPCheck));
HLPClick(HLPCheck);
end;

procedure HLPProgress;
begin
StatusLabel.Caption:=ExpandConstant('{cm:HLPInstall}')
end; .......
.......
HLPCheck:=BtnCreate(WizardForm.Handle,ScaleX(75),ScaleY(363),ScaleX(28),ScaleY(28),ExpandConstant('{ tmp}\CheckBox.png'),8,True);
BtnSetEvent(HLPCheck,BtnClickEventID,WrapBtnCallback(@HLPClick,1));
BtnSetCursor(HLPCheck,GetSysCursorHandle(32649));

HLPLabel := TLabel.Create(WizardForm);
with HLPLabel do begin
AutoSize:=False;
SetBounds(ScaleX(115), ScaleY(370), ScaleX(545), ScaleY(37));
OnClick:= @HLPLabelClick;
Cursor:= CrHand;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Color:=$00FFFF;
Font.Style:=[fsBold,fsItalic];
Caption := ExpandConstant('{cm:HLP}');
Parent := WizardForm;
end;

приделать проверку на isHLPinstalled - если да, то создается, если нет, то не создается.
нуи на вин семь
Чтобы вместо
Check: (HLP and isWin7 and (not IsWin64) and (not isHLPinstalled ))
Написать Check: HLP and not IsWin64 (или HLP and IsWin64)
И, да, вот это:
читать дальше »

Function isHLPinstalled : boolean;
var
VersionMS0, VersionLS0 : Cardinal; b1, b2 ,b3, b4 : boolean;
begin
b1 := False; b2 := False; b3 := False; b4 := False;
GetVersionNumbers(ExpandConstant('{win}\winhlp32.exe'), VersionMS0, VersionLS0);
if (VersionLS0 >= 498089986) then b1 := True;
if (FileExists(ExpandConstant('{sys}\ftlx041e.dll'))) then b2 := True;
if (FileExists(ExpandConstant('{sys}\ftlx0411.dll'))) then b3 := True;
if (FileExists(ExpandConstant('{sys}\fftsrch.dll'))) then b4 := True;
if (b1 or b2 or b3 or b4) then Result := True else Result := False
end;

в скрипте уже есть :)

R.i.m.s.k.y. 17-01-2011 16:50 1590795

тока одна идея -
if (not isHLPinstalled) then begin
HLPLabel := TLabel.Create(WizardForm)
...
end;
если не установлен HLP-патч тогда и этот лабел не создасться, к нему же нет больше нигде привязок вроде

Gnom_aka_Lexander 17-01-2011 16:54 1590801

R.i.m.s.k.y., а можно так:
if (not isHLPinstalled) and isWin7 then begin
HLPLabel := TLabel.Create(WizardForm)
?
И я не найду, где там галка по умолчанию, чегото, чтоб по умолчанию ее снять ...

R.i.m.s.k.y. 17-01-2011 16:57 1590804

Цитата:

Цитата Лександер
а можно так:
if (not isHLPinstalled) and isWin7 then begin
HLPLabel := TLabel.Create(WizardForm) »

можно, но инно специфично понимает подifовые условия, я все разношу по скобкам как в первом классе
if ( (not isHLPinstalled) and (isWin7) ) then begin
HLPLabel := TLabel.Create(WizardForm)

секцию файлов закомментируй и откомпиль, как получиться

Gnom_aka_Lexander 17-01-2011 17:00 1590807

R.i.m.s.k.y., Не, с файлами надежней - я сразу установку пробую, а то без установки иногда ошибки бывают, которые без файлов не увидеть :)
Ошибка здесь:
Код:

////////////////////// UninstallingPage //////////////////////

procedure HideComponents;
begin
.....
HLPLabel.Hide;
.....
end;

Нужно както обозначить, что на деинсталляторе этот лебл не нужен.

Vista-w 17-01-2011 17:06 1590816

помогите пожалуйста, если я пакую файлы игры в arc архив, то мне нужно прописывать в inno скрипте вот эту строку
Source: "C:\Program Files\18 WoS Extreme Trucker 2\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
или сразу на архив?

Gnom_aka_Lexander 17-01-2011 17:08 1590819

Vista-w, Если ты пакуеш игру в архив, то зачем тебе игровые файлы в инсталляторе? Или это своеобразный бекап такой, чтоб если архив повредится? :)

R.i.m.s.k.y., а может лучше сюда :
читать дальше »

SelectTasksPage.ID:
begin
Tasks.Font.Color := $00FFFF;
ImgSetPosition(StatusPanel,ScaleX(456),ScaleY(95),ScaleX(114),ScaleY(20));
BtnSetVisibility(DesktopCheck,True);
BtnSetVisibility(ASSOCCheck,True);
BtnSetVisibility(HLPCheck,True);
BtnSetChecked(HLPCheck,True);
...........
HLPLabel.Show;
WizardForm.NextButton.Caption:=SetupMessage(msgButtonInstall);
end;
встроить проверку на необходимость? А то здесь тоже ошибка вылезает на HLPLabel.Show; ..

R.i.m.s.k.y. 17-01-2011 17:15 1590823

Цитата:

Цитата Лександер
Нужно както обозначить, что на деинсталляторе этот лебл не нужен »

стандартная функция IsUninstaller - Returns True if Uninstall is running as opposed to Setup, False otherwise. (true если деинсталляция, false иначе)

Vista-w 17-01-2011 17:15 1590824

Лександер,
Вот это я и хотел узнать, вот как правильно прописать адрес архива?
Archives = '{src}\*.arc';
И еще что это ?
Source: arc.ini; DestDir: {tmp}; Flags: dontcopy
Архив нужно вносить в секцию [Files] ?

Gnom_aka_Lexander 17-01-2011 17:17 1590828

Vista-w, Нет, не нужно :)
R.i.m.s.k.y., Глянь предидущий мой пост :)

R.i.m.s.k.y. 17-01-2011 17:17 1590829

тогда может
HLPLabel := TLabel.Create(WizardForm)
if ( (not isHLPinstalled) and (isWin7) ) then begin
...
end;
т.е. лэбл создасться но пустой

Vista-w 17-01-2011 17:21 1590835

Лександер,
Archives = '{src}\_______*.arc'; <адрес архива нужно вносить сюда да?

R.i.m.s.k.y. 17-01-2011 17:25 1590840

Лександер,
оформление через код, через тернии к звездам, гланды через ...
я мало понимаю в оформлении_через_код, наобум советую, по вдохновению ;)

Gnom_aka_Lexander 17-01-2011 17:25 1590842

Vista-w, Да. Правильно будет так: Archives = '{src}\*.arc' тогда будут обработаны все файлы с расширением .arc

R.i.m.s.k.y., Тут где выбран чекбокс? как-бы сделать, чтоб по умолчанию он не был выбран?
Цитата:

Цитата R.i.m.s.k.y.
HLPLabel := TLabel.Create(WizardForm)
if ( (not isHLPinstalled) and (isWin7) ) then begin »

Не катит, убирается только надпись, а чекбокс остается рабочим...

R.i.m.s.k.y. 17-01-2011 17:32 1590849

Цитата:

Цитата Лександер
Не катит, убирается только надпись, а чекбокс остается рабочим »

не знаю, тяму не хватает, может Serega или еще кто подмогнет...

Vista-w 17-01-2011 17:32 1590850

Лександер,
Source: arc.ini; DestDir: {tmp}; Flags: dontcopy
это что за строка?

Gnom_aka_Lexander 17-01-2011 17:34 1590853

Vista-w, arc.ini нужен для работы unarc.dll.

R.i.m.s.k.y., подожду, мож кто еще подскажет, там совсем тупик уже...
Попрорбовал так:
if not isHLPinstalled and isWin7 then
HLPLabel := TLabel.Create(WizardForm)
проглатывает, но на установке ошибка в следующих строках.

Vista-w 17-01-2011 17:37 1590855

Лександер,
у меня его нет в архиве(

Gnom_aka_Lexander 17-01-2011 17:39 1590857

Vista-w,
Он у тебя в файлах есть: Source: arc.ini; DestDir: {tmp}; Flags: dontcopy
А в архив его нельзя, он нужен для распаковки этих архивов.

Vista-w 17-01-2011 17:58 1590874

Лександер,
Да не я архив скачал, этого файла там нет.

Gnom_aka_Lexander 17-01-2011 18:02 1590878

Vista-w, Блиннн, его там и не должно быть, это файл настроек Архиватора ФриАрк. он должен быть указан в скрипте у тебя.

Vista-w 17-01-2011 18:07 1590882

Лександер,
Ладно спасибо за помощь, но выберу что нить по проще.
Есть ли скрипт для распаковки 7z архива, но с отдельным прогресс-баром?

Gnom_aka_Lexander 17-01-2011 18:15 1590886

Vista-w, Есть, тут в примерах в шапке видел.

Помгите кто-нибудь, тут:
читать дальше »


function HLP: Boolean;
begin
ProgressInfoLabel.Visible:=False;
FilenameLabel.Hide;
Result:= BtnGetChecked(HLPCheck);
end;....
........
procedure HLPClick(hBtn:HWND);
begin
if BtnGetChecked(hBtn) then HLPLabel.Font.Color:=$00FFFF else HLPLabel.Font.Color:=$FFFFFF;
end;

procedure HLPLabelClick(Sender:TObject);
begin
BtnSetChecked(HLPCheck, not BtnGetChecked(HLPCheck));
HLPClick(HLPCheck);
end;

procedure HLPProgress;
begin
StatusLabel.Caption:=ExpandConstant('{cm:HLPInstall}')
end; .......
.......
HLPCheck:=BtnCreate(WizardForm.Handle,ScaleX(75),ScaleY(363),ScaleX(28),ScaleY(28),ExpandConstant('{ tmp}\CheckBox.png'),8,True);
BtnSetEvent(HLPCheck,BtnClickEventID,WrapBtnCallback(@HLPClick,1));
BtnSetCursor(HLPCheck,GetSysCursorHandle(32649));

HLPLabel := TLabel.Create(WizardForm);
with HLPLabel do begin
AutoSize:=False;
SetBounds(ScaleX(115), ScaleY(370), ScaleX(545), ScaleY(37));
OnClick:= @HLPLabelClick;
Cursor:= CrHand;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Color:=$00FFFF;
Font.Style:=[fsBold,fsItalic];
Caption := ExpandConstant('{cm:HLP}');
Parent := WizardForm;
end;

чекбокс выбран, я не могу нйти где, мне нужно, чтоб по умолчанию он не был вбран..

R.i.m.s.k.y. 17-01-2011 19:11 1590911

Лександер,
А если этот HLP перенести в компоненты? не вариант, нет?

[Components]
# define HLPW7Desc "Установить обновление для Windows Se7en Программа Справка Windows для просмотра 32-разрядных файлов справки (.HLP)"
Name: HLPW7; Description: {#HLPW7Desc}; Types: full; Check: ( (not isHLPinstalled) and (isWin7))

[ C ode]
procedure InitializeWizard();
...
if ( (not isHLPinstalled) and (isWin7) ) then WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#HLPW7Desc}')]:=False;
...

[Run]
Components: HLPW7; Filename: {sys}\wusa.exe; WorkingDir: {tmp}; Parameters: {tmp}\KB917607-x86.msu /quiet /norestart; Check: (not IsWin64); Flags: waituntilterminated 32bit;
Components: HLPW7; Filename: {sys}\wusa.exe; WorkingDir: {tmp}; Parameters: {tmp}\KB917607-x64.msu /quiet /norestart; Check: (IsWin64); Flags: waituntilterminated 64bit;

Gnom_aka_Lexander 17-01-2011 19:49 1590939

R.i.m.s.k.y., я проще разобрался, сейчас общий код выложу с коментариями, может кому пригодится, в общем, если HLP-пач ставить нужно, то показаны чекбокс, подпись, и чекбокс выбран, если HLP-пач ставить не нужно, то галка с чекбокса снимается, (иначе всеравно поставится:) ) скрывается чекбокс и подпись (они созданы раздельно).
Добавил скрипт во вложении, описанная опция прокоментирована.
Проверил у себя дважды - работает :)

Imitri7 17-01-2011 20:26 1590970

нужна помощь, нужна типа такая => страница , но только чтоб не прописывать в компонентах, а какбэ отдельная страница

Imitri7 17-01-2011 22:07 1591046

Лександер, ааааа...ботва2.длл :shot:
а вообще спасибо
зы думаю стоит добавить все материалы: картинки, стили и прочее...

SteamShip 18-01-2011 20:01 1591667

Что нужно написать или поменять в этом скрипте чтобы при запуске инсталлятора музыка не играла а на панели были кнопки вкл музыку и стоп а кнопка пауза была скрыта
[code]
[Setup]
AppName=Example.Play.MP3.Music.On.Start.Up.With.Texture
AppVerName=Example.Play.MP3.Music.On.Start.Up.With.Texture
AppPublisher=genri.sampron.iTASmania_Inc.uncle
DefaultDirName=C:\Play.MP3
OutputBaseFilename=play.mp3.by.genri.sampron.iTASmania_Inc.uncle


[Files]
Source: BASS.dll; DestDir: {tmp}; Flags: dontcopy noencryption
Source: sound.mp3; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: MusicButton.bmp; DestDir: {tmp}; Flags: dontcopy


Код:

const
  BASS_ACTIVE_STOPPED = 0;
  BASS_ACTIVE_PLAYING = 1;
  BASS_ACTIVE_STALLED = 2;
  BASS_ACTIVE_PAUSED = 3;
  BASS_SAMPLE_LOOP = 4;

var
  mp3Handle: HWND;
  mp3Name: String;
  PlayButton, PauseButton, StopButton: TPanel;
  PlayImage, PauseImage, StopImage: TBitmapImage;
  PlayLabel, PauseLabel, StopLabel: TLabel;
  MouseLabel: Tlabel;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
  external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD;
  external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
  external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
  external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelIsActive(handle: DWORD): Integer;
  external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';

function BASS_ChannelPause(handle: DWORD): Boolean;
  external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
  external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Pause(): Boolean;
  external 'BASS_Pause@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
  external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure PlayMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  PlayImage.Left := -96
end;

procedure PlayMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  PlayImage.Left := 0
end;

procedure PlayMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if PlayImage.Left <> -96 then PlayImage.Left := -192
  StopImage.Left := -64
end;

procedure PauseMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  PauseImage.Left := -128
end;

procedure PauseMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  PauseImage.Left := -32
end;

procedure PauseMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if PauseImage.Left <> -128 then PauseImage.Left := -224
  StopImage.Left := -64
end;

procedure StopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  StopImage.Left := -160
end;

procedure StopMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  StopImage.Left := -64
end;

procedure StopMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if StopImage.Left <> -160 then StopImage.Left := -256
  PlayImage.Left := 0
  PauseImage.Left := -32
end;

procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  PlayImage.Left := 0
  PauseImage.Left := -32
  StopImage.Left := -64
end;

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('sound.mp3');
  mp3Name := ExpandConstant('{tmp}\sound.mp3');
  BASS_Init(-1, 44100, 0, 0, 0);
  mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
  BASS_Start();
  BASS_ChannelPlay(mp3Handle, False);
  Result := True;
end;

procedure PlayButtonOnClick(Sender: TObject);
begin
  case BASS_ChannelIsActive(mp3Handle) of
    BASS_ACTIVE_PAUSED:
      begin
        BASS_ChannelPlay(mp3Handle, False);
        PlayButton.Hide
        PauseButton.Show
      end;
    BASS_ACTIVE_STOPPED:
      begin
        BASS_Init(-1, 44100, 0, 0, 0);
        mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
        BASS_Start();
        BASS_ChannelPlay(mp3Handle, False);
        PlayButton.Hide
        PauseButton.Show
      end;
  end;
end;

procedure PauseButtonOnClick(Sender: TObject);
begin
  BASS_ChannelPause(mp3Handle);
  PauseButton.Hide
  PlayButton.Show
end;

procedure StopButtonOnClick(Sender: TObject);
begin
  BASS_Stop();
  BASS_Free();
  PauseButton.Hide
  PlayButton.Show
end;

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

  MouseLabel := TLabel.Create(WizardForm)
    MouseLabel.Width := WizardForm.Width
    MouseLabel.Height := WizardForm.Height
    MouseLabel.Autosize := False
    MouseLabel.Transparent := True
    MouseLabel.OnMouseMove := @MouseMove
    MouseLabel.Parent := WizardForm

  PlayButton := TPanel.Create(WizardForm)
    PlayButton.Left := 50
    PlayButton.Top := 320
    PlayButton.Width := 32
    PlayButton.Height := 33
    PlayButton.Cursor := crHand
    PlayButton.ShowHint := True
    PlayButton.Hint := 'Воспроизведение музыки'
    PlayButton.OnClick := @PlayButtonOnClick
    PlayButton.Parent := WizardForm

  PlayImage := TBitmapImage.Create(WizardForm)
    PlayImage.Left := 0
    PlayImage.Top := 0
    PlayImage.Width := 288
    PlayImage.Height := 33
    PlayImage.Enabled := False
    PlayImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
    PlayImage.Parent := PlayButton
//
    PlayImage.ReplaceColor:=$E2E2E2
    PlayImage.ReplaceWithColor:=clBtnFace


  PlayLabel := TLabel.Create(WizardForm)
    PlayLabel.Width := PlayButton.Width
    PlayLabel.Height := PlayButton.Height
    PlayLabel.Autosize := False
    PlayLabel.Transparent := True
    PlayLabel.OnClick := @PlayButtonOnClick
    PlayLabel.OnMouseDown := @PlayMouseDown
    PlayLabel.OnMouseUp := @PlayMouseUp
    PlayLabel.OnMouseMove := @PlayMouseMove
    PlayLabel.Parent := PlayButton

  PauseButton := TPanel.Create(WizardForm)
    PauseButton.Left := 50
    PauseButton.Top := 320
    PauseButton.Width := 32
    PauseButton.Height := 33
    PauseButton.Cursor := crHand
    PauseButton.ShowHint := True
    PauseButton.Hint := 'Приостановить музыку'
    PauseButton.OnClick := @PauseButtonOnClick
    PauseButton.Parent := WizardForm

  PauseImage := TBitmapImage.Create(WizardForm)
    PauseImage.Left := -32
    PauseImage.Top := 0
    PauseImage.Width := 288
    PauseImage.Height := 33
    PauseImage.Enabled := False
    PauseImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
    PauseImage.Parent := PauseButton
//
    PauseImage.ReplaceColor:=$E2E2E2
    PauseImage.ReplaceWithColor:=clBtnFace

  PauseLabel := TLabel.Create(WizardForm)
    PauseLabel.Width := PauseButton.Width
    PauseLabel.Height := PauseButton.Height
    PauseLabel.Autosize := False
    PauseLabel.Transparent := True
    PauseLabel.OnClick := @PauseButtonOnClick
    PauseLabel.OnMouseDown := @PauseMouseDown
    PauseLabel.OnMouseUp := @PauseMouseUp
    PauseLabel.OnMouseMove := @PauseMouseMove
    PauseLabel.Parent := PauseButton

  StopButton := TPanel.Create(WizardForm)
    StopButton.Left := 82
    StopButton.Top := 320
    StopButton.Width := 32
    StopButton.Height := 33
    StopButton.Cursor := crHand
    StopButton.ShowHint := True
    StopButton.Hint := 'Остановить музыку'
    StopButton.OnClick := @StopButtonOnClick
    StopButton.Parent := WizardForm

  StopImage := TBitmapImage.Create(WizardForm)
    StopImage.Left := -64
    StopImage.Top := 0
    StopImage.Width := 288
    StopImage.Height := 33
    StopImage.Enabled := False
    StopImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
    StopImage.Parent := StopButton
//
    StopImage.ReplaceColor:=$E2E2E2
    StopImage.ReplaceWithColor:=clBtnFace

  StopLabel := TLabel.Create(WizardForm)
    StopLabel.Width := StopButton.Width
    StopLabel.Height := StopButton.Height
    StopLabel.Autosize := False
    StopLabel.Transparent := True
    StopLabel.OnClick := @StopButtonOnClick
    StopLabel.OnMouseDown := @StopMouseDown
    StopLabel.OnMouseUp := @StopMouseUp
    StopLabel.OnMouseMove := @StopMouseMove
    StopLabel.Parent := StopButton
end;

procedure DeinitializeSetup();
begin
  BASS_Stop();
  BASS_Free();
end;

Прилагаемые файлы: http://rghost.ru/3987698

XNick 18-01-2011 23:36 1591820

Господа подскажите мне, как сделать так чтоб при завершении упаковки игры, файлы формата .bin(к примеру setup-1.bin ), имели имя Data1.bin???

Gnom_aka_Lexander 19-01-2011 21:06 1592586

XNick, Только так:
Код:

[Setup]
OutputBaseFilename=Data

Будет так: Data.exe, Data-1.bin и т.д. Data.exe можно будет переименовать в setup.exe, а может и нельзя :)
Но наверное, можно :)
SteamShip, архив со скриптом и файлами залей куда-нибудь, я посмотрю.

XNick 20-01-2011 08:35 1592857

Лександер,
Спасибо!!!!!!! :clapping:

Gnom_aka_Lexander 20-01-2011 20:32 1593371

XNick, Для этого есть кнопка специальная, называется - Полезное сообщение :)

Black666angel 21-01-2011 01:51 1593567

Я незнаю увас русский или нет если каму нужно вот он русификатор на Inno Script Generator
Скачать
Как устоновить:
в папке с прогой есть файлик - Setting.isg, его открыть в блокноте, найти секцию [Language] и заменить ее содержимое на это
Last=1
1=1049

А из папки Languages удалить все языки, кроме русского который вызакинули.

Gnom_aka_Lexander 21-01-2011 12:24 1593831

Black666angel, Еще неплохо указать автора русика, и руководства по его интеграции, а то обидно както, я сутки голову ломал, как заставить его работать нормально, а Gur74 тоже не две минуты на локализацию потратил. По моей-же, кстати, просьбе.
Такое чувство, что никому он в общемто, и не нужен, хотя прога действительно неплохая...

Может кто-нибудь подскажент, как можно из такой записи реестра:
Код:

Root: HKCR; Subkey: InnoSetupScriptFile\shell\OpenwithInnoSetup\command; ValueType: String; ValueData: """{app}\Compil32.exe"" ""%1"""; MinVersion: 4.0,5.0; Flags: uninsdeletekey;
Взять путь для апдейта? (эту часть: {app}\)

Vista-w 21-01-2011 12:50 1593856

Помогите пожалуйста, вот
#define Archives "{src}\setup1.arc;DestDir:{app}\;"
#define Archives Archives + "|" + "{src}\setup2.arc;DestDir:{app}\;"
//#define Archives Archives + "|" + "{src}\setup1.arc;DestDir:{app}\data;Disk:1"
//#define Archives Archives + "|" + "{src}\setup2.arc;DestDir:{app}\data2;Disk:2;Components:English"
//#define Archives Archives + "|" + "{src}\setup1.arc;DestDir:{app}\data3;Disk:2"

как сюда добавить 1 архив, лежащий рядом с setup'ом?

Gnom_aka_Lexander 21-01-2011 12:54 1593861

Vista-w,
{src} - это как раз рядом с setup'ом. Как называется архив, который хочеш добавить?

Vista-w 21-01-2011 12:58 1593865

Лександер,
Я не знаю как добавить его, мне нужно чтоб был один архив в этом скрипте

Gnom_aka_Lexander 21-01-2011 13:01 1593866

Vista-w, У тебя сейчас подключены два архива: setup1.arc и setup2.arc твой архив как называется?

Vista-w 21-01-2011 13:02 1593873

Лександер, setup1

Gnom_aka_Lexander 21-01-2011 13:06 1593879

Vista-w,
Тогда так:
Код:

#define Archives "{src}\setup1.arc;DestDir:{app}\;"
//#define Archives Archives + "|" + "{src}\setup2.arc;DestDir:{app}\;"
//#define Archives Archives + "|" + "{src}\setup1.arc;DestDir:{app}\data;Disk:1"
//#define Archives Archives + "|" + "{src}\setup2.arc;DestDir:{app}\data2;Disk:2;Components:English"
//#define Archives Archives + "|" + "{src}\setup1.arc;DestDir:{app}\data3;Disk:2"

// - отключает строку из обработки и называется комментированием.
А DestDir:{app}\; было, или сам дописал? Теоретически там оно не нужно.

Vista-w 21-01-2011 13:09 1593882

вот
Надо, чтоб распаковывался один архив setup1.arc без запроса на второй архив.

http://rghost.ru/4020596
Вот помоги пожалуйста отвязать запрос на второй диск.
Чтоб распаковывался 1 архив
Буду признателен.

Gnom_aka_Lexander 21-01-2011 13:15 1593888

Vista-w, Дык у тебя там setup1.7z и setup2.7z , 7z Фриарком не распаковывается вроде?
А так делаеш, как я тебе сказал в предидущем посте, и он не будет просить еще один архив.

Vista-w 21-01-2011 13:16 1593889

Лександер,
Я вкурсе это для вида, я архив .arc сам добавлю.

Vista-w 21-01-2011 13:31 1593909

Лександер,
Мне нужно в этом скрипте распаковку 1ного .arc архива, без всяких заморочек с требованием дисков.

Gnom_aka_Lexander 21-01-2011 13:41 1593921

Vista-w, Блииииннн тут правильный ответ, посмотри внимательно название архива, который ты создал, либо у тебя ошибка в названии, либо архив не Фриарковски.

EvilAlex 21-01-2011 15:11 1593986

Доброго времени суток, кто может помогите, так как сам я несмогу, пробЫвал, нашел для себя скрипт, и в нем есть небольшаю загвоздка, в нем присутствует ISDone и я незнаю как исправить, когда создаеш инсталл и запускаеш, то прогресс бар врет, допустим игра устанавливаеться 5 минут, а прогрессбар показывает что минут 25 и установилось только 10-15% , хотя по истечению 5 минут он показывает что осталось 10минут и 25% установлено, и через секунду пишет что игра успешно установлена, кто може подправить его ??? буду очень блогодарен ...


Вот Скрипт

Зарание спасибо !!!

Gnom_aka_Lexander 21-01-2011 15:16 1593993

EvilAlex, В справке написан ведь компилиш, ставиш, в скрипте раскоментируеш дефайн рекордс, компилиш снова уже готовое с правильными процентами.

EvilAlex 21-01-2011 15:19 1593997

Лександер, а терь по русски

я сам не смогу его исправить, я мало в этом понимаю, я чуть чуть его правлю просто под релизы, а чтото типо исправления прогрессбара, если не трудно скачайте и исправьте пожалуйста !?!

Lubitel Softa 21-01-2011 17:05 1594082

Цитата:

Цитата Лександер
может знаеш ответ на этот вопрос? »

[code]
Function GetInstallDir(Path: String ): String;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Rockstar Games\EFLC', 'InstallPath', Path);//Какой ключ реестра ищет ...
Result := Path;
end;

:search:

Gnom_aka_Lexander 21-01-2011 17:49 1594120

Lubitel Softa, Это я знаю, но там, если прямо так взять, путь получится """{app}\Compil32.exe"" ""%1""" :) угадай, как инсталлятор на этот путь отреагирует? :)

Gnom_aka_Lexander 21-01-2011 17:56 1594128

EvilAlex, перед секцией [Setup] вставляеш ;#define records, в секции [Files]

Код:

#ifdef records
Source: "InstallFiles\records.inf"; DestDir: "{tmp}"; Flags: dontcopy
#endif

Если исдон не сильно раскурочил, то в таком виде устанавливаеш игру, полностью, рядом с сетапом появится файл records.inf, его кидаеш в папку InstallFiles , в шапке скрипта удаляеш точку с запятой перед #define records и заново компилируеш, после этого проценты будут отбражаться корректно. Но это если ты саму функцию записи процентов в records.inf не удалил из ИсДона.

EvilAlex 21-01-2011 18:09 1594138

создавался бы еще records.inf ...

Habetdin 21-01-2011 19:03 1594193

Цитата:

Цитата Лександер
Inno не делает записей в реестр, по которым можно путь для апдейта взять »

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1 » InstallLocation
Код:

[Setup]
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1,InstallLocation|{pf}\Inno Setup 5}


Gnom_aka_Lexander 21-01-2011 19:16 1594203

EvilAlex, Возьми пример скрипта ИсДоне и поковыряй его, мне некогда пока, если подождеш, то по позже попробую приделать тебе ИсДоне по-нормальному.

EvilAlex 21-01-2011 19:51 1594234

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

Vamp1re 21-01-2011 22:52 1594354

как сделать чтоб после распаковки файлов CD1 инсталятор требувал CD2?

EvilAlex 22-01-2011 00:05 1594391

Vamp1re,
#define Archives "{src}\setup1.arc;DestDir:{app}\;"
#define Archives Archives + "|" + "{src}\setup2.arc;DestDir:{app}\;"
//#define Archives Archives + "|" + "{src}\setup1.arc;DestDir:{app}\data;Disk:1"
//#define Archives Archives + "|" + "{src}\setup2.arc;DestDir:{app}\data2;Disk:2;Components:English"
//#define Archives Archives + "|" + "{src}\setup1.arc;DestDir:{app}\data3;Disk:2"

Black666angel 22-01-2011 02:41 1594457

Лександер
Цитата:

Black666angel, Еще неплохо указать автора русика, и руководства по его интеграции, а то обидно как то, я сутки голову ломал, как заставить его работать нормально
не знаю как кто? но я после его ответа (см ниже) сразу понял
Как установить:
в папке с прогой есть файлик - Setting.isg, его открыть в блокноте, найти секцию [Language] и заменить ее содержимое на это
Last=1
1=1049

А из папки Languages удалить все языки, кроме русского который вы закинули.
Author=Gu®islav

приношу извинение автору этого русика что не подписал его имя
но по идеи если открыть (Russian.lng) любым текстовым редактором то там написано имя автора (см выше)

Цитата:

Такое чувство, что никому он в общем то, и не нужен, хотя прога действительно неплохая...
да каму не нужно тому не нужно не будем их агитировать каму черезчё удобно

Devil Mehanik 22-01-2011 19:28 1594781

Помогите пожалуйста!
Я в это деле новичок. Это будет моя первая работа.
Капался пол дня на вашем форуме, нашел нужные мне скрипты:
читать дальше »

Как сделать черный фон:
_________________________
[code]
const
Color = clblack;

procedure InitializeWizard();
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.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.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;
end;

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

как изменить шрифт
___________________________
WizardForm.Font.Name:= 'Comic Sans MS';

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

сменить иконку папки
___________________________
procedure InitializeWizard();
var
papka: TBitmapImage;
begin
papka := TBitmapImage.Create(WizardForm);
with papka do
begin
Parent:= WizardForm.SelectProgramGroupPage;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=True;
ExtractTemporaryFile('papka.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
end;
end;

На рисункея показал то, что не смог найти, может кто-нибудь подскажет

______________________________________________________
У меня такая проблем, накидываю в код скрипты указанные выше, а он выделяет нижние строчки красной полосой:(
читать дальше »
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
WizardImageFile=M:\пример\Files\LOGO.bmp
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Messages]
rus.BeveledLabel=Релиз by МЕХАНИК

[code]
procedure InitializeWizard();
var
papka: TBitmapImage;
begin
papka := TBitmapImage.Create(WizardForm);
with papka do
begin
Parent:= WizardForm.SelectProgramGroupPage;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=True;
ExtractTemporaryFile('papka.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
end;
end;


const
Color = clblack;

procedure InitializeWizard();
begin
WizardForm.Font.Color:=clWhite;
WizardForm.Font.Name:= 'Comic Sans MS';
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.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.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;
end;

end;

Если не трудно, соберите мне пожалуйста целый код!
Буду благодарен

Devil Mehanik 22-01-2011 19:35 1594786

Помогите пожалуйста!
Я в это деле новичок. Это будет моя первая работа.
Капался пол дня на вашем форуме, нашел нужные мне скрипты:
читать дальше »

Как сделать черный фон:
_________________________
[code]
const
Color = clblack;

procedure InitializeWizard();
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.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.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;
end;

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

как изменить шрифт
___________________________
WizardForm.Font.Name:= 'Comic Sans MS';

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

сменить иконку папки
___________________________
procedure InitializeWizard();
var
papka: TBitmapImage;
begin
papka := TBitmapImage.Create(WizardForm);
with papka do
begin
Parent:= WizardForm.SelectProgramGroupPage;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=True;
ExtractTemporaryFile('papka.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
end;
end;

На рисункея показал то, что не смог найти, может кто-нибудь подскажет

______________________________________________________
У меня такая проблем, накидываю в код скрипты указанные выше, а он выделяет нижние строчки красной полосой:(
читать дальше »
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
WizardImageFile=M:\пример\Files\LOGO.bmp
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Messages]
rus.BeveledLabel=Релиз by МЕХАНИК

[code]
procedure InitializeWizard();
var
papka: TBitmapImage;
begin
papka := TBitmapImage.Create(WizardForm);
with papka do
begin
Parent:= WizardForm.SelectProgramGroupPage;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=True;
ExtractTemporaryFile('papka.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
end;
end;


const
Color = clblack;

procedure InitializeWizard();
begin
WizardForm.Font.Color:=clWhite;
WizardForm.Font.Name:= 'Comic Sans MS';
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.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.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;
end;

end;

Если не трудно, соберите мне пожалуйста целый код!

Gnom_aka_Lexander 22-01-2011 20:56 1594830

Devil Mehanik, Ты напиши, чего должно пулучиться, скриптов много наделано, мы подскажем, чего скачать, и что в скаченном изменить, чтоб получить то, чего тебе хочется.

Devil Mehanik 23-01-2011 05:51 1595160

Я хочу сделать черный фон, на 1й странице инсталла изменить эмблемку(которая находится слева), изменить шрифт и картинку папки, вставить картинку вверху и внизу(как на скриншоте)

Devil Mehanik 23-01-2011 07:38 1595174

Вот! 3 часа мучений и вот он, результат(подкиньте скрипт, как изменить картинку папки):
читать дальше »
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
WizardImageFile=M:\пример\Files\WizardImage.bmp
WizardSmallImageFile=M:\пример\Files\WizardSmallImage1.bmp
WindowVisible=no
WindowResizable=yes
AllowNoIcons=yes

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

[Files]
Source: "M:\пример\Files\WizardSmallImage1.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "M:\пример\Files\Untitled-1.bmp"; DestDir: "{tmp}"; Flags: dontcopy

[Messages]
rus.BeveledLabel=Релиз by МЕХАНИК

[code]
// --- Generated by InnoSetup Script Joiner version 3.0, Jul 22 2009, (c) Bulat Ziganshin <Bulat.Ziganshin@gmail.com>. More info at http://issjoiner.codeplex.com/
// --- Source: 11.iss ------------------------------------------------------------
var
LogoImage: TBitmapImage;
LicenseFormPage: TWizardPage;
RichEditViewer1: TRichEditViewer;
MultipleLinesPage: TWizardPage;
Label1: TLabel;
Bevel1_1: TBevel;
Label2: TLabel;
NewStaticText1: TNewStaticText;
SampleFormPage: TWizardPage;
Label1_1: TLabel;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
ListBox1: TListBox;
NewProgressBar1: TNewProgressBar;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
Panel2: TPanel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;

procedure ControlOnClick(Sender: TObject); forward;

procedure RedesignWizardForm;
begin

{ LogoImage }
LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Name := 'LogoImage';
Parent := WizardForm;
Left := ScaleX(32);
Top := ScaleY(323);
Width := ScaleX(175);
Height := ScaleY(39);
Bitmap.LoadFromFile(ExpandConstant('M:\пример\Files\logo.bmp'));
Cursor := crHand;
Hint := 'visit my blog';
ShowHint := True;
Stretch := True;
OnClick := @ControlOnClick;
end;



{ ReservationBegin }
// This part is for you. Add your specialized code here.

{ ReservationEnd }
end;
// Don't modify this section. It is generated automatically.
{ RedesignWizardFormEnd } // Don't remove this line!

procedure ControlOnClick(Sender: TObject);
var
ControlName: String;
ErrCode: Integer;
begin
if Sender = Button1 then
ControlName := 'Button1'
else if Sender = Button2 then
ControlName := 'Button2'
else if Sender = CheckBox1 then
ControlName := 'CheckBox1'
else if Sender = CheckBox2 then
ControlName := 'CheckBox2'
else if Sender = CheckBox3 then
ControlName := 'CheckBox3'
else if Sender = RadioButton1 then
ControlName := 'RadioButton1'
else if Sender = RadioButton2 then
ControlName := 'RadioButton2'
else if Sender = LogoImage then
ShellExec('open', 'http://restools.hanzify.org','','', SW_SHOW, ewNoWait, ErrCode);

if Sender <> LogoImage then
MsgBox(ControlName + ' OnClick', mbInformation, MB_OK);
end;

procedure InitializeWizard7();
begin
RedesignWizardForm;
end;

// --- Source: 11.iss ------------------------------------------------------------
var
PageNameLabel, PageDescriptionLabel: TLabel;


function NextButtonClick1(CurPageID: Integer): Boolean;
begin
Result := True;
end;

function NeedRestart1(): Boolean;
begin
Result := True;
end;

function GetCustomSetupExitCode1(): Integer;
begin
Result := 1;
end;

procedure InitializeWizard1();
begin
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.WizardBitmapImage.Width := WizardForm.Width;
WizardForm.WizardBitmapImage.Height := WizardForm.Height;

PageNameLabel := TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left := ScaleX(10);
Top := ScaleY(10);
Width := ScaleX(300);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Color := clWhite;
Font.Style := [fsBold];
ShowAccelChar := False;
Transparent := True;
Parent := WizardForm.MainPanel;
end;

PageDescriptionLabel := TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left := ScaleX(15);
Top := ScaleY(25);
Width := ScaleX(475);
Height := ScaleY(30);
AutoSize := False;
WordWrap := True;
Font.Color := clWhite;
ShowAccelChar := False;
Transparent := True;
Parent := WizardForm.MainPanel;
end;

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := Mainpanel.Width;
Height := MainPanel.Height;
end;
end;
end;
end;


procedure CurPageChanged1(CurPageID: Integer);
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
end;


// --- Source: 12.iss ------------------------------------------------------------
function NextButtonClick2(CurPageID: Integer): Boolean;
begin
Result := True;
end;

function NeedRestart2(): Boolean;
begin
Result := True;
end;

function GetCustomSetupExitCode2(): Integer;
begin
Result := 1;
end;

procedure InitializeWizard2();
var
WLabel1, WLabel2,
FLabel1, FLabel2: TLabel;
begin
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.WizardBitmapImage.Width := WizardForm.Width;
WizardForm.WizardBitmapImage.Height := WizardForm.Height;

WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(176);
WLabel1.Top := ScaleY(16);
WLabel1.Width := ScaleX(301);
WLabel1.Height := ScaleY(54);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Font.Size := 12;
WLabel1.Font.Style := [fsBold];
WLabel1.Font.Color:= clBlack;
WLabel1.ShowAccelChar := False;
WLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;

WLabel2 :=TLabel.Create(WizardForm);
WLabel2.Top := ScaleY(76);
WLabel2.Left := ScaleX(176);
WLabel2.Width := ScaleX(301);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.Font.Color:= clBlack;
WLabel2.ShowAccelChar := False;
WLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;

WizardForm.WizardBitmapImage2.Width := WizardForm.Width;
WizardForm.WizardBitmapImage2.Height := WizardForm.Height;

FLabel1 := TLabel.Create(WizardForm);
FLabel1.Left := ScaleX(176);
FLabel1.Top := ScaleY(16);
FLabel1.Width := ScaleX(301);
FLabel1.Height := ScaleY(54);
FLabel1.AutoSize := False;
FLabel1.WordWrap := True;
FLabel1.Font.Size := 12;
FLabel1.Font.Style := [fsBold];
FLabel1.Font.Color:= clBlack;
FLabel1.ShowAccelChar := False;
FLabel1.Caption := WizardForm.FinishedHeadingLabel.Caption;
FLabel1.Transparent := True;
FLabel1.Parent := WizardForm.FinishedPage;

FLabel2 :=TLabel.Create(WizardForm);
FLabel2.Top := ScaleY(76);
FLabel2.Left := ScaleX(176);
FLabel2.Width := ScaleX(301);
FLabel2.Height := ScaleY(53);
FLabel2.AutoSize := False;
FLabel2.WordWrap := True;
FLabel2.Font.Color:= clBlack;
FLabel2.ShowAccelChar := False;
FLabel2.Caption := 'Программа установлена на Ваш компьютер.' #13#13
'Нажмите <Завершить>, чтобы выйти из программы установки.';
FLabel2.Transparent := True;
FLabel2.Parent := WizardForm.FinishedPage;
end;


// --- Source: 13.iss ------------------------------------------------------------
const
NeedSize = 3700;

var
NeedSpaceLabel,FreeSpaceLabel: TLabel;
FreeMB, TotalMB: Cardinal;


procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + IntToStr(FreeMB)+ ' MB';
begin
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=false;
end else
WizardForm.NextButton.Enabled:=true;
end;
end;

procedure InitializeWizard3();
begin
WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(198);
Width := ScaleX(209);
Height := ScaleY(13);
Caption := 'Требуется для установки: 6.93 GB';
end;

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


WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged3(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=False
end;
end;



// --- Source: Чёрный фон.iss ------------------------------------------------------------
const
Color = clBlack;

procedure InitializeWizard5();
begin
WizardForm.Font.Name:= 'Comic Sans MS';
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.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.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;
end;

// --- Source: cvtyf rfhnbyrb.iss ------------------------------------------------------------
procedure InitializeWizard4();
var
papka: TBitmapImage;
begin
papka := TBitmapImage.Create(WizardForm);
with papka do
begin
Parent:= WizardForm.SelectProgramGroupPage;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=True;
ExtractTemporaryFile('Untitled-1.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\Untitled-1.bmp'));
end;
end;

// --- Source: 6.iss ------------------------------------------------------------
procedure InitializeWizard6();
var
BackgroundBitmapImage: TBitmapImage;
s:string;
begin
ExtractTemporaryFile('WizardSmallImage1.bmp');
s:=ExpandConstant('{tmp}')+'\WizardSmallImage1.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
end;


// --- Dispatching code ------------------------------------------------------------

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := NextButtonClick1(CurPageID); if not Result then exit;
Result := NextButtonClick2(CurPageID); if not Result then exit;
end;

function NeedRestart(): Boolean;
begin
Result := NeedRestart1(); if Result then exit;
Result := NeedRestart2(); if Result then exit;
end;

function GetCustomSetupExitCode(): Integer;
begin
Result := GetCustomSetupExitCode1(); if Result>0 then exit;
Result := GetCustomSetupExitCode2(); if Result>0 then exit;
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
InitializeWizard6();
InitializeWizard7();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged3(CurPageID);
end;

SteamShip 23-01-2011 10:35 1595220

Devil Mehanik,

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

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

[code]
procedure InitializeWizard();
begin
ExtractTemporaryFile('black_folder.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\black_folder.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\black_folder.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
end;

Devil Mehanik,
Ты случайно не это пытаешся сделать:
http://rghost.ru/4043763

Devil Mehanik 23-01-2011 12:16 1595270

да! Спасибо :)
А тот код котырый я писал тоже работет!!! У меня только проблема с папкой была

Imitri7 23-01-2011 16:34 1595482

Цитата:

Цитата Imitri7
нужна помощь, нужна типа такая => страница , но только чтоб не прописывать в компонентах, а какбэ отдельная страница

помогите плыз

Devil Mehanik 23-01-2011 18:56 1595564

читать дальше »
[Setup]
SourceDir=.
OutputDir=Setup
AppName=S.T.A.L.K.E.R. Зов Припяти
AppVerName=S.T.A.L.K.E.R. Зов Припяти
AppVersion=S.T.A.L.K.E.R. Зов Припяти
DefaultDirName={pf}\СТАЛКЕР ЗП
DefaultGroupName=S.T.A.L.K.E.R. Зов Припяти
AllowNoIcons=yes
OutputBaseFilename=setup
SetupIconFile=E:\игры\S.T.A.L.K.E.R. Зов Припяти\stalker_cop.ico
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=lzma/normal
DiskSpanning=yes
DiskSliceSize=2100000000
SlicesPerDisk=1
WizardImageFile=M:\Картинки\call0909 copy.bmp
WizardSmallImageFile=M:\Картинки\42xo52ZumZ.bmp

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

[Messages]
WizardSelectDir=
SelectDirDesc=
WizardSelectProgramGroup=
SelectStartMenuFolderDesc=
WizardReady=
ReadyLabel1=
WizardInstalling=
InstallingLabel=

[Files]
Source: "E:\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
Source: "M:\Картинки\42xo52ZumZ.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "M:\Картинки\49692_15613_img_lrg.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "M:\Untitled-1 copy.png"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "bass.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "innocallback.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "L:\Музыка\Прочее\Jasper Foreks-River Flows in You(DJ Devil).mp3"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "M:\железо\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "M:\Картинки\stalker.bmp"; DestDir: "{tmp}"; Flags: dontcopy

[Icons]
Name: "{group}\{cm:UninstallProgram,СТАЛКЕР: Зав Припяти}"; Filename: "{uninstallexe}"

[Run]
Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,My Program}"; Flags: nowait postinstall skipifsilent

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

[code]
// --- Source: 11.iss ------------------------------------------------------------
var
LogoImage: TBitmapImage;
LicenseFormPage: TWizardPage;
RichEditViewer1: TRichEditViewer;
MultipleLinesPage: TWizardPage;
Label1: TLabel;
Bevel1_1: TBevel;
Label2: TLabel;
NewStaticText1: TNewStaticText;
SampleFormPage: TWizardPage;
Label1_1: TLabel;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
ListBox1: TListBox;
NewProgressBar1: TNewProgressBar;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
Panel2: TPanel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;

procedure ControlOnClick(Sender: TObject); forward;

procedure RedesignWizardForm;
begin

{ LogoImage }
LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Name := 'LogoImage';
Parent := WizardForm;
Left := ScaleX(32);
Top := ScaleY(323);
Width := ScaleX(175);
Height := ScaleY(39);
Bitmap.LoadFromFile(ExpandConstant('M:\Картинки\Untitled-1.bmp'));
Cursor := crHand;
Hint := 'visit my blog';
ShowHint := True;
Stretch := True;
OnClick := @ControlOnClick;
end;



{ ReservationBegin }
// This part is for you. Add your specialized code here.

{ ReservationEnd }
end;
// Don't modify this section. It is generated automatically.
{ RedesignWizardFormEnd } // Don't remove this line!

procedure ControlOnClick(Sender: TObject);
var
ControlName: String;
ErrCode: Integer;
begin
if Sender = Button1 then
ControlName := 'Button1'
else if Sender = Button2 then
ControlName := 'Button2'
else if Sender = CheckBox1 then
ControlName := 'CheckBox1'
else if Sender = CheckBox2 then
ControlName := 'CheckBox2'
else if Sender = CheckBox3 then
ControlName := 'CheckBox3'
else if Sender = RadioButton1 then
ControlName := 'RadioButton1'
else if Sender = RadioButton2 then
ControlName := 'RadioButton2'
else if Sender = LogoImage then
ShellExec('open', 'http://TORRENTS.VTOMSKE.RU','','', SW_SHOW, ewNoWait, ErrCode);

if Sender <> LogoImage then
MsgBox(ControlName + ' OnClick', mbInformation, MB_OK);
end;

procedure InitializeWizard1();
begin
RedesignWizardForm;
end;
// --- Source: 6.iss ------------------------------------------------------------
procedure InitializeWizard2();
var
BackgroundBitmapImage: TBitmapImage;
s:string;
begin
ExtractTemporaryFile('42xo52ZumZ.bmp');
s:=ExpandConstant('{tmp}')+'\42xo52ZumZ.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
end;
////////////////////////////////////
procedure InitializeWizard3();
begin
ExtractTemporaryFile('stalker.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\stalker.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\stalker.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
end;
////////////////////////////////////
// --- Source: 13.iss ------------------------------------------------------------
const
NeedSize = 3700;

var
NeedSpaceLabel,FreeSpaceLabel: TLabel;
FreeMB, TotalMB: Cardinal;


procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + IntToStr(FreeMB)+ ' MB';
begin
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=false;
end else
WizardForm.NextButton.Enabled:=true;
end;
end;

procedure InitializeWizard4();
begin
WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(198);
Width := ScaleX(209);
Height := ScaleY(13);
Caption := 'Требуется для установки: 4,49 GB';
end;

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


WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged3(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=False
end;
end;

// --- Source: Чёрный фон.iss ------------------------------------------------------------
const
Color = clBlack;

procedure InitializeWizard5();
begin
WizardForm.Font.Name:= 'Comic Sans MS';
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.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.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;
end;
///////////////////////////////////
procedure InitializeWizard7();
var
BackgroundBitmapImage: TBitmapImage;
s:string;
begin
ExtractTemporaryFile('42xo52ZumZ.bmp');
s:=ExpandConstant('{tmp}')+'\42xo52ZumZ.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
end;

///////////////////////////////////
procedure InitializeWizard6();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 89;
Width := 497;
end;
with PageNameLabel do begin
Width := Width - 497;
Left := Left + 497;
end;
with PageDescriptionLabel do begin
Width := Width - 497;
Left := Left + 497;
end;
end;
end;
//////////////////////////////////
type
HSTREAM=DWORD;
TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
const
Indent=25;

var
MP3List:TStringList;
CurrentMP3:integer;
hMP3:HWND;
TimerID:LongWord;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssAddImage(FileName:PChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';
function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT; external 'SetTimer@user32.dll stdcall delayload';
function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload';
function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';
function BASS_StreamCreateFile(Mem:BOOL;f:PChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';

procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
if BASS_ChannelIsActive(hMP3)=0 then begin
BASS_Stop;
BASS_StreamFree(hMP3);
hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0);
BASS_Start;
if hMP3<>0 then
if BASS_ChannelPlay(hMP3,True) then begin
CurrentMP3:=CurrentMP3+1;
if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
end;
end;
end;

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('Jasper Foreks-River Flows in You(DJ Devil).mp3');
MP3List:=TStringList.Create;
MP3List.Add(ExpandConstant('{tmp}')+'\Jasper Foreks-River Flows in You(DJ Devil).mp3');
CurrentMP3:=0;
Result:=True;
end;

procedure InitializeWizard;
begin
ExtractTemporaryFile('Untitled-1 copy.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Untitled-1 copy.png',1000,3000,1000,0,255,False,$FFFFFF,10);
TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
BASS_Init(-1,44100,0,0,0);
BASS_SetConfig(5,100);
BASS_SetConfig(6,100);
ssInitialize(GetWindowLong(MainForm.Handle,-8),10,False,1,$FF000000);
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
InitializeWizard6();
InitializeWizard7();
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then begin
ExtractTemporaryFile('49692_15613_img_lrg.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\49692_15613_img_lrg.jpg');
ssStartShow;
end;
if CurStep=ssPostInstall then ssStopShow;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling then begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent);
WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end;
if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then begin
if WizardForm.Width<>502 then begin
WizardForm.Visible:=False;
WizardForm.Width:=ScaleX(502);
WizardForm.Height:=ScaleY(392);
WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2;
WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2;
WizardForm.MainPanel.Visible:=True;
WizardForm.Bevel1.Visible:=True;
WizardForm.InnerNotebook.Left:=ScaleX(40);
WizardForm.InnerNotebook.Top:=ScaleY(72);
WizardForm.InnerNotebook.Width:=ScaleX(417);
WizardForm.Visible:=True;
end;
end;
end;

procedure DeinitializeSetup;
begin
KillTimer(0,TimerID);
BASS_Stop;
BASS_Free;
MP3List.Free;
ssDeInitialize;
end;

Инсталл без багов, только всякий мусор устанавливает! Помогите найти те файлы, которые он устанавливает
и заменить на эти (и на всякий случай покажите пожалуйста где этот мусор был):
читать дальше »
Source: "E:\игры\S.T.A.L.K.E.R. Зов Припяти\FirewallInstallHelper.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\игры\S.T.A.L.K.E.R. Зов Припяти\fsgame.ltx"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\игры\S.T.A.L.K.E.R. Зов Припяти\GameuxInstallHelper.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\игры\S.T.A.L.K.E.R. Зов Припяти\stalker_cop.ico"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\игры\S.T.A.L.K.E.R. Зов Припяти\stalker_cop_save.ico"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\игры\S.T.A.L.K.E.R. Зов Припяти\Stalker-COP.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\игры\S.T.A.L.K.E.R. Зов Припяти\unins000.dat"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\игры\S.T.A.L.K.E.R. Зов Припяти\unins000.exe"; DestDir: "{app}"; Flags: ignoreversion

Vamp1re 23-01-2011 23:56 1595780

Как мне сделать чтоб после установки программы или игры Precomp распаковывал файлы .rep.srep из установленной папки?

serg aka lain 24-01-2011 00:25 1595797

Цитата:

Цитата Imitri7
страница , но только чтоб не прописывать в компонентах, а какбэ отдельная страница »

Возможный вариант

Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:InnoSetupTest.

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

[CustomMessages]
MyCheckListBox_Group1=Язык субтитров
MyCheckListBox_Group2=Язык озвучки
MyCheckListBox_Russian=Русский
MyCheckListBox_English=Английский

[code]
var
  MyComponentPage: TWizardPage;
  MyCheckListBox: TNewCheckListBox;

procedure GetMyComponentPage();
begin
  MyComponentPage := CreateCustomPage(wpWelcome,
        SetupMessage(msgWizardSelectComponents),
            SetupMessage(msgSelectComponentsDesc));

  with TNewStaticText.Create(WizardForm) do
  begin
    Width := WizardForm.InnerNotebook.Width;
    WordWrap := True;
    Caption := SetupMessage(msgSelectComponentsLabel2);
    Parent := MyComponentPage.Surface;
  end;

  MyCheckListBox := TNewCheckListBox.Create(WizardForm);
  with MyCheckListBox do
  begin
    Parent := MyComponentPage.Surface;
    Top := ScaleY(48);
    Width := WizardForm.InnerNotebook.Width;
    Height := ScaleY(157);
    AddCheckBox(ExpandConstant('{cm:MyCheckListBox_Group1}'),
          '', 0, True, False, False, True, TStringList.Create);
    AddRadioButton(ExpandConstant('{cm:MyCheckListBox_Russian}'),
                          '', 1, True, True, TStringList.Create);
    AddRadioButton(ExpandConstant('{cm:MyCheckListBox_English}'),
                          '', 1, False, True, TStringList.Create);
    AddCheckBox(ExpandConstant('{cm:MyCheckListBox_Group2}'), '',
                      0, True, False, False, True, TStringList.Create);
    AddRadioButton(ExpandConstant('{cm:MyCheckListBox_Russian}'),
                                  '', 1, True, True, TStringList.Create);
    AddRadioButton(ExpandConstant('{cm:MyCheckListBox_English}'),
                                '', 1, False, True, TStringList.Create);
  end;
end;

procedure InitializeWizard();
begin
  GetMyComponentPage();
end;


Imitri7 25-01-2011 22:01 1597215

serg aka lain, а для другого цвета текста нужны лейблы отдельные?

serg aka lain 25-01-2011 22:10 1597222

Цитата:

Цитата Imitri7
а для другого цвета текста нужны лейблы отдельные? »

Если для TNewCheckListBox, то так:
Код:

MyCheckListBox.Font.Color := $6af140;

Silver37 26-01-2011 10:54 1597468

Доброго времени суток....

Не подскажете в чем проблема -

[code]
Код:

const
    Archives = '{src}\*.arc';    // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

    PM_REMOVE = 1;
    CP_ACP = 0; CP_UTF8 = 65001;
    oneMb = 1048576;

type
#ifdef UNICODE  ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
    #define A "W"
#else
    #define A "A"  ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
    PAnsiChar = PChar;  // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
    AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

Что за препроцессор?, или как можно эту проблему подругому исправить, заранее благодарен =)

R.i.m.s.k.y. 26-01-2011 11:43 1597505

Цитата:

Цитата Silver37
Что за препроцессор »

Расширяет функции Инно
смотри тут http://forum.oszone.net/showthread.p...99#post1201499
Или качай сразу inno ultra с innoultra.ru

STRAYKER 26-01-2011 16:21 1597712

пожалуйста у кого есть Inno Setup Preprocesor ?
Дайте пожалуйста заранее багодорю

Habetdin 26-01-2011 16:23 1597713

STRAYKER, вам же дали ссылку:
Цитата:

Цитата Serega
в сборке присутствует Inno Setup Preprocessor »


LLITAKETA 27-01-2011 10:02 1598149

Ребята дайте пожалуйста шаблонов на такие инсталяторы (желательно, чтобы музыка тоже играла в правом верхнем углу) :
1 страница, 2 страница и 3 страница...или хотябы скажите где скачать можно.
Заранее большое пребольшое спасибо.

Gnom_aka_Lexander 27-01-2011 11:44 1598250

LLITAKETA, Тут примерно то, что тебе нужно, просто подставиш свою графику и получиш то, что хочеш :)

Vamp1re 27-01-2011 19:22 1598614

Как мне сделать чтоб некоторые файлы устанавливалисть в C:\Program Files\...

Habetdin 27-01-2011 22:08 1598726

Vamp1re,
Код:

[Setup]
DefaultDirName={pf}\My program 1

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
Source: compiler:Examples\MyProg.exe; DestDir: {pf}\My program 2; Flags: ignoreversion

Первый файл распакуется в %ProgramFiles%\My program 1, второй - в %ProgramFiles%\My program 2

Vamp1re 27-01-2011 22:18 1598734

Habetdin, Спасибо! так ето необязательно прописывать строчку в разделе [Setup]?

Habetdin 27-01-2011 22:40 1598751

Vamp1re, строка в секции [Setup] определяет переменную {app}
Если папка вообще не нужна (например, только установка программы без удаления), то:
Код:

[Setup]
; Не создавать папку приложения
CreateAppDir=no
; Не создавать деинсталлятор
Uninstallable=false


Black666angel 28-01-2011 01:51 1598847

Добрый вечер нужен скрипт надписи на всех страницах инстала (как в Need for Speed)
Подробнеи

LLITAKETA 28-01-2011 02:56 1598863

Спасибо))
Но после того как я скачал этот архив и посмотрел что внутри, я удивился!!!
У меня не показывает ни одно изображение, не воспроизводится ни один музыкальный файл, да и все скрипты внутри пустые!!!

Black666angel 28-01-2011 11:19 1599035

Цитата:

Цитата LLITAKETA
Но после того как я скачал этот архив и посмотрел что внутри, я удивился!!!
У меня не показывает ни одно изображение, не воспроизводится ни один музыкальный файл, да и все скрипты внутри пустые!!! »

Обнови WinRar
x32 x64

LLITAKETA 28-01-2011 16:38 1599300

Спасибо, помогло))

LLITAKETA 28-01-2011 18:14 1599337

Даа...помочь то помогло, но мне до этого что как то не понять)))
Есле не сложно не могли простенькую видеоинструкцию сделать....плиз...
А то я совсем простой репак могу сделать, а вот с музыкой, со слайд-шоу, и с установкой доп.ПО разобраться никак не могу(((
Кому не сложно сделайте пожалуйста. :cry: :cry:

Serega 28-01-2011 19:38 1599395

Цитата:

Цитата LLITAKETA
Есле не сложно не могли простенькую видеоинструкцию сделать....плиз...
А то я совсем простой репак могу сделать, а вот с музыкой, со слайд-шоу, и с установкой доп.ПО разобраться никак не могу((( »

А может Вы себя хоть немного заставите прочитать Справку и взглянуть на примеры скриптов и я уверяю Вас, многие вопросы просто отпадут...

P.S.
Меня просто удивляют люди, пытающиеся сделать репак, к той или иной программе, причём пытающиеся сделать те или иные навороты к инсталлу, причём даже не понимая о чём идёт речь...
Главное что бы это выглядело лучше чем у других... и в то же время, не пытающихся что-то сделать для этого.
В основном только просьбы, сделайте за меня, а я только выполню обычный копи-паст и всё будет нормально...

LLITAKETA 28-01-2011 20:06 1599414

Вообще то я делаю только для себя и для своих друзей по двору!!!

Serega 28-01-2011 20:22 1599426

Цитата:

Цитата LLITAKETA
Вообще то я делаю только для себя »

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

LLITAKETA 29-01-2011 03:11 1599594

Цитата:

Цитата Serega
Уверяю Вас, я не хотел Вас обидеть »

Да Вы меня ни в коем случае не обидели)))
Основные то моменты я понимаю, просто я иногда путаюсь очень сильно, в некоторых местах просто не понимаю))Но как говорится: "Терпенье и труд всё перетрут")))

Imitri7 29-01-2011 10:56 1599702

в репаках механиков перед деинсталляцией выскакивает окно : "удалить сохранения игры?" и там две кнопки да и нет...
как реализовать это?
зы и еще, подкинте плз скрипт: если игра уже установлена и повторно запустить сетапник выскакивало окошко: "запустить или удалить игру" и кнопки запустить и удалить
спасибо за внимание

duxa 29-01-2011 11:16 1599710

Imitri7, ответил в личку.

death7lord 29-01-2011 11:17 1599711

тут возникло три вопроса:
(пользуюсь сборкой ISDone0.4.2.5 +precomp +srep15)

1.как реализовать так, что бы при выборе определённой "галочки" после установки был определённый реестр
(например, игра с патчем или без и соответственно реестр чуть различный)

2. в конце кода ISDone0.4.2.5 идёт распаковка arc, precomp, srep....
хочу сделать антологию и т.к. файлы в играх схожие, то есть возможность упаковать их вместе для лучшего сжатия и уменьшения веса
а как потом в ISDone распаковать файлы только определённой игры (всё распаковывать не вариант, т.к. надо место на харде)
(например, в архиве три папки 1,2,3 со своими файлами для каждой игры соответственно и мне нужно тока файлы 2й части)

3.и последний.... где найти код для инсталятора, что бы по умолчанию всегда были белые буквы на чёрном фоне? т.е. цветовая гамма обратная стандартной

duxa 29-01-2011 11:26 1599721

Цитата:

1.как реализовать так, что бы при выборе определённой "галочки" после установки был определённый реестр
(например, игра с патчем или без и соответственно реестр чуть различный)
Просто привяжи реестр к компонентам. Пример:
Цитата:

Root: HKLM; Subkey: "SOFTWARE\EA GAMES\Need for Speed Most Wanted"; ValueName: "Language"; ValueType: String; ValueData: "Russian"; Components:text\rus;

Vista-w 29-01-2011 12:44 1599762

Ребят может кто подскажет как сделать, чтоб после установки файл скопировался по адресу
C:/Documents and Settings/Admin/Мои документы/Папка1/Папка2

Wilddeer 29-01-2011 13:32 1599788

Цитата:

Цитата Лександер
R.i.m.s.k.y., это прекомпрессор для улучшения ПОСЛЕДУЮЩЕГО сжатия, он ищет ZLib-потоки в файлах и(или) архивах, и РАЗЖИМАЕТ их, в результате чего, последующее сжатие на порядок выше
Извиняюсь за оффтоп, но лучший, на мой взгляд вариант - паковать в 7-зип БЕЗ сжатия, прогонять прекомпом, после чего паковать снова ужем чем нравится с максимально возможным сжатием. Таким образом я в игре Стар варс форс анлишед 20 гиг игровых архивов сжал до 3 гиг
R.i.m.s.k.y., во, поможеш? Нужно сюда:
читать дальше »
приделать проверку на isHLPinstalled - если да, то создается, если нет, то не создается.
нуи на вин семь
Чтобы вместо
Check: (HLP and isWin7 and (not IsWin64) and (not isHLPinstalled ))
Написать Check: HLP and not IsWin64 (или HLP and IsWin64)
И, да, вот это:
читать дальше »
в скрипте уже есть »


Всё,разобрался!
Спасибо большое!Сжимает довольно неплохо)

death7lord 29-01-2011 14:28 1599821

можно ли в ISDone распаковать arc-архив тока частично?
или ещё после распаковки архива, но перед следующей операцией по списку - запустить файл на корректировку содержимого

duxa 29-01-2011 14:50 1599828

death7lord, ответ автора на данный вопрос:
Цитата:

Еще нет.
===
Подскажите пожалуйста как реализовать через OnClick:=... "переход" на стандартную страницу

Wilddeer 29-01-2011 17:20 1599915

У меня в .arc запакован .pcf
Как сделать чтобы сначала в {tmp} из arc распаковался .pcf а потом запустить процесс распаковки .pcf в путь установки!

Думаю понятно написал)

Ну или както попроще можно осуществить этот процесс!

death7lord 29-01-2011 19:36 1599990

кто-нибудь знает скрипт на ArcaniA: Gothic 4 [Repack] от R.G.Catalyst 3,31GB ??
меня в частности интересует кусок по автоматической сборке архивов игры
по-моему они используют Arc_PAK_Worker, но я не могу понять какой командой они его запускают из инсталятора

заранее спасибо)

Vista-w 29-01-2011 19:39 1599991

death7lord,
Думаю посоветоваться лучше с автором данного рпк.

death7lord 29-01-2011 19:47 1599999

по готовому exe можно узнать скрипт??

думаю они меня просто нахрен пошлют или промолчат

duxa 29-01-2011 20:47 1600024

Цитата:

по готовому exe можно узнать скрипт??

думаю они меня просто нахрен пошлют или промолчат
Пойми, никто тебе скрипт не покажет. Можешь вырвать анпакерои скрипт из exe, но найдешь там только реест, msg.
Цитата:

меня в частности интересует кусок по автоматической сборке архивов игры
по-моему они используют Arc_PAK_Worker, но я не могу понять какой командой они его запускают из инсталятора
Могу только посоветовать проследить запуск и параметры через ProcessMonitor

Gnom_aka_Lexander 29-01-2011 21:58 1600065

Цитата:

Цитата Imitri7
"удалить сохранения игры?" и там две кнопки да и нет...
как реализовать это? »

, Так както :

Код:

//================== Удаление сохранений ==================//

procedure DeleteSavedGames(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep=usUninstall then
  if DirExists(ExpandConstant('{userdocs}')+'\NFS Undercover') then // Ищем сохранения по заданному пути, если путь существует, то:
  if MsgBox(ExpandConstant('{удалить сохранения игры?}'), mbInformation, MB_YESNO) = idYes then // создаем меседжбокс с запросом на удаление, если на запрос нажали Ок, то:
  DelTree(ExpandConstant('{userdocs}')+'\NFS Undercover', True, True, True) //Удаляем.
end;

//================== Удаление сохранений ==================//
........................
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  DeleteSavedGames(CurUninstallStep);           
end;


lex7868 29-01-2011 22:57 1600116

Здравствуйте все.
Может кто подскажет, какую нужно прописать комманду в инсталлятор, чтобы при инсталляции происходила выгрузка из памяти загруженной dll-ки и завершалась работа проги, сидящей в памяти. Собственно поясню. Есть прога, блокиратор папок, она грузит в память dll-ку и exe-шник монитор. Я сделал русификатор, но из-за того, что исполняемый файл и библиотека загружены, понятное дело, подменить их не получается.

Gnom_aka_Lexander 30-01-2011 20:43 1600651

Neutron, Сложно было всю эту портянку под спойлер спрятать?

N00bak 31-01-2011 16:39 1601301

не могу наложить изображение на кнопки сплошные ошибке кто может помочь если че стучите в асю 556081838

Vamp1re 31-01-2011 19:43 1601413

Дайте мне можалуйста пример командной строки Precomp 0.3.8

duxa 31-01-2011 20:01 1601428

Vamp1re, precomp.exe *команда* *сам файл*
Список команд:
читать дальше »


r "Recompress" PCF file (restore original file)
o[filename] Write output to [filename] <[input_file].pcf or file in header>
f Fast mode, use first found compression lvl for all streams <off>
c[1..9] Compression levels to try for compression <123456789>
m[1..9] Memory levels to try for compression <123456789>
i[pos] Ignore stream at input file position [pos] <none>
s[size] Set minimal identical byte size to [size] <4 (64 in slow mode)>
slow Detect raw zLib headers, too. Slower and more sensitive <off>
brute Brute force zLib detection. VERY Slow and most sensitive <off>
pdfbmp[+-] Wrap a BMP header around PDF images <off>
progonly[+-] Recompress progressive JPGs only (useful for PAQ) <off>
v Verbose (debug) mode <off>

t[+-][pzgnfj] Compression type switch <all enabled>
t+ enables certain compression types and disables the other ones
t- disables certain compression types and enables the other ones
P = PDF, Z = ZIP, G = GZip, N = PNG, F = GIF, J = JPG, S = SWF

Vamp1re 31-01-2011 20:13 1601445

duxa, А ничего прописывать в разделе [code] ненадо?

Gnom_aka_Lexander 31-01-2011 20:24 1601460

Vamp1re, простейший вариант - пишеш в батник, и запускаеш его из секции[RUN]
А чтоб красиво - через исдоне.

Vamp1re 31-01-2011 20:28 1601463

у меня еще один вопрос: как сжать папку с файлами через precomp? :)

Gnom_aka_Lexander 31-01-2011 20:40 1601474

Vamp1re, я недавно давал русскую справку по прекомпу, довольно подробную.
То, что тебе нужно - команда пакетной обработки. И да, способы сжатия в этой теме - оффтоп.

Gnom_aka_Lexander 01-02-2011 10:07 1601855

Neutron, Давай проще, расскажи, чего хочеш, почти наверняка то, что ты хочеш уже есть :)

zark 01-02-2011 13:27 1602009

У меня есть 32-битное приложение. Также есть DLL, которая реализует расширение контекстного меню проводника. Для win32 32-бтная библиотека, а для win64 - 64 - битная. Возник вопрос - как создать единый инсталлятор? Т.е. чтобы инсталлятор сам понимал какой файл библотеки ему брать и регистрировать в системе.
Что-то типа:

Код:

[Files]
...
    if  <ОС 32 битная>  then
Source: "allfiles\ACMenu.dll"; DestDir: "{app}"; Flags: 32bit noregerror regserver restartreplace;
  else
Source: "allfiles\ACMenu64.dll"; DestDir: "{app}"; Flags: 64bit noregerror regserver restartreplace;
  endif;

Можно ли это реализовать средствами InnoSetup?

Gnom_aka_Lexander 01-02-2011 13:32 1602015

zark,
[Files]
Source: "allfiles\ACMenu.dll"; DestDir: "{app}"; chek: not isWin64; Flags: 32bit noregerror regserver restartreplace;
Source: "allfiles\ACMenu64.dll"; DestDir: "{app}";chek: isWin64; Flags: 64bit noregerror regserver restartreplace;

R.i.m.s.k.y. 01-02-2011 14:05 1602046

zark, Лександер, верно но нужно дописать в
[Setup]
ArchitecturesInstallIn64BitMode=x64

и не Chek а Check
[Files]
Source: "allfiles\ACMenu.dll"; DestDir: "{app}"; Check: (not isWin64); Flags: 32bit noregerror regserver restartreplace;
Source: "allfiles\ACMenu64.dll"; DestDir: "{app}";Check: (isWin64); Flags: 64bit noregerror regserver restartreplace;

Gnom_aka_Lexander 01-02-2011 15:47 1602121

R.i.m.s.k.y., не, эта строчка обозначает архитектуру приложения, и если ее дописать, то 32-х битное приложение на 64-х битной винде установится не в Program Files (x86), как должно-бы, а в Program Files, изза чего глюки с *открыть с помощью...* возникают, ну может еще какие, в общем, если приложение не х64, то эту строчку писать нельзя.
А вот флаги 32bit и 64bit можно не ставить при Check: (isWin64) и Check: (not isWin64). :)

R.i.m.s.k.y. 01-02-2011 15:50 1602125

Цитата:

Цитата Лександер
изза чего глюки с *открыть с помощью...* возникают »

глюки не возникнут если правильно прописывать пути, вообще не столкнулся с такой проблемой.
Цитата:

Цитата Лександер
не, эта строчка обозначает архитектуру приложения »

Specifies the 64-bit processor architecture(s) on which Setup should install in 64-bit mode. If this directive is not specified or is blank, Setup will always install in 32-bit mode.
Normally, you should not change this directive from its default value unless your application contains native 64-bit binaries.

Без этой строчки в ос64 его файлики64 не зарегятся тк Setup will always install in 32-bit mode
Ну и следствие отсутствия этой строчки - да, предлагает по-умолчанию Program Files (x86)

Там еще в помощи важное примечание: Be sure you have read the 64-bit Installation Limitations topic before setting this directive

Код:

Because Inno Setup is a 32-bit application, there are some limitations to be aware of when utilizing its 64-bit installation features:

The System32 path returned by the {sys} constant does not always map to the 64-bit System directory. When Setup/Uninstall is running in 64-bit mode, it maps to the 64-bit System directory when used in the [Dirs], [Files], [InstallDelete], [Run], [UninstallDelete], and [UninstallRun] sections because Setup temporarily disables WOW64 file system redirection when files/directories are accessed by those sections. Elsewhere, System32 and {sys} map to the 32-bit System directory, as is normal in a 32-bit process.
In the [_Code] section, when Setup/Uninstall is running in 64-bit mode, functions that access files disable WOW64 file system redirection (unless overridden by a call to EnableFsRedirection). However, there are exceptions, listed below. These functions never disable file system redirection, meaning you cannot pass them (or get back) the name of a file located in the 64-bit System directory:

*Ini* (all of the functions that manipulate .INI files)
BrowseForFolder
CreateShellLink
GetOpenFileName
LoadDLL (see following point)
ModifyPifFile
SetCurrentDir
ShellExec (use Exec instead)
UnregisterFont

Additionally, no VCL classes are capable of disabling file system redirection. For example, you cannot call the LoadFromFile method of TBitmap to load a bitmap file from the 64-bit System directory.

You cannot load/use 64-bit DLLs in the [_Code] section, because Windows does not allow 32-bit processes to load 64-bit DLLs (and vice versa). A 32-bit process can, however, launch 64-bit EXEs. Use the Exec function or the [Run] section to do that.

Also, there is one limitation of the compiler:

You cannot compile a script that includes 64-bit binaries on Windows 95, 98, Me, or NT 4.0, because those versions of Windows do not support reading version info on 64-bit images.

Цитата:

Цитата Лександер
А вот флаги 32bit и 64bit »

их НУЖНО ставить, нажми F1 и почитай
32bit
Causes the {sys} constant to map to the 32-bit System directory when used in the Source and DestDir parameters, the regserver and regtypelib flags to treat the file as 32-bit, and the sharedfile flag to update the 32-bit SharedDLLs registry key. This is the default behavior in a 32-bit mode install.

64bit
Causes the {sys} constant to map to the 64-bit System directory when used in the Source and DestDir parameters, the regserver and regtypelib flags to treat the file as 64-bit, and the sharedfile flag to update the 64-bit SharedDLLs registry key. This is the default behavior in a 64-bit mode install.

Gnom_aka_Lexander 01-02-2011 16:05 1602140

R.i.m.s.k.y., Я нерусских языков не понимаю :) , потому нерусской справкой пользоваться не в состоянии :)
Поэтому просто поверю тебе на слово :).

R.i.m.s.k.y. 01-02-2011 16:27 1602154

Лександер, а в русской не написано? мне переводить вломмм. Просто скажу - в ос64 для файликов64 пользуем флаг64, и очень аккуратно чтобы не напутать. Папка System32 - для файликов64, Syswow64 - для файликов32, ключи реестра к примеру HKLM64 (так и пишется!).
Кодеки32 начинают писаться в HKLM\SOFTWARE\Wow6432Node\Classes\CLSID\... и HKLM\SOFTWARE\Classes\Wow6432Node\CLSID\... вместо HKLM\SOFTWARE\Classes\CLSID\...

Habetdin 02-02-2011 01:59 1602530

Neutron,
Цитата:

Цитата Neutron
но выдаёт сообщение: function InitializeSetup:boolean;! »

Может dublicate в конце? ;)

Скрипт:
читать дальше »
Код:

[Setup]
AppId={{467F7BE6-FAAD-4ABF-A5E1-980896892382}
AppName=My Program
AppVersion=1.5
AppVerName=My Program
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={code:NoSD}\Games\My Program
DefaultGroupName=My Program
AllowNoIcons=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
OutputDir=.

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

[Files]
;Source: C:\Rus\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Data\ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Data\tiger_v2.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Data\bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Data\innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Data\Play.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

[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: {app}\MyProg.exe; Description: {cm:LaunchProgram,My Program}; Flags: nowait postinstall skipifsilent unchecked


[Code]
//WizardForm.Bevel.visible:=true;
//WizardForm.Bevel1.visible:=true;
//WizardForm.Font.Color:=clWhite;

//-------------------- Автовыбор диска установки - Начало --------------------\\
function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(lpRootPathName: PChar): Cardinal; external 'GetDriveTypeA@kernel32.dll stdcall';

const
  DRIVE_FIXED = 3;

function NoSD(s: string): string;
var
  x, bit, i: Integer;
  tp: Cardinal;
  sd: string;
begin
  sd:= ExpandConstant('{sd}');
  Result:= sd;
  // Вызываем функцию WinAPI
  // Функция возвращает битовую маску установленных логических дисков.
  // Бит 0 определяет наличие диска А:, бит 1 - диска B и т.д.
  x:= GetLogicalDrives;
  if x <> 0 then
  // Цикл по полученным битам переменной X
  for i:= 1 to 64 do
    begin
      // Накладываем битовую маску для выделения бита с поряковым номером 0
      bit:= x and 1;
      // Нашли логический диск...
      if bit = 1 then
        begin
          // Определяем тип логического диска
          tp:= GetDriveType(PChar(Chr(64 + i) + ':'));
          if tp = DRIVE_FIXED then
          // Если диск не является системным
          if Chr(64 + i) <> Copy(sd, 1, 1) then
            begin
              Result:= Chr(64 + i) + ':';
              Break;
            end;
        end;
      // Побитовый сдвиг вправо
      x:= x shr 1;
    end;
end;
//-------------------- Автовыбор диска установки - Конец --------------------\\

//-------------------- Поиск приложений через реестр - Начало --------------------\\
var
ResultStr:string;
ResultCode: Integer;

function InitializeSetup1(): Boolean;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{467F7BE6-FAAD-4ABF-A5E1-980896892382}_is1', 'UninstallString', ResultStr)
if ResultStr='' then
begin
Result := True;
end
else
ResultStr:=RemoveQuotes(ResultStr);
Exec(ResultStr, '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;
//-------------------- Поиск приложений через реестр - Конец --------------------\\
//-------------------- Удаление сохранений - Начало --------------------\\
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then
begin
if DirExists(ExpandConstant('{userdocs}\Сохранения')) then
begin
if MsgBox('Удалить сохраненные игры?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{userdocs}\Сохранения'), True, True, True);
end;
end;
end;
end;
//-------------------- Удаление сохранений - Конец --------------------\\

//-------------------- Проверка требований системы (Черный стиль - Исправил немного) - Начало --------------------\\
type
 PDisplay_Device = record
  cb: DWord;
  DeviceName: array [0..31] of char;
  DeviceString: array [0..127] of char;
  StateFlags: DWord;
  DeviceID, DeviceKey: array [0..127] of char;
 end;

 TMixerCaps = record
  vPid, vDriverVersion: DWord;
  sName: array [0..31] of char;
  Support, cDestinations: DWord;
 end;

// Проверка версии Windows
#if Pos("4.", GetFileVersion(AddBackslash(GetEnv("windir")) + "Explorer.exe")) == 1
        {Win9x}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, LoAvailPhys, LoTotalPageFile, LoAvailPageFile,
    LoTotalVirtual, LoAvailVirtual, LoAvailExtendedVirtual, HiTotalPhys,
    HiAvailPhys, HiTotalPageFile, HiAvailPageFile, HiTotalVirtual, HiAvailVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatus@kernel32.dll stdcall';
#else
        {WinNT}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,
    LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,
    LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
#endif

const
  DISPLAY_DEVICE_PRIMARY_DEVICE = 4;
  oneMB = 1024*1024;
  NeedMHz = 1600;
  NeedVideoRAM = 64;
  NeedSoundCard = 'Realtek HD';
  NeedMB = 512;
  NeedPageFile = 1048;

var
  InfoPage: TWizardPage;
  TopText, BottomText: TNewStaticText;
  ChangeText: Boolean;
  SystemPanel, ProcessorPanel, VideoPanel,
  AudioPanel, RAMPanel, PageFilePanel: TMemo;
  SystemVersionPanel, ProcessorMHzPanel, VideoRAMPanel,
  AudioNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  lpCaps: TMixerCaps;
  Version: TWindowsVersion;
  MemoryEx: TMemoryStatusEx;
  n, errCode: Integer;
  Keys: TArrayOfString;
  DeviceValue: Cardinal;
  lpDisplayDevice: PDisplay_Device;

function GetSystemMetrics(nIndex: Integer): Integer;
 external 'GetSystemMetrics@user32.dll stdcall';

function GetDeviceCaps(hDC, nIndex: Integer): Integer;
 external 'GetDeviceCaps@GDI32 stdcall';

function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer;
 external 'CreateDCA@GDI32 stdcall';

function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean;
 external 'EnumDisplayDevicesA@user32.dll stdcall';

function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TMixerCaps; uSize: LongInt): LongInt;
 external 'mixerGetDevCapsA@winmm.dll stdcall';

function mixerGetNumDevs: Integer;
 external 'mixerGetNumDevs@winmm.dll stdcall';

// Дополнить число до кратного Multiple
function ToMultiple(Bytes, Multiple: Integer): Integer;
begin
  if Abs(Bytes/Multiple) > Bytes/Multiple then
    Result := (Bytes/Multiple + 1)*Multiple
  else
    Result := Bytes
end;

// Перевод числа в значение Бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)
function ByteOrTB(Bytes: Extended; noMB: Boolean): String;
begin
 if not noMB then
    Result := FloatToStr(Int(Bytes)) + ' Мб'
 else
                if Bytes < 1024 then
      Result := FloatToStr(Int(Bytes)) + ' Бт'
    else
                        if Bytes/1024 < 1024 then
          Result := FloatToStr(round((Bytes/1024)*10)/10) + ' Кб'
      else
                                        if Bytes/oneMB < 1024 then
            Result := FloatToStr(round(Bytes/oneMB*100)/100) + ' Мб'
          else
            if Bytes/oneMB/1000 < 1024 then
                Result := FloatToStr(round(Bytes/oneMB/1024*1000)/1000) + ' Гб'
            else
                                                          Result := FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) + ' Тб'
 StringChange(Result, ',', '.')
end;

// Удаление начальных, конечных и повторных пробелов
function DelSp(String: String): String;
begin
 while (Pos('  ', String) > 0) do Delete(String, Pos('  ', String), 1)
 Result := Trim(String)
end;

function Size64(Hi, Lo: Integer): Extended;
begin
 Result := Lo
 if Lo < 0 then
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2
 for Hi := Hi-1 downto 0 do Result := Result + $7FFFFFFF + $7FFFFFFF + 2
end;

function CheckCPU(NeedMHz: Integer): Boolean;
var
  String: String;
begin
        String := 'Hardware\Description\System\CentralProcessor'; RegGetSubkeyNames(HKLM, String, Keys)        // Количество ядер
        for n := 0 to GetArrayLength(Keys)-1 do
      RegQueryStringValue(HKLM, String + '\' + Keys[n], 'ProcessorNameString', Keys[n])
        if not RegQueryDWordValue(HKLM, String + '\0', '~MHz', DeviceValue) or (DeviceValue < NeedMHz) then
        Exit
  else
    Result := True
end;

function CheckMemorySize(NeedRAM: Integer): Boolean;
begin
        MemoryEx.dwLength := SizeOf(MemoryEx)
        if not GlobalMemoryStatusEx(MemoryEx) then
        MsgBox('Ошибка функции:' + #13 + 'GlobalMemoryStatusEx', mbError, mb_Ok)
  else
          if (ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) < NeedRAM) then
        Exit
    else
        Result := True
end;

procedure CreateCheckForm();
begin

  TopText := TNewStaticText.Create(InfoPage)
  with TopText do
  begin
    Parent := InfoPage.Surface
    Left := 0
    AutoSize := True
  end

  BottomText := TNewStaticText.Create(InfoPage)
  with BottomText do
  begin
    Parent := InfoPage.Surface
    Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее»'
    Font.Color := clGray
    Left := 0
    Top := 200
    AutoSize := True
  end

  SystemPanel := TMemo.Create(InfoPage)
  with SystemPanel do
  begin
    Text := 'Система'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ScaleY(33)
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
    Font.Color := clWhite
  end

  SystemVersionPanel := TMemo.Create(InfoPage)
  with SystemVersionPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := SystemPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  ProcessorPanel := TMemo.Create(InfoPage)
  with ProcessorPanel do
  begin
    Text := 'Процессор'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := SystemPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
    Font.Color := clWhite
  end

  ProcessorMHzPanel := TMemo.Create(InfoPage)
  with ProcessorMHzPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := ProcessorPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  VideoPanel := TMemo.Create(InfoPage)
  with VideoPanel do
  begin
    Text := 'Видеоадаптер'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ProcessorPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
    Font.Color := clWhite
  end

  VideoRAMPanel := TMemo.Create(InfoPage)
  with VideoRAMPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := VideoPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  AudioPanel := TMemo.Create(InfoPage)
  with AudioPanel do
  begin
    Text := 'Звуковая карта'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := VideoPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
    Font.Color := clWhite
  end

  AudioNamePanel := TMemo.Create(InfoPage)
  with AudioNamePanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := AudioPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  RAMPanel := TMemo.Create(InfoPage)
  with RAMPanel do
  begin
    Text := 'Объём памяти'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := AudioPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
    Font.Color := clWhite
  end

  RAMTotalPanel := TMemo.Create(InfoPage)
  with RAMTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := RAMPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  PageFilePanel := TMemo.Create(InfoPage)
  with PageFilePanel do
  begin
    Text := 'Файл подкачки'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := RAMPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
    Font.Color := clWhite
  end;

  PageFileTotalPanel := TMemo.Create(InfoPage)
  with PageFileTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := PageFilePanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

end;

procedure UpdateInfo();
var
  DeviceName, DeviceKey: String;
begin
  ChangeText := False

  GetWindowsVersionEx(Version)

  // Операционная система:
  SystemVersionPanel.Color := clBlack
    SystemVersionPanel.Font.Color := clGreen

  DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'
  if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')
        RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)
  if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then
    DeviceName := DeviceName + ' ' + DeviceKey
        StringChange(DeviceName, 'Microsoft ', '')
  SystemVersionPanel.Text := ' ' + DeviceName + ' сборка ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +
                            '.' + IntToStr(Version.Build)

  if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
    (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
    (Pos('XP Service Pack 3', SystemVersionPanel.Text) = 0) and  // Windows XP SP3
    (Pos('Vista', SystemVersionPanel.Text) = 0) then  // Windows Vista (c любым SP или без него)
    begin
      SystemVersionPanel.Color := clBlack
      SystemVersionPanel.Font.Color := clRed
      ChangeText := True
    end

  // Процессор:
  ProcessorMHzPanel.Color := clBlack
  ProcessorMHzPanel.Font.Color := clGreen

  if not CheckCPU(NeedMHz) then
    begin
      ProcessorMHzPanel.Color := clBlack
      ProcessorMHzPanel.Font.Color := clRed
      ChangeText := True
    end

  ProcessorMHzPanel.Text := ' ' + DelSp(Keys[0]) + ' @' + IntToStr(DeviceValue) + ' MHz'
  if GetArrayLength(Keys) > 1 then
    ProcessorPanel.Text := 'Процессоры' // + ' (' + IntToStr(GetArrayLength(Keys)) + ')'

  // Видеокарта:
  VideoRAMPanel.Color := clBlack
  VideoRAMPanel.Font.Color := clGreen

  lpDisplayDevice.cb := SizeOf(lpDisplayDevice)
  DeviceKey := ''
        n := 0
  while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and
            (lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n := n + 1
        for n := 0 to 127 do DeviceKey := DeviceKey + lpDisplayDevice.DeviceKey[n]
  Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127)  // Ключ драйвера получаем из API
        StringChange(DeviceKey, '\Registry\Machine\', '')
  errCode := 1
  DeviceValue := 0
  if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName) then
                for n := 1 to Length(DeviceName) do
      begin
        DeviceValue := DeviceValue + Ord(DeviceName[n])*errCode
        errCode := errCode*$100
      end
  else
    if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then
    else
        RegQueryDWordValue(HKLM, DeviceKey + '\Info', 'VideoMemory', DeviceValue)
        DeviceName := ''
  for n := 0 to 127 do DeviceName := DeviceName + lpDisplayDevice.DeviceString[n]
  Delete(DeviceName, Pos(Chr(0), DeviceName), 127)

  if DeviceName <> '' then
    if DeviceValue > 0 then
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ', '+ ByteOrTB(DeviceValue/oneMB, False)
    else
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ' (Standard), '+ ByteOrTB(DeviceValue/oneMB, False)
  else
    begin
      VideoRAMPanel.Text := ' Драйвер устройства не обнаружен'
      VideoRAMPanel.Color := clBlack
      VideoRAMPanel.Font.Color := clRed
      ChangeText := True
    end
  if (DeviceValue/oneMB < NeedVideoRAM) then
    begin
      VideoRAMPanel.Color := clBlack
      VideoRAMPanel.Font.Color := clRed
      ChangeText := True
    end
  VideoRAMPanel.Text := VideoRAMPanel.Text + ', ' + IntToStr(GetSystemMetrics(0)) + 'x' +
                        IntToStr(GetSystemMetrics(1)) + ' (' + IntToStr(GetDeviceCaps(CreateDC('DISPLAY','','',0),14) *
                        GetDeviceCaps(CreateDC('DISPLAY','','',0),12)) + ' bit)'

  // Звуковая карта:
  AudioNamePanel.Color := clBlack
  AudioNamePanel.Font.Color := clGreen

  // for errCode := 0 to 1 do  // Вывод основного звукового устройства
  for errCode := 0 to mixerGetNumDevs do
    begin
                  mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps))
      DeviceName := ' '
                  for n := 0 to 31 do DeviceName := DeviceName + lpCaps.sName[n]
      Delete(DeviceName, Pos(Chr(0), DeviceName), 31)
      Delete(DeviceName, Pos(' [', DeviceName), 31)
      StringChange(DeviceName, 'SB ', 'Creative ')
      Delete(DeviceName, Pos(' Audio', DeviceName), 31)
                  SetArrayLength(Keys, errCode)
      if errCode > 0 then Keys[errCode-1] := DeviceName
    end

        if GetArrayLength(Keys) > 1 then
    begin
    AudioPanel.Text := 'Звуковые карты'
    // AudioPanel.Text := 'Звуковые карты (' + IntToStr(GetArrayLength(Keys)) +')'
    AudioNamePanel.Text := ''
    for n := 1 to GetArrayLength(Keys) do
        AudioNamePanel.Text := AudioNamePanel.Text + Keys[n-1]  // + '(' + IntToStr(n) + ')'
    end
  else
    if GetArrayLength(Keys) = 0 then
    begin
      AudioNamePanel.Text := ' Драйвер устройства не обнаружен'
      AudioNamePanel.Color := clBlack
      AudioNamePanel.Font.Color := clRed
      ChangeText := True
    end
      else
      AudioNamePanel.Text := Keys[0]
  if Pos(NeedSoundCard, AudioNamePanel.Text) = 0 then
    AudioNamePanel.Text := AudioNamePanel.Text + ' (рекомендуется ' + NeedSoundCard + ')'

  // Объём памяти:
    RAMTotalPanel.Color := clBlack
    RAMTotalPanel.Font.Color := clGreen
  if not CheckMemorySize(NeedMB) then
    begin
    RAMTotalPanel.Color := clBlack
    RAMTotalPanel.Font.Color := clRed
      ChangeText := True
    end
  RAMTotalPanel.Text := ' ' + ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16), False) + ' всего, ' +
                              ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) -
                                                        Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' используется, ' +
                              ByteOrTB(Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' свободно'

  // Виртуальная память:
  PageFileTotalPanel.Color := clBlack
  PageFileTotalPanel.Font.Color := clGreen
  PageFileTotalPanel.Text := ' ' + ByteOrTB(Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB, False) + ' всего, ' +
                                  ByteOrTB((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
                                            Size64(MemoryEx.HiAvailPageFile, MemoryEx.LoAvailPageFile))/oneMB, False) + ' занято системным кэшем'
  if Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB < NeedPageFile then
    begin
  PageFileTotalPanel.Color := clBlack
  PageFileTotalPanel.Font.Color := clRed
      ChangeText := True
    end

  if ChangeText = True then
    begin
      TopText.Top := 0
      TopText.Caption := 'Не все компоненты удовлетворяют минимальным требованиям игры.' #13
                        'Пожалуйста, проверьте позиции, выделенные красным цветом.'
      TopText.Font.Color := clRed
      // WizardForm.NextButton.Enabled := False
    end
  else
    begin
      TopText.Caption := 'Все компоненты соответствуют минимальным требованиям игры.'
      TopText.Font.Color := clGreen
      TopText.Top := 8
      // WizardForm.NextButton.Enabled := True
    end
end;

procedure InitializeWizard1();
begin
  InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
                                          'Программа установки обнаружила следующие наобходимые компоненты.')
  CreateCheckForm()  // Создание объектов TMemo, в которых будет выводится информация о системе
  UpdateInfo()  // Обновление информации о системе
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = InfoPage.ID then UpdateInfo()  // Обновление информации о системе
end;
//-------------------- Проверка требований системы (Черный стиль) - Конец --------------------\\


//-------------------- Скин + Музыка - Начало --------------------\\
type
  HSTREAM=DWORD;
  TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
var
  MP3List:TStringList;
  CurrentMP3:integer;
  hMP3:HWND;
  TimerID:LongWord;

function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';
function BASS_StreamCreateFile(Mem:BOOL;f:PChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT;  external 'SetTimer@user32.dll stdcall delayload';
function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
  if BASS_ChannelIsActive(hMP3)=0 then begin
    BASS_Stop;
    BASS_StreamFree(hMP3);
    hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0);
    BASS_Start;
    if hMP3<>0 then
      if BASS_ChannelPlay(hMP3,True) then begin
        CurrentMP3:=CurrentMP3+1;
        if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
      end;
  end;
end;

function InitializeSetup2():boolean;
begin
  ExtractTemporaryFile('Play.mp3');
  MP3List:=TStringList.Create;
  MP3List.Add(ExpandConstant('{tmp}')+'\Play.mp3');
  CurrentMP3:=0;
  ExtractTemporaryFile('tiger_v2.cjstyles');
  LoadSkin(ExpandConstant('{tmp}')+'\tiger_v2.cjstyles', '');
  Result:=True;
end;

procedure InitializeWizard2();
begin
  TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
  BASS_Init(-1,44100,0,0,0);
  BASS_SetConfig(5,100);
  BASS_SetConfig(6,100);
  WizardForm.BeveledLabel.Enabled:=True;
end;

procedure DeinitializeSetup;
begin
  KillTimer(0,TimerID);
  BASS_Stop;
  BASS_Free;
  MP3List.Free;
  ShowWindow(WizardForm.Handle,0);
  UnloadSkin();
end;

//-------------------- Скин + Музыка - конец --------------------\\

function InitializeSetup(): Boolean;
begin
InitializeSetup1();
InitializeSetup2();
end;

procedure InitializeWizard();
InitializeWizard1();
InitializeWizard2();
end;


Gnom_aka_Lexander 02-02-2011 11:12 1602693

Neutron,
читать дальше »
Код:

[Setup]
AppID={{085F49CD-C119-49BC-8130-65E06ACBF728}
AppName=Manhunt
AppVerName=Manhunt
AppVersion=1.1001.0
DefaultDirName={pf}\Games\Manhunt
DefaultGroupName=Games\Manhunt
AllowNoIcons=yes
OutputBaseFilename=setup
WindowVisible=false
WindowShowCaption=false
WindowResizable=false
Compression=lzma/normal
SourceDir=.
OutputDir=.
WizardImageFile=Data\Big.bmp

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

[Tasks]
Name: select; Description: Дополнительно;
Name: select\DirectX; Description: Обновить DirectX;

[Run]
Filename: {src}\DXSetup.exe; Parameters: /SILENT; Flags: skipifdoesntexist postinstall; StatusMsg: Устанавливается DirectX; Tasks: select\DirectX


[Components]
Name: r; Description: Russian; Types: rus
Name: e; Description: English; Types: eng

[Types]
Name: rus; Description: Русская версия
Name: eng; Description: English version


[Files]
Source: Data\ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Data\tiger_v2.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Data\bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Data\innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Data\Play.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

;Папка с игрой
;--------------
;Source: Games\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: Data\ISSkin.dll; DestDir: {app}; Flags: ignoreversion nocompression
Source: Data\tiger_v2.cjstyles; DestDir: {app}; Flags: ignoreversion nocompression

;Локализация

[Messages]
SetupWindowTitle=Manhunt

[Icons]
Name: {group}\{cm:UninstallProgram,}; Filename: {uninstallexe}

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

[_Code]
//==================== Начало =====================
type
  HSTREAM=DWORD;
  TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
var
  MP3List:TStringList;
  CurrentMP3:integer;
  hMP3:HWND;
  TimerID:LongWord;

function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT;  external 'SetTimer@user32.dll stdcall delayload';
function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload';
function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';
function BASS_StreamCreateFile(Mem:BOOL;f:PChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
  if BASS_ChannelIsActive(hMP3)=0 then begin
    BASS_Stop;
    BASS_StreamFree(hMP3);
    hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0);
    BASS_Start;
    if hMP3<>0 then
      if BASS_ChannelPlay(hMP3,True) then begin
        CurrentMP3:=CurrentMP3+1;
        if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
      end;
  end;
end;

function InitializeSetup1:boolean;
begin
  ExtractTemporaryFile('Play.mp3');
  MP3List:=TStringList.Create;
  MP3List.Add(ExpandConstant('{tmp}')+'\Play.mp3');
  CurrentMP3:=0;
  ExtractTemporaryFile('tiger_v2.cjstyles');
  LoadSkin(ExpandConstant('{tmp}')+'\tiger_v2.cjstyles', '');
  Result:=True;
end;

procedure InitializeWizard1;
begin
  TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
  BASS_Init(-1,44100,0,0,0);
  BASS_SetConfig(5,100);
  BASS_SetConfig(6,100);
  WizardForm.BeveledLabel.Enabled:=True;
end;

procedure DeinitializeSetup1;
begin
  KillTimer(0,TimerID);
  BASS_Stop;
  BASS_Free;
  MP3List.Free;
  ShowWindow(WizardForm.Handle,0);
  UnloadSkin();
end;

//=========== Системные требования - Начало ===========
type
 PDisplay_Device = record
  cb: DWord;
  DeviceName: array [0..31] of char;
  DeviceString: array [0..127] of char;
  StateFlags: DWord;
  DeviceID, DeviceKey: array [0..127] of char;
 end;

 TMixerCaps = record
  vPid, vDriverVersion: DWord;
  sName: array [0..31] of char;
  Support, cDestinations: DWord;
 end;

// Проверка версии Windows
#if Pos("4.", GetFileVersion(AddBackslash(GetEnv("windir")) + "Explorer.exe")) == 1
        {Win9x}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, LoAvailPhys, LoTotalPageFile, LoAvailPageFile,
    LoTotalVirtual, LoAvailVirtual, LoAvailExtendedVirtual, HiTotalPhys,
    HiAvailPhys, HiTotalPageFile, HiAvailPageFile, HiTotalVirtual, HiAvailVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatus@kernel32.dll stdcall';
#else
        {WinNT}
  TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,
    LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,
    LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,
    HiAvailExtendedVirtual: Integer;
  end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
  external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
#endif

const
  DISPLAY_DEVICE_PRIMARY_DEVICE = 4;
  oneMB = 1024*1024;
  NeedMHz = 2200;
  NeedVideoRAM = 256;
  NeedSoundCard = 'Realtek HD';
  NeedMB = 1024;
  NeedPageFile = 2048;

var
  InfoPage: TWizardPage;
  TopText, BottomText: TNewStaticText;
  ChangeText: Boolean;
  SystemPanel, ProcessorPanel, VideoPanel,
  AudioPanel, RAMPanel, PageFilePanel: TMemo;
  SystemVersionPanel, ProcessorMHzPanel, VideoRAMPanel,
  AudioNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  lpCaps: TMixerCaps;
  Version: TWindowsVersion;
  MemoryEx: TMemoryStatusEx;
  n, errCode: Integer;
  Keys: TArrayOfString;
  DeviceValue: Cardinal;
  lpDisplayDevice: PDisplay_Device;

function GetSystemMetrics(nIndex: Integer): Integer;
 external 'GetSystemMetrics@user32.dll stdcall';

function GetDeviceCaps(hDC, nIndex: Integer): Integer;
 external 'GetDeviceCaps@GDI32 stdcall';

function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer;
 external 'CreateDCA@GDI32 stdcall';

function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean;
 external 'EnumDisplayDevicesA@user32.dll stdcall';

function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TMixerCaps; uSize: LongInt): LongInt;
 external 'mixerGetDevCapsA@winmm.dll stdcall';

function mixerGetNumDevs: Integer;
 external 'mixerGetNumDevs@winmm.dll stdcall';

// Дополнить число до кратного Multiple
function ToMultiple(Bytes, Multiple: Integer): Integer;
begin
  if Abs(Bytes/Multiple) > Bytes/Multiple then
    Result := (Bytes/Multiple + 1)*Multiple
  else
    Result := Bytes
end;

// Перевод числа в значение Бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)
function ByteOrTB(Bytes: Extended; noMB: Boolean): String;
begin
 if not noMB then
    Result := FloatToStr(Int(Bytes)) + ' Мб'
 else
                if Bytes < 1024 then
      Result := FloatToStr(Int(Bytes)) + ' Бт'
    else
                        if Bytes/1024 < 1024 then
          Result := FloatToStr(round((Bytes/1024)*10)/10) + ' Кб'
      else
                                        if Bytes/oneMB < 1024 then
            Result := FloatToStr(round(Bytes/oneMB*100)/100) + ' Мб'
          else
            if Bytes/oneMB/1000 < 1024 then
                Result := FloatToStr(round(Bytes/oneMB/1024*1000)/1000) + ' Гб'
            else
                                                          Result := FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) + ' Тб'
 StringChange(Result, ',', '.')
end;

// Удаление начальных, конечных и повторных пробелов
function DelSp(String: String): String;
begin
 while (Pos('  ', String) > 0) do Delete(String, Pos('  ', String), 1)
 Result := Trim(String)
end;

function Size64(Hi, Lo: Integer): Extended;
begin
 Result := Lo
 if Lo < 0 then
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2
 for Hi := Hi-1 downto 0 do Result := Result + $7FFFFFFF + $7FFFFFFF + 2
end;

function CheckCPU(NeedMHz: Integer): Boolean;
var
  String: String;
begin
        String := 'Hardware\Description\System\CentralProcessor'; RegGetSubkeyNames(HKLM, String, Keys)        // Количество ядер
        for n := 0 to GetArrayLength(Keys)-1 do
      RegQueryStringValue(HKLM, String + '\' + Keys[n], 'ProcessorNameString', Keys[n])
        if not RegQueryDWordValue(HKLM, String + '\0', '~MHz', DeviceValue) or (DeviceValue < NeedMHz) then
        Exit
  else
    Result := True
end;

function CheckMemorySize(NeedRAM: Integer): Boolean;
begin
        MemoryEx.dwLength := SizeOf(MemoryEx)
        if not GlobalMemoryStatusEx(MemoryEx) then
        MsgBox('Ошибка функции:' + #13 + 'GlobalMemoryStatusEx', mbError, mb_Ok)
  else
          if (ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) < NeedRAM) then
        Exit
    else
        Result := True
end;

procedure CreateCheckForm();
begin

  TopText := TNewStaticText.Create(InfoPage)
  with TopText do
  begin
    Parent := InfoPage.Surface
    Left := 0
    AutoSize := True
  end

  BottomText := TNewStaticText.Create(InfoPage)
  with BottomText do
  begin
    Parent := InfoPage.Surface
    Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее»'
    Font.Color := clGray
    Left := 0
    Top := 200
    AutoSize := True
  end

  SystemPanel := TMemo.Create(InfoPage)
  with SystemPanel do
  begin
    Text := 'Система'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ScaleY(33)
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  SystemVersionPanel := TMemo.Create(InfoPage)
  with SystemVersionPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := SystemPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  ProcessorPanel := TMemo.Create(InfoPage)
  with ProcessorPanel do
  begin
    Text := 'Процессор'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := SystemPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  ProcessorMHzPanel := TMemo.Create(InfoPage)
  with ProcessorMHzPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := ProcessorPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  VideoPanel := TMemo.Create(InfoPage)
  with VideoPanel do
  begin
    Text := 'Видеоадаптер'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ProcessorPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  VideoRAMPanel := TMemo.Create(InfoPage)
  with VideoRAMPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := VideoPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  AudioPanel := TMemo.Create(InfoPage)
  with AudioPanel do
  begin
    Text := 'Звуковая карта'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := VideoPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  AudioNamePanel := TMemo.Create(InfoPage)
  with AudioNamePanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := AudioPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  RAMPanel := TMemo.Create(InfoPage)
  with RAMPanel do
  begin
    Text := 'Объём памяти'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := AudioPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end

  RAMTotalPanel := TMemo.Create(InfoPage)
  with RAMTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := RAMPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  PageFilePanel := TMemo.Create(InfoPage)
  with PageFilePanel do
  begin
    Text := 'Файл подкачки'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := RAMPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := clBlack
  end;

  PageFileTotalPanel := TMemo.Create(InfoPage)
  with PageFileTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := PageFilePanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

end;

procedure UpdateInfo();
var
  DeviceName, DeviceKey: String;
begin
  ChangeText := False

  GetWindowsVersionEx(Version)

  // Операционная система:
  SystemVersionPanel.Color := clBlack
    SystemVersionPanel.Font.Color := clGreen

  DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'
  if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')
        RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)
  if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then
    DeviceName := DeviceName + ' ' + DeviceKey
        StringChange(DeviceName, 'Microsoft ', '')
  SystemVersionPanel.Text := ' ' + DeviceName + ' сборка ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +
                            '.' + IntToStr(Version.Build)

  if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
    (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
    (Pos('XP Service Pack 3', SystemVersionPanel.Text) = 0) and  // Windows XP SP3
    (Pos('Vista', SystemVersionPanel.Text) = 0) then  // Windows Vista (c любым SP или без него)
    begin
      SystemVersionPanel.Color := clBlack
      SystemVersionPanel.Font.Color := clRed
      ChangeText := True
    end

  // Процессор:
  ProcessorMHzPanel.Color := clBlack
  ProcessorMHzPanel.Font.Color := clGreen

  if not CheckCPU(NeedMHz) then
    begin
      ProcessorMHzPanel.Color := clBlack
      ProcessorMHzPanel.Font.Color := clRed
      ChangeText := True
    end

  ProcessorMHzPanel.Text := ' ' + DelSp(Keys[0]) + ' @' + IntToStr(DeviceValue) + ' MHz'
  if GetArrayLength(Keys) > 1 then
    ProcessorPanel.Text := 'Процессоры' // + ' (' + IntToStr(GetArrayLength(Keys)) + ')'

  // Видеокарта:
  VideoRAMPanel.Color := clBlack
  VideoRAMPanel.Font.Color := clGreen

  lpDisplayDevice.cb := SizeOf(lpDisplayDevice)
  DeviceKey := ''
        n := 0
  while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and
            (lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n := n + 1
        for n := 0 to 127 do DeviceKey := DeviceKey + lpDisplayDevice.DeviceKey[n]
  Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127)  // Ключ драйвера получаем из API
        StringChange(DeviceKey, '\Registry\Machine\', '')
  errCode := 1
  DeviceValue := 0
  if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName) then
                for n := 1 to Length(DeviceName) do
      begin
        DeviceValue := DeviceValue + Ord(DeviceName[n])*errCode
        errCode := errCode*$100
      end
  else
    if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then
    else
        RegQueryDWordValue(HKLM, DeviceKey + '\Info', 'VideoMemory', DeviceValue)
        DeviceName := ''
  for n := 0 to 127 do DeviceName := DeviceName + lpDisplayDevice.DeviceString[n]
  Delete(DeviceName, Pos(Chr(0), DeviceName), 127)

  if DeviceName <> '' then
    if DeviceValue > 0 then
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ', '+ ByteOrTB(DeviceValue/oneMB, False)
    else
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ' (Standard), '+ ByteOrTB(DeviceValue/oneMB, False)
  else
    begin
      VideoRAMPanel.Text := ' Драйвер устройства не обнаружен'
      VideoRAMPanel.Color := clBlack
      VideoRAMPanel.Font.Color := clRed
      ChangeText := True
    end
  if (DeviceValue/oneMB < NeedVideoRAM) then
    begin
      VideoRAMPanel.Color := clBlack
      VideoRAMPanel.Font.Color := clRed
      ChangeText := True
    end
  VideoRAMPanel.Text := VideoRAMPanel.Text + ', ' + IntToStr(GetSystemMetrics(0)) + 'x' +
                        IntToStr(GetSystemMetrics(1)) + ' (' + IntToStr(GetDeviceCaps(CreateDC('DISPLAY','','',0),14) *
                        GetDeviceCaps(CreateDC('DISPLAY','','',0),12)) + ' bit)'

  // Звуковая карта:
  AudioNamePanel.Color := clBlack
  AudioNamePanel.Font.Color := clGreen

  // for errCode := 0 to 1 do  // Вывод основного звукового устройства
  for errCode := 0 to mixerGetNumDevs do
    begin
                  mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps))
      DeviceName := ' '
                  for n := 0 to 31 do DeviceName := DeviceName + lpCaps.sName[n]
      Delete(DeviceName, Pos(Chr(0), DeviceName), 31)
      Delete(DeviceName, Pos(' [', DeviceName), 31)
      StringChange(DeviceName, 'SB ', 'Creative ')
      Delete(DeviceName, Pos(' Audio', DeviceName), 31)
                  SetArrayLength(Keys, errCode)
      if errCode > 0 then Keys[errCode-1] := DeviceName
    end

        if GetArrayLength(Keys) > 1 then
    begin
    AudioPanel.Text := 'Звуковые карты'
    // AudioPanel.Text := 'Звуковые карты (' + IntToStr(GetArrayLength(Keys)) +')'
    AudioNamePanel.Text := ''
    for n := 1 to GetArrayLength(Keys) do
        AudioNamePanel.Text := AudioNamePanel.Text + Keys[n-1]  // + '(' + IntToStr(n) + ')'
    end
  else
    if GetArrayLength(Keys) = 0 then
    begin
      AudioNamePanel.Text := ' Драйвер устройства не обнаружен'
      AudioNamePanel.Color := clBlack
      AudioNamePanel.Font.Color := clRed
      ChangeText := True
    end
      else
      AudioNamePanel.Text := Keys[0]
  if Pos(NeedSoundCard, AudioNamePanel.Text) = 0 then
    AudioNamePanel.Text := AudioNamePanel.Text + ' (рекомендуется ' + NeedSoundCard + ')'

  // Объём памяти:
    RAMTotalPanel.Color := clBlack
    RAMTotalPanel.Font.Color := clGreen
  if not CheckMemorySize(NeedMB) then
    begin
    RAMTotalPanel.Color := clBlack
    RAMTotalPanel.Font.Color := clRed
      ChangeText := True
    end
  RAMTotalPanel.Text := ' ' + ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16), False) + ' всего, ' +
                              ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) -
                                                        Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' используется, ' +
                              ByteOrTB(Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' свободно'

  // Виртуальная память:
  PageFileTotalPanel.Color := clBlack
  PageFileTotalPanel.Font.Color := clGreen
  PageFileTotalPanel.Text := ' ' + ByteOrTB(Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB, False) + ' всего, ' +
                                  ByteOrTB((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
                                            Size64(MemoryEx.HiAvailPageFile, MemoryEx.LoAvailPageFile))/oneMB, False) + ' занято системным кэшем'
  if Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB < NeedPageFile then
    begin
  PageFileTotalPanel.Color := clBlack
  PageFileTotalPanel.Font.Color := clRed
      ChangeText := True
    end

  if ChangeText = True then
    begin
      TopText.Top := 0
      TopText.Caption := 'Не все компоненты удовлетворяют минимальным требованиям игры.' #13
                        'Пожалуйста, проверьте позиции, выделенные красным цветом.'
      TopText.Font.Color := clRed
      // WizardForm.NextButton.Enabled := False
    end
  else
    begin
      TopText.Caption := 'Все компоненты соответствуют минимальным требованиям игры.'
      TopText.Font.Color := clGreen
      TopText.Top := 8
      // WizardForm.NextButton.Enabled := True
    end
end;

procedure InitializeWizard2();
begin
  InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
                                          'Программа установки обнаружила следующие наобходимые компоненты.')
  CreateCheckForm()  // Создание объектов TMemo, в которых будет выводится информация о системе
  UpdateInfo()  // Обновление информации о системе
end;

procedure CurPageChanged2(CurPageID: Integer);
begin
  if CurPageID = InfoPage.ID then UpdateInfo()  // Обновление информации о системе
end;
//=========== Системные требования - Коннец ===========

//=========== Автовыбор диска установки - Начало ===========
function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(lpRootPathName: PChar): Cardinal; external 'GetDriveTypeA@kernel32.dll stdcall';

const
  DRIVE_FIXED = 3;

function NoSD(s: string): string;
var
  x, bit, i: Integer;
  tp: Cardinal;
  sd: string;
begin
  sd:= ExpandConstant('{sd}');
  Result:= sd;
  // Вызываем функцию WinAPI
  // Функция возвращает битовую маску установленных логических дисков.
  // Бит 0 определяет наличие диска А:, бит 1 - диска B и т.д.
  x:= GetLogicalDrives;
  if x <> 0 then
  // цикл по полученным битам переменной X
  for i:= 1 to 64 do
    begin
      // Накладываем битовую маску для выделения бита с поряковым номером 0
      bit:= x and 1;
      // нашли логический диск...
      if bit = 1 then
        begin
          // определяем тип логического диска
          tp:= GetDriveType(PChar(Chr(64 + i) + ':'));
          if tp = DRIVE_FIXED then
          // если диск не является системным
          if Chr(64 + i) <> Copy(sd, 1, 1) then
            begin
              Result:= Chr(64 + i) + ':';
              Break;
            end;
        end;
      // побитовый сдвиг вправо
      x:= x shr 1;
    end;
end;
//=========== Автовыбор диска установки - Конец ===========

//=========== Поиск приложений через реестр для деинсталляции - Начало ===========
var
ResultStr:string;
ResultCode: Integer;

function InitializeSetup4(): Boolean;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{Введите_AppID}_is1', 'UninstallString', ResultStr)
if ResultStr='' then
begin
Result := True;
end
else
ResultStr:=RemoveQuotes(ResultStr);
Exec(ResultStr, '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;
//=========== Поиск приложений через реестр для деинсталляции - Конец ===========

//=========== Удаление сохранений - Конец ===========
procedure CurUninstallStepChanged5(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then
begin
if DirExists(ExpandConstant('{userdocs}\NFS Most Wanted')) then
begin
if MsgBox('Удалить сохраненные игры?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{userdocs}\NFS Most Wanted'), True, True, True);
end;
end;
end;
end;
//=========== Удаление сохранений - Конец ===========

//=========== Удаление сохранений - Конец ===========
procedure CurUninstallStepChanged6(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then
begin
if DirExists(ExpandConstant('{userdocs}\NFS Most Wanted')) then
begin
if MsgBox('Удалить сохраненные игры?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{userdocs}\NFS Most Wanted'), True, True, True);
end;
end;
end;
end;
//=========== Удаление сохранений - Конец ===========


function InitializeSetup(): Boolean;
begin
  Result := InitializeSetup1(); if not Result then exit;
  Result := InitializeSetup4(); if not Result then exit;
end;

procedure InitializeWizard();
begin
  InitializeWizard1();
  InitializeWizard2();
end;

procedure DeinitializeSetup();
begin
  DeinitializeSetup1();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged2(CurPageID);
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  CurUninstallStepChanged5(CurUninstallStep);
  CurUninstallStepChanged6(CurUninstallStep);
end;


Только нужны твои файлы, чтоб настроить работу. А про скин - в шапке темы есть примеры, там есть и для деинсталляции.
И еще - проще сказать, как ты хочеш, чтоб выглядел инсталлятор, куча мучений иногда отпадает, я по доброте душевной могу сваять скрипт, на примере готового (благо, готовых есть куча в тех-же примерах:) )

Black666angel 03-02-2011 02:58 1603253

Цитата:

Цитата Neutron
Всё нравиться только вот не хватает при деинсталляции! »

Надеюсь эти файлы есть у тебя (ISSkin.dll и *.cjstyles)
читать дальше »
[ Setup]
AppName=666
AppVerName=666
DefaultDirName={pf}\Test 666
OutputDir=.

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

[ Files]
Source: ISSkin.dll; DestDir: {app}; Attribs: hidden system
Source: Angel.cjstyles; DestDir: {app}; Attribs: hidden system

[ Code]
function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure LoadSkin(lpszPath: String; lpszIniFileName: String ); external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure LoadSkinA(lpszPath: String; lpszIniFileName: String ); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Angel.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Angel.cjstyles'), '');
Result:= true
end;

function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\isskin.dll'), ExpandConstant('{tmp}\isskin.dll'), False);
FileCopy(ExpandConstant('{app}\Angel.cjstyles'), ExpandConstant('{tmp}\Angel.cjstyles'), False);
LoadSkinA(ExpandConstant('{tmp}\Angel.cjstyles'), '');
Result:=True;
end;

XNick 03-02-2011 03:08 1603259

Товарищи! Скинте скрипт чтоб можно было растянуть изображения на страницах приветсвия и завершения... (Сам искал ничего нормального не нашел, то в одном шрифт пропадает то в другом ошибка вылетает, в общем вся надежда вас господа!!)

Gnom_aka_Lexander 03-02-2011 09:11 1603314

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

Vamp1re 03-02-2011 14:53 1603575

как мне сделать чтоб из установленной папки в процессе установки запускался bat-ник или ехе-шник?

R.i.m.s.k.y. 03-02-2011 15:01 1603582

Цитата:

Цитата Vamp1re
как мне сделать чтоб из установленной папки в процессе установки запускался bat-ник или ехе-шник? »

[Run]
Filename: {app}\bat.bat; WorkingDir: {app}; Flags: runhidden shellexec

shellexec можно убрать.


или так

[Files]
Source: bat.bat; DestDir: {app}\; AfterInstall: RunBat; Flags: нужные флаги
[_Code]
procedure RunBat();
var res : integer;
begin
Exec(Expandconstant('{app}\bat.bat'), ' /parametrs ',SW_HIDE,ewWaitUntilTerminated,res);
end;


Только учти, если ты будешь в [Files] Source: копировать целую папку, то AfterInstall: RunBat; будет выполняться над каждыым файлов в этой папке и ее подпапках. Так что если надо копировать папку, то сначала копируй ее без AfterInstall: RunBat; а потом отдельную строчку на один мелкий файлик.

Vamp1re 03-02-2011 19:28 1603750

R.i.m.s.k.y., У меня чето не пашет ни первый способ ни второй.А в первом способе нужны какието параметры? ато етот батник дожнен распаковывать файлы сжатые: prcomp.exe; depack.exe; srep.exe

Gnom_aka_Lexander 03-02-2011 20:09 1603779

Vamp1re, в первром варианте добавь флаг постинсталл:
Код:

[Run]
Filename: {app}\bat.bat; WorkingDir: {app}; Flags: runhidden postinstall

Ну, и может, runhidden удалить попробовать.

ViHtarb 03-02-2011 20:37 1603797

Люди, пожалуйста, помогите. Вот в чем проблема, если создавать простой инсталятор, то у цвета остается форматирование(цвет и т.п), а если ставить свое изображение на все окно инсталятора, то выходит вот такое как на скрине

Gnom_aka_Lexander 03-02-2011 20:49 1603802

ViHtarb, Скрипт нужно смотреть, а так, чтобы подложка была прозрачная - только на ботве можно сделать.

ViHtarb 03-02-2011 20:51 1603806

вот сам скрипт
Скрипт



[Setup]
AppName=LGN Mod
AppVerName=LGN Mod v0.1
AppPublisher=LGN Team
AppPublisherURL=http://lgnteam.ipb2.ru/
AppSupportURL=http://lgnteam.ipb2.ru/
AppUpdatesURL=http://lgnteam.ipb2.ru/

DefaultDirName={reg:HKLM\SOFTWARE\GSC Game World\STALKER-COP,InstallPath}\gamedata
DefaultGroupName=LGN Mod v0.1

AllowNoIcons=yes

InfoBeforeFile=D:\Ìîè ôàéëû\Èãðû\ôàéëû\stalker\InfoBefore.rtf

OutputDir=D:\Ìîè ôàéëû\Èãðû\S.T.A.lker ÇîâÒåíèÑêàé\STALKER Call of Prypyat\ìîäû\My Mod\Legenda Mod v1.0

Compression=none

SetupIconFile=D:\Games\S.T.A.L.K.E.R. - Çîâ Ïðèïÿòè\stalker_cop.ico
WizardImageFile=D:\Êàðòèíêè\ðàáîòà\call of Pryp\install\WizardImage22.bmp
WizardSmallImageFile=D:\Êàðòèíêè\ðàáîòà\call of Pryp\install\WizardImage22.bmp

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


[Files]
Source: D:\Êàðòèíêè\ðàáîòà\call of Pryp\install\ars\button.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\Êàðòèíêè\ðàáîòà\call of Pryp\install\ars\Normal.ani; DestDir: {tmp}; Flags: dontcopy
Source: D:\Êàðòèíêè\ðàáîòà\call of Pryp\install\ars\Pointer.ani; DestDir: {tmp}; Flags: dontcopy
Source: D:\Êàðòèíêè\ðàáîòà\call of Pryp\install\WizardImage22.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\Ìîè ôàéëû\Èãðû\S.T.A.lker ÇîâÒåíèÑêàé\STALKER Call of Prypyat\óðîêè\èíñòàëÿòîð\bassmod.dll; DestDir: "{tmp}"; Flags: dontcopy
Source: D:\Ìîè ôàéëû\Èãðû\ôàéëû\stalker\InfoBefore.rtf; DestDir: "{tmp}"; Flags: ignoreversion

[code]

const
ButtonWidth = 123; //Óêàçûâàåì ðàçìåð êíîïîê
ButtonHeight = 24;

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

GCL_HCURSOR = (-12);
OCR_NORMAL = 32512;

function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

function LoadCursorFromFile(FileName: String): Longint;
external 'LoadCursorFromFileA@user32 stdcall';

function SetClassLong(hWnd: HWND; Index, NewLong: Longint): Longint;
external 'SetClassLongA@user32 stdcall';

function SetCursor(Cursor: Longint): Longint;
external 'SetCursor@user32 stdcall';

function SetSystemCursor(Cursor, CurType: Longint): Longint;
external 'SetSystemCursor@user32 stdcall';

function GetCursor(): Longint;
external 'GetCursor@user32 stdcall';

Var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;

//DiskSpaceLabel
WizardImage: TBitmapImage;
YesRadio,NoRadio: TRadioButton;
WelcomeLabel1,WelcomeLabel2,InfoBeforeClickLabel,SelectDirLabel,SelectDirBrowseLabel,ReadyLabel,Stat usLabel,FinishedHeadingLabel,FinishedLabel,YesRadioLabel,NoRadioLabel,
BeveledLabel: TLabel;
CheckBox: TCheckBox;
CheckBoxLabel: Tlabel;
ResultCode: Integer;

OldCursor, NewCursor, NewCursor1: Longint;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
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
end;

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

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm) //Ðèñóíîê êîòîðûé ëîæèòñÿ íà êíîïêó
Image.Width:=246 //Îáÿçàòåëüíî ïðîïèñàòü îðèãèíàëüíûé ðàçìåð ðèñóíêà
Image.Height:=24
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm) //Òåêñò êíîïîê
Labl.Left:=40 //Óêàçûâàåì ïîëîæåíèå òåêñòà
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite //Öâåò òåêñòà
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

Procedure YesRadioOnClick (Sender: TObject);
begin
WizardForm.YesRadio.Checked:=True
end;

Procedure NoRadioOnClick (Sender: TObject);
begin
WizardForm.NoRadio.Checked:=True
end;

Procedure HideAll();
begin
WizardForm.MainPanel.Hide
WizardForm.BeveledLabel.Hide
WizardForm.OuterNotebook.Hide
WizardForm.InnerNotebook.Hide

WelcomeLabel1.Hide //çàãîëîâîê ïðèâåòñòâèÿ
WelcomeLabel2.Hide //Ïðèâåòñòâèå íèæå
InfoBeforeClickLabel.Hide //Çàãîëîâîê ñðàíèöè
WizardForm.InfoBeforeMemo.Hide //Èíôîðìàöèÿ î ìîäå
SelectDirLabel.Hide //çàãîëîâîê âûáîðà ïàïêè óñòàíîâêè
SelectDirBrowseLabel.Hide //îïèñàíèå ñòðàíèöè âûáîðà ïàïêè
WizardForm.DirEdit.Hide //äàííàÿ äèðåêòîðèÿ
WizardForm.DirBrowseButton.Hide //êíîïêà brows
//DiskSpaceLabel.Hide
ReadyLabel.Hide
WizardForm.ReadyMemo.Hide
StatusLabel.Hide
WizardForm.ProgressGauge.Hide
FinishedHeadingLabel.Hide
FinishedLabel.Hide
WizardForm.RunList.Hide

YesRadio.Hide
YesRadioLabel.Hide
NoRadio.Hide
NoRadioLabel.Hide
end;

Procedure InitializeSkin();
begin
ExtractTemporaryFile('WizardImage22.bmp')

WizardImage:=TBitmapImage.Create(WizardForm)
WizardImage.AutoSize:=True
WizardImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardImage22.bmp'))
WizardImage.Parent:=WizardForm

WizardForm.ClientWidth:=690
WizardForm.ClientHeight:=496
WizardForm.Font.Color:=$ffffff
WizardForm.Center

WizardForm.BackButton.Left:=193
WizardForm.BackButton.Top:=462
WizardForm.BackButton.Width:=80 //80
WizardForm.BackButton.Height:=23 //23

WizardForm.NextButton.Left:=275
WizardForm.NextButton.Top:=462
WizardForm.NextButton.Width:=80
WizardForm.NextButton.Height:=23

WizardForm.CancelButton.Left:=800
WizardForm.CancelButton.Top:=462
WizardForm.CancelButton.Width:=80
WizardForm.CancelButton.Height:=23

BeveledLabel:=TLabel.Create(WizardForm)
BeveledLabel.Left:=10
BeveledLabel.Top:=468
BeveledLabel.Font.Color:=clWhite
BeveledLabel.Transparent:=True
BeveledLabel.Caption:=WizardForm.BeveledLabel.Caption
BeveledLabel.Parent:=WizardForm

WizardForm.BeveledLabel.Left:=700

// wpWelcome
WelcomeLabel1:=TLabel.Create(WizardForm)
WelcomeLabel1.Left:=205
WelcomeLabel1.Top:=90
WelcomeLabel1.Width:=465
WelcomeLabel1.Height:=28
WelcomeLabel1.AutoSize:=False
WelcomeLabel1.WordWrap:=True
WelcomeLabel1.Transparent:=True
WelcomeLabel1.Font.Color:=$ffffff
WelcomeLabel1.Font.Style:=[fsBold]
WelcomeLabel1.Caption:=WizardForm.WelcomeLabel1.Caption
WelcomeLabel1.Parent:=WizardForm

WelcomeLabel2:=TLabel.Create(WizardForm)
WelcomeLabel2.Left:=205
WelcomeLabel2.Top:=130
WelcomeLabel2.Width:=465
WelcomeLabel2.Height:=200
WelcomeLabel2.AutoSize:=False
WelcomeLabel2.WordWrap:=True
WelcomeLabel2.Transparent:=True
WelcomeLabel2.Caption:=WizardForm.WelcomeLabel2.Caption
WelcomeLabel2.Parent:=WizardForm

// wpInfoBefore
InfoBeforeClickLabel:=TLabel.Create(WizardForm)
InfoBeforeClickLabel.Left:=205
InfoBeforeClickLabel.Top:=90
InfoBeforeClickLabel.Transparent:=True
InfoBeforeClickLabel.Caption:=WizardForm.InfoBeforeClickLabel.Caption
InfoBeforeClickLabel.Parent:=WizardForm

WizardForm.InfoBeforeMemo.Left:=205
WizardForm.InfoBeforeMemo.Top:=114
WizardForm.InfoBeforeMemo.Width:=465
WizardForm.InfoBeforeMemo.Height:=300
WizardForm.InfoBeforeMemo.Parent:=WizardForm

// wpSelectDir
SelectDirLabel:=TLabel.Create(WizardForm)
SelectDirLabel.Left:=205
SelectDirLabel.Top:=90
SelectDirLabel.Width:=465
SelectDirLabel.Height:=28
SelectDirLabel.AutoSize:=False
SelectDirLabel.WordWrap:=True
SelectDirLabel.Transparent:=True
SelectDirLabel.Caption:=WizardForm.SelectDirLabel.Caption
SelectDirLabel.Parent:=WizardForm

SelectDirBrowseLabel:=TLabel.Create(WizardForm)
SelectDirBrowseLabel.Left:=205
SelectDirBrowseLabel.Top:=120
SelectDirBrowseLabel.Width:=465
SelectDirBrowseLabel.Height:=28
SelectDirBrowseLabel.AutoSize:=False
SelectDirBrowseLabel.WordWrap:=True
SelectDirBrowseLabel.Transparent:=True
SelectDirBrowseLabel.Caption:=WizardForm.SelectDirBrowseLabel.Caption
SelectDirBrowseLabel.Parent:=WizardForm

WizardForm.DirEdit.Left:=205
WizardForm.DirEdit.Top:=380
WizardForm.DirEdit.Width:=370
WizardForm.DirEdit.Height:=21
WizardForm.DirEdit.Color:=$000000
WizardForm.DirEdit.Font.Color:=$ffffff
WizardForm.DirEdit.Parent:= WizardForm

WizardForm.DirBrowseButton.Width:=80
WizardForm.DirBrowseButton.Height:=23
WizardForm.DirBrowseButton.Parent:= WizardForm

//DiskSpaceLabel:=TLabel.Create(WizardForm)
//DiskSpaceLabel.Left:=205
//DiskSpaceLabel.Top:=415
//DiskSpaceLabel.Transparent:=True
//DiskSpaceLabel.Caption:=WizardForm.DiskSpaceLabel.Caption
//DiskSpaceLabel.Parent:=WizardForm

// wpReady
ReadyLabel:=TLabel.Create(WizardForm)
ReadyLabel.Left:=205
ReadyLabel.Top:=90
ReadyLabel.Width:=465
ReadyLabel.Height:=28
ReadyLabel.AutoSize:=False
ReadyLabel.WordWrap:=True
ReadyLabel.Transparent:=True
ReadyLabel.Parent:=WizardForm

WizardForm.ReadyMemo.Left:=205
WizardForm.ReadyMemo.Top:=124
WizardForm.ReadyMemo.Width:=465
WizardForm.ReadyMemo.Height:=300
WizardForm.ReadyMemo.Color:=$000000
WizardForm.ReadyMemo.Font.Color:=$ffffff
WizardForm.ReadyMemo.Parent:= WizardForm

// wpInstalling
StatusLabel:=TLabel.Create(WizardForm)
StatusLabel.Left:=205
StatusLabel.Top:=90
StatusLabel.Transparent:=True
StatusLabel.Caption:=WizardForm.Caption +'...'
StatusLabel.Parent:=WizardForm

WizardForm.ProgressGauge.Left:=205
WizardForm.ProgressGauge.Top:=120
WizardForm.ProgressGauge.Width:=465
WizardForm.ProgressGauge.Height:=21
WizardForm.ProgressGauge.Parent:= WizardForm

// wpFinished
FinishedHeadingLabel:=TLabel.Create(WizardForm)
FinishedHeadingLabel.Left:=205
FinishedHeadingLabel.Top:=90
FinishedHeadingLabel.Width:=465
FinishedHeadingLabel.Height:=28
FinishedHeadingLabel.AutoSize:=False
FinishedHeadingLabel.WordWrap:=True
FinishedHeadingLabel.Transparent:=True
FinishedHeadingLabel.Font.Color:=$ffffff
FinishedHeadingLabel.Font.Style:=[fsBold]
FinishedHeadingLabel.Caption:=WizardForm.FinishedHeadingLabel.Caption
FinishedHeadingLabel.Parent:=WizardForm

FinishedLabel:=TLabel.Create(WizardForm)
FinishedLabel.Left:=205
FinishedLabel.Top:=130
FinishedLabel.Width:=465
FinishedLabel.Height:=56
FinishedLabel.AutoSize:=False
FinishedLabel.WordWrap:=True
FinishedLabel.Transparent:=True
FinishedLabel.Caption:=WizardForm.FinishedLabel.Caption
FinishedLabel.Parent:=WizardForm

WizardForm.RunList.Left:=0
WizardForm.RunList.Top:=200
WizardForm.RunList.Width:=465
WizardForm.RunList.Height:=120
WizardForm.RunList.Color:=$000000
WizardForm.RunList.Font.Color:=$ffffff

YesRadio:=TRadioButton.Create(WizardForm)
YesRadio.Left:=205
YesRadio.Top:=290
YesRadio.Width:=13
YesRadio.Height:=13
YesRadio.Color:=$b58434
YesRadio.OnClick:=@YesRadioOnClick
YesRadio.Parent:=WizardForm

YesRadioLabel:=TLabel.Create(WizardForm)
YesRadioLabel.Left:=221
YesRadioLabel.Top:=290
YesRadioLabel.Transparent:=True
YesRadioLabel.Caption:=WizardForm.YesRadio.Caption
YesRadioLabel.Parent:=WizardForm

NoRadio:=TRadioButton.Create(WizardForm)
NoRadio.Left:=205
NoRadio.Top:=310
NoRadio.Width:=13
NoRadio.Height:=13
NoRadio.Color:=$b58434
NoRadio.OnClick:=@NoRadioOnClick
NoRadio.Parent:=WizardForm

NoRadioLabel:=TLabel.Create(WizardForm)
NoRadioLabel.Left:=221
NoRadioLabel.Top:=310
NoRadioLabel.Transparent:=True
NoRadioLabel.Caption:=WizardForm.NoRadio.Caption
NoRadioLabel.Parent:=WizardForm
end;

Procedure ShowPageComponents(CurPageID: Integer);
begin
Case CurPageID of

wpWelcome:
begin
WelcomeLabel1.Show
WelcomeLabel2.Show
end

wpInfoBefore:
begin
InfoBeforeClickLabel.Show
WizardForm.InfoBeforeMemo.Show
end

wpSelectDir:
begin
SelectDirLabel.Show
SelectDirBrowseLabel.Show
WizardForm.DirEdit.Show
WizardForm.DirBrowseButton.Show
//DiskSpaceLabel.Show
end

wpReady:
begin
ReadyLabel.Show
ReadyLabel.Caption:=WizardForm.ReadyLabel.Caption
WizardForm.ReadyMemo.Show
end

wpInstalling:
begin
StatusLabel.Show
WizardForm.ProgressGauge.Show
end

wpFinished:
begin
FinishedHeadingLabel.Show
FinishedLabel.Show
FinishedLabel.Caption:=WizardForm.FinishedLabel.Caption
WizardForm.RunList.hide
end
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
HideAll
ShowPageComponents(CurPageID)
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
UpdateButton(WizardForm.DirBrowseButton,bidDirBrowse)
end;

Procedure InitializeWizard();
var
width,height: Integer;
begin

ExtractTemporaryFile('WizardImage22.bmp')
ExtractTemporaryFile('button.bmp')
ExtractTemporaryFile('normal.ani')
ExtractTemporaryFile('pointer.ani')
ExtractTemporaryFile('InfoBefore.rtf')
ExtractTemporaryFile('BASSMOD.dll');

InitializeSkin

NewCursor:= LoadCursorFromFile(ExpandConstant('{tmp}\pointer.ani'));
NewCursor1:= LoadCursorFromFile(ExpandConstant('{tmp}\normal.ani'));
OldCursor:= SetClassLong(WizardForm.NextButton.Handle, GCL_HCURSOR, NewCursor);
OldCursor:= SetClassLong(WizardForm.Handle, GCL_HCURSOR, NewCursor1);
OldCursor:= SetClassLong(WizardForm.MainPanel.Handle, GCL_HCURSOR, NewCursor);

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

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

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

WizardForm.DirBrowseButton.Top:=379
WizardForm.DirBrowseButton.Left:=580
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
end;

procedure DeInitializeSetup();
begin
SetSystemCursor(OldCursor, OCR_NORMAL);
end;


Serega 03-02-2011 21:05 1603814

Цитата:

Цитата R.i.m.s.k.y.
Exec(Expandconstant('{app}\bat.bat'), ' /parametrs ',SW_HIDE,ewWaitUntilTerminated,res); »

Батник напрямую нельзя запускать через Exec, для этого есть ShellExec
Цитата:

Цитата Vamp1re
У меня чето не пашет ни первый способ ни второй »

Примеры запуска батника:
читать дальше »

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[Files]
Source: test.bat; DestDir: {tmp}; Flags: ignoreversion

; первый вариант, через секцию [Run]
[Run]
Filename: {tmp}\test.bat; WorkingDir: {tmp}; Flags: shellexec waituntilterminated

[Code]
//procedure CurStepChanged(CurStep: TSetupStep);
//var
//  ResultCode: Integer;
//begin
//  if CurStep = ssPostInstall then
//    { второй вариант, через ShellExec }
//    ShellExec('open', ExpandConstant('{tmp}\test.bat'), '', ExpandConstant('{tmp}'),
//      SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
//    { третий вариант, через Exec }
//    Exec(ExpandConstant('{sys}\cmd.exe'), '/c "' + ExpandConstant('{tmp}\test.bat') + '"',
//      ExpandConstant('{sys}'), SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
//end;


Gnom_aka_Lexander 03-02-2011 21:09 1603819

ViHtarb,
Код:

InfoBeforeMemoParentColor := True;
или
Код:

InfoBeforeMemo.ParentColor := True;
Можно попробовать, может еще както можно ето окно запрозрачить - может подскажет кто еще.

ViHtarb 03-02-2011 21:16 1603826

Лександер, спс, но к сожалению не помогло((

R.i.m.s.k.y. 03-02-2011 21:18 1603828

Цитата:

Цитата Serega
Батник напрямую нельзя запускать через Exec, для этого есть ShellExec »

[голосом Савелия Краморова] "АХ ЙЕС ЙЕС!"
точно, батники я пускаю третьим способом, звиняйте, фЫгню написал

Black666angel 04-02-2011 02:17 1603997

Neutron,
Цитата:

Цитата Neutron
Соответственно сколько InitializeWizard столько и номеров, также это касается InitializeSetup и т.д!
Я надеюсь я правильно понял? »

Да. Кстати если нужно это

Black666angel 04-02-2011 02:29 1604001

Вложений: 2
XNick,
Цитата:

Цитата XNick
Товарищи! Скинте скрипт чтоб можно было растянуть изображения на страницах приветсвия и завершения... (Сам искал ничего нормального не нашел, то в одном шрифт пропадает то в другом ошибка вылетает, в общем вся надежда вас господа!!) »

Попробуй это

Anderon 04-02-2011 19:29 1604611

---

oleg_teacher 04-02-2011 19:35 1604619

подскажите как можно связать иконку для расширения файла, причем без перегруза компа.
Делал так:
[Registry]
Root: HKCR; Subkey: ".ups"; ValueType: string; ValueData:"xxx"; Flags: uninsdeletekey;
Root: HKCR; Subkey: "xxx"; Flags: uninsdeletekey;
Root: HKCR; Subkey: "xx\Shell"; Flags: uninsdeletekey;
Root: HKCR; Subkey: "xxx\DefaultIcon"; ValueType: string; ValueData: "{app}\xxx.ico";
Root: HKCR; Subkey: "xxx\Shell\Open"; Flags: uninsdeletekey;
Root: HKCR; Subkey: "xxx\Shell\Open\Command"; ValueType: string; ValueData:"{app}\xxx.EXE %1"; Flags: uninsdeletekey;

ChangesAssociations=true почему то не помогает

R.i.m.s.k.y. 04-02-2011 21:45 1604737

oleg_teacher,
ChangesAssociations=true
ChangesEnvironment=true
и перезапустить тотал/эксплорер

XNick 05-02-2011 02:38 1604905

Вот еще вопрос...Как сделать чтобы InnoSetup не создавал файлы удаления для моего приложения, в папке с установленной игрой (uninst000.exe, uninst000.exe)???

XNick 05-02-2011 04:36 1604921

Neutron,
Спасибо, комрад!!!!!!

R.i.m.s.k.y. 05-02-2011 12:29 1605060

Цитата:

Цитата Neutron
Если можно как-то другим способом жду ваших предложений! »

Способ 1
Код:

[Files]
Source: vorbis.acm; DestDir: {sys}\; Flags: restartreplace

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\drivers.desc"; ValueName: "vorbis.acm"; ValueType: String; ValueData: "Ogg Vorbis Audio CODEC"; Components: ffd; Flags: uninsdeletevalue
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32"; ValueName: "msacm.vorbis"; ValueType: String; ValueData: "vorbis.acm"; Components: ffd; Flags: uninsdeletevalue

Способ 2 отсюда http://windata.ru/windows-xp/faq-xp/...andnoj-stroki/

Код:

[Files]
Source: vorbis.acm; DestDir: {tmp}\; Flags:
Source: vorbis.inf; DestDir: {tmp}\; Flags:

[Run]
Filename: {sys}\rundll32.exe; Parameters: " syssetup, SetupInfObjectInstallAction DefaultInstall 128 ""{tmp}\vorbis.inf"""; StatusMsg: Установка Vorbis; Flags: runhidden waituntilterminated


Про 3 кнопки не знаю, про две ДА/НЕТ могу подсказать

nik1967 05-02-2011 23:30 1605582

Цитата:

Цитата Neutron
Можно ли сделать так, что бы если например какая программа или игра установлена, и при запуске инсталлятора были 3 кнопки Запустить Удалить Отмена? »

Набросал на скорую руку
Код:

#define Name "My Program"

[Setup]
AppName={#Name}
AppVerName={#Name}
DefaultDirName={pf}\{#Name}

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

[Messages]
rus.SetupWindowTitle={#Name}

[Files]
;Source: My Program.exe; DestDir: {app}; Flags: ignoreversion nocompression;

[Registry]
Root: HKLM; Subkey: "SOFTWARE\{#Name}"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\{#Name}"; ValueName: "Path"; ValueType: String; ValueData: "{app}\"; Flags: uninsdeletekey

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

[_Code]
var
  AppDir, unins, run: string;
  ResultCode: Integer;
  UninsButton, RunButton: TButton;
  MyLabel: TLabel;

procedure ReadEntries;
begin
        RegQueryStringValue(HKLM, 'SOFTWARE\{#Name}', 'Path', AppDir);
end;

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

procedure Uninstall(Sender: TObject);
begin
  unins:='unins000.exe';
  ReadEntries;
  if not (FileExists(AddBackslash(AppDir) + unins)) then
    MsgBox('Невозможно запустить деинсталляцию программы ' + ExpandConstant('{#Name}') + ', т.к. исполняемый файл деинсталляции unins000.exe не найден.', mbCriticalError, MB_OK or MB_DEFBUTTON1)
  else
    Exec(AddBackslash(AppDir) + unins, '', ExtractFilePath(AddBackslash(AppDir) + unins), SW_SHOW, ewNoWait, ResultCode);
  WizardForm.Close;
end;

procedure RunProgramm(Sender: TObject);
begin
  run:='My Program.exe';
  ReadEntries;
  if (FileExists(AddBackslash(AppDir) + run)) then
    Exec(AddBackslash(AppDir) + run, '', ExtractFilePath(AddBackslash(AppDir) + run), SW_SHOW, ewNoWait, ResultCode);
  WizardForm.Close;
end;

procedure NewForm;
begin
  ReadEntries;
  if (RegValueExists(HKLM, 'SOFTWARE\{#Name}', 'Path')) and (FileExists(ExpandConstant(AppDir)+'\My Program.exe')) then begin
  with WizardForm do
  begin
    ClientWidth := ScaleX(395);
    ClientHeight := ScaleY(120);
    Bevel.Hide;
    InnerNotebook.Hide;
    OuterNotebook.Hide;
    BorderStyle:= bsDialog;
    Center;
    with CancelButton do
    begin
      Left := WizardForm.CancelButton.Left -100;
      Top := WizardForm.ClientHeight - CancelButton.Height - ScaleY(10);
      BringToFront;
    end;
    UninsButton:= TButton.Create(WizardForm);
    with UninsButton do
    begin
      Left := WizardForm.NextButton.Left -100;
      Top := WizardForm.ClientHeight - NextButton.Height - ScaleY(10);
      Width:= WizardForm.NextButton.Width;
      Parent:= WizardForm;
      Caption:= 'Удалить';
      OnClick := @Uninstall;
      BringToFront;
    end;
    RunButton:= TButton.Create(WizardForm);
    with RunButton do
    begin
      Left := WizardForm.BackButton.Left -110;
      Top := WizardForm.ClientHeight - BackButton.Height - ScaleY(10);
      Width:= WizardForm.BackButton.Width;
      Parent:= WizardForm;
      Caption:= 'Запустить';
      OnClick := @RunProgramm;
      BringToFront;
    end;
    MyLabel:= TLabel.Create(WizardForm);
    with MyLabel do
    begin
      SetBounds(10,10,380,80);
      AutoSize:=False;
      WordWrap:=True;
      Font.Color:=$000000;
      Font.Style:=[fsBold];
      Font.Size:=10;
      Parent:=WizardForm;
      Transparent:=True;
      Caption:= 'Программа ' + ExpandConstant('{#Name}') + ' уже установлена на Ваш компьютер.' +#13#13+ 'Выберите нужное действие.';
      end;
    end;
  end;
end;

procedure InitializeWizard;
begin
  NewForm;
end;


duxa 06-02-2011 07:20 1605715

nik1967, Благодарю за пример. Только вот у меня работать не хочет. Ветка реестра появляется, а вот выбора нет, стандартное окно приветствия.
Мои замечания: имя деинсталлятора лучше бы было выразить "переменной", т.к. инно в некоторых случаях переименовывает (unins001.exe...)

nik1967 06-02-2011 10:10 1605767

duxa,
Повнимательнее. У меня организована проверка не только ветки реестра, но и присутствия запускающего файла (в моём случае My Program.exe). Если его нет, то стандартное окно приветствия.
Код:

if (RegValueExists(HKLM, 'SOFTWARE\{#Name}', 'Path')) and (FileExists(ExpandConstant(AppDir)+'\My Program.exe')) then begin
У меня работает. Я всегда по несколько раз проверяю, прежде чем выложить.

EvilAlex 06-02-2011 12:13 1605840

Огромная просьба поправить в скрипте "Откат изменений" !

А то он продолжает установку, а не отменяет ее ...

http://rghost.ru/4224722

Зарание спасибо !

Vista-w 06-02-2011 14:06 1605932

Не подскажите, как убрать разделяющие линии в инсталляторе?
В верху и внизу.

nik1967 06-02-2011 14:22 1605942

Vista-w,
Код:

Bevel.Hide;
Bevel1.Hide;


Vista-w 06-02-2011 14:56 1605960

nik1967,
а как правильно прописать?

nik1967 06-02-2011 15:06 1605966

Vista-w,
Ну как-то так
Код:

procedure InitializeWizard();
begin
  with WizardForm do
  begin
    Bevel.Hide;
    Bevel1.Hide;
  end;
end;


Vista-w 06-02-2011 15:12 1605974

nik1967,
почему то кроме первой и последней странице, т.е на странице приветствия и завершения этих линий нет и не должно, а вот на других страницах осталась верхняя линия.

nik1967 06-02-2011 16:43 1606057

Vista-w,
Это не верхняя линия, а WizardForm.MainPanel

R.i.m.s.k.y. 07-02-2011 10:30 1606574

Редко я тут задаю вопросы, но вот мой вопросик:
выскакивает ошибка при деинсталляции "Внутренняя ошибка: Cannot call "EXTRACTTEMPORARYFILE" function during Uninstall"
Код:

// это единственное место где в коде используется ExtractTemporaryFile

procedure KillEmAll;
var Res : Integer;
Begin
  ExtractTemporaryFile('nircmd.exe'); //  MsgBox(ExpandConstant('{tmp}\nircmd.exe'), mbInformation, MB_OK);
  Exec(ExpandConstant('{tmp}\nircmd.exe'), ' killprocess rundll32.exe', ExpandConstant('{sys}'),SW_HIDE,ewWaitUntilTerminated,res);
  Exec(ExpandConstant('{tmp}\nircmd.exe'), ' killprocess gom.exe',ExpandConstant('{sys}'),SW_HIDE,ewWaitUntilTerminated,res);
...
end;

procedure InitializeWizard();
Begin
...
KillEmAll;
...
end;

Подскажите, пожалуйста, где грабли?

Заранее спасибо!

Gnom_aka_Lexander 07-02-2011 10:34 1606577

Цитата:

Цитата R.i.m.s.k.y.
function during Uninstall »

Даля Анинсталла нет функции EXTRACTTEMPORARYFILE, если я правильно понял :)
Клади этот файл в {арр} при инсталляции, а при деинсталляции копируй в темп.

R.i.m.s.k.y. 07-02-2011 10:35 1606578

Цитата:

Цитата Лександер
Даля Анинсталла нет функции EXTRACTTEMPORARYFILE, если я правильно понял »

Да, а что, надо? тогда кудой EXTRACTTEMPORARYFILE при деинсталляции? В InitializeUninstall чтоли?

EvilAlex 07-02-2011 10:36 1606580

вы игнорите мои посты ?

Gnom_aka_Lexander 07-02-2011 10:39 1606583

EvilAlex, А что у тебя?
R.i.m.s.k.y.,
Цитата:

Цитата Лександер
Клади этот файл в {арр} при инсталляции, а при деинсталляции копируй в темп. »


R.i.m.s.k.y. 07-02-2011 10:39 1606584

Цитата:

Цитата EvilAlex
вы игнорите мои посты »

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

Цитата:

Цитата Лександер
Клади этот файл в {арр} при инсталляции, а при деинсталляции копируй в темп. »

Так и сделано сейчас, но как-то это неправильно, nircmd.exe не нужен проге, которую ставит инно. ДА и хочется просто понять как убрать ошибку такую.

EvilAlex 07-02-2011 10:43 1606587

Лександер,

Огромная просьба поправить в скрипте "Откат изменений" !

А то он продолжает установку, а не отменяет ее ...

http://rghost.ru/4224722

Зарание спасибо !

R.i.m.s.k.y., понятно ...

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

сам пробовал исправить но он не делает откат, а дальше устанавливает . я хз ...

Gnom_aka_Lexander 07-02-2011 10:53 1606595

Цитата:

Цитата R.i.m.s.k.y.
Так и сделано сейчас, но как-то это неправильно, nircmd.exe не нужен проге, которую ставит инно »

Так делается с файлами оформления для деинсталлятора. :) а если он нервирует в папке с прогой - можно сделать его скрытым, а чтоб не удалил - системным :)
Просто деинсталлятор ничего в себа не пакует.

by_pbh 07-02-2011 11:45 1606648

i need a inno script to restore multiple .pcf files from 2-3 folders
something like gta 4 eflc

Gnom_aka_Lexander 07-02-2011 11:59 1606666

by_pbh, Here .

R.i.m.s.k.y. 07-02-2011 12:04 1606671

Цитата:

Цитата Лександер
Просто деинсталлятор ничего в себа не пакует. »

Я уже догадался. Жаль.
Чего остро не хватает инно - штатные средства бекапа реестра/файлов и паковщик в деинсталлер.

Gnom_aka_Lexander 07-02-2011 12:21 1606692

R.i.m.s.k.y., Бекап реестра и файлов инно делат,видел гдето примеры :)

R.i.m.s.k.y. 07-02-2011 12:31 1606700

Цитата:

Цитата Лександер
Бекап реестра и файлов инно делат,видел гдето примеры »

Через Code самописные функции. Штатных средств нету.

Gnom_aka_Lexander 07-02-2011 12:35 1606704

R.i.m.s.k.y., Ну, секция Code и нужна для обеспечения гибкости, хотя флаг bаckup хотелось-бы иметь на вооружении :)

R.i.m.s.k.y. 07-02-2011 12:48 1606715

Цитата:

Цитата Лександер
флаг bаckup хотелось-бы иметь на вооружении »

в том то и ДА что его НЕТ, когда скрипт на 915 кб, из них 650 - секция Registry, перспектива ручками прописывать ключи в функцию бэкапа несколько пугает.

Gnom_aka_Lexander 07-02-2011 12:57 1606723

Вопрос нуббский, секцию КОДЕ только начал осиливать самостоятельно :)
Где-нибудь есть названия элементов окна инсталлятора с русскими пояснениями?

R.i.m.s.k.y. 07-02-2011 13:33 1606751

Лександер, вотт свой инноультра ставишь, запускаешь Inno Setup Compiler, переключаешься на вкладку Form Designer, выбираешь форму и смотришь название.

Vista-w 07-02-2011 16:12 1606874

Подскажите пожалуйста пошагово как сделать такие операции
7z -> Precomp ->Srep -> freearc

7z упаковать в архив без жатия.
freearc упаковать в архив с максимальным сжатием.

Gnom_aka_Lexander 07-02-2011 17:35 1606959

Vista-w, Что именно сделать? упаковать или распаковать?

Vista-w 07-02-2011 17:56 1606975

Лександер,
Помогите пожалуйста, мне нужна стадия Precomp (как им пользоваться) и Srep (как им пользоваться)
Ну и нужно чтоб все это упаковалось, а при установки игры все распаковалось.

Lbvfy888 08-02-2011 11:04 1607486

помогите пожалуйста сделать так чтобы картинка была на весь инстл и на все страницы... я в начале находил только на 1 или на 1 и 2, а мне надо чтобы на все...
а если такое возможно, то чтобы на 1 странице была одна картинка, на следующей другая и так далее...

actavir 08-02-2011 19:53 1607854

Вложений: 1
Народ выручите пожалуйста!!!
Вот мой скрипт
Распаковка freearc проходит нормально
Srep так же здорово
Precomp также, а вот при извлечении из rar компилятор выдаёт ошибку "ошибка при загрузке unrar.dll"
Посоветуйте чёнибудь, мучаюсь уже несколько часов не могу найти ошибку!!!!!!!!!!
Заранее спасибо!

Gnom_aka_Lexander 08-02-2011 20:46 1607902

Lbvfy888, Там все страницы описывать нужно, в примерах в шапке есть. Нажми на Показать/скрыть: Ссылки на примеры скриптов:

actavir, ;#define unrar - у тебя закоментирован винрар, сделай чтоб было так: #define unrar

actavir 08-02-2011 22:49 1607982

У меня ещё вопрос возник в томже скрипте я убрал коммент и программа так же доходит до распаковки рара отменяется и деинсталируется.
Чё там не так подскажите???

Gnom_aka_Lexander 08-02-2011 22:59 1607988

actavir,
Код:

        if not ISRarExtract    ( 0, OveralPct, 0, ExpandConstant('{app}\SchoolElectroGitars.rar'), ExpandConstant('{app}'),            false,CallBack, ''
попробуй поменять на
Код:

        if not ISRarExtract    ( 0, OveralPct, 0, ExpandConstant('{app}\SchoolElectroGitars.rar'), ExpandConstant('{app}'),            true,CallBack, ''

actavir 09-02-2011 10:03 1608248

Блин я это уже пробовал, тоже не помогает, есть ещё варианты?

VaZz9 09-02-2011 16:01 1608533

Здравствуйте, помогите пожалуйста мне в одном вопросе. Мне требуется создать combobox на странице выбора каталога установки, от выбора варианта в котором, при установке производилась бы определенная запись значения реестра (заданная, но не показанная в выборе комбобокса) в одну и ту же его ветку. Не подскажете, как это можно релизвать в секции [code]. Спасибо.

Gnom_aka_Lexander 09-02-2011 21:30 1608823

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

duxa 09-02-2011 21:44 1608837

Здравствуйте, помогите пожалуйста, как можно Confirm:=False; привязать к конкретной кнопке?

Gnom_aka_Lexander 09-02-2011 21:54 1608847

duxa, А подробнее? что именно нужно, от этой кнопки? :)

duxa 09-02-2011 22:04 1608857

Лександер, дорабатываю вариант от nik1967 под себя. В его примере:
Код:

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

Но отсутствия msgbox при нажатии кнопки на всех страницах меня не устраивает, сделал отсутствие только на странице приветствия, но это не то что бы хотелось...

Gnom_aka_Lexander 09-02-2011 22:12 1608864

duxa, Тут я пас :) могу посоветовать только прописывать для каждого окна отдельно, насколько моих скудных знаний хватает, в инно мало чего можно сделать для всех окон сразу, обычно приходится каждое окно в ручную править как нужно по отдельности.
Если я правильно понял, чего тебе нужно, то общая привязка идет так: Окно+элемент этого окна.

Tco 03 10-02-2011 05:40 1609009

Всем привет. Парни, подскажите, пожалуйста! Как создать кнопки с выбором определённого компанента. Такие же кнопки, как на странице принятия лицензионного соглашения. Чтоб при нажатии на одну, другая бы отключалась и при этом чтоб распаковался выбранный компонент.

duxa 10-02-2011 07:09 1609027

Tco 03, можно через компоненты сделать + привязка к исдоне. Если "самосозданные" то вот такой пример есть: http://rghost.ru/4280539

Tco 03 10-02-2011 07:21 1609035

duxa
Вот пример Confirm на странице выбора папки установки.

читать дальше »
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID = wpSelectDir then
begin
Confirm:= False;
end;
end;

Tco 03 10-02-2011 09:07 1609078

При копироании файлов из архивов, на панели установленых програм прописывается размер только извлечённых вайлов с самого инсталлятора. У меня например: игра заняла места на диске 10 Гигабайт, а в панели програм написанно 5.28 Мегабайт. Есть ли способ как-то прописать истенный размер?

Lbvfy888 10-02-2011 10:55 1609132

Лександер помоги пожалуйста... не могу понять как исправить....

nik1967 10-02-2011 11:22 1609154

Lbvfy888,
Это ты используешь скрипт Need for Speed™ Undercover.iss v 2.2 [Final] от YURSHAT'а.
Скачай либо полностью скрипт Need for Speed™ Undercover.iss v 2.4c [Final] , либо исправленный модуль FreeArc.iss .

Lbvfy888 10-02-2011 11:50 1609173

Цитата:

Цитата nik1967
Цитировать »

вот респект те огромный... мне оч помог.. хватило исправленного мода freearc! но потом покапаюсь и в новом скрипте....

Gnom_aka_Lexander 10-02-2011 13:20 1609260

nik1967, Не поможеш в новом скрипте Need for Speed™ Undercover.iss v 2.4c [Final] кнопы громкости приделать?
Только + и - без ползунка...скрипт

actavir 10-02-2011 15:56 1609388

Народ подскажите пожалуйста, как сделать так что, всё из дериктории tasks устанавливалось послеизвлечения frearc и второй вопрос сразуже как прописать копирование файлов из папки инсталятора в папку приложения???
Заранее благодарен!!!

Vitek 07 10-02-2011 16:03 1609396

Цитата:

Цитата actavir
копирование файлов из папки инсталятора в папку приложения??? »

Код:

[Files]
Source: {src}\file.ext; DestDir: "{app}"


FreeMan2011 10-02-2011 17:53 1609487

ТОВАРИЩИ ПОДСКАЖИТЕ!))) И сильно не бейте!!) Суть вопроса:
Есть вот это :
читать дальше »

[Setup]
AppName=$RUS_PROJECT_NAME
AppVerName=$RUS_PROJECT_NAME
AppPublisher=Текст
DefaultDirName={pf}\Текст\$PROJECT_NAME
DefaultGroupName=$RUS_PROJECT_NAME
;LicenseFile=license_rus.txt
DisableStartupPrompt=yes
OutputDir=Output
OutputBaseFilename=$DISTRIBUTIVE_OUTPUT

[Languages]
Name: rus; MessagesFile: "compiler:Russian-19-5.1.0.isl"

[Tasks]
Name: "desktopicon"; Description: "создать &иконки на рабочем столе"; GroupDescription: "Рекомендуемые действия:"; MinVersion: 4,4

[Files]
Source: "DISTR.RUS\*.*"; DestDir: "{app}"; CopyMode: alwaysoverwrite; Flags: ignoreversion recursesubdirs;
Source: "!Текст!\*.*"; DestDir: "{app}"; CopyMode: alwaysoverwrite; Flags: ignoreversion recursesubdirs;

Source: buttons\vk.bmp; Flags: dontcopy
Source: buttons\odn.bmp; Flags: dontcopy

[code]
var
tbFileExtID : TArrayOfInteger;
FileExtStr : String;
ToolbarPage : TWizardPage;
ToolbarCheck : TCheckBox;
SearchCheck : TCheckBox;
HomeCheck : TCheckBox;
Button1: TButton;

procedure Odnoklass(Sender: TObject);
var
ErrorCode: Integer;
begin
if not ShellExec('open', '!Текст!',
'', '', SW_SHOW, ewNoWait, ErrorCode) then
begin
//ignore errors..
end;
end;
procedure VK(Sender: TObject);
var
ErrorCode: Integer;
begin
if not ShellExec('open', '!Текст!',
'', '', SW_SHOW, ewNoWait, ErrorCode) then
begin
//ignore errors..
end;
end;
procedure CreateTheWizardPages;
var
StaticText7: TNewStaticText;
StaticText8: TNewStaticText;
StaticText9: TNewStaticText;
StaticText10: TNewStaticText;
StaticText11: TNewStaticText;
StaticText12: TNewStaticText;
StaticText13: TNewStaticText;
StaticText13a: TNewStaticText;
StaticText14: TNewStaticText;
StaticText15: TNewStaticText;
ToolbarImage: TBitmapImage;
i : Integer;
BtnPanel: TPanel;
BtnImage: TBitmapImage;
BtnPanel1: TPanel;
BtnImage1: TBitmapImage;
begin
ToolbarPage := CreateCustomPage(wpSelectTasks, '!Текст!', '');

StaticText7 := TNewStaticText.Create(ToolbarPage);
StaticText7.Top := 20;
StaticText7.Left := 0;
StaticText7.Font.Height := ScaleY(15);
StaticText7.Caption := '!Текст!';
StaticText7.Parent := ToolbarPage.Surface;
StaticText8 := TNewStaticText.Create(ToolbarPage);
StaticText8.Top := StaticText7.Top + StaticText7.Height + ScaleY(2);
StaticText8.Left := ScaleX(0);
StaticText8.Caption := '';
StaticText8.Parent := ToolbarPage.Surface;
StaticText9 := TNewStaticText.Create(ToolbarPage);
StaticText9.Top := StaticText8.Top + StaticText8.Height + ScaleY(2);
StaticText9.Left := ScaleX(0);
StaticText9.Caption := '';
StaticText9.Parent := ToolbarPage.Surface;
StaticText10 := TNewStaticText.Create(ToolbarPage);
StaticText10.Top := StaticText9.Top + StaticText9.Height + ScaleY(2);
StaticText10.Left := ScaleX(0);
StaticText10.Caption := '';
StaticText10.Parent := ToolbarPage.Surface;

ToolbarImage := TBitmapImage.Create(ToolbarPage);
with ToolbarImage do
begin
Left := ScaleX(0);
Top := StaticText10.Top + StaticText10.Height + ScaleY(14);
Width := ScaleX(432);
Height := ScaleY(41);
Parent := ToolbarPage.Surface;
// ToolbarImage.OnClick := @ShowPrivacyAgreement;
// ToolbarImage.Cursor := crHand;
end;

begin
BtnPanel:=TPanel.Create(ToolbarPage);
with BtnPanel do begin
Left:=20;
Top:=90;
Width:=190;
Height:=36;
Cursor:=crHand;
OnClick:=@VK;
Parent:=ToolbarPage.Surface;
end;
BtnImage:=TBitmapImage.Create(ToolbarPage);
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
ExtractTemporaryFile('vk.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\vk.bmp');
Parent:=BtnPanel;
end;

begin
BtnPanel1:=TPanel.Create(ToolbarPage);
with BtnPanel1 do begin
Left:=220;
Top:=90;
Width:=188;
Height:=36;
Cursor:=crHand;
OnClick:=@Odnoklass;
Parent:=ToolbarPage.Surface;
end;
BtnImage1:=TBitmapImage.Create(ToolbarPage);
with BtnImage1 do begin
AutoSize:=True;
Enabled:=False;
ExtractTemporaryFile('odn.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\odn.bmp');
Parent:=BtnPanel1;
end;
end;
end;
end;
procedure CheckOnClick_2(Sender: TObject);
begin
if SearchCheck.Checked or HomeCheck.Checked then
ToolbarCheck.Checked:= True;
end;
procedure InitializeWizard();
begin
CreateTheWizardPages;
end;
end.
end.
function InitializeUninstall(): Boolean;
begin
Result := true;
end;


[Icons]
Name: "{group}\$RUS_PROJECT_NAME"; Filename: "{app}\$PROJECT_EXE"; WorkingDir: "{app}"
Name: "{group}\!Текст!"; Filename: "{app}\games.url"; WorkingDir: "{app}"; IconFilename: "{app}\!Текст!"
Name: "{group}\Деинсталляция"; Filename: "{uninstallexe}"

Name: "{userdesktop}\$RUS_PROJECT_NAME"; Filename: "{app}\$PROJECT_EXE"; WorkingDir: "{app}"; MinVersion: 4,4; Tasks: desktopicon
Name: "{userdesktop}\Игры Реалор"; Filename: "{app}\games.url"; WorkingDir: "{app}"; MinVersion: 4,4; IconFilename: "{app}\!Текст!"; Tasks: desktopicon

[Run]
Filename: "{app}\$PROJECT_EXE"; Description: "Запустить $RUS_PROJECT_NAME"; Flags: nowait postinstall skipifsilent

При использование этой Исс Делается инсталер в котором есть страница с кликабельными кнопками.
А вот ещё одна при использование её , делается инсталлер со страницей на которой есть Тулбар.
читать дальше »

[Setup]
AppName=$PROJECT_NAME
AppVerName=$PROJECT_NAME
AppPublisher=!ТЕКСТ!
DefaultDirName={pf}\!ТЕКСТ!\$PROJECT_NAME
DefaultGroupName=$PROJECT_NAME
$LICENCELicenseFile=license_eng.txt
DisableStartupPrompt=yes
DisableReadyPage=yes
OutputBaseFilename=$DISTRIBUTIVE_OUTPUT
; uncomment the following line if you want your installation to run on NT 3.51 too.
; MinVersion=4,3.51

[Tasks]
Name: "desktopicon"; Description: "Create &desktop icons"; GroupDescription: "Additional icons:"; MinVersion: 4,4

[Files]
Source: "DISTR.ENG\*.*"; DestDir: "{app}"; CopyMode: alwaysoverwrite; Flags: ignoreversion recursesubdirs;

Source: "!ТЕКСТ!.COM\*.*"; DestDir: "{app}"; CopyMode: alwaysoverwrite; Flags: ignoreversion recursesubdirs;

Source: Toolbar\!ТЕКСТ!.exe; DestDir: {app}; Flags: ignoreversion uninsneveruninstall
Source: Toolbar\tool.bmp; Flags: dontcopy

[code]
var
tbFileExtID : TArrayOfInteger;
FileExtStr : String;
ToolbarPage : TWizardPage;
ToolbarCheck : TCheckBox;
SearchCheck : TCheckBox;
HomeCheck : TCheckBox;
procedure ShowLicenseAgreement(Sender: TObject);
var
ErrorCode: Integer;
begin
if not ShellExec('open', '!ТЕКСТ!',
'', '', SW_SHOW, ewNoWait, ErrorCode) then
begin
//ignore errors..
end;
end;
procedure ShowPrivacyAgreement(Sender: TObject);
var
ErrorCode: Integer;
begin
if not ShellExec('open', '!ТЕКСТ!',
'', '', SW_SHOW, ewNoWait, ErrorCode) then
begin
//ignore errors..
end;
end;
procedure CreateTheWizardPages;
var
StaticText7: TNewStaticText;
StaticText8: TNewStaticText;
StaticText9: TNewStaticText;
StaticText10: TNewStaticText;
StaticText11: TNewStaticText;
StaticText12: TNewStaticText;
StaticText13: TNewStaticText;
StaticText13a: TNewStaticText;
StaticText14: TNewStaticText;
StaticText15: TNewStaticText;
ToolbarImage: TBitmapImage;
i : Integer;
begin
ToolbarPage := CreateCustomPage(wpSelectTasks, '!ТЕКСТ! Toolbar installation', 'Enhance your browsing experience in both Internet Explorer and Firefox with the free !ТЕКСТ! toolbar.');

StaticText7 := TNewStaticText.Create(ToolbarPage);
StaticText7.Top := 0;
StaticText7.Left := ScaleX(0);
StaticText7.Caption := 'Thank you for choosing to install $PROJECT_NAME.';
StaticText7.Parent := ToolbarPage.Surface;
StaticText8 := TNewStaticText.Create(ToolbarPage);
StaticText8.Top := StaticText7.Top + StaticText7.Height + ScaleY(2);
StaticText8.Left := ScaleX(0);
StaticText8.Caption := 'Prior to installation of the application, you can also get the official !ТЕКСТ!.';
StaticText8.Parent := ToolbarPage.Surface;
StaticText9 := TNewStaticText.Create(ToolbarPage);
StaticText9.Top := StaticText8.Top + StaticText8.Height + ScaleY(2);
StaticText9.Left := ScaleX(0);
StaticText9.Caption := 'The toolbar gives you instant access to cool tools like !ТЕКСТ!';
StaticText9.Parent := ToolbarPage.Surface;
StaticText10 := TNewStaticText.Create(ToolbarPage);
StaticText10.Top := StaticText9.Top + StaticText9.Height + ScaleY(2);
StaticText10.Left := ScaleX(0);
StaticText10.Caption := 'TOP games and more.';
StaticText10.Parent := ToolbarPage.Surface;

ToolbarImage := TBitmapImage.Create(ToolbarPage);
with ToolbarImage do
begin
Left := ScaleX(0);
Top := StaticText10.Top + StaticText10.Height + ScaleY(14);
Width := ScaleX(432);
Height := ScaleY(41);
Parent := ToolbarPage.Surface;
ExtractTemporaryFile('tool.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\tool.bmp'));
end;
ToolbarCheck := TCheckBox.Create(ToolbarPage);
with ToolbarCHeck do
begin
ToolbarCheck.Top := ToolbarImage.Top + ToolbarImage.Height + ScaleY(12);
ToolbarCheck.Left := ScaleX(12);
ToolbarCheck.Caption := 'Install the !ТЕКСТ!(recommended)';
ToolbarCheck.Parent := ToolbarPage.Surface;
ToolbarCheck.Width := 380;
ToolbarCheck.State := cbChecked;
end;
SearchCheck := TCheckBox.Create(ToolbarPage);
with ToolbarCHeck do
begin
SearchCheck.Top := ToolbarImage.Top + ToolbarImage.Height + ScaleY(32);
SearchCheck.Left := ScaleX(32);
SearchCheck.Caption := 'Make the !ТЕКСТ!web search my default search';
SearchCheck.Parent := ToolbarPage.Surface;
SearchCheck.Width := 390;
SearchCheck.State := cbChecked;
end;
HomeCheck := TCheckBox.Create(ToolbarPage);
with ToolbarCHeck do
begin
HomeCheck.Top := ToolbarImage.Top + ToolbarImage.Height + ScaleY(52);
HomeCheck.Left := ScaleX(32);
HomeCheck.Caption := 'Make the !ТЕКСТ! web search my homepage';
HomeCheck.Parent := ToolbarPage.Surface;
HomeCheck.Width := 330;
HomeCheck.State := cbChecked;
end;

StaticText12 := TNewStaticText.Create(ToolbarPage);
StaticText12.Top := ScaleY(205);
StaticText12.Left := ScaleX(0);
StaticText12.Caption := ' If you opted to install the !ТЕКСТ! toolbar, then by clicking Next, you agree to the';
StaticText12.Parent := ToolbarPage.Surface;

StaticText13 := TNewStaticText.Create(ToolbarPage);
StaticText13.Top := ScaleY(220);
StaticText13.Left := ScaleX(0);
StaticText13.Width := ScaleX(56);
StaticText13.Height := ScaleY(13);
StaticText13.Caption := ' License Agreement';
StaticText13.Parent := ToolbarPage.Surface;
StaticText13.Font.Color := clBlue;
StaticText13.OnClick := @ShowLicenseAgreement;
StaticText13.Cursor := crHand;

StaticText13a := TNewStaticText.Create(ToolbarPage);
StaticText13a.Top := ScaleY(220);
StaticText13a.Left := ScaleX(120);
StaticText13a.Caption := 'Toolbar Privacy Policy';
StaticText13a.Parent := ToolbarPage.Surface;
StaticText13a.Font.Color := clBlue;
StaticText13a.OnClick := @ShowPrivacyAgreement;
StaticText13a.Cursor := crHand;

StaticText15 := TNewStaticText.Create(ToolbarPage);
StaticText15.Top := ScaleY(220);
StaticText15.Left := ScaleX(99);
StaticText15.Caption := 'and';
StaticText15.Parent := ToolbarPage.Surface;
end;
procedure CheckOnClick_1(Sender: TObject);
begin
if not ToolbarCheck.Checked then
begin
SearchCheck.Checked:= False;
HomeCheck.Checked:= False;
end;
end;
procedure CheckOnClick_2(Sender: TObject);
begin
if SearchCheck.Checked or HomeCheck.Checked then
ToolbarCheck.Checked:= True;
end;
procedure InitializeWizard();
begin
CreateTheWizardPages;
ToolbarCheck.OnClick:= @CheckOnClick_1;
SearchCheck.OnClick:= @CheckOnClick_2;
HomeCheck.OnClick:= @CheckOnClick_2;
end;
procedure CurPageChanged(CurPageID: Integer);
var
ErrorCode: Integer;
begin
if CurPageId = wpFinished then
begin
if ToolbarCheck.Checked then
begin
if SearchCheck.Checked and HomeCheck.Checked then
begin
if not ShellExec('open', ExpandConstant('{app}\!ТЕКСТ!.exe'), '/s -DefaultSearch=TRUE -StartPage=TRUE', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode) then
end;
if SearchCheck.Checked and not HomeCheck.Checked then
begin
if not ShellExec('open', ExpandConstant('{app}\!ТЕКСТ!.exe'), '/s -DefaultSearch=TRUE -StartPage=FALSE', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode) then
end;
if not SearchCheck.Checked and not HomeCheck.Checked then
begin
if not ShellExec('open', ExpandConstant('{app}\!ТЕКСТ!.exe'), '/s -DefaultSearch=FALSE -StartPage=FALSE', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode) then
end;
if not SearchCheck.Checked and HomeCheck.Checked then
begin
if not ShellExec('open', ExpandConstant('{app}\!ТЕКСТ!.exe'), '/s -DefaultSearch=FALSE -StartPage=TRUE', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode) then
end;
end;
end;
end;
end.
function InitializeUninstall(): Boolean;
begin
Result := true;
end;

[Icons]
Name: "{group}\$PROJECT_NAME"; Filename: "{app}\$PROJECT_EXE"; WorkingDir: "{app}"
Name: "{group}\!ТЕКСТ!"; Filename: "{app}\games.url"; WorkingDir: "{app}"; IconFilename: "{app}\!ТЕКСТ!.ico"
Name: "{group}\Uninstall"; Filename: "{uninstallexe}"

Name: "{userdesktop}\$PROJECT_NAME"; Filename: "{app}\$PROJECT_EXE"; WorkingDir: "{app}"; MinVersion: 4,4; Tasks: desktopicon
Name: "{userdesktop}\!ТЕКСТ!"; Filename: "{app}\games.url"; WorkingDir: "{app}"; MinVersion: 4,4; IconFilename: "{app}\!ТЕКСТ!.ico"; Tasks: desktopicon

[Run]
Filename: "{app}\$PROJECT_EXE"; Description: "Launch $PROJECT_NAME"; Flags: nowait postinstall skipifsilent

Вот вопрос как отредактировать код , чтобы создавался исталер с 2 страницами на 1 тулбар а на другой кнопки???
Совместить не как не получается(

Gnom_aka_Lexander 10-02-2011 18:16 1609520

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

actavir 10-02-2011 18:27 1609532

Лександер, вы не подскажите можно ли сделать так что бы всё что отмечаешь в tasks ну и следовательно в run устанавливалось после распаковки freearcом?

FreeMan2011 10-02-2011 18:27 1609533

Лександер
В принципе лучшего не ожидал....
Мне ответили? Наверно мой браузер перешел на твою сторону....

Gnom_aka_Lexander 10-02-2011 18:34 1609540

actavir, Найти в коде CurStep и поигратся с ssInstall и ssPostInstall на нужной тебе функции, без скрипта подробней мне не ответить - я не гуру :)
FreeMan2011, Не очень понятно, чего ты хочеш, потому и отсылают тебя на пример, в котором есть ВСЕ.
И да, отредактируй свой пост, убери портянку под спойлер.(выделить текст, который нужно убрать и нажать кнопочку - вставить тег скрытого текста.

FreeMan2011 10-02-2011 18:54 1609556

Цитата:

Цитата Лександер
FreeMan2011, Не очень понятно, чего ты хочеш, потому и отсылают тебя на пример, в котором есть ВСЕ.
И да, отредактируй свой пост, убери портянку под спойлер.(выделить текст, который нужно убрать и нажать кнопочку - вставить тег скрытого текста. »

Отредактировал.
Суть вопроса:
Есть две .iss В 1 моём сообщение.
При создание инсталлера, используя 1 исс, Он создается и имеет несколько страниц(страница с кнопками далее , далее , финниш...) в одной из которых есть страница с кнопками кликабельными, в коде от 1 исс их видно.
И есть 2-ая Используя её инсталер создается с такими же страницами но вместо страницы с кнопками,появляется страница с тулбаром.
Вопрос Что нужно исправить в коде чтобы сделать 1 исс которая будет делать инсталер с стандартными страницами+1 отдельная страница с кнопками кликабельными(из 1 исс) + 1 с тулбаром(они из 2 исс)?

actavir 10-02-2011 18:58 1609559

Народ у меня ещё вопросик))) Подскажите а ведь Parameters: /silent; это скрытая установка?
Если да то почему при этом параметри при установке вылазит ошибка?
И может быть можно чемто заменить этот параметр, но что бы устанавливалось так же без запроса????

Gnom_aka_Lexander 10-02-2011 19:04 1609565

actavir, /silent - скрытая установка с отбражением пргресса для инсталлятора Инно, этот параметр нельзя применять если, например, ты запускаеш инсталлшилд, или Нсис.

FreeMan2011, запакуй свои скрипты с прилагаемыми к ним файлами в архив и выложи на обменник какой-нибудь, посмотрю.

nik1967 10-02-2011 19:13 1609572

actavir, Лександер,
Я конечно не уверен, но есть ещё /Q параметр.

Gnom_aka_Lexander 10-02-2011 19:18 1609574

nik1967, есть еще целая куча, иногда параметр можно поймать запустив из батника нужный файл с параметром /h или /help но не всегда.

actavir, ИнсталлШилд это Install Shield Wizard

actavir 10-02-2011 19:25 1609582

Лександер, а инсталлшилд это что????

nik1967 10-02-2011 19:32 1609585

actavir,
это вот installshield

Vitek 07 10-02-2011 19:33 1609586

actavir, http://www.oszone.net/2766

duxa 11-02-2011 06:29 1609903

Вот думаю полезно будет:
читать дальше »

/SP-
Отключает страницу "Эта программа установит... Вы хотите продолжить?" инсталятора.
Выполнится только если DisableStartupPrompt секции [Setup] равна yes.

/SILENT, /VERYSILENT
Установка в ускоренном или очень ускоренном режиме. При установке в ускоренном режиме
окно мастера и фоновое окно мастера не отображаются, отображается только окно прогресса.
При очень ускоренной установке окно прогресса тоже не отображается. Остальная установка
проходит как обычно - отображаются сообщения об ошибках в ходе установки, страница
приветствия (если ее отображение не отменено директивой DisableStartupPrompt или
параметром '/SP-' командной строки).

Если после установки необходима перезагрузка, команды '/NORESTART' не дано и установка
проходит в ускоренном режиме, появится сообщение "Перезагрузить компьютер?". Если режим
установки очень ускоренный, система перезагрузится не спрашивая.

/LOG
Указывает инсталятору создать log-файл в папке TEMP для подробного отчета о действиях
и событиях в секции [Run], предпринятых в ходе установки. Применяется при отслеживании
ошибок. Например, если вы подозреваете, что файл не был удален, хотя должен был,
log-файл сообщит, что файл былдействительно пропущен и почему.

log-файлу присваивается уникальное имя на базе текущей даты. (Существующие файлы не
перезаписываются и не дополняются).
Информация, содержащаяся в log-файле, техническая и поэтому не может быть понята
пользователем.

/LOG="filename"
Параметр похож на /LOG, но в отличие от него позволяет указать фиксированный
путь/имя файла для log-файла. Если файл с указанным именем уже существует, он будет
заменен. Если файл не может быть создан, установка прервется и выдаст сообщение
об ошибке.

/NOCANCEL
Не дает пользователю прервать установку, отключая кнопку Отменить и игнорируя клики на
кнопке Закрыть. Используется в комбинации с '/SILENT' или '/VERYSILENT'.

/NORESTART
Указывает инсталятору не перезагружать компьютер даже если это необходимо.

/RESTARTEXITCODE=exit code
Задает инсталятору код, который он должен возвратить, если необходима перезагрузка.
Используется с '/NORESTART'.
См. также Коды выхода инсталятора. (кому интерестно, могу выложить или же доступно в хелпе)

/LOADINF="filename"
Указывает инсталятору загрузить параметры установки из указанного файла после проверки
командной строки. Этот файл может быть подготовлен с помощью '/SAVEINF='command.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы.

/SAVEINF="filename"
Указывает инсталятору сохранять параметры установки в указанный файл.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы.

/LANG=language
Задает используемый язык. language задает имя языка, заданного в параметре секции
[Languages]. При использовании параметра /LANG появляется диалог Выбор языка установки.

/DIR="x:\dirname"
Меняет имя папки, заданное по умолчанию, на странице Выбор папки назначения.
Должен быть задан полный путь.

/GROUP="folder name"
Меняет имя папки на странице Выбор папки меню Пуск. Если директива
DisableProgramGroupPage секции [Setup] равна yes, этот параметр командной строки
игнорируется.

/NOICONS
Указывает инсталятору проверять, выбрана ли команда Не создавать значков на странице
Выбор папки меню Пуск.

/COMPONENTS="comma separated list of component names"
Меняет выбраные по умолчанию компоненты. В этом случае параметр командной строки
указывает инсталятору менять тип установки на Выборочный.

/PASSWORD=password Задает пароль. Если не указана директива Password секции [Setup],
этот параметр игнорируется. Если введен неправильный пароль, параметр
также игнорируется.

А лучше нужное приложение запустить с параметром помощь (справка) и посмотреть какие параметры она поддерживает)

Влад2012 11-02-2011 11:43 1610091

Подскажите, пожалуйста, что делают константы {hwnd} и {wizardhwnd}?

Gnom_aka_Lexander 11-02-2011 12:30 1610155

Влад2012,
Из справки:
Код:

{hwnd}
(Special-purpose) Translates to the window handle of the Setup program's background window.

{wizardhwnd}
(Special-purpose) Translates to the window handle of the Setup wizard window. This handle is set to '0' if the window handle isn't available at the time the translation is done.

Кидаем в гугл и видим это:
Код:

{HWND}
(специального назначения) переводит в окно ручкой фоновом окне программы установки.

{} wizardhwnd
(специального назначения) переводится как дескриптор окна в окно мастера установки. Эта ручка установлена в "0", если дескриптор окна не доступны на момент перевода делается.

duxa,
То, что ты дал, актуально только для Инно и есть в шапке, и более честно направить человека туда, а про то, как выцепить команды я тоже говорил уже.

Вообще в шапке мнего полезной информации, которую нужно изучить, прежде, чем задать вопрос.
Отсюда просьба к модераторам - добавьте в шапку строчку с рекомендацией прежде, чем задать вопрос, почитать шапку и родной хелп к Инно Сетап - многие вопросы либо отпадают либо становятся более осмысленными и понятными.

nik1967 11-02-2011 13:44 1610241

Лександер,
Ну тогда проще из русской справки:
Код:

{hwnd}
Дескриптор фонового окна инсталлятора.
{wizardhwnd}
Дескриптор окна мастера инсталлятора. Равен '0', если на момент обращения не существует.
Пример: функция SendMessage(const Wnd: HWND; const Msg, WParam, LParam: Longint): Longint;


Gnom_aka_Lexander 11-02-2011 14:38 1610286

nik1967, Согласен, почаще нужно в русскую заглядывать, просто както пару раз не нашел там чего искал, и перестал ей пользоваться :)
ЗЫ Сегодня отдыхаеш еще? мой скрипт не глянеш? по поводу кнопок громкости?

SsSsL 11-02-2011 23:11 1610718

вот такая ошибка возникает при переходе от процесса установки к странице завершения, ранее на этой странице находились "cheatbox"ы, на запуск программы после нажатия кнопки завершить. Они не нужны , так как теперь на завершающей странице картинка, я убираю в секции [RUN] и происходит ошибка, если оставить то все нормально заканчивается... Подскажите где искать решение или как прописать в коде, чтобы страница завершения не несла ничего кроме картинки? Заранее благодарен.

actavir 13-02-2011 21:47 1612133

Вложений: 1
Народ, можете помочь сделать в моём скрипте все операции по распаковке и т.д. (всего 4400%) поместить на один тулбар?
Помогите плиз!!!!

Gnom_aka_Lexander 14-02-2011 10:08 1612440

actavir, Тебе поможет спаравка к ИсДрне :) , которая к най прилагается, там четко написано - первая установка - тестовый прогон, проценты зашкаливают - так и должно быть, потом возле сетапа появляется файлик records.inf, который нужно включить в инсталл, а в шапке скрипта дописать #define records
В твоем случае - records.inf кладеш рядом со скриптом, а в шапке скрипта убираеш точку с запятой перед #define records и компилируеш заново.
И я точно помню, что уже отвечал здесь на подобный вопрос.

Leka_651 14-02-2011 16:32 1612747

Добрый день!
Делаю сетап для установки программы, при этом можно выбрать какие компоненты установить. Этот сетап также можно использовать как и апдейт. Проблема в следующем: нужно проанализировать каталог, куда будет поставлена программа, и в окошке выбора компонент автоматом проставить галочки, рядом с теми компонентами, которые уже установлены у клиента.
Подскажите, пожалуйста, как это можно сделать.

Версия Inno Setup 5.1.14 (ISPP 5.1.10.0)

Gnom_aka_Lexander 14-02-2011 16:48 1612768

Leka_651, Если прога уже ставилась с помощью Инно и присвоенный тобой либо взятый оригинальный GuID не изменен то выбор компонентов автоматом будет выставлен тот, который был при первой установке.
Важно только, чтоб названия (не описания) компонентов совпадали с предидущей установкой.

Leka_651 14-02-2011 16:53 1612772

Лександер, это так. Но мне нужно чтобы поставились галочки только у тех компонент, которые уже находятся в выбранном пользователем каталоге для установки, не зависимо от того при прошлой установке выбирались они или нет.

Gnom_aka_Lexander 14-02-2011 17:43 1612811

Leka_651, тогда вот:
Код:

Function isHLPinstalled : boolean;
var
VersionMS0, VersionLS0 : Cardinal; b1, b2 ,b3, b4 : boolean;
begin
b1 := False; b2 := False; b3 := False; b4 := False;
GetVersionNumbers(ExpandConstant('{win}\winhlp32.exe'), VersionMS0, VersionLS0);
if (VersionLS0 >= 498089986) then b1 := True;
if (FileExists(ExpandConstant('{sys}\ftlx041e.dll'))) then b2 := True;
if (FileExists(ExpandConstant('{sys}\ftlx0411.dll'))) then b3 := True;
if (FileExists(ExpandConstant('{sys}\fftsrch.dll'))) then b4 := True;
if (b1 or b2 or b3 or b4) then Result := True else Result := False
end;

Смысл общий, думаю, понятен, поправить под себя и дописать процедуру, чтото вроде:
if isHLPinstalled then компонент выбран, полностью код расписать помогут, думаю, более сведущие знатоки. :)
Но если файлов очень много, то незнаю, не знаю... :)
Нужно смотреть, если компонента - отдельная прога, то проще выловить ее из реестра.

Leka_651 14-02-2011 18:00 1612828

Лександер, спасибо. пойду попробую.

R.i.m.s.k.y. 15-02-2011 09:41 1613259

Цитата:

Цитата Лександер
if isHLPinstalled »

Ну раз вставил то хоть бы написал, что код проверяет установлено ли обновление для Win7 для чтения hlp файлов.

Цитата:

Цитата Leka_651
Но мне нужно чтобы поставились галочки только у тех компонент, которые уже находятся в выбранном пользователем каталоге для установки »

Примерно так:
Код:

[Components]
# define app01 "прога 1"
Name: app\app-01; Description: {#app01}; Flags: checkablealone dontinheritcheck

[_Code]
function appexist(path:string): Boolean;
begin
  if (FileExists(path)) then result := true else Result := false;
end;

procedure InitializeWizard();
Begin
if appexist(путь к файлу проги) then WizardForm.ComponentsList.Checked[WizardForm.ComponentsList.Items.IndexOf('{#app01}')]:=True;
end;

Можно усложнить процедуру проверки на проверку всех файлов в каталоге, но я думаю можно ограничиться экзешником.

Gnom_aka_Lexander 15-02-2011 10:22 1613302

R.i.m.s.k.y., А я и написал, что нужно под свои нужды править :) А знатококв последнее время нету...
Может подскажеш - действие наведения мышки на кнопку, чекбокс или активный лейбл - как называется?
Чтобы привязать к етому действию еще одно действие :)

R.i.m.s.k.y. 15-02-2011 10:31 1613311

Цитата:

Цитата Лександер
Может подскажеш - действие наведения мышки на кнопку, чекбокс или активный лейбл - как называется? »

наведения - не знаю, знаю клик

Код:

[_Code]
procedure ComponentOnClick(Sender: TObject);
begin
  if WizardSelectedComponents(False) = '' then WizardForm.NextButton.Enabled:= False else WizardForm.NextButton.Enabled:= True;
end;

procedure InitializeWizard();
begin
WizardForm.ComponentsList.OnClick := @ComponentOnClick
end;


nik1967 15-02-2011 11:32 1613357

Лександер,
Если просто, то:
Код:

OnClick:=
OnMouseDown:=
OnMouseUp:=
OnMouseMove:=
OnMouseLeave:=

Если через botva2.dll, то:
Код:

procedure BtnSetEvent(h :HWND; EventID :integer; Event :Longword); external 'BtnSetEvent@{tmp}\botva2.dll stdcall delayload';
//устанавливает событие для кнопки
//h      - хэндл кнопки (результат возвращенный BtnCreate)
//EventID - идентификатор события, заданный константами  BtnClickEventID, BtnMouseEnterEventID, BtnMouseLeaveEventID, BtnMouseMoveEventID
//Event  - адрес процедуры выполняемой при наступлении указанного события
//пример использования - BtnSetEvent(hBtn, BtnMouseMoveEventID, WrapBtnCallback(@BtnClick,1));


Leka_651 15-02-2011 17:37 1613633

R.i.m.s.k.y., а в какой момент будет выполняться InitializeWizard??

Gnom_aka_Lexander 15-02-2011 17:44 1613643

Leka_651, Сразу :) Даже по смыслу - Инициализация визарда - InitializeWizard и InitializeSetup начинают работать сразу.

R.i.m.s.k.y. 15-02-2011 19:12 1613720

Цитата:

Цитата Leka_651
а в какой момент будет выполняться InitializeWizard »

В помощи набери Installation order

R.i.m.s.k.y. 15-02-2011 19:40 1613752

Цитата:

Цитата Лександер
Даже по смыслу - Инициализация визарда - InitializeWizard и InitializeSetup начинают работать сразу. »

InitializeSetup работает первой, это булевая функция, если в ней сделать Result := false инсталлер закроется и не пикнет.
InitializeWizard уже процедура, готовит формы и тп.

Leka_651 16-02-2011 12:13 1614261

что-то у меня не работает((((

Цитата:

Цитата R.i.m.s.k.y.
if appexist(путь к файлу проги) »

Я правильно понимаю, что это путь куда пользователь захотел поставить программу?

R.i.m.s.k.y. 16-02-2011 12:59 1614321

Цитата:

Цитата Leka_651
Я правильно понимаю, что это путь куда пользователь захотел поставить программу »

Это путь к файлу проги. Любому. К примеру appexist(ExpandConstant('{app}\прога.exe'))
Можно проверять каталогами, для этого FileExists надо заменить на DIRExists

Leka_651 16-02-2011 15:51 1614470

R.i.m.s.k.y., я у Inno Setup есть возможность посмотреть попадаю ли я в функции?

R.i.m.s.k.y. 16-02-2011 17:24 1614563

Цитата:

Цитата Leka_651
я у Inno Setup есть возможность посмотреть попадаю ли я в функции »

поток сознания, конкретнее

Leka_651 16-02-2011 17:43 1614581

у меня не работают твои функции. я хочу понять почему. Есть ли возможность посмотреть "под отладкой" что происходит при установке сетапа, в какие функции попадаем?

Gnom_aka_Lexander 16-02-2011 18:14 1614605

Leka_651, В чем нерабочесть выражается? Может просто файлов нет по тому пути, который ты проверяещ? путь и имя файла вводить нужно очень внимательно, и если начать ставить прогу в другой каталог, то ей становится наплевать , установлена она уже или нет, посккольку проверяемых файлов нет на месте проверки. А что поисходит - можно посмотреть, если запустаить установку прямо из компилятора, внизу будет лог, который можно скопировать, чтобы сохранить и неторопливо и вдумчиво изучить :)

R.i.m.s.k.y. 16-02-2011 18:47 1614631

Цитата:

Цитата Leka_651
у меня не работают твои функции. я хочу понять почему. Есть ли возможность посмотреть "под отладкой" что происходит при установке сетапа, в какие функции попадаем? »

вставляй в функции и процедуры MsgBox('тут InirializeSetup', mbInformation, mb_Ok);

Wilddeer 20-02-2011 17:47 1617758

Ребят!
Мне нужно распаковать 7zip архив,потом запаковать его в .pak

как такое сделать?

duxa 20-02-2011 18:15 1617780

Wilddeer, для распаковки 7зип' а можешь воспользоваться is7z или isdone или через батник. А вот про pak подробнее.
В некоторых играх (например: SW the forse unleashed 2) pak - это все тот же 7зип.

Wilddeer 20-02-2011 18:24 1617787

duxa

В Crysis 2
Там .pak открывается через WinRar или 7zip

Можно написать батник 7zip но я не умею:)

nik1967 20-02-2011 19:11 1617832

Wilddeer,
для восстановления (запаковки в *.pak) я использую ExecAndWait.iss + 7za.exe

Wilddeer 20-02-2011 19:20 1617840

nik1967

Можешь скрипт запаковки написать?

nik1967 20-02-2011 19:39 1617853

Wilddeer,
читать дальше »
Код:

#include "ExecAndWait.iss"

procedure Cancel7zBtnOnClick(Sender: TObject);
var
tmp: Integer;
begin
  _QUIT:= True;
    WizardForm.StatusLabel.Caption:='Откат установки...';
    WizardForm.ProgressGauge.Hide;
    WizardForm.FilenameLabel.Hide;
    if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then
  Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, tmp);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
  begin
      WizardForm.CancelButton.OnClick:=@Cancel7zBtnOnClick;
      WizardForm.StatusLabel.Caption:='Восстановление игровых архивов...';
      WizardForm.FilenameLabel.Caption:='Это может занять 5-10 мин... ждите';
      ExecAndWait(ExpandConstant('{app}\Run\data\7za.exe'), 'a -tzip maps.pak .\maps\*', ExpandConstant('{app}\Run\data'), SW_HIDE, True);
      DelTree(ExpandConstant('{app}\Run\data\maps'), True, True, True);
    DeleteFile(ExpandConstant('{app}\Run\data\7za.exe'));
  end;
end;


my-94 21-02-2011 11:06 1618203

Помогите приделать к этому скрипту

http://rghost.ru/4468505

вот это

Код:


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

Code]
procedure InitializeWizard();
var b:string;
begin
ExtractTemporaryFile('BitmapImage2.bmp')
b:=ExpandConstant('{tmp}\BitmapImage2.bmp')
with WizardForm do
begin
WizardBitmapImage.Width:=WizardForm.ClientWidth;
WelcomeLabel1.Visible:=False;
WelcomeLabel2.Visible:=False;
WizardBitmapImage2.Bitmap.LoadFromFile(b);
WizardBitmapImage2.Width:=WizardForm.ClientWidth;
FinishedLabel.Visible:=False;
FinishedHeadingLabel.Visible:=False;
end;
end;


чтоб получилось так:


actavir 21-02-2011 15:16 1618379

Народ выручите плиз, у меня при распаковке (используется IsDOne) проценты зашкаливают а прогресс бар показывает только первое действие, а дальше остаётся полным. Я уже задавал этот вопрос но тот способ не сработал, подскажите кто знает????

nik1967 21-02-2011 15:57 1618412

actavir,
Ну написано же в хэлпе к ISDone:
читать дальше »
При автоматической расстановке необходим тестовый проход для определения времени выполнения каждой операции относительно других.
Для включения данного режима необходимо заполнить вторые значения всех функций извлечения архивов нулями.
Краткая инструкция:
а) первым делом убедитесь, что в начале скрипта закомментирована строка

#define records
(т.е. необходимо поставить точку с запятой в начале этой строки);
б) компилим проект и запускаем на установку. Это и будет нашим тестовым проходом. Все операции должны дойти до конца и завершиться удачно. Прогрессбар будет зашкаливать и все компоненты будут извлечены вне зависимости от того выбраны они, или нет. Все так и должно быть!
в) после тестового прогона в указанной папке создастся файл records.inf (имя и путь назначается в процедуре инициализации. О ней см. "подробное описание функций" ниже), его необходимо добавить в проект, раскомметировав, или добавив в начале скрипта строку:

#define records

Так же стоит отметить, что если сам скрипт находится в папке отличной от той, в которую компилится проект (например в скрипте NFS:Undercover откомпиленный файл сохраняется в Output\setup.exe), то records.inf создастся в папке с setup.exe и его необходимо будет перенести непосредственно к скрипту, или же подправить в секции [Files] его истинное расположение, например:

#ifdef records
Source: Output\records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
г) снова откомпилить проект.
После этого инсталлер готов к употреблению. Приятного аппетита :)
При запуске процесс выполнения операций будет равномерно и корректно отображаться на прогрессбаре.

Vista-w 21-02-2011 16:15 1618432

nik1967,
Привет, помоги пожалуйста решить проблему?
вот

Как передвинуть все это добро в центр?
И как изменить размер SelectDirPage ?

actavir 21-02-2011 16:56 1618455

nik1967, спасибо огромное разобрался наконец то)))
А ещё вопрос почему при отмене, не происходит деинсталляция??? Как исправить?

nik1967 21-02-2011 17:05 1618459

Vista-w,
На сколько я знаю (может и не прав), дефолтный SelectDirPage: TNewNotebookPage не изменить, не передвинуть нельзя. Только если скрыть, и нарисовать новый.

Vista-w 21-02-2011 17:08 1618461

my-94,
Вот бери http://rghost.ru/4473090

nik1967,
Вот это попа(((

my-94 21-02-2011 19:54 1618601

Vista-w


Спасибо

Vista-w 21-02-2011 20:40 1618628

my-94,
н.з)

serg aka lain 21-02-2011 20:46 1618632

Цитата:

Цитата Vista-w
решить проблему? »

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


[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:InnoSetupTest.

[code]
procedure InitializeWizard();
begin
with WizardForm do
begin
ClientWidth := ClientWidth + ScaleX(100);
OuterNotebook.Width := ClientWidth;
InnerNotebook.Left := ClientWidth div 2 - InnerNotebook.Width div 2;
end;
end;

Gnom_aka_Lexander 21-02-2011 21:12 1618642

nik1967,
Ты прав, но есть выход :)
Vista-w,
Код:

procedure InitializeWizard();
begin
 with WizardForm.InnerPage do
  begin
    Enabled := False;
  end;
end;

Проверено, помогает :)
serg aka lain, Там как раз этим InnerPage перекрывает, а нотебуки уже увеличины до нужных размеров.

Gnom_aka_Lexander 21-02-2011 21:53 1618681

Цитата:

Цитата Лександер
Enabled := False; »

Оказалось слишком круто :) достаточно
Код:

Visible := False;
На полном отключении перестают работать обзоры и чекбоксы :sorry:

nik1967 21-02-2011 22:53 1618725

Vista-w,
Руководствуясь данными serg aka lain, получилось что то типа
читать дальше »
Код:

[Setup]
AppName=Name
AppVerName=Name
DefaultDirName={pf}\Name

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
 
[_Code]
procedure InitializeWizard();
var
  L: Integer;
begin
with WizardForm do begin
    L:=ScaleX(50); // На сколько надо увеличить длину инсталла
    ClientWidth := ClientWidth + L;
    OuterNotebook.Width := ClientWidth;
    InnerNotebook.Left := ClientWidth div 2 - InnerNotebook.Width div 2;
    Bevel.Width:= ClientWidth;
    Bevel1.Width:= ClientWidth;
    MainPanel.Width:= ClientWidth;
with WelcomeLabel1 do
    Left:= WelcomeLabel1.Left + L;
with WelcomeLabel2 do
    Left:= WelcomeLabel2.Left + L;
with FinishedLabel do
    Left:= FinishedLabel.Left + L;
with FinishedHeadingLabel do
    Left:= FinishedHeadingLabel.Left + L;
with WizardSmallBitmapImage do
    Left:= WizardSmallBitmapImage.Left + L;
  end;
end;

procedure InitializeUninstallProgressForm;
var
  L: Integer;
begin
with UninstallProgressForm do begin
    L:=ScaleX(50); // На сколько надо увеличить длину инсталла
    ClientWidth := ClientWidth + L;
    OuterNotebook.Width := ClientWidth;
    InnerNotebook.Left := ClientWidth div 2 - InnerNotebook.Width div 2;
    Bevel.Width:= ClientWidth;
    Bevel1.Width:= ClientWidth;
    MainPanel.Width:= ClientWidth;
with WizardSmallBitmapImage do
    Left:= WizardSmallBitmapImage.Left + L;
  end;
end;


Gnom_aka_Lexander 21-02-2011 23:29 1618754

nik1967, С этим разобрались :) код скрытия иннерпейджа отлично помог, сейчас другая заморочка, может поможеш, а то у меня мозг кипит? Сейчас сам объяснит, чего у нас не получается.
Вот, может пригодится, увеличение окна инсталлятора, без дополнительных модулей и перерисовки компонентов страницы, заодно объединил пару страниц :)
читать дальше »
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
;// отключение ненужных страниц
DisableProgramGroupPage=true
[_Code]
procedure InitializeWizard();
begin
  with WizardForm do
  begin
    AutoScroll := False;
    ClientHeight := ScaleY(380);
    ClientWidth := ScaleX(600);
  end;

  with WizardForm.Bevel do
  begin
    Left := ScaleX(1);
    Top := ScaleY(334);
    Width := ScaleX(600);
  end;

  with WizardForm.CancelButton do
  begin
    Left := ScaleX(508);
    Top := ScaleY(343);
  end;

  with WizardForm.NextButton do
  begin
    Left := ScaleX(423);
    Top := ScaleY(343);
  end;

  with WizardForm.BackButton do
  begin
    Left := ScaleX(348);
    Top := ScaleY(343);
  end;

  with WizardForm.OuterNotebook do
  begin
    Width := ScaleX(601);
    Height := ScaleY(336);
  end;

  with WizardForm.WizardBitmapImage do
  begin
    Width := ScaleX(200);
    Height := ScaleY(340);
  end;

  with WizardForm.WelcomeLabel2 do
  begin
    Left := ScaleX(256);
  end;

  with WizardForm.WelcomeLabel1 do
  begin
    Left := ScaleX(256);
  end;

  with WizardForm.Bevel1 do
  begin
    Width := ScaleX(603);
    Height := ScaleY(0);
  end;

  with WizardForm.InnerNotebook do
  begin
    Top := ScaleY(70);
    Width := ScaleX(520);
    Height := ScaleY(260);
  end;

  with WizardForm.LicenseNotAcceptedRadio do
  begin
    Left := ScaleX(16);
    Top := ScaleY(240);
  end;

  with WizardForm.LicenseAcceptedRadio do
  begin
    Left := ScaleX(16);
    Top := ScaleY(220);
  end;

  with WizardForm.LicenseMemo do
  begin
    Width := ScaleX(521);
    Height := ScaleY(180);
  end;

  with WizardForm.PasswordEdit do
  begin
    Left := ScaleX(56);
  end;

  with WizardForm.PasswordEditLabel do
  begin
    Left := ScaleX(56);
  end;

  with WizardForm.PasswordLabel do
  begin
    Left := ScaleX(56);
  end;

  with WizardForm.InfoBeforeMemo do
  begin
    Width := ScaleX(521);
    Height := ScaleY(221);
  end;

  with WizardForm.UserInfoSerialEdit do
  begin
    Left := ScaleX(56);
    Top := ScaleY(224);
    Parent := WizardForm.PasswordPage;
  end;

  with WizardForm.UserInfoSerialLabel do
  begin
    Parent := WizardForm.PasswordPage;
    Left := ScaleX(56);
    Top := ScaleY(208);
  end;

  with WizardForm.UserInfoOrgEdit do
  begin
    Left := ScaleX(56);
    Top := ScaleY(172);
    Parent := WizardForm.PasswordPage;
  end;

  with WizardForm.UserInfoOrgLabel do
  begin
    Parent := WizardForm.PasswordPage;
    Left := ScaleX(56);
    Top := ScaleY(156);
  end;

  with WizardForm.UserInfoNameEdit do
  begin
    Left := ScaleX(56);
    Top := ScaleY(120);
    Parent := WizardForm.PasswordPage;
  end;

  with WizardForm.UserInfoNameLabel do
  begin
    Parent := WizardForm.PasswordPage;
    Left := ScaleX(56);
    Top := ScaleY(104);
  end;

  WizardForm.UserInfoSerialEdit.TabOrder := 0;
  WizardForm.UserInfoSerialLabel.TabOrder := 1;
  WizardForm.UserInfoOrgEdit.TabOrder := 2;
  WizardForm.UserInfoOrgLabel.TabOrder := 3;
  WizardForm.UserInfoNameEdit.TabOrder := 4;
  WizardForm.UserInfoNameLabel.TabOrder := 5;

  with WizardForm.SelectDirBitmapImage do
  begin
    Left := ScaleX(48);
  end;

  with WizardForm.DiskSpaceLabel do
  begin
    Left := ScaleX(48);
    Top := ScaleY(112);
  end;

  with WizardForm.DirBrowseButton do
  begin
    Left := ScaleX(390);
    Top := ScaleY(76);
  end;

  with WizardForm.DirEdit do
  begin
    Left := ScaleX(48);
    Top := ScaleY(76);
  end;

  with WizardForm.SelectDirBrowseLabel do
  begin
    Left := ScaleX(48);
  end;

  with WizardForm.SelectDirLabel do
  begin
    Left := ScaleX(92);
  end;

  with WizardForm.ComponentsDiskSpaceLabel do
  begin
    Left := ScaleX(8);
    Top := ScaleY(232);
  end;

  with WizardForm.ComponentsList do
  begin
    Width := ScaleX(521);
    Height := ScaleY(168);
  end;

  with WizardForm.TypesCombo do
  begin
    Left := ScaleX(48);
  end;

  with WizardForm.SelectComponentsLabel do
  begin
    Left := ScaleX(48);
  end;

  with WizardForm.SelectGroupBitmapImage do
  begin
    Left := ScaleX(48);
    Top := ScaleY(135);
    Parent := WizardForm.SelectDirPage;
  end;

  with WizardForm.NoIconsCheck do
  begin
    Left := ScaleX(48);
    Top := ScaleY(231);
    Parent := WizardForm.SelectDirPage;
  end;

  with WizardForm.GroupBrowseButton do
  begin
    Left := ScaleX(390);
    Top := ScaleY(204);
    Parent := WizardForm.SelectDirPage;
  end;

  with WizardForm.GroupEdit do
  begin
    Left := ScaleX(48);
    Top := ScaleY(204);
    Parent := WizardForm.SelectDirPage;
  end;

  with WizardForm.SelectStartMenuFolderBrowseLabel do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(48);
    Top := ScaleY(180);
  end;

  with WizardForm.SelectStartMenuFolderLabel do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(92);
    Top := ScaleY(145);
  end;

  WizardForm.NoIconsCheck.TabOrder := 0;
  WizardForm.GroupBrowseButton.TabOrder := 1;
  WizardForm.GroupEdit.TabOrder := 2;
  WizardForm.SelectStartMenuFolderBrowseLabel.TabOrder := 3;
  WizardForm.SelectStartMenuFolderLabel.TabOrder := 4;

  with WizardForm.TasksList do
  begin
    Left := ScaleX(64);
    Height := ScaleY(224);
  end;

  with WizardForm.SelectTasksLabel do
  begin
    Left := ScaleX(56);
  end;

  with WizardForm.ReadyMemo do
  begin
    Width := ScaleX(521);
    Height := ScaleY(237);
  end;

  with WizardForm.ReadyLabel do
  begin
    Left := ScaleX(40);
  end;

  with WizardForm.PreparingErrorBitmapImage do
  begin
    Left := ScaleX(48);
    Top := ScaleY(56);
  end;

  with WizardForm.PreparingLabel do
  begin
    Left := ScaleX(72);
    Top := ScaleY(56);
  end;

  with WizardForm.PreparingYesRadio do
  begin
    Left := ScaleX(72);
    Top := ScaleY(161);
  end;

  with WizardForm.PreparingNoRadio do
  begin
    Left := ScaleX(72);
    Top := ScaleY(183);
  end;

  with WizardForm.FilenameLabel do
  begin
    Top := ScaleY(136);
  end;

  with WizardForm.StatusLabel do
  begin
    Top := ScaleY(120);
  end;

  with WizardForm.ProgressGauge do
  begin
    Top := ScaleY(162);
    Width := ScaleX(521);
    Height := ScaleY(29);
  end;

  with WizardForm.InfoAfterMemo do
  begin
    Width := ScaleX(521);
    Height := ScaleY(237);
  end;

  with WizardForm.MainPanel do
  begin
    Width := ScaleX(603);
  end;

  with WizardForm.WizardSmallBitmapImage do
  begin
    Left := ScaleX(544);
    Top := ScaleY(0);
  end;

  with WizardForm.WizardBitmapImage2 do
  begin
    Width := ScaleX(200);
    Height := ScaleY(340);
  end;

  with WizardForm.RunList do
  begin
    Left := ScaleX(264);
  end;

  with WizardForm.NoRadio do
  begin
    Left := ScaleX(264);
    Top := ScaleY(180);
  end;

  with WizardForm.YesRadio do
  begin
    Left := ScaleX(264);
    Top := ScaleY(158);
  end;

  with WizardForm.FinishedLabel do
  begin
    Left := ScaleX(264);
    Top := ScaleY(79);
  end;

  with WizardForm.FinishedHeadingLabel do
  begin
    Left := ScaleX(264);
    Top := ScaleY(24);
  end;

  with WizardForm.BeveledLabel do
  begin
    Top := ScaleY(330);
  end;
end;


Код длинноват, потому что под новые размеры все подгонял - передвигал, может есть способ его оптимизировать :)
Да, и еще, на расширенной версии 541 иннерпейдж ни скрывать, ни отключать не требуется, она не мешает - видимо автоматом раздвигается :)

my-94 22-02-2011 09:25 1618908

Кто не то может помочь хочу чтобы перед установкой высвечивалась картинка

к этому скрипту надо привязать

вот это

читать дальше »
[code]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard();
begin

ExtractTemporaryFile('splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
end;

[Files]


Source: isgsg.dll; DestDir: {tmp}; Flags: dontcopy nocompression
Source: splash.png; DestDir: {tmp}; Flags: dontcopy nocompression


с помощью библиотеки isgsg.dll
и картинки splash.png которая будет отображаться
всё файлы в архиве

Gnom_aka_Lexander 22-02-2011 10:23 1618939

my-94, Лови :)

читать дальше »
Код:

[Setup]
AppId={{4E7C4AAA-6115-4228-B387-707B52DDCD89}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=no
disablereadypage=true


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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy nocompression
Source: ISSkin.dll; DestDir: {tmp}; Flags: dontcopy nocompression
source: 1.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: dontcopy nocompression
Source: splash.png; DestDir: {tmp}; Flags: dontcopy nocompression

[_Code]// ибрать *_* перед [
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
 ExtractTemporaryFile('Office2007.cjstyles');
 LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
 Result := True;
end;

procedure DeinitializeSetup();
begin
 UnloadSkin();
end;

procedure AboutButtonOnClick(Sender: TObject);
begin
  MsgBox('Это демо версия программы.', mbInformation, mb_Ok);
end;

procedure URLLabelOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin

end;

procedure InitializeWizard();
var
  AboutButton, CancelButton: TButton;
  URLLabel: TNewStaticText;
  BackgroundBitmapImage: TBitmapImage;
  BackgroundBitmapText: TNewStaticText;
  b:string;
  BmpFile: TBitmapImage;
begin
ExtractTemporaryFile('1.bmp'); //Извлекаем файл, который пойдет в окно инсталлятора
//Вставляем изображение в окно инсталлятора, для каждой страницы нужно добвлять изображение заново
ExtractTemporaryFile('splash.png');
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 313);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 313);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.FinishedPage;

ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
end;
  CancelButton := WizardForm.CancelButton;
  AboutButton := TButton.Create(WizardForm);
  AboutButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
  AboutButton.Top := CancelButton.Top;
  AboutButton.Width := CancelButton.Width;
  AboutButton.Height := CancelButton.Height;
  AboutButton.Caption := '&Repack info';
  AboutButton.OnClick := @AboutButtonOnClick;
  AboutButton.Parent := WizardForm;

  URLLabel := TNewStaticText.Create(WizardForm);

  URLLabel.Cursor := crHand;
  URLLabel.OnClick := @URLLabelOnClick;
  URLLabel.Parent := WizardForm;
  { Alter Font *after* setting Parent so the correct defaults are inherited first }
  URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
  URLLabel.Font.Color := clBlue;
  URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2;
  URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20);

  BackgroundBitmapImage := TBitmapImage.Create(MainForm);
  BackgroundBitmapImage.Left := 50;
  BackgroundBitmapImage.Top := 100;
  BackgroundBitmapImage.AutoSize := True;
  BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
  BackgroundBitmapImage.Parent := MainForm;

  BackgroundBitmapText := TNewStaticText.Create(MainForm);
  BackgroundBitmapText.Left := BackgroundBitmapImage.Left;
  BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8);
  BackgroundBitmapText.Caption := 'TBitmapImage';
  BackgroundBitmapText.Parent := MainForm;
end;
[Messages]
BeveledLabel=111


my-94 22-02-2011 10:48 1618950

Лександер Лександер

ОГРОМНОЕ Спасибо!!

Лександер

Помоги если сможешь чтобы кнопка "Repack info" отображалась только на первой странице

Gnom_aka_Lexander 22-02-2011 11:37 1619007

my-94, Я только вот так могу:

читать дальше »
[Setup]
AppId={{4E7C4AAA-6115-4228-B387-707B52DDCD89}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=no
disablereadypage=true


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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy nocompression
Source: ISSkin.dll; DestDir: {tmp}; Flags: dontcopy nocompression
source: 1.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: dontcopy nocompression
Source: splash.png; DestDir: {tmp}; Flags: dontcopy nocompression

[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
UnloadSkin();
end;

procedure AboutButtonOnClick(Sender: TObject);
begin
MsgBox('Ýòî äåìî âåðñèÿ ïðîãðàììû.', mbInformation, mb_Ok);
end;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin

end;

procedure InitializeWizard();
var
AboutButton, CancelButton: TButton;
URLLabel: TNewStaticText;
BackgroundBitmapImage: TBitmapImage;
BackgroundBitmapText: TNewStaticText;
b:string;
BmpFile: TBitmapImage;
begin
ExtractTemporaryFile('1.bmp'); //Èçâëåêàåì ôàéë, êîòîðûé ïîéäåò â îêíî èíñòàëëÿòîðà
//Âñòàâëÿåì èçîáðàæåíèå â îêíî èíñòàëëÿòîðà, äëÿ êàæäîé ñòðàíèöû íóæíî äîáâëÿòü èçîáðàæåíèå çàíîâî
ExtractTemporaryFile('splash.png');
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 313);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 313);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.FinishedPage;

ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
end;
CancelButton := WizardForm.CancelButton;
AboutButton := TButton.Create(WizardForm);
AboutButton.Left := 12;
AboutButton.Top := 12;
AboutButton.Width := CancelButton.Width;
AboutButton.Height := CancelButton.Height;
AboutButton.Caption := '&Repack info';
AboutButton.OnClick := @AboutButtonOnClick;
AboutButton.Parent := WizardForm.WelcomePage

URLLabel := TNewStaticText.Create(WizardForm);

URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := WizardForm;
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2;
URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20);

BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Left := 50;
BackgroundBitmapImage.Top := 100;
BackgroundBitmapImage.AutoSize := True;
BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
BackgroundBitmapImage.Parent := MainForm;

BackgroundBitmapText := TNewStaticText.Create(MainForm);
BackgroundBitmapText.Left := BackgroundBitmapImage.Left;
BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8);
BackgroundBitmapText.Caption := 'TBitmapImage';
BackgroundBitmapText.Parent := MainForm;
AboutButton.TabOrder := 2
end;
[Messages]
BeveledLabel=111

nik1967, может подскажет, как это поэлегантнее сделать :)

my-94 22-02-2011 11:59 1619032

Спасибо =)

nik1967 22-02-2011 12:02 1619035

my-94,
Так ещё можно
Код:

[Setup]
AppId={{4E7C4AAA-6115-4228-B387-707B52DDCD89}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=no
;disablereadypage=true

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

[Messages]
BeveledLabel=111

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy nocompression
Source: ISSkin.dll; DestDir: {tmp}; Flags: dontcopy nocompression
source: 1.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: dontcopy nocompression
Source: splash.png; DestDir: {tmp}; Flags: dontcopy nocompression

[_Code]
var
  AboutButton, CancelButton: TButton;
  URLLabel: TNewStaticText;
  BackgroundBitmapImage: TBitmapImage;
  BackgroundBitmapText: TNewStaticText;
  b:string;
  BmpFile: TBitmapImage;

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
 ExtractTemporaryFile('Office2007.cjstyles');
 LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
 Result := True;
end;

procedure DeinitializeSetup();
begin
 UnloadSkin();
end;

procedure AboutButtonOnClick(Sender: TObject);
begin
  MsgBox('Это демо версия программы.', mbInformation, mb_Ok);
end;

procedure URLLabelOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', 'http://forum.ru-board.com/topic.cgi?forum=5&topic=35848&start=40#lt', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.bmp'); //Извлекаем файл, который пойдет в окно инсталлятора
//Вставляем изображение в окно инсталлятора, для каждой страницы нужно добвлять изображение заново
ExtractTemporaryFile('splash.png');
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 313);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 497, 313);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.FinishedPage;

ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
end;
  CancelButton := WizardForm.CancelButton;
  AboutButton := TButton.Create(WizardForm);
  AboutButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
  AboutButton.Top := CancelButton.Top;
  AboutButton.Width := CancelButton.Width;
  AboutButton.Height := CancelButton.Height;
  AboutButton.Caption := '&Repack info';
  AboutButton.OnClick := @AboutButtonOnClick;
  AboutButton.Parent := WizardForm;

  URLLabel := TNewStaticText.Create(WizardForm);

  URLLabel.Cursor := crHand;
  URLLabel.OnClick := @URLLabelOnClick;
  URLLabel.Parent := WizardForm;
  { Alter Font *after* setting Parent so the correct defaults are inherited first }
  URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
  URLLabel.Font.Color := clBlue;
  URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2;
  URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20);
  URLLabel.Caption:= 'Сайт';

  BackgroundBitmapImage := TBitmapImage.Create(MainForm);
  BackgroundBitmapImage.Left := 50;
  BackgroundBitmapImage.Top := 100;
  BackgroundBitmapImage.AutoSize := True;
  BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
  BackgroundBitmapImage.Parent := MainForm;

  BackgroundBitmapText := TNewStaticText.Create(MainForm);
  BackgroundBitmapText.Left := BackgroundBitmapImage.Left;
  BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8);
  BackgroundBitmapText.Caption := 'TBitmapImage';
  BackgroundBitmapText.Parent := MainForm;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  if CurPageID <> wpWelcome then begin
  AboutButton.Hide; URLLabel.Hide end else begin
  AboutButton.Show; URLLabel.Show; end;
end;


my-94 22-02-2011 12:07 1619042

Что то вообще как стандартный стал

nik1967 22-02-2011 12:16 1619051

my-94,
Ну дак ты тут [_Code] убери подчёркивание, что бы стало так [code]
Цитата:

nik1967, может подскажет, как это поэлегантнее сделать
Неа, не подскажу. И времени нет, и думать лень :unsure:

my-94 22-02-2011 13:25 1619119

nik1967

А можа чтобы вместо слова "сайт" была то же кнопка с переходом на сайт ?

nik1967 22-02-2011 13:53 1619142

my-94,
Можно
Код:

[Setup]
AppId={{4E7C4AAA-6115-4228-B387-707B52DDCD89}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=no
;disablereadypage=true

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

[Messages]
BeveledLabel=111

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy nocompression
Source: ISSkin.dll; DestDir: {tmp}; Flags: dontcopy nocompression
source: 1.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: dontcopy nocompression
Source: splash.png; DestDir: {tmp}; Flags: dontcopy nocompression

[_Code]
var
  AboutButton, CancelButton, URLButton: TButton;
  BackgroundBitmapImage: TBitmapImage;
  BackgroundBitmapText: TNewStaticText;
  BmpFile: TBitmapImage;

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
 ExtractTemporaryFile('Office2007.cjstyles');
 LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
 Result := True;
end;

procedure DeinitializeSetup();
begin
 UnloadSkin();
end;

procedure AboutButtonOnClick(Sender: TObject);
begin
  MsgBox('Это демо версия программы.', mbInformation, mb_Ok);
end;

procedure URLLabelOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', 'http://forum.ru-board.com/topic.cgi?forum=5&topic=35848&start=40#lt', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.bmp'); //Извлекаем файл, который пойдет в окно инсталлятора
//Вставляем изображение в окно инсталлятора, для каждой страницы нужно добвлять изображение заново
ExtractTemporaryFile('splash.png');
BmpFile:= TBitmapImage.Create(WizardForm);
with BmpFile do begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(313));
Stretch:= true;
Parent:= WizardForm.WelcomePage;
end;

BmpFile:= TBitmapImage.Create(WizardForm);
with BmpFile do begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(313));
Stretch:= true;
Parent:= WizardForm.FinishedPage;
end;

ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
end;
  CancelButton := WizardForm.CancelButton;
  AboutButton := TButton.Create(WizardForm);
  with AboutButton do begin
  Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
  Top := CancelButton.Top;
  Width := CancelButton.Width;
  Height := CancelButton.Height;
  Caption := '&Repack info';
  OnClick := @AboutButtonOnClick;
  Parent := WizardForm;
  end;

  URLButton := TButton.Create(WizardForm);
  with URLButton do begin
  Left := AboutButton.Left + AboutButton.Width + ScaleX(10);
  Top := CancelButton.Top;
  Width := CancelButton.Width;
  Height := CancelButton.Height;
  Caption := 'Сайт';
  OnClick := @URLLabelOnClick;
  Parent := WizardForm;
  end;

  BackgroundBitmapImage := TBitmapImage.Create(MainForm);
  BackgroundBitmapImage.Left := ScaleX(50);
  BackgroundBitmapImage.Top := ScaleY(100);
  BackgroundBitmapImage.AutoSize := True;
  BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
  BackgroundBitmapImage.Parent := MainForm;

  BackgroundBitmapText := TNewStaticText.Create(MainForm);
  BackgroundBitmapText.Left := BackgroundBitmapImage.Left;
  BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8);
  BackgroundBitmapText.Caption := 'TBitmapImage';
  BackgroundBitmapText.Parent := MainForm;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  if CurPageID <> wpWelcome then begin
  AboutButton.Hide; URLButton.Hide end else begin
  AboutButton.Show; URLButton.Show; end;
end;


my-94 22-02-2011 14:19 1619158

Спасибо за помощь

nik1967 22-02-2011 14:42 1619184

my-94,
На предыдущей странице serg aka lain, Лександер и я писали примеры, как увеличить дефолтный инсталл.
За тебя скрипт писать не буду, чем мог - помог.

my-94 22-02-2011 16:08 1619257

Как подвинуть кнопки ?



Gnom_aka_Lexander 22-02-2011 16:17 1619266

my-94, Для урл-кнопы:
Код:

URLButton := TButton.Create(WizardForm);
  with URLButton do begin
  Left := AboutButton.Left + AboutButton.Width + ScaleX(10);

ScaleX(10); - число меняеш до тех пор, пока кнопа не приедет куда тебе нужно :)
Для кнопки далее - в процедуру InitializeWizard(); добавить вот такой код:
Код:

begin
  with WizardForm.NextButton do
  begin
    Left := ScaleX(175);
  end;

ScaleX(175) - меняеш число, пока не понравится результат :)
Только кнопу далее двигать я-бы не советовал :)

my-94 22-02-2011 16:31 1619276

Лександер

Вставляю
читать дальше »

Цитата:

[Setup]
AppId={{4E7C4AAA-6115-4228-B387-707B52DDCD89}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=no
;disablereadypage=true

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

[Messages]
BeveledLabel=111

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy nocompression
Source: ISSkin.dll; DestDir: {tmp}; Flags: dontcopy nocompression
source: 1.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: dontcopy nocompression
Source: splash.png; DestDir: {tmp}; Flags: dontcopy nocompression

[code]
var
AboutButton, CancelButton, URLButton: TButton;
BackgroundBitmapImage: TBitmapImage;
BackgroundBitmapText: TNewStaticText;
BmpFile: TBitmapImage;

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
UnloadSkin();
end;

procedure AboutButtonOnClick(Sender: TObject);
begin
MsgBox('Ýòî äåìî âåðñèÿ ïðîãðàììû.', mbInformation, mb_Ok);
end;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://forum.ru-board.com/topic.cgi?forum=5&topic=35848&start=40#lt', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.bmp'); //Èçâëåêàåì ôàéë, êîòîðûé ïîéäåò â îêíî èíñòàëëÿòîðà
//Âñòàâëÿåì èçîáðàæåíèå â îêíî èíñòàëëÿòîðà, äëÿ êàæäîé ñòðàíèöû íóæíî äîáâëÿòü èçîáðàæåíèå çàíîâî
ExtractTemporaryFile('splash.png');
BmpFile:= TBitmapImage.Create(WizardForm);
with BmpFile do begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(313));
Stretch:= true;
Parent:= WizardForm.WelcomePage;
end;

BmpFile:= TBitmapImage.Create(WizardForm);
with BmpFile do begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(313));
Stretch:= true;
Parent:= WizardForm.FinishedPage;
end;



ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
end;
CancelButton := WizardForm.CancelButton;
AboutButton := TButton.Create(WizardForm);
with AboutButton do begin
Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
Top := CancelButton.Top;
Width := CancelButton.Width;
Height := CancelButton.Height;
Caption := '&Repack info';
OnClick := @AboutButtonOnClick;
Parent := WizardForm;
end;

URLButton := TButton.Create(WizardForm);
with URLButton do begin
Left := AboutButton.Left + AboutButton.Width + ScaleX(10);

begin
with WizardForm.NextButton do
begin
Left := ScaleX(175);
end;


URLButton := TButton.Create(WizardForm);
with URLButton do begin
Left := AboutButton.Left + AboutButton.Width + ScaleX(10);
Top := CancelButton.Top;
Width := CancelButton.Width;
Height := CancelButton.Height;
Caption := 'Ñàéò';
OnClick := @URLLabelOnClick;
Parent := WizardForm;
end;

BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Left := ScaleX(50);
BackgroundBitmapImage.Top := ScaleY(100);
BackgroundBitmapImage.AutoSize := True;
BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
BackgroundBitmapImage.Parent := MainForm;

BackgroundBitmapText := TNewStaticText.Create(MainForm);
BackgroundBitmapText.Left := BackgroundBitmapImage.Left;
BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8);
BackgroundBitmapText.Caption := 'TBitmapImage';
BackgroundBitmapText.Parent := MainForm;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if CurPageID <> wpWelcome then begin
AboutButton.Hide; URLButton.Hide end else begin
AboutButton.Show; URLButton.Show; end;
end;







Выдаёт ошибку :(


я выделил жирным что вставил , а строчка
читать дальше »
URLButton := TButton.Create(WizardForm);
with URLButton do begin
Left := AboutButton.Left + AboutButton.Width + ScaleX(10);
уже есть

Gnom_aka_Lexander 22-02-2011 17:17 1619295

my-94, Не вижу, чего там вставлено :) я последнее время, прежде чем советовать, стал по два раза проверять :)

my-94 22-02-2011 17:31 1619310

Выделил жирным

ChVL 22-02-2011 18:15 1619341

Есть ли способ во все сразу выделенные строки скрипта в конце добавить, к примеру, Flags: ignoreversion?

Gnom_aka_Lexander 22-02-2011 18:18 1619342

То, что ты выделил - после ближайшего энда писать нужно, а
Цитата:

Цитата my-94
URLButton := TButton.Create(WizardForm);
with URLButton do begin
Left := AboutButton.Left + AboutButton.Width + ScaleX(10); »

я и не говорил, что добавлять нужно, в ней нижно менять координату ScaleX(10).

ChVL, только в ISTool или InnoIDE, насколько я знаю.

R.i.m.s.k.y. 22-02-2011 18:22 1619348

Цитата:

Цитата ChVL
Есть ли способ во все сразу выделенные строки скрипта в конце добавить, к примеру, Flags: ignoreversion? »

Да, открываешь скрипт в ISTool, слева выбираешь секцию Files, справа выделяешь строчки, на них ПКМ - свойства и выставляешь флаги.

my-94 22-02-2011 19:32 1619391

Лександер

Спасибо с координатой ScaleX(10) получилось сдвинуть кнопку "Сайт"

А вот с

Цитата:

begin
with WizardForm.NextButton do
begin
Left := ScaleX(175);
end;
не чего не получается !

Gnom_aka_Lexander 22-02-2011 20:08 1619410

my-94, Там по логике даже -
Цитата:

Цитата my-94
begin
with WizardForm.NextButton do
begin
Left := ScaleX(175);
end; »

В самом конце процедуры InitializeWizard(); нужно поставить еще один энд (два бегина :))
Подсказка - после строчки
Код:

BackgroundBitmapText.Parent := MainForm;

my-94 22-02-2011 20:57 1619457

Лександер

Вот вставил как всё написано всё равно ни как :(

читать дальше »
[Setup]
AppId={{4E7C4AAA-6115-4228-B387-707B52DDCD89}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=no
;disablereadypage=true

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

[Messages]
BeveledLabel=111

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy nocompression
Source: ISSkin.dll; DestDir: {tmp}; Flags: dontcopy nocompression
source: 1.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: dontcopy nocompression
Source: splash.png; DestDir: {tmp}; Flags: dontcopy nocompression

[code]
var
AboutButton, CancelButton, URLButton: TButton;
BackgroundBitmapImage: TBitmapImage;
BackgroundBitmapText: TNewStaticText;
BmpFile: TBitmapImage;

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
UnloadSkin();
end;

procedure AboutButtonOnClick(Sender: TObject);
begin
MsgBox('Ýòî äåìî âåðñèÿ ïðîãðàììû.', mbInformation, mb_Ok);
end;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://forum.ru-board.com/topic.cgi?forum=5&topic=35848&start=40#lt', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.bmp'); //Èçâëåêàåì ôàéë, êîòîðûé ïîéäåò â îêíî èíñòàëëÿòîðà
//Âñòàâëÿåì èçîáðàæåíèå â îêíî èíñòàëëÿòîðà, äëÿ êàæäîé ñòðàíèöû íóæíî äîáâëÿòü èçîáðàæåíèå çàíîâî
ExtractTemporaryFile('splash.png');
BmpFile:= TBitmapImage.Create(WizardForm);
with BmpFile do begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(313));
Stretch:= true;
Parent:= WizardForm.WelcomePage;
end;

BmpFile:= TBitmapImage.Create(WizardForm);
with BmpFile do begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(313));
Stretch:= true;
Parent:= WizardForm.FinishedPage;
end;

ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
end;
CancelButton := WizardForm.CancelButton;
AboutButton := TButton.Create(WizardForm);
with AboutButton do begin
Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
Top := CancelButton.Top;
Width := CancelButton.Width;
Height := CancelButton.Height;
Caption := '&Repack info';
OnClick := @AboutButtonOnClick;
Parent := WizardForm;
end;



URLButton := TButton.Create(WizardForm);
with URLButton do begin
Left := AboutButton.Left + AboutButton.Width + ScaleX(50);
Top := CancelButton.Top;
Width := CancelButton.Width;
Height := CancelButton.Height;
Caption := 'Ñàéò';
OnClick := @URLLabelOnClick;
Parent := WizardForm;
end;


BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Left := ScaleX(50);
BackgroundBitmapImage.Top := ScaleY(100);
BackgroundBitmapImage.AutoSize := True;
BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
BackgroundBitmapImage.Parent := MainForm;

BackgroundBitmapText := TNewStaticText.Create(MainForm);
BackgroundBitmapText.Left := BackgroundBitmapImage.Left;
BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8);
BackgroundBitmapText.Caption := 'TBitmapImage';
BackgroundBitmapText.Parent := MainForm;
end;
end;
begin
begin
with WizardForm.NextButton do
begin
Left := ScaleX(175);
end;




Procedure CurPageChanged(CurPageID: Integer);
Begin
if CurPageID <> wpWelcome then begin
AboutButton.Hide; URLButton.Hide end else begin
AboutButton.Show; URLButton.Show; end;
end;

Gnom_aka_Lexander 22-02-2011 21:35 1619509

my-94, у тебя получается, только если написать за тебя?
читать дальше »
Код:

[Setup]
AppId={{4E7C4AAA-6115-4228-B387-707B52DDCD89}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=no
;disablereadypage=true

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

[Messages]
BeveledLabel=111

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy nocompression
Source: ISSkin.dll; DestDir: {tmp}; Flags: dontcopy nocompression
source: 1.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: dontcopy nocompression
Source: splash.png; DestDir: {tmp}; Flags: dontcopy nocompression

[_Code]
var
  AboutButton, CancelButton, URLButton: TButton;
  BackgroundBitmapImage: TBitmapImage;
  BackgroundBitmapText: TNewStaticText;
  BmpFile: TBitmapImage;

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
 ExtractTemporaryFile('Office2007.cjstyles');
 LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
 Result := True;
end;

procedure DeinitializeSetup();
begin
 UnloadSkin();
end;

procedure AboutButtonOnClick(Sender: TObject);
begin
  MsgBox('Это демо версия программы.', mbInformation, mb_Ok);
end;

procedure URLLabelOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('open', 'http://forum.ru-board.com/topic.cgi?forum=5&topic=35848&start=40#lt', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.bmp'); //Извлекаем файл, который пойдет в окно инсталлятора
//Вставляем изображение в окно инсталлятора, для каждой страницы нужно добвлять изображение заново
ExtractTemporaryFile('splash.png');
BmpFile:= TBitmapImage.Create(WizardForm);
with BmpFile do begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(313));
Stretch:= true;
Parent:= WizardForm.WelcomePage;
end;

BmpFile:= TBitmapImage.Create(WizardForm);
with BmpFile do begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(313));
Stretch:= true;
Parent:= WizardForm.FinishedPage;
end;

ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
end;
begin
with WizardForm.NextButton do
begin
Left := ScaleX(175);
end;

  CancelButton := WizardForm.CancelButton;
  AboutButton := TButton.Create(WizardForm);
  with AboutButton do begin
  Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
  Top := CancelButton.Top;
  Width := CancelButton.Width;
  Height := CancelButton.Height;
  Caption := '&Repack info';
  OnClick := @AboutButtonOnClick;
  Parent := WizardForm;
  end;

  URLButton := TButton.Create(WizardForm);
  with URLButton do begin
  Left := AboutButton.Left + AboutButton.Width + ScaleX(10);
  Top := CancelButton.Top;
  Width := CancelButton.Width;
  Height := CancelButton.Height;
  Caption := 'Сайт';
  OnClick := @URLLabelOnClick;
  Parent := WizardForm;
end;
  end;
  BackgroundBitmapImage := TBitmapImage.Create(MainForm);
  BackgroundBitmapImage.Left := ScaleX(50);
  BackgroundBitmapImage.Top := ScaleY(100);
  BackgroundBitmapImage.AutoSize := True;
  BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
  BackgroundBitmapImage.Parent := MainForm;

  BackgroundBitmapText := TNewStaticText.Create(MainForm);
  BackgroundBitmapText.Left := BackgroundBitmapImage.Left;
  BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8);
  BackgroundBitmapText.Caption := 'TBitmapImage';
  BackgroundBitmapText.Parent := MainForm;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  if CurPageID <> wpWelcome then begin
  AboutButton.Hide; URLButton.Hide end else begin
  AboutButton.Show; URLButton.Show; end;
end;


выделил

my-94 22-02-2011 21:43 1619518

Лександер

Выдели пожалуйста жирным что ты вставил

Gnom_aka_Lexander 22-02-2011 21:50 1619536

my-94, Выделил
Чтобы научится - бери готовые, разбирай их, и много-много думай - как чего работает, если спрашивать даже такие мелочи - как вставить в скрипт уже готовый код - сложно будет научится.
И еще - есть такая кнопа - Полезное сообщение - не забывай жать ее, если помогли тебе.
И еще, маленький секрет открою - я тоже очень-очень хочу научится писать скрипты :)

my-94 22-02-2011 21:52 1619541

Спасибо хочу тоже научится скрипты писать :)

R.i.m.s.k.y. 23-02-2011 00:28 1619682

Цитата:

Цитата Лександер
И еще, маленький секрет открою - я тоже очень-очень хочу научится писать скрипты »

Цитата:

Цитата my-94
Спасибо хочу тоже научится скрипты писать »

чего там учиться, наливай да пей! ;)

lettergold 23-02-2011 13:08 1619910

Inno setup выдает ошибку при компиляции
 
Мой инсталятор должен проверят какая стоит ОС ,и в нужную устанавливать файл.
делаю так:
Код:

Source: F:\Программа по ОС\Win7\RICHED20.DLL; DestDir: {app}; Flags: ignoreversion; MinVersion: ,6.1.7600;
Source: F:\Программа по ОС\XP\riched20.dll; DestDir: {app}; Flags: ignoreversion; OnlyBelowVersion: ,6.1.7600;

То есть если Windows7 и выше,то с этой папки : Win7\RICHED20.DLL , и соответственно если ниже, то с другой.


Но при компиляции вот такая ошибка:

Column: Parameter "OnlyBelowVersion" is not a valid value. (Параметр "OnlyBelowVersion" не является допустимым значением.)

Подскажите в чем ошибка?

XXXler 23-02-2011 15:35 1620015

мб потому как:
Код:

OnlyBelowVersion: 0, 6.1.7600

lettergold 23-02-2011 17:42 1620109

Спасибо!

LinkOFF 23-02-2011 19:31 1620195

Как изменить цвет инсталятора на черный?

actavir 23-02-2011 19:57 1620222

Народ выручите плиз. Знаю что заезженая тема но всё же спрошу
Дайте скрипт, чтобы на странице выбора куда ярлыки в пуск будут запихиваться картинка разъезжалась на весь инсталятор, я так понял это должен быть аналог вот этого:

Код:

procedure SelectDirPage;
begin
  with WizardForm do
    begin
      with DirEdit do
        begin
          Left:= 40;
          Top:= 137;
          Parent:= pnl;
        end;
      with DirBrowseButton do
        begin
          Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
          Top:= WizardForm.DirEdit.Top - 1;
          Parent:= pnl;
        end;
      with SelectDirBitmapImage do
        begin
          Left:= WizardForm.DirEdit.Left;
          Top:= WizardForm.DirEdit.Top - 62;
          Stretch:= True;
          Parent:= pnl;
        end;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
                WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
      WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
      Caption:= WizardForm.SelectDirBrowseLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
          Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
          Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
          Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.SelectDirLabel.AutoSize;
      SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
                WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
      WordWrap:= WizardForm.SelectDirLabel.WordWrap;
      Caption:= WizardForm.SelectDirLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirLabel.Font.Color;
          Style:= WizardForm.SelectDirLabel.Font.Style;
          Name:= WizardForm.SelectDirLabel.Font.Name;
          Size:= WizardForm.SelectDirLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
                WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
      WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
      Caption:= WizardForm.DiskSpaceLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.DiskSpaceLabel.Font.Color;
          Style:= WizardForm.DiskSpaceLabel.Font.Style;
          Name:= WizardForm.DiskSpaceLabel.Font.Name;
          Size:= WizardForm.DiskSpaceLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;

Может кто нибудь его переделать или дать уже готовый????

p.s. Не ругайтесь сильно за заезженую тему)))

my-94 24-02-2011 21:51 1621079

Помогите вставить

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

procedure InitializeWizard();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 555; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 555; //
end;
with PageDescriptionLabel do begin
Width := Width - 555; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 555; //
end;
end;
end


в этот скрипт

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

[Setup]
AppId={{4E7C4AAA-6115-4228-B387-707B52DDCD89}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=no
;disablereadypage=true

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

[Messages]
BeveledLabel=111

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy nocompression
Source: ISSkin.dll; DestDir: {tmp}; Flags: dontcopy nocompression
source: 1.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: dontcopy nocompression
Source: splash.png; DestDir: {tmp}; Flags: dontcopy nocompression

[code]
var
AboutButton, CancelButton, URLButton: TButton;
BackgroundBitmapImage: TBitmapImage;
BackgroundBitmapText: TNewStaticText;
BmpFile: TBitmapImage;

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
UnloadSkin();
end;

procedure AboutButtonOnClick(Sender: TObject);
begin
MsgBox('Ýòî äåìî âåðñèÿ ïðîãðàììû.', mbInformation, mb_Ok);
end;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://forum.ru-board.com/topic.cgi?forum=5&topic=35848&start=40#lt', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.bmp'); //Èçâëåêàåì ôàéë, êîòîðûé ïîéäåò â îêíî èíñòàëëÿòîðà
//Âñòàâëÿåì èçîáðàæåíèå â îêíî èíñòàëëÿòîðà, äëÿ êàæäîé ñòðàíèöû íóæíî äîáâëÿòü èçîáðàæåíèå çàíîâî
ExtractTemporaryFile('splash.png');
BmpFile:= TBitmapImage.Create(WizardForm);
with BmpFile do begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(313));
Stretch:= true;
Parent:= WizardForm.WelcomePage;
end;

BmpFile:= TBitmapImage.Create(WizardForm);
with BmpFile do begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(313));
Stretch:= true;
Parent:= WizardForm.FinishedPage;
end;

ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
end;
CancelButton := WizardForm.CancelButton;
AboutButton := TButton.Create(WizardForm);
with AboutButton do begin
Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
Top := CancelButton.Top;
Width := CancelButton.Width;
Height := CancelButton.Height;
Caption := '&Repack info';
OnClick := @AboutButtonOnClick;
Parent := WizardForm;
end;

URLButton := TButton.Create(WizardForm);
with URLButton do begin
Left := AboutButton.Left + AboutButton.Width + ScaleX(10);
Top := CancelButton.Top;
Width := CancelButton.Width;
Height := CancelButton.Height;
Caption := 'Ñàéò';
OnClick := @URLLabelOnClick;
Parent := WizardForm;
end;

BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Left := ScaleX(50);
BackgroundBitmapImage.Top := ScaleY(100);
BackgroundBitmapImage.AutoSize := True;
BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
BackgroundBitmapImage.Parent := MainForm;

BackgroundBitmapText := TNewStaticText.Create(MainForm);
BackgroundBitmapText.Left := BackgroundBitmapImage.Left;
BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8);
BackgroundBitmapText.Caption := 'TBitmapImage';
BackgroundBitmapText.Parent := MainForm;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if CurPageID <> wpWelcome then begin
AboutButton.Hide; URLButton.Hide end else begin
AboutButton.Show; URLButton.Show; end;
end;


Это расширяет картинку с верху

Devils0411 24-02-2011 21:55 1621081

Habetdin, Проблемка появилась.
Код:

#define Const1 "5"
#define Const2 "8"

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Types]
Name: "Const1"; Description: "{#Const1} -> data.ini";
Name: "Const2"; Description: "{#Const2} -> data.ini";

[Components]
Name: "Const1"; Description: "{#Const1} -> data.ini"; Types: "Const1";
Name: "Const2"; Description: "{#Const2} -> data.ini"; Types: "Const2";

[Ini]
filename: {app}\Data.ini; section: Settings; key: Chislo; string: {#Const1}; Components: Const1;
filename: {app}\Data.ini; section: Settings; key: Chislo; string: {#Const2}; Components: Const2;

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

Пересобрал этот скрипт.
в итоге.. при запуске выходного экзешника (например setup.exe) из консоли с такими параметрами
Код:

setup.exe /SILENT /COMPONENTS="Const2"
то в файл data.ini пишется 5, а не 8. В чем ошибка? использую на текущий момент самую последнюю версию программы.

Gnom_aka_Lexander 24-02-2011 22:17 1621094

my-94,Вот это:
читать дальше »
Код:

begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 555; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 555; //
end;
with PageDescriptionLabel do begin
Width := Width - 555; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 555; //
end;

Добавляеш сразу после procedure InitializeWizard();, это:
Код:

end;
end;

добавляеш после
Код:

BackgroundBitmapText.Parent := MainForm;

my-94 24-02-2011 22:31 1621101

Лександер

Спасибо огромное хоть что то я вписал сам :yahoo: :yahoo: :yahoo: :yahoo:

Gnom_aka_Lexander 24-02-2011 22:37 1621106

Цитата:

Цитата my-94
хоть что то я вписал сам »

Ты хоть примерно понял, почему именно так нужно вписать? :)

my-94 24-02-2011 22:38 1621107

а все остальные добавления InitializeWizard() так же вставлять ?

Gnom_aka_Lexander 24-02-2011 22:45 1621112

Примерно, можно просто эту процедуру добавлять еще одну тут береш дубликаторы, и смотриш, как это делается

my-94 24-02-2011 22:50 1621117

Да пока трудновато ,но попробую разобраться :)

Ichijou-san 25-02-2011 16:58 1621669

Всем привет, у меня такой вопрос.

Есть ли какая-то программа по типу IS Form Designer'а?
Я нашёл и скачал 2.0.8, но она не хочет работать на Windows 7 - вылетает с ошибкой. Если у кого есть 2.0.7 или другая рабочая версия, очень прошу поделиться.

Gnom_aka_Lexander 25-02-2011 17:10 1621674

Ichijou-san, есть расширенная версия компилятора, там форм-дизайнер есть. Сюда загляни :)

actavir 25-02-2011 17:53 1621704

Парни, дайте плиз скрипт для растягивания картинки на ВСЕ страницы!!!!!!!
Плиз очень нада!!!!!!!!!!!!!

Gnom_aka_Lexander 25-02-2011 22:01 1621865

Вторая версия Components.iss для скрипта Need for Speed™ Undercover [2.4c], в соавторстве с nik1967
Работает с IS v. 5.4.1 + расширенная версия от рестулс Но это не страшно, потому, что сам Need for Speed™ Undercover [2.4c] работает тоже на расширенной версии :)

actavir 26-02-2011 08:50 1622085

Народ мне кто-нибудь поможет????)))))

Gnom_aka_Lexander 26-02-2011 09:06 1622090

actavir, Держи:
читать дальше »
Код:

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

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

[Files]
Name: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; Name: {app}; Name : ignoreversion

[Run]
Name: {app}\MyProg.exe; Name: ????????? My Program?; Name: postinstall nowaitskipifsilent

[_Code]
var
  pnl: TPanel;

///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm. WelcomeLabel1.AutoSize;
      SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
                WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
      WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
      Caption:= WizardForm.WelcomeLabel1.Caption;
      with Font do
        begin
          Color:= WizardForm.WelcomeLabel1.Font.Color;
          Style:= WizardForm.WelcomeLabel1.Font.Style;
          Name:= WizardForm.WelcomeLabel1.Font.Name;
          Size:= WizardForm.WelcomeLabel1.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
      SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
                WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
      WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
      Caption:= WizardForm.WelcomeLabel2.Caption;
      with Font do
        begin
          Color:= WizardForm.WelcomeLabel2.Font.Color;
          Style:= WizardForm.WelcomeLabel2.Font.Style;
          Name:= WizardForm.WelcomeLabel2.Font.Name;
          Size:= WizardForm.WelcomeLabel2.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
  with WizardForm do
    begin
      with DirEdit do
        begin
          Left:= 40;
          Top:= 137;
          Parent:= pnl;
        end;
      with DirBrowseButton do
        begin
          Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
          Top:= WizardForm.DirEdit.Top - 1;
          Parent:= pnl;
        end;
      with SelectDirBitmapImage do
        begin
          Left:= WizardForm.DirEdit.Left;
          Top:= WizardForm.DirEdit.Top - 62;
          Stretch:= True;
          Parent:= pnl;
        end;
    end;
  with TLabel.Create(pnl) do
    begin
      A utoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
                WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
      WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
      Caption:= WizardForm.SelectDirBrowseLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
          Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
          Name:= WizardForm. SelectDirBrowseLabel.Font.Name;
          Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.SelectDirLabel.AutoSize;
      SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
                WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
      WordWrap:= WizardForm.SelectDirLabel.WordWrap;
      Caption:= WizardForm.SelectDirLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirLabel.Font.Color;
          Style:= WizardForm.SelectDirLabel.Font.Style;
          Name:= WizardForm.SelectDirLabel.Font.Name;
          Size:= WizardForm.SelectDirLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
                WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
      WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
      Caption:= WizardForm.DiskSpaceLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.DiskSpaceLabel.Font.Color;
          Style:= WizardForm.DiskSpaceLabel.Font.Style;
          Name:= WizardForm.DiskSpaceLabel.Font.Name;
          Size:= WizardForm.DiskSpaceLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
  ready_str: string;
begin
  ready_str:= WizardForm.ReadyMemo.Text;
  with TLabel.Create(pnl) do
    begin
      SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Caption:= ready_str;
      with Font do
        begin
          Color:= WizardForm.ReadyLabel.Font.Color;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TBevel.Create(WizardForm) do
    begin
      SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.ReadyLabel.AutoSize;
      SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
      WordWrap:= WizardForm.ReadyLabel.WordWrap;
      Caption:= WizardForm.ReadyLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.ReadyLabel.Font.Color;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
  with WizardForm.ProgressGauge do
    begin
      Left:= 40;
      Top:= 115;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      A utoSize:= WizardForm.NameLabel.AutoSize;
      SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
                WizardForm.NameLabel.Width,WizardForm.NameLabel.Height);
      WordWrap:= WizardForm.NameLabel.WordWrap;
      Caption:= WizardForm.NameLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.NameLabel.Font.Color;
          Style:= WizardForm.NameLabel.Font.Style;
          Name:= WizardForm.NameLabel.Font.Name;
          Size:= WizardForm.NameLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.StatusLabel.AutoSize;
      SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
                WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
      WordWrap:= WizardForm.StatusLabel.WordWrap;
      Caption:= WizardForm.StatusLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.StatusLabel.Font.Color;
          Style:= WizardForm.StatusLabel.Font.Style;
          Name:= WizardForm.StatusLabel.Font.Name;
          Size:= WizardForm.StatusLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
  CheckBox: array of TNewCheckBox;

procedure CheckBoxClick( Sender: TObject);
begin
  if TNewCheckBox(Sender).Checked then
    WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
  else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;

procedure LabelClick(Sender:TObject);
begin
  if CheckBox[TLabel(Sender).Tag].Checked then
    begin
      WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
      CheckBox[TLabel( Sender).Tag].Checked:= False;
    end
  else
    begin
      WizardForm.RunList.Checked[TLabel( Sender).Tag]:= True;
      CheckBox[TLabel(Sender).Tag].Checked:= True;
    end;
end;

procedure HideRunList(Control: TWinControl);
var
  i, t: Integer;
  str: string;
begin
  if WizardForm.RunList.Items.Count > 0 then
    begin
      WizardForm.RunList.Hide;
      SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
      for i:= 0 to WizardForm.RunList.Items.Count-1 do
        begin
          CheckBox[i]:= TNewCheckBox.Create(Control);
          with CheckBox[i] do
            begin
              SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
              Tag:= i;
              Checked:= WizardForm.RunList.Checked[i];
              Caption:= WizardForm.RunList.Items.Strings[i];
              OnClick:= @CheckBoxClick;
              Color:= clWhite;
              Parent:= Control;
            end;
          str:= WizardForm.RunList.Items.Strings[i];
          with TLabel.Create(WizardForm) do
            begin
              SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
                        WizardForm.RunList.Width,14);
              Caption:= str;
              Tag:= i;
              OnClick:= @LabelClick;
              Transparent:= True;
              Parent:= Control;
            end;
          t:= t + 20;
        end;
    end;
end;

procedure FinishedPage;
begin
  HideRunList(pnl);
  with TLabel.Create(pnl) do
    begin
      A utoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
      SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
                WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
      WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
      Caption:= WizardForm.FinishedHeadingLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FinishedHeadingLabel.Font.Color;
          Style:= WizardForm.FinishedHeadingLabel.Font.Style;
          Name:= WizardForm.FinishedHeadingLabel.Font.Name;
          Size:= WizardForm.FinishedHeadingLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FinishedLabel.AutoSize;
      SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
                WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
      WordWrap:= WizardForm.FinishedLabel.WordWrap;
      Caption:= WizardForm.FinishedLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FinishedLabel.Font.Color;
          Style:= WizardForm.FinishedLabel.Font.Style;
          Name:= WizardForm.FinishedLabel.Font.Name;
          Size:= WizardForm.FinishedLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
  pnl:= TPanel.Create(WizardForm);
  with pnl do
    begin
      Align:= alClient;
      Parent:= WizardForm;
    end;
  with WizardForm do
    begin
      with WizardBitmapImage do
        begin
          Align:= alClient;
          Stretch:= True;
          Parent:= pnl;
        end;
      NextButton.Parent:= pnl;
      CancelButton.Parent:= pnl;
      BackButton.Parent:= pnl ;
      Bevel.Parent:= pnl;
      pnl.Repaint;
    end;

  if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
    begin
      WizardForm.Bevel1.Parent:= pnl;
      with TLabel.Create(pnl) do
        begin
          A utoSize:= WizardForm.PageNameLabel.AutoSize;
          SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
                    WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
          Caption:= WizardForm.PageNameLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageNameLabel.Font.Color;
              Style:= WizardForm.PageNameLabel.Font.Style;
              Name:= WizardForm.PageNameLabel.Font.Name;
              Size:= WizardForm.PageNameLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      with TLabel.Create(pnl) do
        begin
          AutoSize:= WizardForm.PageNameLabel.AutoSize;
          SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
                    WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
          Caption:= WizardForm.PageNameLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageNameLabel.Font.Color;
              Style:= WizardForm.PageNameLabel.Font.Style;
              Name:= WizardForm.PageNameLabel.Font.Name;
              Size:= WizardForm.PageNameLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      pnl.Repaint;
    end;

  if CurPageID = wpWelcome then WelcomePage;
  if CurPageID = wpSelectDir then SelectDirPage;
  if CurPageID = wpReady then ReadyPage;
  if CurPageID = wpInstalling then InstallingPage;
  if CurPageID = wpFinished then FinishedPage;
end;


Только тут, если ты заметил, страницы нужно описывать полностью, и если понадобится еще страница - ее также полностью нужно будет описывать.

actavir 26-02-2011 09:26 1622099

Лександер, дело в том что то что ты написал у меня есть, мне нужен скрипт на страницу выбора директории, куда значки в меню будут соваться)))) И вот это я и не знаю как сделать. У тебя нет скрипта для этой страницы?

Gnom_aka_Lexander 26-02-2011 09:30 1622102

actavir, Если честно, то долго ваять, могу подсказать - открываеш форм-дизайнер, перемещаеш на чуть-чуть все элементы страницы, которые тебе нужны (чтобы они появились в скрипте) потом уже в этом скрипте добавляеш страницу и описываеш ее исходя из полученных элементов по аналогии с описанием остальных страниц - мутно, но других вариантов нет.
Хотя нет, есть, подождать, когда это сделает тот, кому это проще, чем мне :)

actavir 26-02-2011 09:48 1622109

Блин у мя форм дизайнер не работает вылетает((((((

Gnom_aka_Lexander 26-02-2011 09:51 1622110

actavir, Форм-дизайнер есть в расширенной версии компилятора, на последней вкладке. Можно скачать отсюда , или, извиняюсь за рекламу,осюда инсталлятором.
И да, не забываем кнопку - Полезное сообщение : с вас не убудет, а у людей останется желание по возможности помоч в следующий раз.

actavir 26-02-2011 09:55 1622113

Ок пасибо)))

actavir 26-02-2011 10:19 1622122

Лександер, подскажите пожалуйста а как сделать чтобы картинка, которую я добавляю на в форм дизайнере была на переднем плане, я уже всё перепробовал, а основная форма не хочет даже удаляться пишет заблокирована, как решить эту проблему?

И ещё вопрос сразу как сделать прозрачный фон у label

Gnom_aka_Lexander 26-02-2011 10:30 1622129

actavir, Прозрачный фон на лебеле - только на ботве вроде, а на форм дизайнере тебе нужно просто выделить компоненты нужные тебе - чтоб потом проще было описывать нужную тебе страницу, а вот описывать страницу - все равно вручную...

actavir 26-02-2011 10:34 1622131

Лександер, а что такое "ботве" - delphy?

И ещё а как страницу через форм дизайнер сделать активной?
А то я хочу испольховать SelectProgramGroupPage, а она серая и в инсталятор при компиляции не включается?

actavir 26-02-2011 10:58 1622136

Мда Лександр, чёто у меня ничё не получается.((((((((

Народ есть у кого-нибудь скрипт растягивания изображения на ВСЕ страницы, ну или хотя бы на SelectProgramGroupPage????
Выручите плиз!!!!!!!!

Gnom_aka_Lexander 26-02-2011 11:05 1622137

Вот скрипт написанный на botva2.dll
botva2 v 0.9.5 [20.02.2011] от htuos
Библиотека для вставки изображений в инсталлятор (jpg, png, gif, tif, bmp). Присутствует возможность создания обычных кнопок и кнопок имеющих 8 состояний (как у чекбоксов), а также множество разнообразных функций и процедур для работы с изображениями. В архиве (1.2 Мб) dll + примеры использования.
Ахтунг! Не работает под win9x/me/2k.
2k - это от миллениума не включая, до вин 2000 включительно.

actavir 26-02-2011 11:19 1622140

у меня win7)))))))))

STRAYKER 26-02-2011 13:32 1622244

Помогите кто может.
Наприменр после установки игры нада запуск специального .ехе ( для смены игрового ника ) но чтобы оно запустилось без запроса о запуске.

И как сделать чтобы писало
Создать значок 1
Создать значок 2

Gnom_aka_Lexander 26-02-2011 15:41 1622342

STRAYKER, Оооо, тебе читать и читать, запускай ISTооl и экспериментируй :)
Код:

Icons]
Name: {group}\; Filename: значок 1.ехе; Tasks: 1
Name: {group}\; Filename: значок 2.ехе; Tasks: 2
[Tasks]
Name: 1; Description: Создать значок 1; GroupDescription: Создать значки
Name: 2; Description: Создать значок 2; GroupDescription: Создать значки


R3Pa4eK 26-02-2011 19:35 1622523

Привет всем! У меня вопрос: Как во время установки проверить: не запущен ли параллельно экземпляр установки? И если запущен, то второй экземпляр установки закрыть, а для первого экземпляра установки нужно активировать окно, чтобы показать статус установки?

Gnom_aka_Lexander 26-02-2011 20:27 1622573

R3Pa4eK, Я-ж на руборде написал - искать нужно :) Вот, на базе этого можно построить то, что тебе нужно. Вот еще.

R3Pa4eK 26-02-2011 20:41 1622586

Лександер, угу понял спс!

Gnom_aka_Lexander 26-02-2011 20:48 1622591

R3Pa4eK, Единственная беда - идентифицировать инсталлятор - но с этим, я думаю, помогут, у R.i.m.s.k.y. здорово получаются такие вещи.

actavir 26-02-2011 22:12 1622638

Народ, подскажите есть у кого-нибудь код, который показывает сколько времени прошло при установке и сколько осталось?

nik1967 26-02-2011 22:36 1622663

actavir,
Не совсем то, но может пригодиться:
Time of installing от Victor_Dobrov
Код:

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

[_Code]
type TSystemTime = record wYear, wMonth, wDayOfWeek, wDay, wHour, wMinute, wSecond, wMilliseconds: Word; end;
var StartTime, Time: TSystemTime; StartFileTime, FileTime: TFileTime; TLabel: TNewStaticText;

function GetLocalTime(var lpSystemTime: TSystemTime): Boolean; external 'GetLocalTime@kernel32.dll stdcall';
function SystemTimeToFileTime(const lpSystemTime: TSystemTime; var lpFileTime: TFileTime): Boolean; external 'SystemTimeToFileTime@kernel32.dll stdcall';
function FileTimeToSystemTime(const lpFileTime: TFileTime; var lpSystemTime: TSystemTime): Boolean; external 'FileTimeToSystemTime@kernel32.dll stdcall';

Function GetWorkTime: String;
Begin
        GetLocalTime(Time)        {время завершения установки}
        SystemTimeToFileTime(Time, FileTime)
        SystemTimeToFileTime(StartTime, StartFileTime)

//        здесь необходимо использовать 64-битовую арифметику ULARGE_INTEGER
        FileTime.dwLowDateTime:= FileTime.dwLowDateTime - StartFileTime.dwLowDateTime
        FileTime.dwHighDateTime:= FileTime.dwHighDateTime - StartFileTime.dwHighDateTime

        FileTimeToSystemTime(FileTime, Time)
    Result:= 'Длительность: ' + IntToStr(Time.wHour) + ' час, ' + IntToStr(Time.wMinute) + ' мин, ' + FloatToStr((Time.wSecond*1000)/1000) + ' сек.'
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
    if CurPageID = wpFinished then TLabel.Caption:= TLabel.Caption + #13#10 + GetWorkTime;
End;

Procedure InitializeWizard;
Begin
    GetLocalTime(StartTime)    {время начала установки}
    TLabel:= TNewStaticText.Create(WizardForm);
    TLabel.Top:= WizardForm.CancelButton.Top;
    TLabel.Left:= WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width;
    TLabel.Parent:= WizardForm;
    TLabel.Caption:= 'Время старта: ' + IntToStr(StartTime.wHour) + ' час, ' + IntToStr(StartTime.wMinute) + ' мин, ' + FloatToStr((StartTime.wSecond*1000)/1000) + ' сек.' ;
End;


Gnom_aka_Lexander 26-02-2011 22:44 1622665

actavir,
читать дальше »
Код:

[Setup]
AppName=FreeArc Example
AppVerName=FreeArc Example 3.3 Extreme
DefaultDirName={pf}\FreeArc Example

[Files]
Source: compiler:innocallback.dll; DestDir: {tmp}; Flags: dontcopy;

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

[CustomMessages]
rus.hour= ÷àñîâ
rus.min= ìèí
rus.sec= ñåê

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

var
StartInstall: Integer;
TimeLabel: TLabel;
TimerID: Longword;

function GetTickCount: DWord; external 'GetTickCount@kernel32';
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 cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
    if detail then            {hh: mm:ss format}
        Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
    else if Ticks/3600 >= 1000 then    {more than hour}
        Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
    else if Ticks/60 >= 1000 then    {1..60 minutes}
        Result:= IntToStr(Ticks/60000) +m+' '+ IntToStr(Ticks/1000 - Ticks/1000/60*60) +s
    else Result:= Format('%.1n', [Abs(Ticks/1000)]) +s    {less than one minute}
End;

procedure GetTime(HandleW, Msg, idEvent, TimeSys: LongWord);
var Remaining: Integer;
begin
with WizardForm.ProgressGauge do begin
  if position > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position))
    TimeLabel.Caption:= 'Inoaeinu ' + TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)
    if (Remaining = 0) then TimeLabel.Caption:= 'Çàâåðøåíèå...'
  end;
end;

procedure InitializeWizard();
begin
TimeLabel:= TLabel.Create(WizardForm)
TimeLabel.SetBounds(ScaleX(0), ScaleY(80), ScaleX(457), ScaleY(20));
TimeLabel.AutoSize:= False
TimeLabel.Transparent:= True;
TimeLabel.Parent:= WizardForm.InstallingPage;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep = ssInstall then
  begin
    StartInstall:= GetTickCount
    TimerID:= SetTimer(0,0, 500, WrapTimerProc(@GetTime, 4))
  end;
end;

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

Вот, можно пользоваться :)

nik1967 27-02-2011 11:23 1622849

Лександер,
Только, когда копируешь из Inno, переключай раскладку на русскую, а то вместо русских надписей получаются кракозябрины :)

actavir 27-02-2011 15:41 1623006

Цитата:

Цитата Лександер
procedure GetTime(HandleW, Msg, idEvent, TimeSys: LongWord);
var Remaining: Integer;
begin
with WizardForm.ProgressGauge do begin
if position > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position))
TimeLabel.Caption:= 'Inoaeinu ' + TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)
if (Remaining = 0) then TimeLabel.Caption:= 'Çàâåðøåíèå...'
end;
end; »

А на месте абракодабры какой текст должен быть?

Habetdin 27-02-2011 15:52 1623017

actavir, без абракадабры: :)
читать дальше »
Код:

[Setup]
AppName=FreeArc Example
AppVerName=FreeArc Example 3.3 Extreme
DefaultDirName={pf}\FreeArc Example

[Files]
Source: compiler:innocallback.dll; DestDir: {tmp}; Flags: dontcopy;

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

[CustomMessages]
rus.hour= часов
rus.min= мин
rus.sec= сек

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

var
StartInstall: Integer;
TimeLabel: TLabel;
TimerID: Longword;

function GetTickCount: DWord; external 'GetTickCount@kernel32';
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 cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
    if detail then            {hh: mm:ss format}
        Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
    else if Ticks/3600 >= 1000 then    {more than hour}
        Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
    else if Ticks/60 >= 1000 then    {1..60 minutes}
        Result:= IntToStr(Ticks/60000) +m+' '+ IntToStr(Ticks/1000 - Ticks/1000/60*60) +s
    else Result:= Format('%.1n', [Abs(Ticks/1000)]) +s    {less than one minute}
End;

procedure GetTime(HandleW, Msg, idEvent, TimeSys: LongWord);
var Remaining: Integer;
begin
with WizardForm.ProgressGauge do begin
  if position > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position))
    TimeLabel.Caption:= 'Осталось ' + TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)
    if (Remaining = 0) then TimeLabel.Caption:= 'Завершение...'
  end;
end;

procedure InitializeWizard();
begin
TimeLabel:= TLabel.Create(WizardForm)
TimeLabel.SetBounds(ScaleX(0), ScaleY(80), ScaleX(457), ScaleY(20));
TimeLabel.AutoSize:= False
TimeLabel.Transparent:= True;
TimeLabel.Parent:= WizardForm.InstallingPage;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep = ssInstall then
  begin
    StartInstall:= GetTickCount
    TimerID:= SetTimer(0,0, 500, WrapTimerProc(@GetTime, 4))
  end;
end;

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


actavir 27-02-2011 16:27 1623028

Вложений: 1
Парни чёто у меня не получается подцепить этот скрипт к моему может кто-нибудь помочь???
Вот мой скрипт .
Заранее благодарен!!!

STRAYKER 27-02-2011 17:06 1623047

Как изменить цвет текста
Как сделать чтобы перед началом установки появлялась картинка

STRAYKER 27-02-2011 17:08 1623050

Как сделать чтобы перед началом установки появлялась картинка

STRAYKER 27-02-2011 17:23 1623060

Как изменить цвет текста

actavir 27-02-2011 18:26 1623097

STRAYKER, используй форм дизайнер в inno ultra, там есть пункт Font там и найдёш цвет, а перед установкой это splash, но к сожалению скрипта дать не могу, недавно стёр(((

Devils0411 27-02-2011 19:28 1623139

Кто-нить может подсказать решение моей проблемы?

Gnom_aka_Lexander 27-02-2011 19:54 1623156

Devils0411,
Код:

setup.exe /SILENT /TYPE=Const2
Если в скрипте указаны типы - то используй команду типов, если задачи, то команду задач, если ни то, ни другое, тогда работает ключ на компоненты (обнаружил экспериментальным путем :))

Devils0411 27-02-2011 19:58 1623161

Лександер, Это конечно интересно, но раньше так устанавливал - нормально работало... щас надо было обновить.... после сборки и запуска через те же команды, процесс отрабатывает не корректно...

Gnom_aka_Lexander 27-02-2011 20:06 1623167

STRAYKER,
Во первых тебе сюда во вторых - искать нужно это было сделано неоднократно. Подсказка - начни с шапки.

Devils0411 27-02-2011 20:10 1623171

Лександер, C TYPE не хочет отрабатывать... Нужно комментировать эту секцию, но тогда при обычном запуске, без ключа Silent, появляется выбор из двух компонентов, выбор состоит из "Обычная, выборочная, и минимальная" при выборе одного из них, ниче не меняется.

Gnom_aka_Lexander 27-02-2011 20:13 1623174

Devils0411, ты запускал так:
Код:

setup.exe /SILENT /TYPE=Const2
- правильно
Или так:
Код:

setup.exe /SILENT /TYPE="Const2"
- неправильно
?
Вот ключи из справки от версии 5.41, может кто переведет?
читать дальше »
The Setup program accepts optional command line parameters. These can be useful to system administrators, and to other programs calling the Setup program.

/SP-
Disables the This will install... Do you wish to continue? prompt at the beginning of Setup. Of course, this will have no effect if the DisableStartupPrompt [Setup] section directive was set to yes.

/SILENT, /VERYSILENT
Instructs Setup to be silent or very silent. When Setup is silent the wizard and the background window are not displayed but the installation progress window is. When a setup is very silent this installation progress window is not displayed. Everything else is normal so for example error messages during installation are displayed and the startup prompt is (if you haven't disabled it with DisableStartupPrompt or the '/SP-' command line option explained above).

If a restart is necessary and the '/NORESTART' command isn't used (see below) and Setup is silent, it will display a Reboot now? message box. If it's very silent it will reboot without asking.

/SUPPRESSMSGBOXES
Instructs Setup to suppress message boxes. Only has an effect when combined with '/SILENT' and '/VERYSILENT'.

The default response in situations where there's a choice is:

•Yes in a 'Keep newer file?' situation.
•No in a 'File exists, confirm overwrite.' situation.
•Abort in Abort/Retry situations.
•Cancel in Retry/Cancel situations.
•Yes (=continue) in a DiskSpaceWarning/DirExists/DirDoesntExist/NoUninstallWarning/ExitSetupMessage/ConfirmUninstall situation.
•Yes (=restart) in a FinishedRestartMessage/UninstalledAndNeedsRestart situation.
5 message boxes are not suppressible:

•The About Setup message box.
•The Exit Setup? message box.
•The FileNotInDir2 message box displayed when Setup requires a new disk to be inserted and the disk was not found.
•Any (error) message box displayed before Setup (or Uninstall) could read the command line parameters.
•Any message box displayed by [code] support function MsgBox.
/LOG
Causes Setup to create a log file in the user's TEMP directory detailing file installation and [Run] actions taken during the installation process. This can be a helpful debugging aid. For example, if you suspect a file isn't being replaced when you believe it should be (or vice versa), the log file will tell you if the file was really skipped, and why.

The log file is created with a unique name based on the current date. (It will not overwrite or append to existing files.)

The information contained in the log file is technical in nature and therefore not intended to be understandable by end users. Nor is it designed to be machine-parseable; the format of the file is subject to change without notice.

/LOG="filename"
Same as /LOG, except it allows you to specify a fixed path/filename to use for the log file. If a file with the specified name already exists it will be overwritten. If the file cannot be created, Setup will abort with an error message.

/NOCANCEL
Prevents the user from cancelling during the installation process, by disabling the Cancel button and ignoring clicks on the close button. Useful along with '/SILENT' or '/VERYSILENT'.

/NORESTART
Prevents Setup from restarting the system following a successful installation, or after a Preparing to Install failure that requests a restart. Typically used along with /SILENT or /VERYSILENT.

/RESTARTEXITCODE=exit code
Specifies a custom exit code that Setup is to return when the system needs to be restarted following a successful installation. (By default, 0 is returned in this case.) Typically used along with /NORESTART. See also: Setup Exit Codes

/LOADINF="filename"
Instructs Setup to load the settings from the specified file after having checked the command line. This file can be prepared using the '/SAVEINF=' command as explained below.

Don't forget to use quotes if the filename contains spaces.

/SAVEINF="filename"
Instructs Setup to save installation settings to the specified file.

Don't forget to use quotes if the filename contains spaces.

/LANG=language
Specifies the language to use. language specifies the internal name of the language as specified in a [Languages] section entry.

When a valid /LANG parameter is used, the Select Language dialog will be suppressed.

/DIR="x:\dirname"
Overrides the default directory name displayed on the Select Destination Location wizard page. A fully qualified pathname must be specified. May include an "expand:" prefix which instructs Setup to expand any constants in the name. For example: '/DIR=expand:{pf}\My Program'.

/GROUP="folder name"
Overrides the default folder name displayed on the Select Start Menu Folder wizard page. May include an "expand:" prefix, see '/DIR='. If the [Setup] section directive DisableProgramGroupPage was set to yes, this command line parameter is ignored.

/NOICONS
Instructs Setup to initially check the Don't create a Start Menu folder check box on the Select Start Menu Folder wizard page.

/TYPE=type name
Overrides the default setup type.

If the specified type exists and isn't a custom type, then any /COMPONENTS parameter will be ignored.

/COMPONENTS="comma separated list of component names"
Overrides the default component settings. Using this command line parameter causes Setup to automatically select a custom type. If no custom type is defined, this parameter is ignored.

Only the specified components will be selected; the rest will be deselected.

If a component name is prefixed with a "*" character, any child components will be selected as well (except for those that include the dontinheritcheck flag). If a component name is prefixed with a "!" character, the component will be deselected.

This parameter does not change the state of components that include the fixed flag.

Example:
Deselect all components, then select the "help" and "plugins" components:
/COMPONENTS="help,plugins" Example:
Deselect all components, then select a parent component and all of its children with the exception of one:
/COMPONENTS="*parent,!parent\child"
/TASKS="comma separated list of task names"
Specifies a list of tasks that should be initially selected.

Only the specified tasks will be selected; the rest will be deselected. Use the /MERGETASKS parameter instead if you want to keep the default set of tasks and only select/deselect some of them.

If a task name is prefixed with a "*" character, any child tasks will be selected as well (except for those that include the dontinheritcheck flag). If a task name is prefixed with a "!" character, the task will be deselected.

Example:
Deselect all tasks, then select the "desktopicon" and "fileassoc" tasks:
/TASKS="desktopicon,fileassoc" Example:
Deselect all tasks, then select a parent task and all of its children with the exception of one:
/TASKS="*parent,!parent\child"
/MERGETASKS="comma separated list of task names"
Like the /TASKS parameter, except the specified tasks will be merged with the set of tasks that would have otherwise been selected by default.

If UsePreviousTasks is set to yes, the specified tasks will be selected/deselected after any previous tasks are restored.

Example:
Keep the default set of selected tasks, but additionally select the "desktopicon" and "fileassoc" tasks:
/MERGETASKS="desktopicon,fileassoc" Example:
Keep the default set of selected tasks, but deselect the "desktopicon" task:
/MERGETASKS="!desktopicon"
/PASSWORD=password
Specifies the password to use. If the [Setup] section directive Password was not set, this command line parameter is ignored.

When an invalid password is specified, this command line parameter is also ignored.

Devils0411 27-02-2011 20:37 1623186

Делал с ковычками и без.. эффект нулевой.

Gnom_aka_Lexander 27-02-2011 20:43 1623192

Devils0411, У меня через команду TYPE отработало, может еще где причина есть? попробуй компилятор обновить.

Serega 27-02-2011 22:10 1623246

Цитата:

Цитата Devils0411
Делал с ковычками и без.. эффект нулевой. »

Прежде всего, нужно скрипт немного подкорректировать:
Пример

Код:

#define Const1 "5"
#define Const2 "8"

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Types]
Name: Const1; Description: {#Const1} -> data.ini;
; указываем, что тип является выборочным
Name: Const2; Description: {#Const2} -> data.ini; Flags: iscustom

[Components]
; так же добавим флаги exclusive, это не обязательно, но компоненты взаимоисключающие
Name: Const1; Description: {#Const1} -> data.ini; Types: Const1; Flags: exclusive
Name: Const2; Description: {#Const2} -> data.ini; Types: Const2; Flags: exclusive

[Ini]
Filename: {app}\Data.ini; Section: Settings; Key: Chislo; String: {#Const1}; Components: Const1;
Filename: {app}\Data.ini; Section: Settings; Key: Chislo; String: {#Const2}; Components: Const2;

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

[UninstallDelete]
; не забываем удалить ini'шник
Name: {app}\Data.ini; Type: files



После этого вы можете запускать с привычными для вас ключами:
Код:

setup.exe /silent /components="Const2"
Ну и соответственно так тоже можно:
Код:

setup.exe /silent /type="Const2"
Цитата:

Цитата Лександер
- неправильно »

Кто сказал, что с кавычками не правильно?
Можно, как с ними, так и без, тут нет ошибки.
Они ставятся обязательно, если вы перечисляете компоненты через запятую, которые нужно выбрать.

potan 28-02-2011 12:13 1623559

Добрый день! я в процессе инсталляции устанавливаю службу, для этого делаю
Код:

[Run]
Filename: {app}\{#MyAppExeName}; Parameters: -sinstall

. Но иногда бывает так, что служба устанавливается с ошибкой или не устанавливается. Проблема в том что инсталлятор Inno Setup ничего об этом не знает. Может кто - нибудь знает как проверить правильно ли установилась служба, ну если точнее вернул ли запускаемый скрипт ноль или нет?

R.i.m.s.k.y. 28-02-2011 14:48 1623700

Цитата:

Цитата potan
Может кто - нибудь знает как проверить правильно ли установилась служба, ну если точнее вернул ли запускаемый скрипт ноль или нет? »

в секции Code
exec - булевая функция
Код:

var
res: integer;
...
if not Exec(ExpandConstant('{app}\{#MyAppExeName}'), ' -sinstall ' ,ExpandConstant('{app}'),SW_HIDE,ewWaitUntilTerminated,res)  then MSGBox(SysErrorMessage(res), mbInformation, MB_OK);


actavir 28-02-2011 15:54 1623756

Парни дайте плиз готовый скрипт с IsDone + отсчёт времени.
Пытался совместить, ничё не получилось, может есть у кого????
Буду очень благодарен!!!!!!

dark_fen1x 28-02-2011 16:08 1623763

народ залейте на народ Inno Setup Form Designer а то ссылки не работают

actavir 28-02-2011 16:39 1623778

dark_fen1x, качай inno ultra скачать там он вшитый))))

Vamp1re 28-02-2011 18:36 1623887

Как мне сделть чтоб установка какой либо программы отображалась так: (см.рис.)

Vamp1re 28-02-2011 20:13 1623968

Хочю сделать в инсталяторе при установке такое как на рисунке . Дайте мне пожалуйста код


:help: :help: :unsure: :read:

serg aka lain 28-02-2011 20:54 1623989

Цитата:

Цитата Vamp1re
Хочю сделать в инсталяторе при установке такое как на рисунке . »

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

Код:


[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:InnoSetupTest.

[Components]
Name: "compon1"; Description: "Язык субтитров"; Types: "full compact custom"; Flags: fixed;
Name: "compon1\russian"; Description: "Русский"; Flags: exclusive;
Name: "compon1\english"; Description: "Английский"; Flags: exclusive;
Name: "compon2"; Description: "Язык озвучки"; Types: "full compact custom"; Flags: fixed;
Name: "compon2\russian"; Description: "Русский"; Flags: exclusive;
Name: "compon2\english"; Description: "Английский"; Flags: exclusive;

[code]
procedure InitializeWizard();
begin
  with WizardForm do
  begin
    TypesCombo.Hide;
    with SelectComponentsLabel do
    begin
      Height := Height + ScaleY(21);
    end;
  end;
end;


serg aka lain 28-02-2011 21:41 1624017

Цитата:

Цитата Vamp1re
Как мне сделть чтоб установка какой либо программы отображалась так: (см.рис.)

читать дальше »
Код:


[Files]
Source: {sys}\*.dll; DestDir: {app}; Flags: deleteafterinstall external;

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:InnoSetupTest.

[code]
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpInstalling then
  begin
    with WizardForm do
    begin         
      ClientWidth := ScaleX(330);
      ClientHeight := ScaleY(110);
      MainPanel.Hide;
      InnerNotebook.Left := 0;
      InnerNotebook.Top := 0;
      StatusLabel.Left := ScaleX(10);
      StatusLabel.Top := ScaleY(10);
      StatusLabel.Width := ClientWidth - ScaleX(20);
      FilenameLabel.Left := ScaleX(10);
      FilenameLabel.Top := StatusLabel.Top + StatusLabel.Height;
      FilenameLabel.Width := ClientWidth - ScaleX(20);
      ProgressGauge.Left := ScaleX(10);
      ProgressGauge.Top := FilenameLabel.Top + FilenameLabel.Height + ScaleY(5);
      ProgressGauge.Width := ClientWidth - ScaleX(20);
      CancelButton.BringToFront;
      CancelButton.Left := ClientWidth div 2 - CancelButton.Width div 2;
      CancelButton.Top := ClientHeight - CancelButton.Height - ScaleY(10);
      Center;
    end;
  end;

  if CurPageID = wpFinished then
  begin
    WizardForm.ClientWidth := ScaleX(497);
    WizardForm.ClientHeight := ScaleY(360);
    WizardForm.Center;
  end;
end;


audiostore 01-03-2011 06:57 1624182

Всем привет, скажите у кого нибудь есть прога для просмотра .dat файлов Inno, называется Datviewer, если есть, не могли бы скинуть на audiostore@inbox.ru или на какой фалообменник,
заранее спасибо.

nik1967 01-03-2011 09:51 1624268

А если сделать так:
Код:

[Types]
Name: full; Description: Full installation; Flags: iscustom;


[Components]
Name: lng; Description: Язык интерфеса:; Types: full; Flags: fixed
Name: lng\eng; Description: Английский; Flags: exclusive;
Name: lng\rus; Description: Русский; Flags: exclusive;
Name: icons; Description: Создание ярлыков:; 
Name: icons\desktop; Description: На 'Рабочем столе'; Types: full;
Name: icons\groop; Description: В меню 'Пуск'; Types: full;
Name: addins; Description: Программное обеспечение:;
Name: addins\dop1; Description: Обновление компонентов DirectX; Types: full;

то и секции код не надо.

Devils0411 01-03-2011 11:18 1624324

Serega, А с чем связано добавление флагов? Ведь раньше работало и без них.
ЗЫ. Попробовал как вы указали, но опять не отрабатывает.
ЗЫЫ. Нашел ошибку.. все нормально работает. Спасибо.

EvilAlex 01-03-2011 13:21 1624402

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

заменяю мр3 на м3у и во время установки тишина, както можно сделать чтобы музыка с радио играла ?

Vamp1re 01-03-2011 14:00 1624439

Как изменить общий цвет инсталятора? помогите пожалйста

R3Pa4eK 01-03-2011 19:11 1624734

EvilAlex, для этого нужно переписывать библиотеку bass.dll!

R3Pa4eK 01-03-2011 20:23 1624783

У кого есть скрипт на пример использования библиотеки ISExec.dll?

Gnom_aka_Lexander 01-03-2011 20:40 1624796

EvilAlex, Посмотри Здесь, это официальный сайт библиотеки. Библиотека давно обновилась, скрипт все еще от предидущей версии, может по материалам сайта сделаеш финкцию для м3у :)

Vamp1re 02-03-2011 12:42 1625283

Как мне удалить все информеры в инсталляторе похожие на етот? :
(см.рис.)

Gnom_aka_Lexander 02-03-2011 14:41 1625369

Vamp1re,
читать дальше »
Код:

procedure InitializeWizard();
begin
with WizardForm.PageDescriptionLabel do
begin
Visible := False;
end;

with WizardForm.PageNameLabel do
begin
Visible := False;
 end;
end;

или проще:
Код:

procedure InitializeWizard();
begin
WizardForm.PageDescriptionLabel.Visible:= False;
WizardForm.PageNameLabel.Visible:= False;
end;

Или так:
Код:

procedure InitializeWizard();
begin
WizardForm.PageDescriptionLabel.Hide;
WizardForm.PageNameLabel.Hide;
end;


R.i.m.s.k.y. 02-03-2011 17:01 1625517

У меня вопросы сложные:
- как узнать версию драйвера для видеокарт амд?
- как получить айпишник машины, на котором запущен инсталлер?

STRAYKER 02-03-2011 17:29 1625549

Вот у меня вопрос как удалить ету область ???

R.i.m.s.k.y. 02-03-2011 17:52 1625570

мой третий вопрос, простой: как в списке кмпонентов запретить снимать галку с родительского компонента но при этом можно было выбирать дочерние? т.е. с nastr нельзя было снять галку, а на a и/или b можно было бы ставить/снимать галки
[Components]
Name: nastr\; Description: ab; Flags: disablenouninstallwarning
Name: nastr\a; Description: {#a}; Flags: disablenouninstallwarning exclusive
Name: nastr\b; Description: {#b}; Flags: disablenouninstallwarning exclusive

nik1967 02-03-2011 17:56 1625574

STRAYKER,
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[_Code]
function AppendMenu(hMenu: HMENU; uFlags, uIDNewItem: UINT; lpNewItem: PChar): BOOL; external 'AppendMenuA@user32.dll stdcall';
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU; external 'GetSystemMenu@user32.dll stdcall';

const
MF_DELETE = $200;

procedure InitializeWizard();
begin
  AppendMenu(GetSystemMenu(Wizardform.Handle, True), MF_DELETE, 0, SetupMessage(msgAboutSetupMenuItem));
end;



R.i.m.s.k.y.,
По 3 вопросу:
Код:

[Types]
Name: full; Description: Full installation; Flags: iscustom;

[Components]
Name: nastr; Description: ab; Flags: disablenouninstallwarning fixed; Types: full;
Name: nastr\a; Description: {#a}; Flags: disablenouninstallwarning exclusive;
Name: nastr\b; Description: {#b}; Flags: disablenouninstallwarning exclusive;


Vamp1re 02-03-2011 18:11 1625583

Подскажите пожалуйста: как растянуть картинку к левому краю?
(см.рис.)

Gnom_aka_Lexander 02-03-2011 18:26 1625595

Vamp1re,
Код:

procedure InitializeWizard();
begin
  with WizardForm.WizardSmallBitmapImage do
  begin
    Left := ScaleX(368);//Начальная точка
    Width := ScaleX(127);//длинна картинки
  end;
end;

nik1967,
есть-же проще :)
Код:

procedure InitializeWizard();
begin
WizardForm.Position:= poScreenCenter;
end;


R.i.m.s.k.y. 02-03-2011 18:38 1625607

Цитата:

Цитата duxa
возможно не совсем понял »

Flags: fixed ставит флаг и запрещает изменения этого компонента и дочернего, способ nik1967 робит.

Vamp1re 02-03-2011 19:00 1625625

Как прикрепить свое лого к инсталлятору в указаной позиции?
(см.рис.)

Vamp1re 02-03-2011 19:38 1625648

Лександер, У меня не хочет компилировать пишет Error: Indentifer name (Name := 'BitmapImage1';)

STRAYKER 02-03-2011 19:38 1625650

Как создаь такой инсталятор ???

Gnom_aka_Lexander 02-03-2011 19:38 1625651

Vamp1re, А ты положил файл LOGO.bmp рядом со скриптом?
STRAYKER, Зачем? Возьми готовый

Vamp1re 02-03-2011 19:42 1625653

Лександер, да

Gnom_aka_Lexander 02-03-2011 19:44 1625655

Vamp1re,
Тогда проще (тот код редизайнер выдал :)
читать дальше »
Код:

[Files]
Source: "LOGO.bmp"; Flags: dontcopy solidbreak

var
  BitmapImage1: TBitmapImage;

procedure InitializeWizard();
begin
  { BitmapImage1 }
  BitmapImage1 := TBitmapImage.Create(WizardForm);
  with BitmapImage1 do
  begin
    Name := 'BitmapImage1';
    Parent := WizardForm;
    Left := ScaleX(0);
    Top := ScaleY(313);
    Width := ScaleX(241);
    Height := ScaleY(48);
    ExtractTemporaryFile('LOGO.bmp');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\LOGO.bmp'));
  end;
end;


Если не получится - значит руки кривые - работают оба кода на 100%.

Vamp1re 02-03-2011 19:45 1625657

STRAYKER, качаешь скрипт Hitman Blood Money и если хочешь меняешь его размер
можешь скачать одсюда: http://rghost.ru/3632626

LinkOFF 02-03-2011 19:50 1625662

Кто-нибудь знает как мне сделать картинку на весь инсталлятор и только на первую страницу

Vamp1re 02-03-2011 19:51 1625663

Лександер, Всеравно не хочет

LinkOFF, Смотри ниже:
читать дальше »
procedure InitializeWizard(); begin ExtractTemporaryFile('img1.bmp'); MainImage := TBitmapImage.Create(WizardForm); WizardForm.PageDescriptionLabel.Visible:= False; WizardForm.PageNameLabel.Visible:= False; with MainImage do begin Parent := WizardForm; Left := 0; Top := 0; Width := 500; Height := 313; Bitmap.LoadFromFile(ExpandConstant('{tmp}\img1.bmp')); end; ExtractTemporaryFile('img2.bmp'); FinishedImage := TBitmapImage.Create(WizardForm); with FinishedImage do begin Parent := WizardForm; Left := 50; Top := 10; Width := 500; Height := 313; Bitmap.LoadFromFile(ExpandConstant('{tmp}\img1.bmp')); end; //WelcomePage, создаем надписи на странице WelcomeLabel1:= TLabel.Create(WizardForm); with WelcomeLabel1 do begin Left:= ScaleX(176); Top:= ScaleY(66); Width:= ScaleX(301); Height:= ScaleY(71); AutoSize:= false; Transparent:= true; WordWrap:= true; Font.Size:= 14; Font.Color:=ClWhite Font.Style := [fsBold] Parent:= WizardForm; Font.Name:= 'Georgia' Caption:= WizardForm.WelcomeLabel1.Caption; end; WelcomeLabel2:=TLabel.Create(WizardForm); with WelcomeLabel2 do begin Top:= ScaleY(136); Left:= ScaleX(176); Width:= ScaleX(301); Height:= ScaleY(300); AutoSize:= false; WordWrap:= true; Font.Color:=ClWhite Font.Name:= 'Georgia' Font.Size:= 10; Transparent:= true; Parent:= WizardForm; Caption:= WizardForm.WelcomeLabel2.Caption; end;

STRAYKER 02-03-2011 19:58 1625670

Vamp1re,
Лександер,
Спасиба всем, но у меня ещо вопрос.
Как сделать что бы писало
Создать ярлык 1
Создать ярлык 2

LinkOFF 02-03-2011 19:58 1625671

Он мне пишет Unknown identifier 'MainImage'

Vamp1re можеш мне пример скрипта прописать.Пожалуйста

И цвет самого инсталятора можешь сказать как поменять на черный

STRAYKER 02-03-2011 20:07 1625685

LinkOFF,
Код:

Скрипт для картинки
Код:

var
  MyPanel: TPanel;

procedure InitializeWizard();
begin
  MyPanel := TPanel.Create(WizardForm);
  with MyPanel do
  begin
    Align := alClient;
    Parent := WizardForm;
  end;

  with WizardForm.WizardBitmapImage do
  begin
    Align := alClient;
    Parent := MyPanel;
  end;

  with TLabel.Create(WizardForm) do
  begin
    AutoSize := WizardForm.WelcomeLabel1.AutoSize;
    WordWrap := WizardForm.WelcomeLabel1.WordWrap;
    Left := WizardForm.WelcomeLabel1.Left;
    Top := WizardForm.WelcomeLabel1.Top;
    Width := WizardForm.WelcomeLabel1.Width;
    Height := WizardForm.WelcomeLabel1.Height;
    Caption := WizardForm.WelcomeLabel1.Caption;
    Font.Size := WizardForm.WelcomeLabel1.Font.Size;
    Font.Style := WizardForm.WelcomeLabel1.Font.Style;
    Font.Color := clWhite;
    TransParent := True;
    Parent := MyPanel;
  end;
 
  with TLabel.Create(WizardForm) do
  begin
    AutoSize := WizardForm.WelcomeLabel2.AutoSize;
    WordWrap := WizardForm.WelcomeLabel2.WordWrap;
    Left := WizardForm.WelcomeLabel2.Left;
    Top := WizardForm.WelcomeLabel2.Top;
    Width := WizardForm.WelcomeLabel2.Width;
    Height := WizardForm.WelcomeLabel2.Height;
    Caption := WizardForm.WelcomeLabel2.Caption;
    Font.Size := WizardForm.WelcomeLabel2.Font.Size;
    Font.Style := WizardForm.WelcomeLabel2.Font.Style;
    Font.Color := clWhite;
    TransParent := True;
    Parent := MyPanel;
  end;

  WizardForm.NextButton.BringToFront;
  WizardForm.CancelButton.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  MyPanel.Hide;
  if CurPageID = wpWelcome then
    MyPanel.Show;
end;


LinkOFF 02-03-2011 20:07 1625686

STRAYKER попробуй вот так

[Icons]

Name: "{userdesktop}\Ярлык 1"; Filename: "{app}\Games1.exe"; WorkingDir: "{app}"; Tasks: desktopicon;
Name: "{userdesktop}\Ярлык 2"; Filename: "{app}\Games2.exe"; WorkingDir: "{app}"; Tasks: desktopicon;

Vamp1re 02-03-2011 20:09 1625689

STRAYKER, Вставляешь в любое поле шаблона.И вот собственно скрипт:
читать дальше »
[Icons] Name: "{group}\Название программы"; Filename: "{app}\MyProg.exe" Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}" Name: "{commondesktop}\Название программы"; Filename: "{app}\MyProg.exe"; Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Название программы"; Filename: "{app}\MyProg.exe";


Тебе надо только вставить, изменить название программы и екзешника

LinkOFF 02-03-2011 20:09 1625690

STRAYKER спасибо бальшое

LinkOFF 02-03-2011 20:12 1625696

STRAYKER, а как цвет текста поменять на черный?

Vamp1re 02-03-2011 20:13 1625697

LinkOFF, вот еще один пример:
читать дальше »
//************************************************ [Начало - Вн. вид инсталла] ***************************************************// procedure RepaintInstall(); begin ExtractTemporaryFile('button.bmp') ExtractTemporaryFile('DirBitmap.bmp'); ExtractTemporaryFile('GroupBitmap.bmp'); ExtractTemporaryFile('Logo.bmp'); WizardForm.WizardBitmapImage.Width := ScaleX(224); WizardForm.WizardBitmapImage2.Width := ScaleX(224); WizardForm.PageNameLabel.Width:=ScaleX(300); WizardForm.PageDescriptionLabel.Hide; WizardForm.Font.Color:=clWhite; WizardForm.Color:=Color; WizardForm.WelcomePage.Color:=Color; WizardForm.InnerPage.Color:=Color; WizardForm.FinishedPage.Color:=Color; WizardForm.SelectDirPage.Color:=Color; WizardForm.SelectComponentsPage.Color:=Color; WizardForm.SelectProgramGroupPage.Color:=Color; WizardForm.SelectTasksPage.Color:=Color; WizardForm.ReadyPage.Color:=Color; WizardForm.InstallingPage.Color:=Color; WizardForm.PageNameLabel.Color:=Color; WizardForm.PageNameLabel.Font.Color:=ClWhite; WizardForm.MainPanel.Color:=Color; WizardForm.WelcomeLabel1.Hide; WizardForm.WelcomeLabel2.Hide; WizardForm.SelectDirLabel.Color:=Color; WizardForm.SelectDirBrowseLabel.Color:=Color; WizardForm.DirEdit.Color:=Color; WizardForm.DiskSpaceLabel.Color:=Color; WizardForm.ComponentsList.Color:=Color; WizardForm.SelectComponentsLabel.Color:=Color; WizardForm.TypesCombo.Hide; WizardForm.ComponentsDiskSpaceLabel.Hide; WizardForm.GroupEdit.Color:=Color; WizardForm.SelectStartMenuFolderLabel.Color:=Color; WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color; WizardForm.SelectTasksLabel.Color:=Color; WizardForm.TasksList.Color:=Color; WizardForm.ReadyMemo.Color:=Color; WizardForm.ReadyMemo.ScrollBars:= ssNone WizardForm.ReadyLabel.Color:=Color; WizardForm.StatusLabel.Color:=Color; WizardForm.FilenameLabel.Color:=Color; WizardForm.FinishedHeadingLabel.Hide; WizardForm.FinishedLabel.Hide; WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap.bmp')); WizardForm.SelectDirBitmapImage.AutoSize:=true; WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\GroupBitmap.bmp')); WizardForm.SelectGroupBitmapImage.AutoSize:=true; LogoImage := TBitmapImage.Create(WizardForm); with LogoImage do begin SetBounds(ScaleX(10), ScaleY(320), ScaleX(175), ScaleY(40)); Bitmap.LoadFromFile(ExpandConstant('{tmp}\Logo.bmp')); Parent := WizardForm; end; with WizardForm.WizardSmallBitmapImage do begin SetBounds(ScaleX(335), ScaleY(2), ScaleX(160), ScaleY(50)); end; with WizardForm.ComponentsList do begin Top:=ScaleY(55); Height:=ScaleY(150); end; with TLabel.Create(WizardForm) do begin AutoSize:=WizardForm.WelcomeLabel1.AutoSize; Left:=WizardForm.WelcomeLabel1.Left; Top:=WizardForm.WelcomeLabel1.Top Width:=WizardForm.WelcomeLabel1.Width Height:=WizardForm.WelcomeLabel1.Height WordWrap:=WizardForm.WelcomeLabel1.WordWrap; Font.Name:=WizardForm.WelcomeLabel1.Font.Name; Font.Size:=WizardForm.WelcomeLabel1.Font.Size; Font.Color:=clWhite; 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; Top:=WizardForm.WelcomeLabel2.Top Width:=WizardForm.WelcomeLabel2.Width Height:=WizardForm.WelcomeLabel2.Height WordWrap:=WizardForm.WelcomeLabel2.WordWrap; Font.Name:=WizardForm.WelcomeLabel2.Font.Name; Font.Size:=WizardForm.WelcomeLabel2.Font.Size; Font.Color:=clWhite; Font.Style:=WizardForm.WelcomeLabel2.Font.Style; Caption:=WizardForm.WelcomeLabel2.Caption; Parent:=WizardForm.WelcomeLabel2.Parent Transparent:=True end; with TLabel.Create(WizardForm) do begin AutoSize:=WizardForm.FinishedHeadingLabel.AutoSize; Left:=WizardForm.FinishedHeadingLabel.Left; Top:=WizardForm.FinishedHeadingLabel.Top Width:=WizardForm.FinishedHeadingLabel.Width Height:=WizardForm.FinishedHeadingLabel.Height WordWrap:=WizardForm.FinishedHeadingLabel.WordWrap; Font.Name:=WizardForm.FinishedHeadingLabel.Font.Name; Font.Size:=WizardForm.FinishedHeadingLabel.Font.Size; Font.Color:=clWhite; Font.Style:=WizardForm.FinishedHeadingLabel.Font.Style; Caption:=WizardForm.FinishedHeadingLabel.Caption; Parent:=WizardForm.FinishedHeadingLabel.Parent Transparent:=True end; FinishedLabel:= TLabel.Create(WizardForm) with FinishedLabel do begin AutoSize:=WizardForm.FinishedLabel.AutoSize; Left:=WizardForm.FinishedLabel.Left; Top:=WizardForm.FinishedLabel.Top Width:=WizardForm.FinishedLabel.Width; Height:=WizardForm.FinishedLabel.Height+50; WordWrap:=WizardForm.FinishedLabel.WordWrap; Font.Name:=WizardForm.FinishedLabel.Font.Name; Font.Size:=WizardForm.FinishedLabel.Font.Size; Font.Color:=clWhite; Font.Style:=WizardForm.FinishedLabel.Font.Style; Caption:=ExpandConstant('{cm:FinishedLabel}'); Parent:=WizardForm.FinishedLabel.Parent Transparent:=True end; end; procedure InitializeUninstallProgressForm1; begin FileCopy(ExpandConstant('{app}\WizardSmallImage.bmp'), ExpandConstant('{tmp}\WizardSmallImage.bmp'), False); FileCopy(ExpandConstant('{app}\Logo.bmp'), ExpandConstant('{tmp}\Logo.bmp'), False); UninstallProgressForm.Color:=Color; UninstallProgressForm.InnerPage.Color:=Color; UninstallProgressForm.MainPanel.Color:=Color; UninstallProgressForm.PageNameLabel.Color:=Color; UninstallProgressForm.PageDescriptionLabel.Hide; UninstallProgressForm.PageNameLabel.Font.Color:=clWhite; UninstallProgressForm.PageNameLabel.Width:=ScaleX(300); UninstallProgressForm.StatusLabel.Color:=Color; UninstallProgressForm.StatusLabel.Font.Color:=clWhite; LogoImage := TBitmapImage.Create(UninstallProgressForm); with LogoImage do begin SetBounds(ScaleX(10), ScaleY(320), ScaleX(175), ScaleY(40)); Bitmap.LoadFromFile(ExpandConstant('{tmp}\Logo.bmp')); Parent := UninstallProgressForm; end; with UninstallProgressForm.WizardSmallBitmapImage do begin Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardSmallImage.bmp')); SetBounds(ScaleX(335), ScaleY(2), ScaleX(160), ScaleY(50)); end; end; //************************************************ [Конец - Вн. вид инсталла] ***************************************************//

STRAYKER 02-03-2011 20:15 1625700

LinkOFF,
[code]
procedure InitializeWizard();
begin
WizardForm.Font.Color:=ClЦвет;
WizardForm.WelcomeLabel1.Font.Color:=ClЦвет;
WizardForm.FinishedHeadingLabel.Font.Color:=ClЦвет;
WizardForm.PageNameLabel.Font.Color:=ClЦвет;
end;

обязательно оставляй перед названиям цвета Cl

Gnom_aka_Lexander 02-03-2011 20:15 1625701

LinkOFF, Самый простой способ - использовать черный скин (например, Tiger.cjstyles)

STRAYKER 02-03-2011 20:17 1625702

Лександер,
Как зделать Сплаш
и
Создать ярлык 1
Создать ярлык 2

Vamp1re 02-03-2011 20:17 1625704

Цитата:

Цитата Лександер
Самый простой способ - использовать черный скин (например, Tiger.cjstyles) »

Согласен но кнопки вскрыть и закрыть будут видны только при навидении.

LinkOFF 02-03-2011 20:19 1625707

Я просто не знаю где этот скин найти

И как его задействовать

STRAYKER 02-03-2011 20:21 1625713

LinkOFF,
Установи Inno Ultra там все вшито http://innoultra.ru/

LinkOFF 02-03-2011 20:21 1625714

STRAYKER и Лександер
Вы можете мне сделать скрипт чтоб картинка была на весь экран и черный инсталлятор

спасибо за innoultra

STRAYKER 02-03-2011 20:24 1625717

LinkOFF,
Это сложно без самых файлов

LinkOFF 02-03-2011 20:25 1625722

У меня с цветом шрифта проблемы немогу поменять на черный

Vamp1re 02-03-2011 20:28 1625724

STRAYKER, Пропиши вот ето в скрипте: (ето сплеш)

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

[Files]
Source: "\Spash.bmp"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
#endif

[code]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard;
begin
ExtractTemporaryFile('WizardImage.bmp');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.bmp',1000,3000,1000,0,255,False, $FFFFFF,10);
WizardForm.TypesCombo.ItemIndex:=0;
end;

STRAYKER 02-03-2011 20:28 1625726

тебе где именно нужен чёрный шрифт ?
LinkOFF,

LinkOFF 02-03-2011 20:28 1625727

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

LinkOFF 02-03-2011 20:31 1625730

Вложений: 1
Мне такой инсталятор создать нужно

LinkOFF 02-03-2011 20:32 1625732

Да STRAYKER

STRAYKER 02-03-2011 20:32 1625733

А там где белый нужен чёрный ???

LinkOFF 02-03-2011 20:33 1625734

АГА

Если можно то скрипт этого инсталятора можешь написать только без логотипа снизу

STRAYKER 02-03-2011 20:36 1625738

[code]
procedure InitializeWizard();
begin
WizardForm.Font.Color:=ClBlack;
WizardForm.WelcomeLabel1.Font.Color:=ClWhite;
WizardForm.FinishedHeadingLabel.Font.Color:=ClWhite;
WizardForm.PageNameLabel.Font.Color:=ClWhite;
end;

Если нучно всё шрифты черными то
[code]
procedure InitializeWizard();
begin
WizardForm.Font.Color:=ClBlack;
WizardForm.WelcomeLabel1.Font.Color:=ClBlack;
WizardForm.FinishedHeadingLabel.Font.Color:=ClBlack;
WizardForm.PageNameLabel.Font.Color:=ClBlack;
end;

jameszero 02-03-2011 20:43 1625744

Что за чат тут в теме начался? Четыре страницы за день нафлудили.

Редактируйте неполные сообщения и удаляйте ненужные вместо набивания новых, иначе снесу пол-темы в тест-форум

Цитата:

Цитата LinkOFF
спасибо бальшое »

Цитата:

Цитата LinkOFF
спасибо за innoultra »

На форуме предусмотрена система благодарностей. Не нужно создавать для них посты.

Как я могу отметить сообщение полезным?

STRAYKER 02-03-2011 20:44 1625745

Вот тут скрипт для цветов он разширен так что для каждой фразы свой цвет можно подобрать но он сильно наворочен
http://forum.oszone.net/attachment.p...1&d=1299087972

ChVL 02-03-2011 21:01 1625763

Есть ли скрипт для дополнительной задачи "Закрепить на панели задач"?
Было бы неплохо использовать взамен "Создать значок в панели быстрого запуска", которой в Win 7 никто не пользуется, поскольку быстрым запуском там и не пахнет.

Gnom_aka_Lexander 02-03-2011 21:04 1625771

ChVL, В обчем, неправильно вспомнил, там смысл такой, что для того, чтоб ярлык был создан и показан, нужно в реестре существующую запись, которая для каждого компьютера - своя, поскольку содержит в себе инфу обо всех ярлыках на этой панели, дописать в хекс-формате...
Вот, нашел, где видел :) http://forum.ru-board.com/topic.cgi?...457&start=40#9
Вот, прикрепил ключик из своего реестра для изучения - может кто и придумает чего.

ChVL 02-03-2011 21:17 1625777

Лександер, дык, систем с разными адресами для панели задач не так много, и не очень сложно, IMHO, их все предусмотреть в скрипте. Или что-то не так?
Понял. Будем ждать решение от умельца, который сумеет решить проблему.

Habetdin 02-03-2011 22:58 1625861

ChVL, есть такой вариант :)

STRAYKER 03-03-2011 16:24 1626407

Помогите
Мне нада чтобы перед установкой писало например:
Создать ярлык call of duty сетевая №1
Создать ярлык call of duty одиночная №2

Gnom_aka_Lexander 03-03-2011 16:33 1626413

STRAYKER,
читать дальше »
Код:

[Tasks]
Name: 1; Description: "Создать ярлык call of duty сетевая №1"; GroupDescription: Ярлыки;
Name: 2; Description: "Создать ярлык call of duty одиночная №2"; GroupDescription: Ярлыки;

[Icons]
Name: "{group}\ярлык call of duty сетевая №1"; Filename: "мой файл, к которому ярлык"; Tasks: 1;
Name: "{group}\ярлык call of duty одиночная №2"; Filename: "Мой файл, к которому ярлык 2"; Tasks: 2;


Так, както. А вообще, открой ISTool, там все это легко делается.

STRAYKER 03-03-2011 20:11 1626615

Ок всё спасиба разобрался

Tco 03 04-03-2011 16:49 1627246

Всем привет. Подскажите, пожалуйста как стелать так, чтобы от выбора языка менялся LicenseFile. Если выбран русский язык, LicenseFile на русском, если английский язык, LicenseFile на английском?
И ещё один вопросик. Как сделать страницу что удалять? К примеру ту или иную папку?

Habetdin 04-03-2011 19:36 1627347

Цитата:

Цитата Tco 03
чтобы от выбора языка менялся LicenseFile »

Код:

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl; LicenseFile: setup/lic.russian.txt
Name: de; MessagesFile: compiler:Languages\German.isl; LicenseFile: setup/lic.german.txt


STRAYKER 04-03-2011 19:51 1627352

У меня незапускаеться созданый инстаятор
Размер пакета 5.7гб
Использовал:
Скины
Сплаш
Изменения цветов

Сигнатура проблемы:
Имя события проблемы: AppHangB1
Имя приложения: Setup.tmp

R.i.m.s.k.y. 04-03-2011 20:12 1627362

STRAYKER, попробуй в InitializeSetup поставить Result := True; в начале, после if если имеются.

STRAYKER 04-03-2011 20:33 1627370

R.i.m.s.k.y.,
Всмысле там нет такого
Мож розказать поподробнее

Gnom_aka_Lexander 04-03-2011 20:38 1627371

STRAYKER, Можно подождать телепатов, а можно показать скрипт, а не флудить лишний раз.
Кстати, мне кажется, или я чегото здесь не понимаю?

R.i.m.s.k.y. 04-03-2011 20:41 1627373

Цитата:

Цитата STRAYKER
Всмысле там нет такого »

InitializeSetup - булевая функция, если она возвращает false - инсталлер закрывается без ошибок.
И конечно ты не попробовал поставить Result := True в начале этой функции и после if там же.

STRAYKER 04-03-2011 20:41 1627374

Лександер,
Я вас непонимаю, Вы очём
Вот скрипт

STRAYKER 04-03-2011 20:44 1627377

R.i.m.s.k.y.,
Вы можете ету функцию интегрировать в скрипт ? Пожалуйста буду очень признателен.

Gnom_aka_Lexander 04-03-2011 20:47 1627381

STRAYKER, ну, дык, 6 секций [Setup] и столько-же [code], чего ты хотел :)
Держи свой скрипт.
R.i.m.s.k.y., он просто скрипт-жойнером объединил, а о том, что минимальную редакцию полученного делать нужно - человеку сказать забыли :)

R.i.m.s.k.y. 04-03-2011 20:50 1627382

STRAYKER,
InitializeSetup и InitializeSetup2 у тебя полный алес, быдлокодинг какой-то.
InitializeSetup удали, InitializeSetup2 переименуй в InitializeSetup и все. У тебя из InitializeSetup идет вызов InitializeSetup2 и потом инвертируется результат, нахрена?

Вот это точно сработает ;)

function InitializeSetup(): Boolean;
begin
Result := True;
ExtractTemporaryFile('STEAM.cjstyles'); Result := True;
LoadSkin(ExpandConstant('{tmp}\STEAM.cjstyles'), ''); Result := True;
Result := True;
end;

R.i.m.s.k.y. 04-03-2011 20:56 1627386

Вложений: 1
STRAYKER,
на держи, думай что делаешь в следующий раз.
Я тебе там все секции объединил, левак отрезал, DeinitializeSetup и InitializeSetup поправил.

STRAYKER 04-03-2011 21:00 1627389

Всеравно, я вам даю исходники может вы розберётесь бо я чайник в них
Нет неработает
У меня Inno Ultra 5.4.1 может что-то в нем ?
O_o Удалил скрипт со скином и заработало

Gnom_aka_Lexander 04-03-2011 21:18 1627399

STRAYKER, держи, у меня работает, как и предыдущий.
У меня тоже моя сборка Inno Ultra 5.4.1
И, еще, тут было написано для всех. Илии ты задался целью слить этот форум?

STRAYKER 04-03-2011 21:26 1627403

Лександер,
Спасиба вот ваш работает
Урааа

david141 05-03-2011 12:50 1627740

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



R.i.m.s.k.y. 05-03-2011 13:11 1627759

Цитата:

Цитата david141
Подскажите, пожалуйста, как сделать так чтобы пользователь мог
выбрать только один компонент? »

флаг exclusive не вариант?

david141 05-03-2011 13:19 1627771

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

R.i.m.s.k.y. 05-03-2011 13:23 1627780

Цитата:

Цитата david141
Нужно чтобы пользователь выбрал нужный ему браузер из списка, а все остальные стали не доступны. Иначе понаставит галок на все версии браузера и будет каша. »

Ну а я про что
[Components]
Name: Moz; Description: Мозиллы всякие:;
Name: Moz\ver4; Description: Мозилла 4; Flags: exclusive
Name: Moz\ver3.6; Description: Мозилла 3.6; Flags: exclusive

david141 05-03-2011 13:34 1627787

Спасибо всё работает.

R.i.m.s.k.y. 05-03-2011 13:40 1627796

Цитата:

Цитата david141
Спасибо всё работает. »

давим полезное сообщение

actavir 05-03-2011 15:11 1627871

Народ, выручите пожалуйста. Как сделать чтобы верхняяя картинка была растянута на всю длинну инсталлятора, это как в

И ещё там внизу есть надпись R.G. Catalyst, как мне сделать такуюже и чтобы она в том месте была на всех страницах инсталлятора?

Vamp1re 05-03-2011 15:36 1627894

actavir,
Растягывание малой картинки:

читать дальше »
procedure InitializeWizard();

begin
with WizardForm.WizardSmallBitmapImage do
begin
Left := ScaleX(368);//Начальная точка
Width := ScaleX(127);//длинна картинки
end;
end;


Лого в инсталляторе:

читать дальше »
[Files]
Source: "Logo.bmp"; DestDir: "{tmp}"; Flags: dontcopy

[code]
procedure RepaintInstall();
begin
ExtractTemporaryFile('Logo.bmp');

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
SetBounds(ScaleX(10), ScaleY(320), ScaleX(175), ScaleY(40));
Bitmap.LoadFromFile(ExpandConstant('{tmp}\Logo.bmp'));
Parent := WizardForm;
end;

procedure InitializeUninstallProgressForm1;
begin
FileCopy(ExpandConstant('{app}\WizardSmallImage.bmp'), ExpandConstant('{tmp}\WizardSmallImage.bmp'), False);
FileCopy(ExpandConstant('{app}\Logo.bmp'), ExpandConstant('{tmp}\Logo.bmp'), False);

UninstallProgressForm.Color:=Color;
UninstallProgressForm.InnerPage.Color:=Color;
UninstallProgressForm.MainPanel.Color:=Color;
UninstallProgressForm.PageNameLabel.Color:=Color;
UninstallProgressForm.PageDescriptionLabel.Hide;
UninstallProgressForm.PageNameLabel.Font.Color:=clWhite;
UninstallProgressForm.PageNameLabel.Width:=ScaleX(300);
UninstallProgressForm.StatusLabel.Color:=Color;
UninstallProgressForm.StatusLabel.Font.Color:=clWhite;

LogoImage := TBitmapImage.Create(UninstallProgressForm);
with LogoImage do
begin
SetBounds(ScaleX(10), ScaleY(320), ScaleX(175), ScaleY(40));
Bitmap.LoadFromFile(ExpandConstant('{tmp}\Logo.bmp'));
Parent := UninstallProgressForm;
end;

Или етот:

[Files]
Source: "LOGO.bmp"; Flags: dontcopy solidbreak

var
BitmapImage1: TBitmapImage;

procedure InitializeWizard();
begin
{ BitmapImage1 }
BitmapImage1 := TBitmapImage.Create(WizardForm);
with BitmapImage1 do
begin
Name := 'BitmapImage1';
Parent := WizardForm;
Left := ScaleX(0);
Top := ScaleY(313);
Width := ScaleX(241);
Height := ScaleY(48);
ExtractTemporaryFile('LOGO.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\LOGO.bmp'));
end;
end;


Растягывание почти всех страниц инсталятора:

читать дальше »
[Setup]
WizardImageFile=WizardImage.bmp
WizardSmallImageFile=WizardSmallImage.bmp


[code]
procedure InitializeWizard();
begin
with WizardForm do begin
with WizardBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with WizardBitmapImage2 do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with MainPanel do begin
with WizardSmallBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= Mainpanel.Width;
Height:= MainPanel.Height;
end;
end;
end;
end;

actavir 05-03-2011 15:48 1627901

Vamp1re, я немного глупость спрошу а "Лого в инсталляторе" это подпись R.G. Catalyst в данном случае? :-)

Vamp1re 05-03-2011 15:52 1627907

actavir, да! :)

actavir 05-03-2011 15:53 1627910

Vamp1re, пасибки)))

Vamp1re 05-03-2011 15:54 1627911

У меня ошибка при установке:
(см.рис)
Если ктото с ней знаком помогите пожалуйста

actavir 05-03-2011 16:10 1627929

Vamp1re, а вот я применил растягивание маленькой картинки, и у меня получилось что она закрыта белым фоном текста в шапке. Вот что:



Как это исправить?

Vamp1re 05-03-2011 16:22 1627944

actavir,
читать дальше »
procedure InitializeWizard(); begin WizardForm.PageDescriptionLabel.Visible:= False; WizardForm.PageNameLabel.Visible:= False; end;

actavir 05-03-2011 16:29 1627951

Vamp1re, только в этом варианте текста то не остаётся, а нельзя сделать чтобы текст был но только текст без фона?
А то без текста фигово(((

R3Pa4eK 05-03-2011 16:39 1627961

Как реализовать активную кнопку отмены (что-бы после нажатия запускался деинсталлятор) в скрипте ExecAndWait?

Vamp1re 05-03-2011 17:19 1627989

actavir, Попробуй еще ето:


procedure InitializeWizard;
begin
WizardForm.TypesCombo.ItemIndex:=0;
WizardForm.BeveledLabel.Enabled:=True;]

actavir 05-03-2011 18:39 1628050

Vamp1re, а этот код нужно было дополнить или предыдущий заменить на этот?

Народ может кто-нибудь ещё знает как реализовать верхнюю часть инсталлятора, текст над картинкой без фона можно как нибудь сделать?

duxa 05-03-2011 18:54 1628066

Не подскажите как сделать окно инсталлятора поверх всех остальных?
Пробовал через BringToFrontAndRestore(), но мой вариант не сработал.

Gnom_aka_Lexander 05-03-2011 19:05 1628077

Попытка помоч сразу многим :) Собрал все, что нашел, Примеры скриптов.
Продолжаю искать и пополнять. Если ктото найдет интересный или полезный пример, кидайте в личку.

Vamp1re 05-03-2011 20:41 1628153

actavir, заменить

dracosha 05-03-2011 21:37 1628196

Всем привет.
Можно ли заставить установщик скопировать текст (настройки) из одного ини в другой (и что б с возможностью замены уже имеющихся ключей).
ps Писать длинный код в секцию INI не устраивает. (слишком много вариантов настроек)
Помогите пожалуйста.

Serega 05-03-2011 23:37 1628273

Цитата:

Цитата dracosha
Можно ли заставить установщик скопировать текст (настройки) из одного ини в другой (и что б с возможностью замены уже имеющихся ключей) »

Конечно можно
Цитата:

Цитата dracosha
Писать длинный код в секцию INI не устраивает. (слишком много вариантов настроек) »

А вы думаете, что писать в секции кода придётся мало?
Рекомендую писать через секцию [INI], используя для заполнения данных - {ini:Filename,Section,Key|DefaultValue}.
Более подробно можете прочитать в Справке, раздел Constants.

Serega 06-03-2011 00:26 1628287

Цитата:

Цитата duxa
Не подскажите как сделать окно инсталлятора поверх всех остальных? »

Пример

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
procedure btnClick(Sender: TObject);
begin
  case WizardForm.FormStyle of
    fsNormal:
      begin
        WizardForm.FormStyle := fsStayOnTop;
        TButton(Sender).Caption := 'Отменить стиль StayOnTop';
      end;
    fsStayOnTop:
      begin
        WizardForm.FormStyle := fsNormal;
        TButton(Sender).Caption := 'Задать стиль StayOnTop';
      end;
  end;
end;

procedure InitializeWizard();
begin
  with TButton.Create(WizardForm) do
    begin
      Parent := WizardForm;
      SetBounds(ScaleX(20), WizardForm.NextButton.Top, ScaleX(200), WizardForm.NextButton.Height);
      Caption := 'Задать стиль StayOnTop';
      OnClick := @btnClick;
    end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  // это необходимо, а то при ножатии на кнопку, мы не увидим сообщения
  if WizardForm.FormStyle = fsStayOnTop then
    WizardForm.FormStyle := fsNormal;
end;


Vamp1re 06-03-2011 14:24 1628550

Дайте мне пожалуйста командную строку для распаковки FreeArc (sfx) архивов без запроса директории (в секции RUN)

duxa 06-03-2011 15:29 1628598

Vamp1re,
Цитата:

Filename: "{src}\data3.bin"; Parameters: " -y -s -d""{app}"""; Flags: waituntilterminated skipifdoesntexist; WorkingDir: "{src}";

Gnom_aka_Lexander 07-03-2011 12:31 1629218

Минималистичный инсталлятор для игры Renegade + ISDone.
Внимательно читаем шапку скрипта :)
v-1.0 - Минимализм и строгость + ISDone Скачать
v-1.1 - добавлены сплеш и деинсталлятор в стиле инсталлятора. Скачать
v-1.2 final - Тройной сплеш и Месседж-бокс по окончании установки. Скачать


Black666angel 09-03-2011 00:35 1630350

Народ help не подскажите если реально такое вместо стандартного (MsgBox сообщения) чтоб вызывалась табличка из файла к примеру из этой *.dll

EvilDemon 09-03-2011 04:09 1630420



Подскажите пожалуйста что это за скин? И где его можно достать?

ZooM1k 09-03-2011 13:55 1630666

Помогите написать скрипт InnoSetup
 
Помогите написать скрипт InnoSetup с веб установкой всё перерыл не чего не нашёл

Vamp1re 09-03-2011 19:54 1630922

Целый день работал над скриптом с нуля, и наконецто закончил.Вот зацените: [url]http://narod.ru/disk/7133018001/Setup.exe.html[/url
если думаете что чтото добавить надо, отпишитесь :)

actavir 09-03-2011 20:38 1630951

Vamp1re, а можно код на предложеный тобой инсталлятор, мне понравился))))

R.i.m.s.k.y. 09-03-2011 20:54 1630962

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

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

Требуется: в секции Setup LicenseFile и InfoBeforeFile менялись в зависимости от языка, файлы копировались в зависимости от выбранного языка, в списке компонентов и Tasks сообщения были в зависсимости от языка. Насколько я понял в секциях нет параметра типа language: rus

Заранее спасибо!

Gnom_aka_Lexander 09-03-2011 21:26 1630978

R.i.m.s.k.y., они тогда не в Setup меняются а так:
Код:

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl; LicenseFile: 1.rtf; InfoBeforeFile: Пролог_ru.rtf; InfoAfterFile: Эпилог_ru.rtf
Name: en; MessagesFile: compiler:Languages\English.isl; LicenseFile: 2.rtf; InfoBeforeFile: Пролог_En.rtf; InfoAfterFile: Эпилог_En.rtf

[Files]
Source: 1; DestDir: {app}; Languages: ru;
Source: 2; DestDir: {app}; Languages: en;
[Tasks]
Name: 1; Description: русский; Languages: ru;
Name: 2; Description: Английский; Languages: en;

а в Setup, тогда, LicenseFile и InfoBeforeFile, я думаю, прописывать не стоит, хотя ошибки быть не должно вроде :)
А на вторю часть я отвечал уже - язык может применятся как компонент, пример дополнил :)

R.i.m.s.k.y. 09-03-2011 21:38 1630987

Лександер, спасибо, но это только первая часть вопроса.

Vamp1re 10-03-2011 16:04 1631628

Первый мой скрипт: Dead Space 2 + ISDone 0.5 final
Скрипт довольно простой.Возможность подключать неограниченое количество разных модулей, добавлен всем требуемый черный цвет инсталлятора и другое увидете в скрипте :)



Скачать можно перейдя по ссылке ниже:
http://rghost.ru/4706574

duxa 10-03-2011 19:19 1631743

Подарочек от меня) Еще один закос под мехов. Скрипт писался еще прошлым летом, с инно дружить я только начинал, поэтому простите за бардак в скрипте. Правда выложить решил только сейчас. Старался, подгонял все координаты\размеры, поэтому считаю этот скрипт более "полным". Координата текста брались из репака ассассина, окна установки из blur
R.G. Механики + ISDone 4.0 или ISDone 5.0 Final

my-94 10-03-2011 20:15 1631787

Ребята помогите к скрипту

читать дальше »
[Setup]
AppId={{D12015CC-4FEA-40CD-A1D7-289B6D8924A5}
AppName=1
AppVerName=1.0
AppPublisher=1
DefaultDirName=C:\Games\1
DefaultGroupName=1
OutputBaseFilename=setup
Compression=lzma/ultra64
SolidCompression=true
;disablereadypage=true
InternalCompressLevel=ultra64
DiskSpanning=true
PrivilegesRequired=none
WizardImageFile=1.bmp
WizardSmallImageFile=mini.bmp
UninstallDisplayIcon={tmp}\5.ico
AppVersion=
AllowRootDirectory=true
DirExistsWarning=no
AllowNoIcons=true
UninstallFilesDir={app}\Uninstall
VersionInfoProductName=1
AppCopyright=Dragon

[Types]

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

[Messages]
BeveledLabel=111

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: tasks1; Description: Обновить компоненты DirectX; GroupDescription: Дополнительные программы:

[Files]
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy nocompression
Source: ISSkin.dll; DestDir: {tmp}; Flags: dontcopy nocompression
source: 1.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: 3.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: dontcopy nocompression
Source: splash.png; DestDir: {tmp}; Flags: dontcopy nocompression
Source: 5.ico; DestDir: {tmp}

[Icons]


[Run]
Filename: {src}\Redist\directx\dxsetup.exe; WorkingDir: {src}\Redist\directx\; Tasks: Tasks1


[UninstallDelete]
Name: {app}; Type: filesandordirs; Tasks: ; Languages:
[code]
var
AboutButton, CancelButton, URLButton: TButton;
BackgroundBitmapImage: TBitmapImage;
BackgroundBitmapText: TNewStaticText;
BmpFile: TBitmapImage;

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
UnloadSkin();
end;

procedure AboutButtonOnClick(Sender: TObject);
begin
MsgBox('is', mbInformation, mb_Ok);
end;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://is.ru#lt', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.bmp'); //Извлекаем файл, который пойдет в окно инсталлятора
ExtractTemporaryFile('3.bmp'); //Извлекаем файл, который пойдет в окно инсталлятора
//Вставляем изображение в окно инсталлятора, для каждой страницы нужно добвлять изображение заново
ExtractTemporaryFile('splash.png');
BmpFile:= TBitmapImage.Create(WizardForm);
with BmpFile do begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(313));
Stretch:= true;
Parent:= WizardForm.WelcomePage;
end;

BmpFile:= TBitmapImage.Create(WizardForm);
with BmpFile do begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}\3.bmp'));
SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(313));
Stretch:= true;
Parent:= WizardForm.FinishedPage;
end;

ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
end;
begin
with WizardForm.NextButton do
begin
Left := ScaleX(320);
end;

CancelButton := WizardForm.CancelButton;
AboutButton := TButton.Create(WizardForm);
with AboutButton do begin
Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
Top := CancelButton.Top;
Width := CancelButton.Width;
Height := CancelButton.Height;
Caption := '&Repack info';
OnClick := @AboutButtonOnClick;
Parent := WizardForm;
end;

URLButton := TButton.Create(WizardForm);
with URLButton do begin
Left := AboutButton.Left + AboutButton.Width + ScaleX(50);
Top := CancelButton.Top;
Width := CancelButton.Width;
Height := CancelButton.Height;
Caption := 'Наш Сайт';
OnClick := @URLLabelOnClick;
Parent := WizardForm;
end;
end;
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Left := ScaleX(50);
BackgroundBitmapImage.Top := ScaleY(100);
BackgroundBitmapImage.AutoSize := True;
BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
BackgroundBitmapImage.Parent := MainForm;

BackgroundBitmapText := TNewStaticText.Create(MainForm);
BackgroundBitmapText.Left := BackgroundBitmapImage.Left;
BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8);
BackgroundBitmapText.Caption := 'TBitmapImage';
BackgroundBitmapText.Parent := MainForm;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if CurPageID <> wpWelcome then begin
AboutButton.Hide; URLButton.Hide end else begin
AboutButton.Show; URLButton.Show; end;
end;


Прикрепить
вот это
читать дальше »


[code]
var
TDV: TFolderTreeView;
TFV: TStartMenuFolderTreeView;

procedure TDVOnChange(Sender: TObject);
begin
WizardForm.DirEdit.Text:= AddBackslash(TDV.Directory)+'MyApp';
end;

procedure TFVOnChange(Sender: TObject);
begin
WizardForm.GroupEdit.Text:= AddBackslash(TFV.Directory)+'MyApp';
end;

procedure InitializeWizard();
begin
TDV:= TFolderTreeView.Create(WizardForm);
TDV.Top:= WizardForm.DirEdit.Top+28;
TDV.Width:= 417;
TDV.Height:= 100;
TDV.OnChange:= @TDVOnChange;
TDV.Parent:= WizardForm.SelectDirPage;


TFV:= TStartMenuFolderTreeView.Create(WizardForm);
TFV.Top:= WizardForm.GroupEdit.Top+28;
TFV.Width:= 417;
TFV.Height:= 100;
TFV.SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{us erstartup}'),ExpandConstant('{commonstartup}'));
TFV.OnChange:= @TFVOnChange;
TFV.Parent:= WizardForm.SelectProgramGroupPage;
end;



Чтоб вот так получилось


actavir 10-03-2011 21:06 1631838

my-94, используй InnoSetup Script Joiner ссылка в закрепке темы :-)

my-94 10-03-2011 22:01 1631890

actavir

Уу спасибо и не предполагал что такая программа есть :yahoo:

krevedki 10-03-2011 22:05 1631896

У меня вот такая цель - имеется файл zip и мне надо обновить содержимое внутри него.
Для этого использую 7za.exe с cmd файлом, где прописаны параметры упаковки.
Внутри zip файла лежит папка, в которой лежат те файлы, которые мне надо заменить + ещё одна папка с другими файлами, которые мне трогать не надо.
Также у меня есть 10 файлов с расширением xml, которые собственно говоря мне и надо засунуть в zip файл, в котором лежат точно такие же файлы. Проще говоря это русификатор.
Мне нужно обновить содержимое zip файла, поместив в инсталятор только 10 файлов. Чтобы внутри инсталятора был 7za.exe и cmd файлик и 10 xml файлов.
При запуске чтобы распаковывались все эти файлы в папку где лежит zip файл (путь бы указывался при установке), затем запускался cmd файл, в нём у меня прописано всё необходимое для обновления содержимого zip файла. После того как все действия выполнятся, т.е. обновится содержимое, чтобы все xml файлы и exe + cmd файлы удалились и установка завершилась.

Вопрос вот в чём - какие модули для inno setup нужно использовать чтобы это реализовать и в какой последовательности их использовать?

actavir 10-03-2011 22:09 1631900

my-94, если хотите выразить благодарность, то к словам ещё можно приложить нажать "Полезное сообщение" :)

krevedki, тут можно обойтись стандартными операциями
1. Ваши файлы добавить в инсталятор следующим образом :
Код:

[Files]Source: unarc.dll; DestDir: {tmp}; Flags: deleteafterinstall
{tmp} заменяете на папку в которой находится zip архив который нужно обновить
unarc.dll замените на имя файла (эти файлы должны быть в папке со скриптом .iss)
2. Проделываете эту операцию со всеми файлами, в том числе и с exe + cmd.
3. В процессе установки можно запустить программу, т.е. после распаковки файлов которые мы добавили в первом пункте, мы можем запустить один из них, я так понял что вам нужно cmd:
Код:

[RUN]
Filename: {src}\DirectX\DXSETUP.exe; WorkingDir: {src}\DirectX; Parameters: /silent; StatusMsg: Установка DirectX. Пожалуйста подождите...; Tasks: directx; Flags: waituntilterminated;

В этом скрипте измените все имена файлов и пути к ним.
После того, как у вас пройдут все операции, все файлы удалятся.

Я думаю должно получиться. :)

krevedki, как получится или что-то неполучится отпишись!!!

krevedki 10-03-2011 22:35 1631913

Вот что я имею ввиду - у людей в компах лежит некая папка, где находится zip файл, внтури которого есть 10 xml файлов (внутри xml них различные переменные игры на английском)
У меня есть такие же 10 файлов внутри которых тоже самое на русском. Проще говоря это русификатор. Сам zip файл огромного размера, т.к. внутри не только эти 10 файлов но еще и одна подпапка со звуковыми файлами. Мне нужно чтобы инстралятор брал мои xml файлы и запаковывал их внутрь файла, лежащего в компах людей, кто будет запускать инсталятор, с заменой файлов. Т.е. xml файлы внутри архива заменялись моими с таким же названием. Сама замена происходит через программу 7za.exe а с cmd файле прописаны параметры, в моём случае
7za.exe u -tzip English.pak -ir!Languages\*.xml -mx9
Да, файл с расширением pak это zip архив, но он переименован в pak и используется игрой в таком виде, т.е. только с расширением pak. Но это 100%-ый zip архив.
Так вот - я хочу добавить 10 xml файлов и exe+cmd внутрь исталятора. Инсталятор распакует все эти файлы в папку где лежит English.pak
потом надо как-то запустить cmd файл - он всё упакует и выполнит. После чего zip архив будет обновлён и все xml файлы + exe'шник и cmd файл будут не нужны и их нужно удалить.
Выглядит это так

На картинке zip файл, содержимое которого должен обновить инсталятор и выделены xml файлы, которые я буду обновлять.

exe файл - это консольная версия 7zip
http://rghost.ru/4714817

actavir 10-03-2011 22:36 1631914

krevedki, ну вроде бы должно получиться, так как я предложил

krevedki 10-03-2011 22:48 1631920

А как скрипт определит, что файлы установлены?
По этой строке
[Files]Source: unarc.dll; DestDir: {tmp}; Flags: deleteafterinstall

разве на выйдет так, что файл распакуется и тут же удалится?
Как скрипт определит что установка ещё не завершена?

Ладно... потом доковыряю.. пока указал переменную app в качестве пути, однако в windows пытается распаковывать... а надо чтобы распаковывало все файлы в указанную пользователем папку... По умолчанию она же уже задана...

actavir 10-03-2011 22:51 1631921

дело в том что удаление происходит на последнем этапе инсталяции а распаковка и выполнение идёт до этого момента)))

n1tka 10-03-2011 23:20 1631943

Вложений: 1
Помогите соединить скрипт наложения изображения кнопки кнопки с моим инсталлом
и покажите коментами в скрипте что куда нужно вставлять чтобы я потом сам мог такое провернуть

Vovochka_s2 11-03-2011 05:45 1632053

Подскажите, возможно ли закриптовать инсталлятор созданный инно?Защита паролем не подходит, нужно чтобы инсталлер невозможно было потом распаковать утилитами типа InnoUnpacker или тем же 7зипом.

krevedki 11-03-2011 12:52 1632302

Итак я сделал вот так

Цитата:

Source: C:\update\update_7za.cmd; DestDir: {app}; Flags: ignoreversion deleteafterinstall
Source: C:\update\7za.exe; DestDir: {app}; Flags: ignoreversion deleteafterinstall
Source: C:\update\Languages\*; DestDir: {app}\Languages; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall
[Run]
Filename: {app}\update_7za.cmd; WorkingDir: {app}; Parameters: /silent; StatusMsg: Выполняются необходимые операции, ждите...; Flags: waituntilterminated
Одна проблемка сохранилась. В папке назначения остаётся папка Languages. Пустая.... она не удаляется... Вот тут
Source: C:\update\Languages\*; DestDir: {app}\Languages; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall
Я прописал распаковку файлов в папку, которую надо создать. Но после выполнения нужных операций файлы из неё удаляются, а сама папка нет...
Как её убрать?

ChVL 11-03-2011 17:01 1632490

Как перенести файл с дополнительной присоединённой информацией?
При прохождении через инсталлятор этот поток теряется, а именно он только и нужен. Подлая программа создаёт пустой (!) файл с присоединённой информацией такого вида: :длинный ряд цифр и букв:$DATA Во время работы программа его считывает, сравнивает и, если всё в порядке, - нормально работает. Если нет способа перенести файл без потери этого потока, то может можно как-то добавить эту информацию в файл после переноса? Или создать пустой файл, к которому присоединить эту доп. информацию, только как это делается?

actavir 11-03-2011 17:52 1632537

krevedki, а вам эта папка сильно мешает??? :)

Gnom_aka_Lexander 11-03-2011 18:40 1632581

krevedki, держи:
читать дальше »
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Run]
Filename: {app}\7za.exe; Parameters: " u -tzip English.pak -ir!Languages\*.xml -mx9"; WorkingDir: {app}; Description: "Установить русификатор"; Flags: PostInstall; StatusMsg: "Подождите, идет обновление...";

[Files]
Source: Languages\01.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\02.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\03.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\04.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\05.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\06.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\07.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\08.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\09.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\10.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: 7za.exe; DestDir: {app}; Flags: deleteafterinstall;


тэоретически можно не ставить флаг PostInstall, секция Run обрабатывается после распаковки файлов, и смотрится будет лучше, но нужно пробовать.

krevedki 11-03-2011 18:54 1632598

actavir


Не мешает, но некрасиво когда пустая папка просто так валяется...

Сейчас попробую способом от Лександера
Посмотрел... вышло что-то совсем не то... Отписал в лс...
Папка всё равно остаётся даже если прописать

[Dirs]
Name: Languages; Flags: DeleteAfterInstall;

Gnom_aka_Lexander 11-03-2011 19:49 1632657

krevedki,
тогда так: вместо
читать дальше »
Код:

[Files]
Source: Languages\01.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\02.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\03.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\04.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;
Source: Languages\05.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\06.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\07.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\08.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\09.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall; 
Source: Languages\10.xml; DestDir: {app}\Languages\; Flags: deleteafterinstall;


напиши так:
Код:

[Files]
Source: Languages\*; DestDir: {app}\Languages\; Flags: ignoreversion recursesubdirs createallsubdirs deleteafterinstall;
Source: 7za.exe; DestDir: {app}; Flags: deleteafterinstall;

так даже лучше - в случае добавления или изменения имен файлов, скрипт править не нужно :)

actavir 11-03-2011 19:54 1632663

krevedki, то есть ydrnow это ты?

Serega 11-03-2011 20:54 1632718

Цитата:

Цитата Vovochka_s2
нужно чтобы инсталлер невозможно было потом распаковать утилитами типа InnoUnpacker или тем же 7зипом »

Используйте расширенную версию от Restools и добавьте в секцию [Setup], следующие строки:
Код:

Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

Цитата:

Цитата ChVL
Как перенести файл с дополнительной присоединённой информацией? »

Чтоб вам помочь, в решении вашей проблемы, нужно её понять, но из вашего сообщения я совершенно ничего не понял...
Причём тут поток и о какой информации идёт речь?

Gnom_aka_Lexander 11-03-2011 21:25 1632738

Подскажите пожалуйста, для шрифта в лейбелах можно сделать автоматический размер?
Просто можно задать авторазмер самого лейбела в зависимости от его заполнения текстом ( AutoSize:=True; - например)
Вот и хотелось узнать, нельзя-ли задать размер шрифта, чтоб текст автоматически заполнял форму при AutoSize:=False;
Просто работаю над изменением текста в зависимости от динамического изменения условий - для каждого текста ловить размеры - муторно, но придется, видимо..

Serega 11-03-2011 21:41 1632752

Цитата:

Цитата Лександер
для шрифта в лейбелах можно сделать автоматический размер? »

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

ChVL 11-03-2011 22:51 1632800

Serega,
Цитата:

Цитата Serega
Причём тут поток и о какой информации идёт речь? »

В NTFS реализована файловая многопоточность – каждый файл, помимо основного неименованного потока (содержащего, собственно, главную информацию) может иметь именованные потоки. Они никак не сказываются на размере файла и призваны (по мнению создателей) хранить служебную информацию и авторские права. В том случае, когда в файле есть служебная информация, он и называется файл с дополнительной присоединённой информацией. Проводник её не видит. При попытке копирования такого файла на другой диск появляется окно с предупреждением, что файл содержит дополнительную присоединённую информацию, и при копировании она будет утеряна. Аналогично эта информация теряется и в случае переноса такого файла инсталлятором. А вот этого хотелось бы избежать...

Вообще-то эта незадокументированная возможность интересная. Можно, например, впихнуть туда фильм 4.7 Гиг, а файл будет выглядеть пустым... Вот почему копирование и перемещение без потери присоединенной информации, как правило, возможно только в пределах одного диска. Неприлично известный Касперский при проверке файлов без нашего ведома вписывает туда свою служебную информацию.

Serega 12-03-2011 00:14 1632858

Цитата:

Цитата Лександер
для каждого текста ловить размеры - муторно, но придется, видимо.. »

Ну а почему сразу не задать нужную ширину текста при создании TLabel, а AutoSize поставить в False?
Мне кажется так проще всего...

Цитата:

Цитата ChVL
Вообще-то эта незадокументированная возможность интересная. Можно, например, впихнуть туда фильм 4.7 Гиг, а файл будет выглядеть пустым... »

Да, но свободный размер диска уменьшится на 4.7 Гига...
Теперь понял, про что вы имеете ввиду, к сожалению стандартными средствами этого не сделать.

Iska 12-03-2011 02:17 1632920

Цитата:

Цитата ChVL
Вообще-то эта незадокументированная возможность интересная. »

Вообще-то, скоро двадцать лет, как документированная :): Fork (filesystem) - Wikipedia, the free encyclopedia.

Iska 12-03-2011 02:33 1632923

Цитата:

Цитата ChVL
Вот почему копирование и перемещение без потери присоединенной информации, как правило, возможно только в пределах одного диска. »

Это не верно. Никаких «как правило». Необходимым и достаточным условием является наличие файловой системы NTFS на исходном и целевом разделах, и умение менеджера файлов копировать ADS вместе с основным потоком. Проводник (как и большинство современных файловых менеджеров) копировать ADS умеет.

Цитата:

Цитата ChVL
Они никак не сказываются на размере файла…

Сказываются. Ровно в том размере, сколько добавите в ADS.
Цитата:

Цитата ChVL
…и призваны (по мнению создателей) хранить служебную информацию и авторские права.

Коллега, и где только Вы такой чуши наслушались, а?!

При большом желании Вы можете использовать архивы RAR для сохранения информации о потоках:
читать дальше »
Цитата:

Цитата RAR Help
Ключ -OS — сохранять потоки NTFS
--------------------------------------------------------------------------------
Этот ключ имеет смысл указывать только при работе с файловой системой NTFS. Он позволяет сохранять в архиве альтернативные потоки данных, связанные с файлами на диске с файловой системой NTFS. Это особенно важно в среде Windows 2000, XP и более новых версий Windows, где потоки применяются для хранения связанной с файлами информации, например, описаний файлов. Если вы используете WinRAR для создания резервных копий с дисков NTFS, то настоятельно рекомендуется указывать этот ключ.

Эквивалент этого ключа в режиме оболочки — параметр "Сохранять файловые потоки" в диалоге "Имя и параметры архива".

Этот ключ применим только к архивам RAR.


ChVL 12-03-2011 07:19 1632985

Цитата:

Цитата Iska
Цитата ChVL:
…и призваны (по мнению создателей) хранить служебную информацию и авторские права.
Коллега, и где только Вы такой чуши наслушались, а?! »

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

В Windows 2000 Microsoft начал использовать альтернативные потоки данных в NTFS для хранения информации, такой как данные файла автора или названия атрибутов и изображения миниатюр.
(Перевод мой)
Могу привести и немало другой подобной "чуши", подтверждающей мои слова. Выбрал один источник, который отличается тем, что в нём приведены конкретные коды, предлагаемые к использованию - тут уж не поспоришь... С этим материалом сейчас, кстати, и работаю применительно к поставленной задаче.

Gnom_aka_Lexander 12-03-2011 11:22 1633075

Цитата:

Цитата Serega
Ну а почему сразу не задать нужную ширину текста при создании TLabel, а AutoSize поставить в False?
Мне кажется так проще всего... »

Я вот что имею ввиду, на странице компоненты лейбл с описанием компонент.
На данный момент там все вручную...

insombia 12-03-2011 16:04 1633255

кто то может сделать мне скрипт установки Devil May Cry 4 типа как NFS Undercover?

Gnom_aka_Lexander 12-03-2011 16:09 1633264

insombia, береш скрипт NFS Undercover и просто меняеш там названия, ярлыки, реестр, графику оформления на те, которые должны быть в нужной тебе игре. Это совсем несложно, хотя-бы начни, если непонятно - тебе подскажут.
За тебя такой сложный скрипт с нуля точно никто писать не будет, если только за деньги.

Serega 12-03-2011 19:31 1633362

Цитата:

Цитата Лександер
Я вот что имею ввиду »

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

Gnom_aka_Lexander 12-03-2011 19:47 1633371

Serega, это пустой инстал... полный он около 60 метров, скрипт окол 11-ти метров. Перезалил сюда - ссылка прямая, может не будет скидывать.
Подскажите пожалуйста, как сюда:
Код:

procedure CurStepChanged(CurStep: TSetupStep);
ResultCode, tmp:integer;
begin
if CurStep = ssDone then
if MsgBox('{#SetupSetting("AppName")}' +' успешно ' + ' установлена!' + #10#10#13 + 'Запустить ' + '{#SetupSetting("AppName")}' + '?' , mbInformation, MB_OKCANCEL) = IDOK then
Exec(ExpandConstant('{#AppExe}'), '', '', SW_SHOW, ewNoWait, ResultCode);
end;
end;

приделать еще одну кнопку, на запуск еще одного файла?

Serega 12-03-2011 20:07 1633380

Цитата:

Цитата Лександер
приделать еще одну кнопку, на запуск еще одного файла? »

Это стандартное сообщение и задать название для третьей кнопки не получится, придётся рисовать самому такое сообщение, т.е. просто создаёте форму и все контролы, которые хотите на ней увидеть. Пример создания формы есть в CodeClasses.iss, смотрите procedure FormButtonOnClick(Sender: TObject);

insombia 12-03-2011 20:18 1633388



кто то может сделать подобный инсталятор для call of duty modern warfare 2?

И вопрос есть ли програмка для того чтобы можно было как то с любой игры знать коды для inno припустим как у механиков

duxa 12-03-2011 20:46 1633400

insombia, Держи свой айфон.

Gnom_aka_Lexander 12-03-2011 22:58 1633482

Разобрался со своим вопросом, сделал на примере скрипта для игры Minecraft скачать заодно получился меседж-бокс, который и на семерке отображается без белой полоски снизу.

insombia 13-03-2011 16:04 1633896

duxa там фон dead space 2 как мне сделать фон call of duty? файлы я менял не помогает

R.i.m.s.k.y. 13-03-2011 17:23 1633955

Повторяю вопрос - как сделать мультиязычный инсталлер в части касающейся списка компонентов.
Код:

[Languages]

Name: russian; MessagesFile: compiler:Languages\Russian.isl;
Name: english; MessagesFile: compiler:\Default.isl;

[Components]
# define abcd "абвгд"
Name: a; Description: {#abcd}; Flags: disablenouninstallwarning

надо чтобы при русском языке было abcd = "абвгд", а при англ abcd = "abcdefg"
Разные переменные заводить не вариант, по переменным идет проверка/подстановка через код наподобие этой
WizardForm.ComponentsList.ItemEnabled[WizardForm.ComponentsList.Items.IndexOf('{#abcd}')] := False;

Gnom_aka_Lexander 13-03-2011 17:33 1633959

R.i.m.s.k.y., Я-же добавил к своему ответу тогда - язык может применяться как компонент:
читать дальше »
Код:

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl; LicenseFile: 1.rtf; InfoBeforeFile: Пролог_ru.rtf; InfoAfterFile: Эпилог_ru.rtf
Name: en; MessagesFile: compiler:Languages\English.isl; LicenseFile: 2.rtf; InfoBeforeFile: Пролог_En.rtf; InfoAfterFile: Эпилог_En.rtf

[Files]
Source: 1; DestDir: {app}; Languages: ru;
Source: 2; DestDir: {app}; Languages: en;

[Tasks]
Name: 1; Description: русский; Languages: ru;
Name: 2; Description: Английский; Languages: en;

[Components]
# define abcd "абвгд"
# define abcd1 "abcdefg"
Name: a; Description: {#abcd}; Flags: disablenouninstallwarning; Languages: ru;
Name: b; Description: {#abcd1}; Flags: disablenouninstallwarning; Languages: en;


XXXler 13-03-2011 17:55 1633973

R.i.m.s.k.y.

Код:

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

[Components]
Name: a; Description: "{cm:abcd}"; Flags: disablenouninstallwarning

[CustomMessages]
english.abcd=abcdefg
russian.abcd=абвгд

...

WizardForm.ComponentsList.ItemEnabled [WizardForm.ComponentsList.Items.IndexOf (ExpandConstant ('{cm:abcd}'))] := False;


ryabis 17-03-2011 15:33 1637103

Вопрос по скрипту в Inno Setup
 
Не нашел ответа на свой вопрос и подходящей темы...
Как в скрипте Inno Setup выйти из инсталлятора? Делаю так:
Код:

 
|Code|
function InitializeSetup(): Boolean;
begin
//....

if interbaseInstalled = true then begin     
    MsgBox('В системе установлен InterBase!', mbError, MB_OK);
    Exit; 
end;

//....
end;

Но выходит только из этой функции, а надо прекратить работу всего инсталлятора...

Самого осенило.... =)

Код:

|Code|
function InitializeSetup(): Boolean;
begin
//....

if interbaseInstalled = true then begin     
    MsgBox('В системе установлен InterBase!', mbError, MB_OK);
    Result := false;
    Exit; 
end;

//....
end;


0.07 17-03-2011 21:12 1637388

Вложений: 1
у меня такая проблемма: я беру за основу этот скрипт и редактирую его, но почему то инсталлятор создается, а архив не распаковывается
может кто-нибудь посмотрит Мой скрипт и подскажет, что я делаю не так. Буду очень признателен

Gnom_aka_Lexander 17-03-2011 21:42 1637418

0.07, У тебя парадокс в строчке:
Код:

Source: {src}\PES11.arc; DestDir: {app}; Flags: external dontcopy{#SourceToProgress}
- ты задаеш путь для архива DestDir: {app} - положить сюда, и тут-же - Flags: external dontcopy - говориш, что его не нужно копировать никуда (по умолчанию в этом случае копируется в папку темп но у тебя я хз вообще, куда в этом случае уйдет твой архив) - инсталлятор в итоге не знает, где брать то, чтто распаковывать :)

0.07 17-03-2011 22:35 1637477

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

Krinkels 17-03-2011 23:55 1637538

Доброго времени суток, друзья. Обновил свой сборник скриптов, забираем

Iska 18-03-2011 00:04 1637542

Цитата:

Цитата ChVL
Выбрал один источник, »

Спасибо за ссылку. Теперь ясно, где Вы сие почерпнули. Журнал мог бы потратиться на литкорректора, дабы не пропускать таких ошибок, как «безфайловые процессы», прямо в заголовке статьи. Статья написана весьма предвзято, автор выдаёт свои рассуждения за вселенскую истину.
читать дальше »
Одна чушь:
Цитата:

Они [именованные потоки] никак не сказываются на размере файла (!!!)…
вместо того, чтобы написать, например:
Цитата:

В качестве размера файла командный процессор и Проводник указывают размер основного не именованного потока, тем не менее полный размер файла будет состоять из суммарной длины всех входящих в него потоков.
Другая чушь, тут же:
Цитата:

…и призваны (по мнению создателей) хранить служебную информацию и авторские права.
Из какого пальца автор высосал эту истину? Приведённая мною ссылка и Ваш перевод:
Цитата:

Цитата ChVL
В Windows 2000 Microsoft начал использовать альтернативные потоки данных в NTFS для хранения информации, такой как данные файла автора или названия атрибутов и изображения миниатюр. »

Разницу видите? Между «призваны (по мнению создателей) хранить служебную информацию и авторские права» и «Начал использовать для…» — колоссальная разница. В первом делается абсолютно безаппеляционное утверждение о предназначении данной возможности, во втором — о том, что частным случаем стало использование такой возможности для того-то и того-то.

P.S. Всё ж в процитированной Вами статье слово «"недокументированные" возможности» взято в кавычки. У Вас же:
Цитата:

Цитата ChVL
эта незадокументированная возможность интересная. »

— нет.

0.07 18-03-2011 15:23 1638004

"Error: There is not enough space on the first disk to copy all of the required files."
как исправить эту ошибку? подскажите плз

R.i.m.s.k.y. 18-03-2011 15:55 1638023

Не могу вкурить, как сделать на панели секции [Tasks] элемент так, чтобы галка стояла и нельзя было снять.

Затык - я не могу подобрать названия элементов, для секции компонентов я делаю так
WizardForm.ComponentsList.ItemEnabled [WizardForm.ComponentsList.Items.IndexOf (ExpandConstant ('{cm:abcd}'))] := False;
по названию компонента находится он сам и отключается.

А для секции [Tasks] как сделать искомое (чтобы галка на задаче стояла и не снималась)???
Спасибо!

Serega 18-03-2011 17:58 1638131

Цитата:

Цитата 0.07
как исправить эту ошибку? подскажите плз »

Увеличить объём диска или купить новый винчестер... именно об этом говорит ваша ошибка...
Ну а если серьёзно, то нужно просто добавить завершающий знак ';' в самый конец 358 строки.

Цитата:

Цитата R.i.m.s.k.y.
чтобы галка на задаче стояла и не снималась »

Всё очень просто, нужно просто перехватить нажатие на нужный элемент, т.е.:
Пример

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Tasks]
Name: desktopicon; Description: Create a &desktop icon; GroupDescription: Additional icons:
Name: desktopicon\common; Description: For all users; GroupDescription: Additional icons:; Flags: exclusive
Name: desktopicon\user; Description: For the current user only; GroupDescription: Additional icons:; Flags: exclusive unchecked
Name: quicklaunchicon; Description: Create a &Quick Launch icon; GroupDescription: Additional icons:; Flags: unchecked
Name: associate; Description: &Associate files; GroupDescription: Other tasks:

[Code]
procedure TasksListClickCheck(Sender: TObject);
var
  Item: Integer;
begin
  Item := WizardForm.TasksList.Items.IndexOf('&Associate files');
  if WizardForm.TasksList.ItemIndex = Item then
    WizardForm.TasksList.Checked[item] := True;
end;

procedure InitializeWizard();
begin
  WizardForm.TasksList.OnClickCheck := @TasksListClickCheck;
end;


0.07 18-03-2011 20:42 1638257

у меня выдает такую ошибку:" Disk spanning must be enabled in order to create an installation larger than 2100000000 bytes in size."
я так понимаю это означает, что запрещено использовать в инсталляторе файлы больше, чем 2Гб.
как можно это исправить?

Gnom_aka_Lexander 18-03-2011 21:41 1638285

0.07, пользуйся гуглом, это означает, что нельзя делить инсталл на части больше двух гигабайт. Пропиши в секцию [Setup]
Код:

DiskSpanning=true
DiskSliceSize=1566000000


actavir 21-03-2011 09:30 1639889

Народ подскажите пожалуйста можно ли сделать так чтобы inno setup создавала только .exe файлы без .bin файлов, ну и конечно же чтобы все файлы включённые были в этом .exe. А то хотел сделать маленький инсталятор, одним файлом, но не знаю как, а несколько файлов не удобно заливать
Выручите плиз!!!!!!!!!!




------------
Хорошая игр - это русифицированная игра!!!

Habetdin 21-03-2011 11:15 1639965

actavir, "поиск по теме рулит "
Код:

[Setup]
DiskSpanning=false


ryabis 21-03-2011 11:48 1640005

Вопрос следующий:
Как в скрипте вызвать функцию из WinAPI? Функция GetFileVersionInfo.
Знаю, что в Делфях это делается через подключения в uses модуля Windows.
Как это сделать в InnoSetup???

Krinkels 21-03-2011 12:56 1640059

ryabis
А в инно просто вызываешь данную функцию из длл. Примерно так:
function GetFileVersionInfo(lptstrFilename: PAnsiChar; dwHandle, dwLen: DWORD; lpData: Pointer): BOOL; external 'GetFileVersionInfoA@version stdcall delayload'

ryabis 21-03-2011 14:46 1640148

Krinkels, бьюсь уже весь день... Как мне в Inno объявить функцию VerQueryValue и системную ф-ю AllocMem

Код:

function AllocMem( Size: Cardinal ): Poiner;
Код:

BOOL WINAPI VerQueryValue(
  __in  LPCVOID pBlock,
  __in  LPCTSTR lpSubBlock,
  __out  LPVOID *lplpBuffer,
  __out  PUINT puLen
);

C остальным, вроде, разобрался. )))

Krinkels 21-03-2011 19:17 1640349

ryabis
Код:

function VerQueryValue(pBlock: Pointer; lpSubBlock: PAnsiChar; var lplpBuffer: Pointer; var puLen: UINT): BOOL; external 'VerQueryValueA@version stdcall delayload'
А первую наверное придется в ручную писать, кусок из дельфи:
Код:

function AllocMem(Size: Cardinal): Pointer;
begin
  GetMem(Result, Size);
  FillChar(Result^, Size, 0);
end;


Serega 21-03-2011 19:27 1640355

Цитата:

Цитата ryabis
Как в скрипте вызвать функцию из WinAPI? Функция GetFileVersionInfo.»

Многими системными функциями на данный момент, воспользоваться просто не возможно, т.к. проблема в том, что Pointer'a в Inno Setup нет.

shidow 22-03-2011 06:11 1640656

Подскажите как можно сделать http ссылку в левом нижнем углу инстала?

ryabis 22-03-2011 11:09 1640805

Цитата:

Цитата Serega
Многими системными функциями на данный момент, воспользоваться просто не возможно, т.к. проблема в том, что Pointer'a в Inno Setup нет. »

когда делал function GetFileVersionInfo(...; lpData: Pointer) заменил Pointer на PСhar и это сработало. :yes:

Serega 22-03-2011 12:24 1640888

Цитата:

Цитата ryabis
заменил Pointer на PСhar и это сработало »

Да, я иногда так делаю, но это работает не всегда, т.к. PСhar это указатель на строку, а если нужно что-то другое...

P.S.
Когда что-то сильно надо заказчику, т.е. обязательно нужно сделать какую-то проверку перед установкой его программы, но Inno Setup это не поддерживает, то мне проще написать доп. dll и быть уверенным, что это корректно отработает на всех системах.
Многие вещи можно сделать в Inno, но к сожалению не всё.

0.07 22-03-2011 12:52 1640924

подскажите как можно сделать, что бы inno распаковал архивы paq9

Krinkels 22-03-2011 13:20 1640945

0.07
Надеюсь ты не рапак делаешь? А вообще самое простое это либо через секцию [run], либо пихаешь в батник строку(ки) для распаковки и запускаешь его через секцию [run]

duxa 22-03-2011 13:59 1640985

Цитата:

архивы paq9
Ух...и сколько это распаковываться будет?

Krinkels 22-03-2011 14:38 1641014

Немножко оффтопика.
duxa
Цитата:

Цитата duxa
Ух...и сколько это распаковываться будет? »

Неделю, не меньше. А вообще при слове Paq9 сразу вспоминается KopeRip или как то так его звали, чей репак распаковывался 10 часов. Ох и наслушался он тогда в свой адрес лестных слов.
Пардон за :off:

duxa 22-03-2011 14:47 1641023

Вопрос был задан 0.07, что бы он понял, что это ни к чему хорошему не приведет. Ну да ладно)

читать дальше »
Ммм...помню, starcraft beta с временем установки от 3 до 10 ч при весе 1Гб с хвостиком)

0.07 22-03-2011 15:08 1641045

спасибо, что подсказали, а то я мучался бы потом с ним. а вообще я хочу сжать Warhammer Dawn of War 2 Retrebution. пробовал как я обычно сжимаю 7z+precomp+srep+arc, но че-то почти не сжимается. вот я и решил попробовать Paq9

Arsi000 22-03-2011 15:47 1641081

помогите додумать нужно чтобы пользовательские страницы показывались или скрывались взависимости от выбранных компонентов вот сделал так
Код:

function ShouldSkipPage(PageID: Integer): Boolean;
begin 
  if (PageID = Page.ID) and Not(IsComponentSelected('Component 32')) then
    Result := True
  else if (PageID = Page2.ID) and Not(IsComponentSelected('Component 64')) then
    Result := True
  else
    Result := False;
end;

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

0.07 22-03-2011 16:02 1641095

попробуй
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = Page.ID) and Not(IsComponentSelected('Component 32')) then
Result := True
else if (PageID = Page2.ID) and Not(IsComponentSelected('Component 32')) then
Result := True
else
Result := False;
end;

Arsi000 22-03-2011 17:23 1641172

0.07, спасибо но это тут бы никак не помогло, сам разобрался проблема в скрипте была

Serega 22-03-2011 17:33 1641183

Цитата:

Цитата Arsi000
сам разобрался проблема в скрипте была »

Раз разобрались, это очень хорошо, но всегда нужно описывать ошибку и немного упорядочил вашу функцию:
Код:

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  case PageID of
    Page.ID : Result := not IsComponentSelected('Component 32');
    Page2.ID: Result := not IsComponentSelected('Component 64');
  else
    Result := False;
  end;
end;


Gnom_aka_Lexander 22-03-2011 20:28 1641331

Рабочая ссылка на Inno Script Generator,
Зеркало на РГ-Хосте.
Зеркало на русифицированную программу.

0.07 22-03-2011 20:49 1641357

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

Gnom_aka_Lexander 22-03-2011 20:59 1641368

0.07, Вариант от Serega из шапки И для кого она нужна...?
Еще вариант от Shegorat.

0.07 22-03-2011 21:09 1641376

И для кого она нужна...?
Ну, постоянно забываю туда посмотреть, да и про поиск тож
За скрипт спс.

shidow 23-03-2011 07:24 1641610

Делаю чтоб после установки устанавливалось доп. по пишу в run
[Run]
Filename: "{app}\Redistributable\eadm-installer.exe"; WorkingDir: "{app}\Redistributable"; Flags: skipifdoesntexist; Check: Task2;
Filename: "{app}\Redistributable\DirectX\DXSETUP.exe"; Parameters:/silent; WorkingDir: "{app}\Redistributable"; Flags: skipifdoesntexist; Check: Task3;
Но когда закончилась установка доп. по не устанавливается в чем причина?

Gnom_aka_Lexander 23-03-2011 08:31 1641641

shidow, нужно смотреть твой скрипт.

Krinkels 23-03-2011 08:55 1641651

shidow
А ты не пробовал в Flags добавить postinstall?

Gnom_aka_Lexander 23-03-2011 11:33 1641765

Интересная задача: есть функция:
Код:

function SaveStringsToUTF8File(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean;
Но она доступна только на Юникод-версии компилятора. Вопрос: как-бы ее приделать к АНСИ-компилятору?

Krinkels 23-03-2011 12:36 1641830

Лександер
Ну она у меня и в анси версии компилятора присутствует. Стоит версия от китайцев

Gnom_aka_Lexander 23-03-2011 12:45 1641838

Krinkels, У меня тоже, но вызывает ошибку :)
А на Юникод - срабатывает, но мне главный скрипт под юникод не переделать - там километр кода уже :)
Возможное решение моей проблемы: Ссылка
Поможет кто-нибудь приделать это к этому скрипту?

shidow 23-03-2011 16:10 1641993

Krinkels
Flags postinstall добавил но теперь такая ошибка
http://i18.fastpic.ru/big/2011/0323/...94710fa346.png
И еще один вопрос как сделать чтоб после установки игра не запускалась?

Gnom_aka_Lexander 23-03-2011 17:08 1642048

shidow, эта ошибка говорит о том, что по указанному пути нет файла, который нужно выполнить.
Цитата:

Цитата shidow
как сделать чтоб после установки игра не запускалась? »

Убрать запуск игры из секции ран.

insombia 23-03-2011 17:26 1642070

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

http://screendepo.com/image/109254

если что мой скрипт

читать дальше »
OutputDir=Setup
AppName=Crysis 2
AppVerName=Crysis 2
AppVersion=Crysis 2
AppPublisher=Torrent 4M
AppCopyright=Torrent 4M
DefaultDirName={pf}\Crysis 2
DefaultGroupName=Crysis 2
AllowNoIcons=yes
OutputBaseFilename=setup
WizardImageFile=C:\Documents and Settings\Admin\Рабочий стол\341de00ccb0b6b53d1a2c81e5e0b8e55.bmp
WindowVisible=false
WindowShowCaption=false
WindowResizable=false
Compression=lzma/ultra
SolidCompression=true
DiskSpanning=yes
DiskSliceSize=1048576000
SlicesPerDisk=1
WizardSmallImageFile=C:\Documents and Settings\Admin\Рабочий стол\crysis\Crysis_2.bmp

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

[Messages]
DiskSpaceMBLabel=Требуется как минимум 6,20 Гб свободного дискового пространства.

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

[Files]
Source: C:\Documents and Settings\Admin\Рабочий стол\button.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\Documents and Settings\Admin\Рабочий стол\LOGO.bmp; Flags: dontcopy solidbreak
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: C:\Documents and Settings\Admin\Рабочий стол\dc.reg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: C:\Documents and Settings\Admin\Рабочий стол\logo.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\Crysis 2\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Icons]
Name: {group}\Crysis 2; Filename: {app}\bin32\Crysis2Launcher.exe; WorkingDir: {app}\bin32
Name: {userdesktop}\Crysis 2; Filename: {app}\bin32\Crysis2Launcher.exe; WorkingDir: {app}\bin32; Tasks: desktopicon
Name: {group}\{cm:UninstallProgram,Crysis 2}; Filename: {uninstallexe}

[Run]
Description: {cm:LaunchProgram, Crysis 2}; Filename: {app}\bin32\Crysis2Launcher.exe; WorkingDir: {app}\bin32; Flags: nowait postinstall skipifsilent unchecked
Filename: {win}\regedit.exe; Parameters: /s {tmp}\dc.reg; StatusMsg: Вносим изменения в реестр ...; Flags: waituntilterminated runasoriginaluser

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

[code]
var
BitmapImage1: TBitmapImage;

procedure InitializeWizard();
begin
{ BitmapImage1 }
BitmapImage1 := TBitmapImage.Create(WizardForm);
with BitmapImage1 do
begin
Name := 'BitmapImage1';
Parent := WizardForm;
Left := ScaleX(0);
Top := ScaleY(314);
Width := ScaleX(241);
Height := ScaleY(100);
ExtractTemporaryFile('LOGO.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\LOGO.bmp'));
end;
end;

var
lbl1, lbl2: TLabel;
txt1, txt2: string;
i: Integer;
tmr1: TTimer;

procedure tmr1Timer(Sender: TObject);
begin
tmr1.Enabled:= False;

txt1:= WizardForm.WelcomeLabel1.Caption;
txt2:= WizardForm.WelcomeLabel2.Caption;

lbl1.Caption:= '';
for i:= 1 to Length(txt1) do begin
if Application.Terminated then Break; // контроль закрытия приложения и выход из цикла
lbl1.Caption:= lbl1.Caption + txt1[i];
Application.ProcessMessages;
Sleep(100); // время задержки между показом букв
end;

lbl2.Caption:= '';
for i:= 1 to Length(txt2) do begin
if Application.Terminated then Break; // контроль закрытия приложения и выход из цикла
lbl2.Caption:= lbl2.Caption + txt2[i];
Application.ProcessMessages;
Sleep(60); // время задержки между показом букв
end;
end;

procedure CreateComponents;
begin
// скрываем стандартные Label'ы
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;

// задаём свои Label'ы
lbl1:= TLabel.Create(WizardForm);
with lbl1 do begin
Left:= WizardForm.WelcomeLabel1.Left;
Top:= WizardForm.WelcomeLabel1.Top;
Width:= WizardForm.WelcomeLabel1.Width;
Height:= WizardForm.WelcomeLabel1.Height;
AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
Font.Style:= WizardForm.WelcomeLabel1.Font.Style;
Font.Size:= WizardForm.WelcomeLabel1.Font.Size;
Font.Color:= WizardForm.WelcomeLabel1.Font.Color;
Transparent:= True;
Caption:= '';
Parent:= WizardForm.WelcomePage;
end;

lbl2:=TLabel.Create(WizardForm);
with lbl2 do begin
Left:= WizardForm.WelcomeLabel2.Left;
Top:= WizardForm.WelcomeLabel2.Top;
Width:= WizardForm.WelcomeLabel2.Width;
Height:= WizardForm.WelcomeLabel2.Height;
AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
Font.Style:= WizardForm.WelcomeLabel2.Font.Style;
Font.Size:= WizardForm.WelcomeLabel2.Font.Size;
Font.Color:= WizardForm.WelcomeLabel2.Font.Color;
Transparent:= True;
Caption:= '';
Parent:= WizardForm.WelcomePage;
end;

tmr1:= TTimer.Create(WizardForm);
with tmr1 do begin
Interval:= 500; // время задержки перед началом показа текста
OnTimer:= @tmr1Timer;
end;
end;

procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('dc.reg');
ExtractTemporaryFile('steam.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\steam.cjstyles', '');
Result:=True;
end;

procedure DeinitializeSetup;
begin
ShowWindow(WizardForm.Handle,0);
UnloadSkin();
end;

function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(lpRootPathName: PChar): Cardinal; external 'GetDriveTypeA@kernel32.dll stdcall';

const
DRIVE_FIXED = 3;

function NoSD(s: string): string;
var
x, bit, i: Integer;
tp: Cardinal;
sd: string;
begin
sd:= ExpandConstant('{sd}');
Result:= sd;
// Вызываем функцию WinAPI
// Функция возвращает битовую маску установленных логических дисков.
// Бит 0 определяет наличие диска А:, бит 1 - диска B и т.д.
x:= GetLogicalDrives;
if x <> 0 then
// цикл по полученным битам переменной X
for i:= 1 to 64 do
begin
// Накладываем битовую маску для выделения бита с поряковым номером 0
bit:= x and 1;
// нашли логический диск...
if bit = 1 then
begin
// определяем тип логического диска
tp:= GetDriveType(PChar(Chr(64 + i) + ':'));
if tp = DRIVE_FIXED then
// если диск не является системным
if Chr(64 + i) <> Copy(sd, 1, 1) then
begin
Result:= Chr(64 + i) + ':';
Break;
end;
end;
// побитовый сдвиг вправо
x:= x shr 1;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.Font.Name:= 'Georgia';
if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Georgia';
if CurPageID = wpLicense then WizardForm.Font.Name:= 'Georgia';
WizardForm.Font.Style:=[fsBold, fsItalic]
end;


и ещё искал но не нашел как сделать чтобы при нажатии на лого открывался сайт?

shidow 23-03-2011 17:29 1642075

Лександер, так в том то и проблема что все правильно написано

а за что вот это отвечвет
WorkingDir: "{app}\Redistributable";

Gnom_aka_Lexander 23-03-2011 17:52 1642095

shidow, WorkingDir - рабочая папка. А ты файлы положил туда, откуда их запускаеш?
insombia, поройся здесь , вроде были оба нужных тебе примера.

shidow 23-03-2011 18:11 1642113

та же фигня уже не знаю что пробовать(

Gnom_aka_Lexander 23-03-2011 18:16 1642128

shidow, покажи весь скрипт, можно без секции кода, если он секретный :)

shidow 23-03-2011 18:28 1642139

Скрипт
читать дальше »
[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVersion}
AppVersion={#MyAppVersion}
VersionInfoVersion={#vers1}
VersionInfoTextVersion={#vers1}
AppPublisher={#MyAppPublisher}
AppCopyright=shidow
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
SolidCompression=yes
SetupIconFile=D:\RePack\Games\icon.ico
ShowTasksTreeLines=yes
OutputDir=D:\RePack\Games
DisableReadyPage=True


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

[CustomMessages]
rus.Welcome=Приветствие
rus.components1=Компоненты
rus.Catalogue=Каталог
rus.StartMenu=Меню «Пуск»
rus.Task=Задачи
rus.Installing=Установка
rus.Uninstalling=Удаление
rus.Finish=Завершение

rus.SelectDir=Выбор папки установки
rus.SelectComponents=Выбор компонентов
rus.SelectProgramGroup=Выберите папку в меню «Пуск»
rus.SelectTasks=Выберите дополнительные задачи
rus.Installing1=Установка...

rus.Welcome1=Вас приветствует Мастер установки {#MyAppName}
rus.Welcome2=Программа установит игру {#MyAppName} на Ваш компьютер.%n%nРекомендуется закрыть антивирусные пакеты, а также все прочие приложения перед тем, как продолжить.%n%nНажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти из%nпрограммы установки.

rus.UninstDescript=Пожалуйста, подождите, пока игра устновится на Ваш компьютер.

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

rus.Task_lbl1=Создать значки на &Рабочем столе
rus.Task_lbl2=Установить &EA Download Manager
rus.Task_lbl3=Обновить &DirectX

rus.Icons1=Начать игру
rus.Icons2=Удалить игру
rus.Icons3=Руководство пользователя

rus.fin3=Установка игры {#MyAppName} не завершена.
rus.fin4=Во время установки игры {#MyAppName} произошла ошибка, пожалуйста отключите сторонние программы и повторите%nпопытку установки.%n%nНажмите «Завершить», чтобы выйти из программы установки.

rus.Error=Ошибка

rus.ru1=В пути установки присутствуют русские буквы, что недопустимо.
rus.ru2=Пожалуйста, повторите ввод.

[Icons]
Name: "{group}\{cm:Icons1}"; Filename: "{app}\{#MyAppExeName}"; Workingdir:"{app}"; Check: NoIcons
Name: "{group}\{cm:Icons2}"; Filename: "{uninstallexe}"; Workingdir:"{app}"; Check: NoIcons
Name: "{userdesktop}\{#MyAppName}"; IconFilename: "D:\RePack\Games\icon.ico"; Filename: "{app}\{#MyAppExeName}"; Check: Task1;

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: D:\Games\1\bin\start.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\Games\1\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "Files\botva2.dll"; Flags: dontcopy
Source: "Files\InnoCallback.dll"; Flags: dontcopy
Source: "fon.jpg"; Flags: dontcopy
Source: "Logo.png"; Flags: dontcopy

//Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs
//Source: Files\*; Flags: dontcopy


[Run]
Filename: "{app}\Redistributable\eadm-installer.exe"; WorkingDir: "{app}\Redistributable"; Flags: postinstall; Check: Task2;
Filename: "{app}\Redistributable\DirectX\DXSETUP.exe"; Parameters:/silent; WorkingDir: "{app}\Redistributable\DirectX\"; Flags: postinstall; Check: Task3;

Gnom_aka_Lexander 23-03-2011 18:42 1642151

shidow, Теперь смотри- ты запускаеш содержиме папки Redistributable из папки с устанавливаемой программой, но нигде не кладеш эту папку туда, у тебя получается, что нет файлов для запуска.
Код:

[Run]
Filename: "{app}\Redistributable\eadm-installer.exe"; WorkingDir: "{app}\Redistributable"; Flags: postinstall; Check: Task2;
Filename: "{app}\Redistributable\DirectX\DXSETUP.exe"; Parameters:/silent; WorkingDir: "{app}\Redistributable\DirectX\"; Flags: postinstall; Check: Task3;

{app} - это куда устанавливается программа. А где у тебя лежит папка Redistributable?
если рядом с инсталлятором, то замени {app} на {src}

insombia 23-03-2011 18:46 1642155

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

Gnom_aka_Lexander 23-03-2011 18:47 1642157

insombia, Вставлять код с умом и описывать ошибки. Я, конечно, телепат, но не до такой степени.

rafps3 23-03-2011 21:26 1642266

Вложений: 1
[attach]attachmentid[/attach]
помогите пожалуйста вот скрипт скомпилировал создал образ установил но она не доустановиласт то есть не завершена установка доп оборудования не установилась и не появились ярлыки

Serega 23-03-2011 23:57 1642382

Цитата:

Цитата Лександер
Но она доступна только на Юникод-версии компилятора. Вопрос: как-бы ее приделать к АНСИ-компилятору? »

Действительно, стандартная функция вылетает с ошибкой...
В принципе этот момент можно обойти написав свою функцию. Накидал две функции ANSI<->UTF8:
читать дальше »

Код:

function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD;
  lpMultiByteStr: PAnsiChar; cbMultiByte: Integer;
  lpWideCharStr: PAnsiChar; cchWideChar: Integer): Longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD;
  lpWideCharStr: PAnsiChar; cchWideChar: Integer; lpMultiByteStr: PAnsiChar;
  cbMultiByte: Integer; lpDefaultChar: Integer; lpUsedDefaultChar: Integer): Longint;
    external 'WideCharToMultiByte@kernel32.dll stdcall';

function AnsiToUtf8(aStr: string): string;
// функция преобразовывает ANSI строку в UTF-8
var
  wStr: string;
begin
  try
    SetLength(wStr, MultiByteToWideChar(0, 0, aStr, -1, '', 0)*2);
    MultiByteToWideChar(0, 0, aStr, -1, wStr, Length(wStr));
    SetLength(Result, WideCharToMultiByte(65001, 0, wStr, -1, '', 0, 0, 0)-1);
    WideCharToMultiByte(65001, 0, wStr, -1, Result, Length(Result), 0, 0);
    Result := #$EF#$BB#$BF + Result;
  finally
    SetLength(wStr, 0);
  end;
end;

function Utf8ToAnsi(wStr: string): string;
// функция преобразовывает UTF-8 строку в ANSI
var
  aStr: string;
begin
  try
    while (wStr <> '') and ((wStr[1] = #$EF) or (wStr[1] = #$BB) or (wStr[1] <> #$BF)) do
      Delete(wStr, 1, 1);
    SetLength(aStr, MultiByteToWideChar(65001, 0, wStr, -1, '', 0)*2);
    MultiByteToWideChar(65001, 0, wStr, -1, aStr, Length(aStr));
    SetLength(Result, WideCharToMultiByte(0, 0, aStr, -1, '', 0, 0, 0)-1);
    WideCharToMultiByte(0, 0, aStr, -1, Result, Length(Result), 0, 0);
  finally
    SetLength(aStr, 0);
  end;
end;


0.07 24-03-2011 12:22 1642731

у меня есть скрипт для распаковки freearc архивов.
что туда добавить, чтобы он распаковывал и precomp архивы?

shidow 24-03-2011 13:39 1642796

Проблема пропало только на половину. Устанавливается только одно доп ПО и в независимости поставить или нет галку в инстале она устанавливается((

insombia 24-03-2011 20:36 1643117

как вставить кнопки в инсталлятор красивые? я со скрипта Need for Speed™ Undercover.iss v 2.2 вставлял мне ошибки кидает

Gnom_aka_Lexander 24-03-2011 21:39 1643188

insombia, Шапка - Показать/скрыть: Справка, руководство, примеры: - Показать/скрыть: Ссылки на примеры скриптов: - Наложение изображений на стандартные кнопки

C783RPunk 25-03-2011 12:17 1643528

Здравствуйте, а как полностью отключить системное меню, то которое открывается при нажатии на иконку, расположенную в левой части заголовка окна (Восстановить, Переместить, Размер, Свернуть, Развернуть, Закрыть)?

insombia 25-03-2011 12:25 1643536

Цитата:

Цитата Лександер
insombia, Шапка - Показать/скрыть: Справка, руководство, примеры: - Показать/скрыть: Ссылки на примеры скриптов: - Наложение изображений на стандартные кнопки »

Пробывал не работает

Serega 25-03-2011 16:00 1643707

Здравствуйте, накидал скрипт для конвертирования строк в различные форматы:
ConvertString.iss

Код:

[Code]
{===============================================================================}
{ Script name: ConvertString.iss                                                }
{ Script version: 1.1                                                          }
{ Author: Serega, http://forum.oszone.net/member.php?userid=88670              }
{                                                                              }
{ Include this file in project.                                                }
{ Example:                                                                      }
{ #include "ConvertString.iss"                                                  }
{===============================================================================}
{ Rev 1.1  26.03.2011 22:36:43                                                  }
{  - fixed error is corrected at compilation on the expanded                  }
{    version from Restools;                                                    }
{  - function ClearBom is optimised.                                          }
{ Rev 1.0  25.03.2011 18:58:04 Create                                          }
{===============================================================================}
{                        Supported functions                                  }
{===============================================================================}
{  ANSI ->                                                                    }
{ function AnsiToUtf8(const SourceStr: string): string;                        }
{ function AnsiToUtf7(const SourceStr: string): string;                        }
{ function AnsiToUtf16(const SourceStr: string): string;                        }
{ function AnsiToDos(const SourceStr: string): string;                          }
{ function AnsiToKoi(const SourceStr: string): string;                          }
{ function AnsiToIso(const SourceStr: string): string;                          }
{ function AnsiToMac(const SourceStr: string): string;                          }
{  UTF-7 ->                                                                    }
{ function Utf7ToAnsi(const SourceStr: string): string;                        }
{ function Utf7ToUtf8(const SourceStr: string): string;                        }
{ function Utf7ToUtf16(const SourceStr: string): string;                        }
{ function Utf7ToDos(const SourceStr: string): string;                          }
{ function Utf7ToKoi(const SourceStr: string): string;                          }
{ function Utf7ToIso(const SourceStr: string): string;                          }
{ function Utf7ToMac(const SourceStr: string): string;                          }
{  UTF-8 ->                                                                    }
{ function Utf8ToAnsi(const SourceStr: string): string;                        }
{ function Utf8ToUtf7(const SourceStr: string): string;                        }
{ function Utf8ToUtf16(const SourceStr: string): string;                        }
{ function Utf8ToDos(const SourceStr: string): string;                          }
{ function Utf8ToKoi(const SourceStr: string): string;                          }
{ function Utf8ToIso(const SourceStr: string): string;                          }
{ function Utf8ToMac(const SourceStr: string): string;                          }
{  UTF-16 (Unicode) ->                                                        }
{ function Utf16ToAnsi(const SourceStr: string): string;                        }
{ function Utf16ToUtf7(const SourceStr: string): string;                        }
{ function Utf16ToUtf8(const SourceStr: string): string;                        }
{ function Utf16ToDos(const SourceStr: string): string;                        }
{ function Utf16ToKoi(const SourceStr: string): string;                        }
{ function Utf16ToIso(const SourceStr: string): string;                        }
{ function Utf16ToMac(const SourceStr: string): string;                        }
{  DOS (cp866) ->                                                              }
{ function DosToAnsi(const SourceStr: string): string;                          }
{ function DosToUtf7(const SourceStr: string): string;                          }
{ function DosToUtf8(const SourceStr: string): string;                          }
{ function DosToUtf16(const SourceStr: string): string;                        }
{ function DosToKoi(const SourceStr: string): string;                          }
{ function DosToIso(const SourceStr: string): string;                          }
{ function DosToMac(const SourceStr: string): string;                          }
{  KOI (KOI-8) ->                                                              }
{ function KoiToAnsi(const SourceStr: string): string;                          }
{ function KoiToUtf7(const SourceStr: string): string;                          }
{ function KoiToUtf8(const SourceStr: string): string;                          }
{ function KoiToUtf16(const SourceStr: string): string;                        }
{ function KoiToDos(const SourceStr: string): string;                          }
{ function KoiToIso(const SourceStr: string): string;                          }
{ function KoiToMac(const SourceStr: string): string;                          }
{  ISO (iso-8859) ->                                                          }
{ function IsoToAnsi(const SourceStr: string): string;                          }
{ function IsoToUtf7(const SourceStr: string): string;                          }
{ function IsoToUtf8(const SourceStr: string): string;                          }
{ function IsoToUtf16(const SourceStr: string): string;                        }
{ function IsoToDos(const SourceStr: string): string;                          }
{ function IsoToKoi(const SourceStr: string): string;                          }
{ function IsoToMac(const SourceStr: string): string;                          }
{  MAC ->                                                                      }
{ function MacToAnsi(const SourceStr: string): string;                          }
{ function MacToUtf7(const SourceStr: string): string;                          }
{ function MacToUtf8(const SourceStr: string): string;                          }
{ function MacToUtf16(const SourceStr: string): string;                        }
{ function MacToDos(const SourceStr: string): string;                          }
{ function MacToKoi(const SourceStr: string): string;                          }
{ function MacToIso(const SourceStr: string): string;                          }
{===============================================================================}
{===============================================================================}
#if Ver < 84084736
type
  PAnsiChar = PChar;  // Required for Inno Setup 5.3.0 and lower
#endif

const
  Utf8Bom  = #$EF#$BB#$BF;
  Utf16Bom  = #$FF#$FE;

  CP_ACP    = 0;            { default to ANSI code page }
  CP_OEMCP  = 1;            { default to OEM  code page }
  CP_MACCP  = 2;            { default to MAC  code page }
  CP_UTF16  = 1200;          { UTF-16 translation }
  CP_ISO    = 28595;        { iso-8859-5 translation }
  CP_KOI8  = 20866;        { KOI-8 translation }
  CP_UTF7  = 65000;        { UTF-7 translation }
  CP_UTF8  = 65001;        { UTF-8 translation }

function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD;
  lpMultiByteStr: PAnsiChar; cbMultiByte: Integer;
  lpWideCharStr: PAnsiChar; cchWideChar: Integer): Longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD;
  lpWideCharStr: PAnsiChar; cchWideChar: Integer; lpMultiByteStr: PAnsiChar;
  cbMultiByte: Integer; lpDefaultChar: Integer; lpUsedDefaultChar: Integer): Longint;
    external 'WideCharToMultiByte@kernel32.dll stdcall';

function WideStringToString(const wStr: string; codePage: Word): string;
var
  len: Integer;
begin
  len := WideCharToMultiByte(codePage, 0, wStr, -1, '', 0, 0, 0);
  if len > 0 then
    begin
      SetLength(Result, len-1);
      WideCharToMultiByte(codePage, 0, wStr, -1, Result, Length(Result), 0, 0);
    end;
end;

function StringToWideString(const aStr: string; codePage: Word): string;
var
  len: Integer;
begin
  len := MultiByteToWideChar(codePage, 0, aStr, -1, '', 0);
  if len > 0 then
    begin
      SetLength(Result, (len*2)-2);
      MultiByteToWideChar(codePage, 0, aStr, -1, Result, Length(Result));
    end;
end;

function ClearBom(const s, sig: string): string;
var
  i, n, len: Integer;
begin
  Result := s;
  len := Length(sig);
  n := 0;
  if (len > 0) and (Length(Result) > len) then
    repeat
      for i := 1 to len do
        if Result[1] = sig[i] then
          begin
            Delete(Result, 1, 1);
            Break;
          end;
      n := n + 1;
    until (n = len) or (Result = '');
end;
{===============================================================================}
{===============================================================================}
{  ANSI ->                                                                    }
{===============================================================================}
function AnsiToUtf8(const SourceStr: string): string;
begin
  Result := Utf8Bom + WideStringToString(StringToWideString(SourceStr, CP_ACP), CP_UTF8);
end;

function AnsiToUtf7(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_ACP), CP_UTF7);
end;

function AnsiToUtf16(const SourceStr: string): string;
begin
  Result := Utf16Bom + StringToWideString(SourceStr, CP_ACP);
end;

function AnsiToDos(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_ACP), CP_OEMCP);
end;

function AnsiToKoi(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_ACP), CP_KOI8);
end;

function AnsiToIso(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_ACP), CP_ISO);
end;

function AnsiToMac(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_ACP), CP_MACCP);
end;
{===============================================================================}
{  UTF-7 ->                                                                    }
{===============================================================================}
function Utf7ToAnsi(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_UTF7), CP_ACP);
end;

function Utf7ToUtf8(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_UTF7), CP_UTF8);
end;

function Utf7ToUtf16(const SourceStr: string): string;
begin
  Result := StringToWideString(SourceStr, CP_UTF7);
end;

function Utf7ToDos(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_UTF7), CP_OEMCP);
end;

function Utf7ToKoi(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_UTF7), CP_KOI8);
end;

function Utf7ToIso(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_UTF7), CP_ISO);
end;

function Utf7ToMac(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_UTF7), CP_MACCP);
end;
{===============================================================================}
{  UTF-8 ->                                                                    }
{===============================================================================}
function ConvertUtf8(const SourceStr: string; codePage: Word): string;
var
  wStr: string;
begin
  try
    wStr := ClearBom(SourceStr, Utf8Bom);
    Result := WideStringToString(StringToWideString(wStr, CP_UTF8), codePage);
  finally
    SetLength(wStr, 0);
  end;
end;

function Utf8ToAnsi(const SourceStr: string): string;
begin
  Result := ConvertUtf8(SourceStr, CP_ACP);
end;

function Utf8ToUtf7(const SourceStr: string): string;
begin
  Result := ConvertUtf8(SourceStr, CP_UTF7);
end;

function Utf8ToUtf16(const SourceStr: string): string;
begin
  Result := StringToWideString(SourceStr, CP_UTF8);
end;

function Utf8ToDos(const SourceStr: string): string;
begin
  Result := ConvertUtf8(SourceStr, CP_OEMCP);
end;

function Utf8ToKoi(const SourceStr: string): string;
begin
  Result := ConvertUtf8(SourceStr, CP_KOI8);
end;

function Utf8ToIso(const SourceStr: string): string;
begin
  Result := ConvertUtf8(SourceStr, CP_ISO);
end;

function Utf8ToMac(const SourceStr: string): string;
begin
  Result := ConvertUtf8(SourceStr, CP_MACCP);
end;
{===============================================================================}
{  UTF-16 (Unicode) ->                                                        }
{===============================================================================}
function ConvertUtf16(const SourceStr: string; codePage: Word): string;
var
  wStr: string;
begin
  try
    wStr := ClearBom(SourceStr, Utf16Bom);
    Result := WideStringToString(wStr, codePage);
  finally
    SetLength(wStr, 0);
  end;
end;

function Utf16ToAnsi(const SourceStr: string): string;
begin
  Result := ConvertUtf16(SourceStr, CP_ACP);
end;

function Utf16ToUtf7(const SourceStr: string): string;
begin
  Result := ConvertUtf16(SourceStr, CP_UTF7);
end;

function Utf16ToUtf8(const SourceStr: string): string;
begin
  Result := Utf8Bom + ConvertUtf16(SourceStr, CP_UTF8);
end;

function Utf16ToDos(const SourceStr: string): string;
begin
  Result := ConvertUtf16(SourceStr, CP_OEMCP);
end;

function Utf16ToKoi(const SourceStr: string): string;
begin
  Result := ConvertUtf16(SourceStr, CP_KOI8);
end;

function Utf16ToIso(const SourceStr: string): string;
begin
  Result := ConvertUtf16(SourceStr, CP_ISO);
end;

function Utf16ToMac(const SourceStr: string): string;
begin
  Result := ConvertUtf16(SourceStr, CP_MACCP);
end;
{===============================================================================}
{  DOS (cp866) ->                                                              }
{===============================================================================}
function DosToAnsi(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_OEMCP), CP_ACP);
end;

function DosToUtf7(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_OEMCP), CP_UTF7);
end;

function DosToUtf8(const SourceStr: string): string;
begin
  Result := Utf8Bom + WideStringToString(StringToWideString(SourceStr, CP_OEMCP), CP_UTF8);
end;

function DosToUtf16(const SourceStr: string): string;
begin
  Result := Utf16Bom + StringToWideString(SourceStr, CP_OEMCP);
end;

function DosToKoi(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_OEMCP), CP_KOI8);
end;

function DosToIso(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_OEMCP), CP_ISO);
end;

function DosToMac(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_OEMCP), CP_MACCP);
end;
{===============================================================================}
{  KOI (KOI-8) ->                                                              }
{===============================================================================}
function KoiToAnsi(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_KOI8), CP_ACP);
end;

function KoiToUtf7(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_KOI8), CP_UTF7);
end;

function KoiToUtf8(const SourceStr: string): string;
begin
  Result := Utf8Bom + WideStringToString(StringToWideString(SourceStr, CP_KOI8), CP_UTF8);
end;

function KoiToUtf16(const SourceStr: string): string;
begin
  Result := Utf16Bom + StringToWideString(SourceStr, CP_KOI8);
end;

function KoiToDos(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_KOI8), CP_OEMCP);
end;

function KoiToIso(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_KOI8), CP_ISO);
end;

function KoiToMac(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_KOI8), CP_MACCP);
end;
{===============================================================================}
{  ISO (iso-8859) ->                                                          }
{===============================================================================}
function IsoToAnsi(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_ISO), CP_ACP);
end;

function IsoToUtf7(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_ISO), CP_UTF7);
end;

function IsoToUtf8(const SourceStr: string): string;
begin
  Result := Utf8Bom + WideStringToString(StringToWideString(SourceStr, CP_ISO), CP_UTF8);
end;

function IsoToUtf16(const SourceStr: string): string;
begin
  Result := Utf16Bom + StringToWideString(SourceStr, CP_ISO);
end;

function IsoToDos(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_ISO), CP_OEMCP);
end;

function IsoToKoi(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_ISO), CP_KOI8);
end;

function IsoToMac(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_ISO), CP_MACCP);
end;
{===============================================================================}
{  MAC ->                                                                      }
{===============================================================================}
function MacToAnsi(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_MACCP), CP_ACP);
end;

function MacToUtf7(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_MACCP), CP_UTF7);
end;

function MacToUtf8(const SourceStr: string): string;
begin
  Result := Utf8Bom + WideStringToString(StringToWideString(SourceStr, CP_MACCP), CP_UTF8);
end;

function MacToUtf16(const SourceStr: string): string;
begin
  Result := Utf16Bom + StringToWideString(SourceStr, CP_MACCP);
end;

function MacToDos(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_MACCP), CP_OEMCP);
end;

function MacToKoi(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_MACCP), CP_KOI8);
end;

function MacToIso(const SourceStr: string): string;
begin
  Result := WideStringToString(StringToWideString(SourceStr, CP_MACCP), CP_ISO);
end;
{===============================================================================}


Serega 25-03-2011 16:16 1643722

Цитата:

Цитата C783RPunk
как полностью отключить системное меню »

Код:

procedure InitializeWizard();
begin
  WizardForm.BorderStyle := bsDialog;
end;


El Sanchez 25-03-2011 17:15 1643761

Цитата:

Цитата ryabis
Как в скрипте вызвать функцию из WinAPI? Функция GetFileVersionInfo.
Знаю, что в Делфях это делается через подключения в uses модуля Windows.
Как это сделать в InnoSetup??? »

ryabis, если еще актуально определение полей версии файла, то вот вариант:
Код:

[Code]
#ifdef UNICODE
  #define A "W"
#else
  #define A "A"
#endif
function GetFileVersionInfoSize(lptstrFilename: String; lpdwHandle: Integer): Integer;
external 'GetFileVersionInfoSize{#A}@version.dll stdcall delayload';

function GetFileVersionInfo(lptstrFilename: String; dwHandle, dwLen: Integer; var lpData: Byte): Boolean;
external 'GetFileVersionInfo{#A}@version.dll stdcall delayload';

function VerQueryValue(var pBlock: Byte; lpSubBlock: String; var lplpBuffer: DWord; var puLen: Integer): Boolean;
external 'VerQueryValue{#A}@version.dll stdcall delayload';

function GetFileVerInfo(FileName, VerName: String): String;
//VerName:
//Comments, LegalCopyright, CompanyName, FileDescription, FileVersion, ProductVersion,
//InternalName, LegalTrademarks, OriginalFilename, ProductName, PrivateBuild, SpecialBuild
var
  dwLen, puLen, i: Integer;
  lpFileVerInfo: array of Byte;
  lplpBufferCP, lplpBufferVN: DWord;
  LangCodepage: String;
begin
  Result := '';
  if FileExists(FileName) then
  begin
    dwLen := GetFileVersionInfoSize(FileName, 0);
    if dwLen > 0 then
    begin
      SetArrayLength(lpFileVerInfo, dwLen);
      if GetFileVersionInfo(FileName, 0, dwLen, lpFileVerInfo[0]) then
      begin
        if VerQueryValue(lpFileVerInfo[0], '\VarFileInfo\Translation', lplpBufferCP, puLen) then
        begin
          LangCodepage := Format('%.2x%.2x%.2x%.2x', [lpFileVerInfo[(dwLen div 2)-5], lpFileVerInfo[(dwLen div 2)-6], lpFileVerInfo[(dwLen div 2)-3], lpFileVerInfo[(dwLen div 2)-4]]);
          if VerQueryValue(lpFileVerInfo[0], Format('\%s\%s\%s', ['StringFileInfo', LangCodepage, VerName]), lplpBufferVN, puLen) then
          begin
            i := (dwLen div 2) + lplpBufferVN - lplpBufferCP - 6;
            repeat
              if lpFileVerInfo[i] <> 0 then
              begin
                SetLength(Result, Length(Result)+1);
                Result[Length(Result)] := Chr(lpFileVerInfo[i]);
              end;
            i := i + 1;
            #ifdef UNICODE
            until i > (dwLen div 2) + lplpBufferVN - lplpBufferCP - 8 + puLen;
            #else
            until lpFileVerInfo[i] = 0;
            #endif
          end;
        end;
      end;
    end;
  end;
end;


C783RPunk 25-03-2011 17:17 1643762

Serega, спс:)
А подскажите пожалуйста еще, как на странице "приветствие установки программы" и "завершение установки" упорядочить текст по центру (сверху-снизу и по бокам), для стандартного скина.

EvilAlex 25-03-2011 22:20 1643991

и как сделать так чтобы, файлы сетапа не в куче в папке с игрой были, а в папке сетап например ...

Так:
игра/игровые файлы
игра/игровые файлы
игра/игровые файлы
игра/сетап/файлы сетапа

А то у меня так:
игра/игровые файлы
игра/игровые файлы
игра/игровые файлы
игра/файлы сетапа

insombia 25-03-2011 23:03 1644013

Цитата:

Цитата EvilAlex
были, а в папке сетап например ... »

Цитата:

Цитата EvilAlex
и как сделать так чтобы, файлы сетапа не в куче в папке с игрой были, а в папке сетап например ...
Так:
игра/игровые файлы
игра/игровые файлы
игра/игровые файлы
игра/сетап/файлы сетапа
А то у меня так:
игра/игровые файлы
игра/игровые файлы
игра/игровые файлы
игра/файлы сетапа »

Если я тебя правильно понял то в настройках istool в команде опции-выходной каталог можно выбрать папку в которую сохранять установочные файлы

EvilAlex 26-03-2011 10:02 1644176

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

Как сейчас у меня:
http://i013.radikal.ru/1103/7c/6c07824867fd.jpg

Как хотелось бы:
http://s004.radikal.ru/i205/1103/94/5fc99cbb20ff.jpg

nik1967 26-03-2011 10:52 1644189

EvilAlex,
Эээ.. А позвольте задать вопрос: нафига временные файлы кидать в {app}?

insombia 26-03-2011 10:53 1644191

кто знает как сделать чтобы при установке писало осталось примерно 5 мин до конца установки прошло 10 мин установки?

shidow 26-03-2011 11:04 1644195

Как сделать чтоб ярлык не создавался в папке. Например оригинальный ярлык находится в ...папка/bin
Как сделать чтоб ярлык был ток в ...папка/bin а в папке его не было?

EvilAlex 26-03-2011 11:15 1644200

nik1967, потомучто они не временные, они остаются почему то ...

duxa 26-03-2011 20:14 1644548

EvilAlex, Так пропиши:
Source: файлик; DestDir: {tmp}; Flags: dontcopy
по надобности:
ExtractTemporaryFile('файлик')
и не понадобиться твоя "сортировка"...

EvilAlex 26-03-2011 21:35 1644608

Спс всем, разобрался, заработало ...

Gnom_aka_Lexander 27-03-2011 15:22 1644975

Не знаю, мож кому полезно будет, собрал пачку скинов (более 600 штук) Скачать

Подскажите пожалуйста, как в Caption поместить путь, куда была установлена программа? {#SetupSetting("DefaultDirName")} - не катит, так и напишет - {pf}\моя программа.

R.i.m.s.k.y. 27-03-2011 18:02 1645067

попробуй ExpandConstant('{#SetupSetting("DefaultDirName")}')

Gnom_aka_Lexander 27-03-2011 18:05 1645071

Я-же написал:
Цитата:

Цитата Лександер
{#SetupSetting("DefaultDirName")} - не катит, так и напишет - {pf}\моя программа. »

:) а добавка ExpandConstant вызывает ошибку синтаксиса, нужно както прочитать путь установки, куда была установлена программа, а не куда должна быть установлена :)

C783RPunk 27-03-2011 19:17 1645102

Помогите пожалуйста, не могу это осуществить, несколько форумов обрыл, но ответа не нашел :(.



1. При переходе на страницу Выбора компонентов автоматически выбераются Классические модели в 2-х группах, как отключить автоматический выбор компонентов?
2. Как убрать ячейки и оставить только надпись?
3. Как убрать размер компонентов?
4. И как сделать кнопку Далее активной только при выборе 2-х компонентов (1 компонент оружия и 1 компонент игроков), а то у меня получается так, что выбераешь только компонент оружия или компонент игроков и кнопка Далее становится активной?
5. И еще как на странице "Приветствие установки программы" и "Завершение установки" упорядочить текст по центру.

Вот мой скрипт
читать дальше »
Код:

[Setup]
[Setup]
SourceDir=.
OutputDir=Setup
AppName=Counter-Strike HD
AppVerName=Counter-Strike HD
AppVersion=1.6.0.0
VersionInfoVersion=4.5.5.4
AppPublisher=Created by C783RPnuk
AppCopyright=C783RPnuk
AppPublisherURL=http://forum.ipcom.lg.ua/
AppSupportURL=http://forum.ipcom.lg.ua/
AppUpdatesURL=http://forum.ipcom.lg.ua/
DefaultDirName=C:\Games\Counter-Strike HD
DefaultGroupName=Counter-Strike HD
InfoBeforeFile=C:\Users\C783RPunk\Desktop\Prog\about.txt
InfoAfterFile=C:\Users\C783RPunk\Desktop\Prog\README.txt
OutputBaseFilename=Counter-Strike HD
WizardImageFile=C:\Users\C783RPunk\Desktop\ICO\big.bmp
WizardSmallImageFile=C:\Users\C783RPunk\Desktop\ICO\small.bmp
SetupIconFile=C:\Users\C783RPunk\Desktop\ICO\install.ico
AllowNoIcons=yes
DisableProgramGroupPage=yes
AlwaysShowGroupOnReadyPage=yes
DisableReadyMemo=yes
DisableReadyPage=yes
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=lzma/normal

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

[CustomMessages]
russian.FreeSpace=Доступно места на диске:
russian.NeedSpace=Требуется места на диске:
russian.hour= часов
russian.min= мин
russian.sec= сек

[Types]
Name: "full"; Description: "Полная установка"; Flags: iscustom

[Components]
Name: g0; Description: "МОДЕЛИ ОРУЖИЯ"; Types: full; Flags: disablenouninstallwarning checkablealone fixed
Name: g0\c1; Description: HD; Types: full; Flags: exclusive
Name: g0\c2; Description: Next Generation; Types: full; Flags: exclusive
Name: g0\c3; Description: New Era; Types: full; Flags: exclusive
Name: g0\c4; Description: "Классические"; Types: full; Flags: exclusive

Name: g1; Description: "МОДЕЛИ ИГРОКОВ"; Types: full; Flags: disablenouninstallwarning checkablealone fixed
Name: g1\c1; Description: HD; Types: full; Flags: exclusive
Name: g1\c2; Description: Source; Types: full; Flags: exclusive
Name: g1\c3; Description: Steam; Types: full; Flags: exclusive
Name: g1\c4; Description: "Классические"; Types: full; Flags: exclusive

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"

[Files]
Source: C:\Users\C783RPunk\Desktop\ICO\papka.bmp; DestDir: {tmp}; Flags: dontcopy

Source: ISSkin.dll; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
Source: steam.cjstyles; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
Source: compiler:innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

Source: "C:\Users\C783RPunk\Desktop\Prog\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension external

Source: "C:\Users\C783RPunk\Desktop\Prog\BONUS\Weapons\HD\*"; DestDir: "{app}\cstrike\models\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c1
Source: "C:\Users\C783RPunk\Desktop\Prog\BONUS\Weapons\Next Generation\*"; DestDir: "{app}\cstrike\models\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c2
Source: "C:\Users\C783RPunk\Desktop\Prog\BONUS\Sound\Weapons\Next Generation\*"; DestDir: "{app}\cstrike\sound\weapons\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c2
Source: "C:\Users\C783RPunk\Desktop\Prog\BONUS\Weapons\New Era\*"; DestDir: "{app}\cstrike\models\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c3
Source: "C:\Users\C783RPunk\Desktop\Prog\BONUS\Weapons\Classic\*"; DestDir: "{app}\cstrike\models\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c4

Source: "C:\Users\C783RPunk\Desktop\Prog\BONUS\Players\HD\*"; DestDir: "{app}\cstrike\models\player\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g1\c1
Source: "C:\Users\C783RPunk\Desktop\Prog\BONUS\Players\Source\*"; DestDir: "{app}\cstrike\models\player\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g1\c2
Source: "C:\Users\C783RPunk\Desktop\Prog\BONUS\Players\Steam\*"; DestDir: "{app}\cstrike\models\player\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g1\c3
Source: "C:\Users\C783RPunk\Desktop\Prog\BONUS\Players\Classic\*"; DestDir: "{app}\cstrike\models\player\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g1\c4

[Icons]
Name: "{group}\{cm:LaunchProgram,Counter-Strike HD}"; Filename: "{app}\CSHD.exe"; WorkingDir: "{app}";
Name: "{userdesktop}\Counter-Strike HD"; Filename: "{app}\CSHD.exe"; WorkingDir: "{app}"; Tasks: desktopicon;
Name: "{group}\{cm:UninstallProgram,Counter-Strike HD}"; Filename: "{uninstallexe}"

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

(Code)
const
  dURL=2;
  MF_DELETE = $200;
 
var
  URLLabel,URLLabelShadow:TLabel;

function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure LoadSkin(lpszPath: String; lpszIniFileName: String ); external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure LoadSkinA(lpszPath: String; lpszIniFileName: String ); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function AppendMenu(hMenu: HMENU; uFlags, uIDNewItem: UINT; lpNewItem: PChar): BOOL; external 'AppendMenuA@user32.dll stdcall';
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU; external 'GetSystemMenu@user32.dll stdcall';

procedure URLLabelClick(Sender: TObject);
var
  ErrorCode:integer;
begin
  ShellExec('open','Created by C783RPnuk','','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
end;

procedure URLLabelMouseDown(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
  URLLabel.Top:=URLLabel.Top+dURL;
  URLLabel.Left:=URLLabel.Left+dURL;
  URLLabel.Font.Style:=URLLabel.Font.Style-[fsUnderline];
  URLLabel.Font.Color:=$50B5C4;
  URLLabelShadow.Visible:=False;
end;

procedure URLLabelMouseUp(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
  URLLabel.Top:=URLLabel.Top-dURL;
  URLLabel.Left:=URLLabel.Left-dURL;
  URLLabel.Font.Style:=URLLabel.Font.Style-[fsUnderline];
  URLLabel.Font.Color:=$708A7A;
  URLLabelShadow.Visible:=True;
end;

var
  RestoreDir: TButton;

procedure ButtonOnClick(Sender: TObject);
begin
  WizardForm.DirEdit.Text:= ExpandConstant('C:\Games\Counter-Strike HD');
end;

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

var
  StartInstall: Integer;
  TimeLabel: TLabel;
  TimerID: Longword;

function GetTickCount: DWord; external 'GetTickCount@kernel32';
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 cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
    if detail then {hh: mm:ss format}
        Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
    else if Ticks/3600 >= 1000 then {more than hour}
        Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
    else if Ticks/60 >= 1000 then {1..60 minutes}
        Result:= IntToStr(Ticks/60000) +m+' '+ IntToStr(Ticks/1000 - Ticks/1000/60*60) +s
    else Result:= Format('%.1n', [Abs(Ticks/1000)]) +s {less than one minute}
End;

procedure GetTime(HandleW, Msg, idEvent, TimeSys: LongWord);
var Remaining: Integer;
begin
with WizardForm.ProgressGauge do begin
  if position > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position))
    TimeLabel.Caption:= 'Подождите... ' + TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)
    if (Remaining = 0) then TimeLabel.Caption:= 'Подождите... '
  end;
end;

var
 NeedSpaceLabel,FreeSpaceLabel: TLabel;
 FreeMB, TotalMB: Cardinal;
 SizeStr: String;
 SizeInt: Integer;
 SymbolNumber: Integer;

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;

function GetSize(): Integer;
begin
  SizeStr:= WizardForm.DiskSpaceLabel.Caption;
for SymbolNumber:= 97 to 122 do begin
while (Pos(Chr(SymbolNumber), SizeStr) > 0) do Delete(SizeStr, Pos(Chr(SymbolNumber), SizeStr),1);
while (Pos( AnsiUppercase(Chr(SymbolNumber)), SizeStr) > 0) do Delete(SizeStr, Pos( AnsiUppercase(Chr(SymbolNumber)), SizeStr),1); end ;
for SymbolNumber:= 192 to 255 do begin
while (Pos(Chr(SymbolNumber), SizeStr) > 0) do Delete(SizeStr, Pos(Chr(SymbolNumber), SizeStr),1); end;
while (Pos('.', SizeStr) > 0) do Delete(SizeStr, Pos('.', SizeStr), 1)
  Delete(SizeStr, Pos(',', SizeStr), 5)
  Result:= StrToInt(Trim(SizeStr));
end;

function CompareNum(FirstNum, SecondNum: Integer): Boolean;
begin
 if FirstNum < SecondNum then Result:= False else Result:= True;
end;

Function MbOrTb( Byte: Extended): String ;
begin
if Byte < 1024 then Result:= NumToStr(Byte) + ' Мб else
  if Byte/1024 < 1024 then Result:= NumToStr(round(Byte/1024*100)/100) + ' Гб else
    Result:= NumToStr(round((Byte/(1024*1024))*100)/100) + ' Тб
end;

procedure GetFreeSpaceCaption(Sender: TObject);
var Path: String;
begin
  Path := ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
  FreeSpaceLabel.Caption:= ExpandConstant('{cm:FreeSpace} ') + MbOrTb(FreeMB)
  NeedSpaceLabel.Caption := ExpandConstant('{cm:NeedSpace} ') + MbOrTb(SizeInt)
if WizardForm.CurPageID = wpSelectDir then begin
  WizardForm.NextButton.Enabled:= CompareNum(FreeMB, SizeInt)
end;
end;

procedure ComponentOnClick(Sender: TObject);
begin
if WizardSelectedComponents(False) = '' then
WizardForm.NextButton.Enabled:= False
else WizardForm.NextButton.Enabled:= True;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep = ssInstall then
  begin                                                                                     
    StartInstall:= GetTickCount
    TimerID:= SetTimer(0,0, 500, WrapTimerProc(@GetTime, 4))
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
    begin
if CurPageID = wpSelectDir then begin
  GetFreeSpaceCaption(nil)
end;
end;

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('steam.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\steam.cjstyles'), '');
  Result:= true
end;

function InitializeUninstall(): Boolean;
begin
  FileCopy(ExpandConstant('{app}\isskin.dll'), ExpandConstant('{tmp}\isskin.dll'), False);
  FileCopy(ExpandConstant('{app}\steam.cjstyles'), ExpandConstant('{tmp}\steam.cjstyles'), False);
  LoadSkinA(ExpandConstant('{tmp}\steam.cjstyles'), '');
  Result:=True;
end;

procedure InitializeWizard();
begin
  URLLabelShadow:=TLabel.Create(WizardForm);
  with URLLabelShadow do begin
    Top:=ScaleY(331);
    Left:=ScaleX(25);
    Caption:='Created by C783RPnuk';
    AutoSize:=True;
    Parent:=WizardForm;
    Transparent:=True;
    Font.Color:=$041207;
    Font.Size:=9;
    Font.Style:=Font.Style+[fsBold];
  end;
  URLLabel:=TLabel.Create(WizardForm);
  with URLLabel do begin
    Top:=ScaleY(331)-dURL;
    Left:=ScaleX(25)-dURL;
    Caption:='Created by C783RPnuk';
    AutoSize:=True;
    Parent:=WizardForm;
    Cursor:=crHand;
    Transparent:=True;
    Font.Color:=$708A7A;
    Font.Size:=9;
    Font.Style:=Font.Style+[fsBold];
    BringToFront;
    OnClick:=@URLLabelClick;
    OnMouseDown:=@URLLabelMouseDown;
    OnMouseUp:=@URLLabelMouseUp;
  end;
begin
  RestoreDir:= TButton.Create(WizardForm);
  RestoreDir.Width := WizardForm.DirBrowseButton.Width;
  RestoreDir.Height := WizardForm.DirBrowseButton.Height;
  RestoreDir.Top := WizardForm.DirBrowseButton.Top + RestoreDir.Height + ScaleX(10);
  RestoreDir.Left := WizardForm.DirBrowseButton.Left;
  RestoreDir.OnClick := @ButtonOnClick;
  RestoreDir.Parent := WizardForm.SelectDirPage;
  RestoreDir.Visible:= True;
  RestoreDir.Caption := 'Сбросить';
end;
begin
  TimeLabel:= TLabel.Create(WizardForm)
  TimeLabel.SetBounds(ScaleX(0), ScaleY(80), ScaleX(457), ScaleY(20));
  TimeLabel.AutoSize:= False
  TimeLabel.Transparent:= True;
  TimeLabel.Parent:= WizardForm.InstallingPage;
end;
begin
  AppendMenu(GetSystemMenu(Wizardform.Handle, True), MF_DELETE, 0, SetupMessage(msgAboutSetupMenuItem));
end;
begin
  WizardForm.DiskSpaceLabel.Hide;
#ifdef NeedSize
  SizeInt:= {#NeedSize}
#else
  SizeInt:= GetSize;
#endif

  NeedSpaceLabel := TLabel.Create(WizardForm);
  NeedSpaceLabel.SetBounds(ScaleX(0), ScaleY(198), ScaleX(209), ScaleY(13))
  NeedSpaceLabel.Parent := WizardForm.SelectDirPage;
  NeedSpaceLabel.Transparent:=true;

  FreeSpaceLabel := TLabel.Create(WizardForm);
  FreeSpaceLabel.SetBounds(ScaleX(0), ScaleY(216), ScaleX(209), ScaleY(13))
  FreeSpaceLabel.Parent := WizardForm.SelectDirPage;
  FreeSpaceLabel.Transparent:=true;

  WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;
end;
begin
  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;
begin
  WizardForm.BorderStyle := bsDialog;
end;
begin
  WizardForm.FileNameLabel.Visible:= False;
end;
begin
WizardForm.ComponentsList.OnClick := @ComponentOnClick;
end;
  WizardForm.TypesCombo.ItemIndex:=0;
  WizardForm.BeveledLabel.Enabled:=True;
  WizardForm.BeveledLabel.visible:=False;
  WizardForm.Bevel.visible:=False;
  WizardForm.Bevel1.visible:=False;
end;

procedure DeinitializeSetup;
begin
  ShowWindow(WizardForm.Handle,0);
  KillTimer(0, TimerID);
  UnloadSkin();
end;



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

Serega 27-03-2011 20:10 1645127

Цитата:

Цитата C783RPunk
как на странице "приветствие установки программы" и "завершение установки" упорядочить текст по центру (сверху-снизу и по бокам) »

Страница приветствия: WizardForm.WelcomeLabel1 и WizardForm.WelcomeLabel2;
Финальная страница: WizardForm.FinishedHeadingLabel и WizardForm.FinishedLabel.
Для каждого статика можете менять координаты Left, Top, Width, Height

Цитата:

Цитата Лександер
как в Caption поместить путь, куда была установлена программа? »

Можно несколькими способами, один из вариантов:
Код:

procedure InitializeWizard();
begin
  WizardForm.Caption := ExpandConstant('{reg:HKLM\' +
    'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1,InstallLocation|{pf}\My Program}');
end;


newmangor 27-03-2011 23:25 1645233

помогите пожалуйста с вопросом:

делаю репак игры, надо чтобы в конце инсталятора на странице установка завершена, помимо пояление значка запустить установленное приложение, появились иконки (что то вроде поставить голочку убрать) для установки дополнительного ПО для игры, таких как direct x и т.д и соответственно выбрав ее пользователь нажимает завершить и запускаются установочные файлы ?


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

gigabyte502 28-03-2011 00:14 1645266

newmangor, попробуй так:

в секцию [Run] добавь

FileName: {константа}\файл; Description: Описание; Flags: postinstall nowait skipifsilent; Tasks: ; Languages:

shidow 28-03-2011 10:37 1645441

newmangor
[Tasks]
Name: Redist; Description: Дополнительное программное обеспечение:;
Name: Redist\directx; Description: Обновить Microsoft DirectX; Flags: unchecked;
Name: Redist\visualc; Description: Установить Microsoft Visual C++ Redist; Flags: unchecked;
[Run]
Filename: {src}\Redist\DirectX\DXSETUP.exe; WorkingDir: {src}\Redist\DirectX\; Parameters: /silent; Tasks: Redist\directx; Flags: waituntilterminated;
Filename: {src}\Redist\VisualC++\vcredist_x86.exe; WorkingDir: {src}\Redist\VisualC++\; Parameters: /q; Tasks: Redist\visualc; Flags: waituntilterminated; Check: not IsWin64;
Filename: {src}\Redist\VisualC++\vcredist_x64.exe; WorkingDir: {src}\Redist\VisualC++\; Parameters: /q; Tasks: Redist\visualc; Flags: waituntilterminated; Check: IsWin64;

KURBIT 28-03-2011 12:00 1645499

Доброго времени суток у меня такой вопрос нужно разбить установку на два диска можно ли сделать это в Inno Setup или это делается при записи дисков

shidow 28-03-2011 18:15 1645817

Как сделать картинку на весь инсталл в последнем окне?

Gnom_aka_Lexander 28-03-2011 20:38 1645930

shidow,
Код:

procedure InitializeWizard();
begin
    WizardForm.WizardBitmapImage2.Width := WizardForm.Width;
end;


shidow 29-03-2011 12:13 1646303

Как исправить? http://i18.fastpic.ru/big/2011/0328/...f8ec3f4033.png
Вот секция код
читать дальше »

[_Code]
////// Кнопки \\\\\\
const
ButtonWidth = 80;
ButtonHeight = 23;

var
WizardLabel: TLabel;
ButtonPanel: array of TPanel;
ButtonImage: array of TBitmapImage;
ButtonLabel: array of TLabel;
UsedButtons: array of TButton;
ButtonsCount: Integer;

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}\Button.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 InitializeWizard2();
begin
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('button.bmp')
LoadButtonImage(WizardForm.BackButton)
LoadButtonImage(WizardForm.NextButton)
LoadButtonImage(WizardForm.CancelButton)
LoadButtonImage(WizardForm.DirBrowseButton)
LoadButtonImage(WizardForm.GroupBrowseButton)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButtons()
end;
const
////// Инстал черный \\\\\\
Color = $000000; // Общий цвет инсталлятора $000000 - чёрный

procedure InitializeWizard1();
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:=$100800;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.GroupEdit.Color:=$100800;
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.WelcomeLabel1.Font.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.Color:=clWhite;
WizardForm.FinishedHeadingLabel.Font.Color:=clWhite;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clWhite;
//Избавиться от разделительных полос сверху и снизу
WizardForm.Bevel.visible:=true; // Если не надо, то закомментировать
WizardForm.BeveledLabel.visible:=true; // Если не надо, то закомментировать
WizardForm.Bevel1.visible:=true; // Если не надо, то закомментировать
//Избавляемся от полосы прокрутки в меню Всё готово к установке
WizardForm.ReadyMemo.ScrollBars:= ssNone // Если не надо, то закомментировать
end;

////// Картинка в левый нижний угол \\\\\\
var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;

procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://shidow.com', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard3();
begin
ExtractTemporaryFile('logo.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end;
////// Папка \\\\\\
procedure InitializeWizard4();
begin
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 InitializeWizard5();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Font.Name := 'Tahoma'
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Font.Name := 'Tahoma'
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;
var
WelcomeLabel1, WelcomeLabel2: TLabel;
BmpFile: TBitmapImage;
////// Cтраница приветствия \\\\\\
procedure InitializeWizard6();
begin
ExtractTemporaryFile('fon.bmp');

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
BmpFile.SetBounds(0, 0, 497, 320);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.hide;
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
WelcomeLabel1.Alignment:=taCenter;
Left:= ScaleX(176);
Top:= ScaleY(66);
Width:= ScaleX(301);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Name:='Tahoma'
Font.Size:= 12;
Font.Color:=ClWhite
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
WelcomeLabel2.Alignment:=taCenter;
Top:= ScaleY(136);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(300);
AutoSize:= false;
WordWrap:= true;
Font.Color:=ClWhite
Font.Name:='Segoe UI'
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;
end;
procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
InitializeWizard6();
end;

R3Pa4eK 29-03-2011 17:44 1646592

Привет всем! Мне нужна ваша помощь:)

Скрипт переменной для отмены:
читать дальше »

function ISCreateProcessCallback(): boolean;
begin
Result := isexec_cancel;
begin
if not(isexec_cancel) then
begin
DelTree(ExpandConstant('{app}'), True, True, True);
end;
end;
end;


Это код для отмены, но он не работает:(. Если поставить Result :=true;, то все распаковывается на ура, но кнопка отмены не работает. А если оставить Result := isexec_cancel; , то кнопка отмены работает, но архивы не распаковываются. Вот весь скрипт:
читать дальше »

#define MyAppName "Fallout New Vegas"
#define MyAppVersion "1.0"
#define MyAppPublisher "Microsoft Game Studios"
#define vers1 "1.0.0.0"
#define MAX "2"


[Setup]
AppName={#MyAppName}
AppverName={#MyAppVersion}
AppVersion={#MyAppVersion}
VersionInfoVersion={#vers1}
VersionInfoTextVersion={#vers1}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
ShowTasksTreeLines=yes
OutputDir=.

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


[Files]
Source: "ISExec.dll"; DestDir: {tmp}; Flags: dontcopy
Source: "srep.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "arc.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "precomp.exe"; DestDir: "{tmp}"; Flags: dontcopy
Source: "packjpg_dll.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "zlib1.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "oggdec.exe"; DestDir: "{tmp}"; Flags: dontcopy

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

[code]
var
FLabel1, FLabel2, WLabel1, WLabel2, PageNameLabel, PageDescriptionLabel,NeedSpaceLabel,FreeSpaceLabel: TLabel;
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
LogoImage: TBitmapImage;

ProgressBar1:TNewProgressBar;

const SmallWidth = 497;


procedure InitializeWizard();
begin

ProgressBar1:=TNewProgressBar.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressBar1.Left := WizardForm.ProgressGauge.Left;
ProgressBar1.Top := WizardForm.ProgressGauge.Top;
ProgressBar1.min:=0;
ProgressBar1.Width :=WizardForm.ProgressGauge.Width;
ProgressBar1.Height := WizardForm.ProgressGauge.Height;
ProgressBar1.Parent := WizardForm.InstallingPage;
ProgressBar1.Max:= {#MAX};
end;
end;

var
isexec_cancel: boolean;
Cancel:integer;
type
TISCreateProcessCallback = function(): boolean;

function CreateProcess(callback: TISCreateProcessCallback; EXEName: PAnsiChar; DIRName: PAnsiChar; Show: boolean; Comfort: boolean; hWnd: HWND): BOOL; external 'isexec_cp@files:isexec.dll stdcall';

function ISCreateProcessCallback(): boolean;
begin
Result := true;
begin
if not(isexec_cancel) then
begin
DelTree(ExpandConstant('{app}'), True, True, True);
end;
end;
end;

var
Files: Array of String;
S: String;
n: Integer;

Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310;
Repeat k:= Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
End;

procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;

procedure FindAllFiles(_Dir: string; var _i: integer);
var
SearchRec: TFindRec;
begin
_Dir := AddBackslash(_Dir);
if FindFirst(_Dir + '*.*', SearchRec) then
begin
try
repeat
if (SearchRec.Name = '.') or (SearchRec.Name = '..') then
Continue;
if (SearchRec.Attributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then
FindAllFiles(_Dir + SearchRec.Name, _i)
else
_i := _i + 1;
until
not FindNext(SearchRec);
finally
FindClose(SearchRec);
end;
end;
end;

procedure Extract_ogg;
var ResultCode: integer; CurFile: String;
begin

FindFiles(ExpandConstant('{app}'), '*.ogg')
Files:= StringToArray(S, '|')

for n:=(GetArrayLength(Files)-1) downto 0 do begin

CurFile:= Files[n]
StringChange(CurFile, AddBackslash(ExtractFilePath(Files[n])), '')

if not(CreateProcess(@ISCreateProcessCallback, ExpandConstant('{tmp}\oggdec.exe') + ' ' + ' -Q '+ CurFile, AddBackslash(ExtractFilePath(Files[n])), FALSE, FALSE, WizardForm.Handle)) then exit;

DeleteFile(Files[n])
ProgressBar1.Position:= ProgressBar1.Position +1;
end;end;

procedure Extract_pcf;
var ResultCode: integer; CurFile: String;
begin

FindFiles(ExpandConstant('{app}'), '*.pcf')
Files:= StringToArray(S, '|')

for n:=(GetArrayLength(Files)-1) downto 0 do begin

CurFile:= Files[n]
StringChange(CurFile, AddBackslash(ExtractFilePath(Files[n])), '')

if not(CreateProcess(@ISCreateProcessCallback, ExpandConstant('{tmp}\precomp.exe') + ' ' + ' -r '+ CurFile, AddBackslash(ExtractFilePath(Files[n])), FALSE, FALSE, WizardForm.Handle)) then exit;

DeleteFile(Files[n])
ProgressBar1.Position:= ProgressBar1.Position +1;
end;end;

procedure Extract_Arc(arcArchName,arcDestDir: string);
begin

if not(CreateProcess(@ISCreateProcessCallback, ExpandConstant('{tmp}\Arc.dll') + ' ' + 'x '+AddQuotes(ExpandConstant(arcArchName))+' -y -dp'+AddQuotes(ExpandConstant(arcDestDir)), '', FALSE, FALSE, WizardForm.Handle)) then exit;
ProgressBar1.Position:= ProgressBar1.Position +10;
end;

procedure Extract_srep(srepArchName,srepDestDir: string);//srep
begin
if not(CreateProcess(@ISCreateProcessCallback, ExpandConstant('{tmp}\Srep.dll') + ' ' + '-d '+AddQuotes(ExpandConstant(srepArchName))+' '+AddQuotes(ExpandConstant(srepDestDir)),'', FALSE, FALSE, WizardForm.Handle)) then exit;
ProgressBar1.Position := ProgressBar1.Position+10;
end;

function PlsInsertNextDisk(num: integer; CheckedFile: string): string;
var Capt:string;
CheckedDir:string;
begin
if not(isexec_cancel) then exit;
CheckedFile:=ExpandConstant(CheckedFile);
if not FileExists(CheckedFile) then begin
Capt:=ExpandConstant('{cm:disk}')+' ¹%n'+ExpandConstant('{cm:disk2}');
StringChange(Capt, '%n', inttostr(num));
StringChange(Capt, '%f', ExtractFileName(CheckedFile));
MsgBox(Capt, mbInformation, MB_OK);
PlsInsertNextDisk(num, CheckedFile);
end;
Result := CheckedFile;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
i: integer;
tmp:integer;
begin

if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
ExtractTemporaryFile('arc.dll');
ExtractTemporaryFile('precomp.exe');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('Srep.dll');
ExtractTemporaryFile('oggdec.exe');
ProgressBar1.Position := ProgressBar1.Position+1;
end;

if CurStep = ssInstall then
begin
Extract_Arc('{src}\data.bin', '{app}');

//Extract_ogg

WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusRunProgram);
end;
end;

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

if CurPageID = wpInstalling then
begin
isexec_cancel := true;
end;
end;

Gnom_aka_Lexander 29-03-2011 20:38 1646708

R3Pa4eK, если я правильно понял, то у тебя там противоречие выходит:
if not(isexec_cancel) then {если не isexec_cancel то} DelTree(ExpandConstant('{app}'), True, True, True); - удалить содержимое папки {app}. попробуй убрать оттуда not.

R3Pa4eK 29-03-2011 20:42 1646710

Лександер, все равно не работает. Смотри, всё нормально распаковывается когда в function ISCreateProcessCallback(): boolean; вместо Result := isexec_cancel; стоит Result := true;, но при этом кнопка отмены не работает. Как сделать по другому хз.

duxa 29-03-2011 20:47 1646716

Чем вам кнопка отмены сдалась? Все равно откат пойдет после завершения какой-либо операции, а если киллить процесс при нажатии - извращение какое то.
---
Поправьте если мои взгляды не правильны.

R3Pa4eK 29-03-2011 20:53 1646718

Цитата:

Цитата duxa
Чем вам кнопка отмены сдалась? »

А как человек при распаковке отменит установку?

Gnom_aka_Lexander 29-03-2011 20:53 1646719

R3Pa4eK, сейчас скрипт посмотрю, но мне пока еще тяжело вникать, с isexec не работал, предпочитаю ИсДоне, кстати, там шагающий прогрессбар тоже можно реализовать, хочеш научу?

R3Pa4eK 29-03-2011 20:56 1646721

Цитата:

Цитата Лександер
хочеш научу »

Я то примерно знаю как, но никогда не пробовал. Покажи, если можешь.

Gnom_aka_Lexander 29-03-2011 21:07 1646726

R3Pa4eK, смотри
Код:

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'),  false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
где
0 - привязка к компонентам, задачам или просто каким-либо условиям.
0 - проценты, при значении 0 - вычисляются при первом прогоне, можно подставлять свои значения - сумма процентов всех этапов распаковки должна быть равна 100, тогда прогрессбар будет двигаться скачками.
С isexec.dll попозже поковыряюсь, сейчас пока некогда.

R3Pa4eK 29-03-2011 21:16 1646729

Лександер, спасибо. Так что с isexec.dll разобрался?

newmangor 30-03-2011 00:13 1646845

Ребят есть чудестная программа inno setup game scripting позваляющая за пару минут сделать свой давольно токи неплохой инсталятор за пару минут, обращаюсь к людям которые могут в эту программу дабавить некоторую опцию, которая может добавлять в инсталятор установку дополнительного по, наварганил скрипт пример ниже, всем спасибо надеюсь кто нибудь откликнется:

[Tasks]
Name: additional; Description: "Дополнительное ПО";
Name: additional\dx; Description: "Обновить DirectX"; Flags: unchecked
Name: additional\vcr86; Description: "Обновить библиотеки С++ х86"; Flags: unchecked;
Name: additional\vcr64; Description: "Обновить библиотеки С++ х64"; Flags: unchecked;


[Run]
Filename: {src}\Redist\vcredist_x86.exe; Flags: nowait; Tasks: additional\vcr86; Parameters: /q;
Filename: {src}\Redist\vcredist_x64.exe; Flags: nowait; Tasks: additional\vcr64; Parameters: /q;
Filename: {src}\Redist\DirectX\dxsetup.exe; Flags: nowait; Tasks: additional\dx; Parameters: /silent;

Скрипт естественно создан под мои пути файлов так что их вам придется поменять, скрипт подрузумевает, что библиотеки доп по будут находится непосредственно рядом с установочными файлами. Жирным шрифтом пометил те места где надо указать свои данные, для тех кто захочет использовать это в своих целях.

Попутно хотелбы спросить у народа пару вопросов может быть кто нибудь поможет:

1. При дабавление слайд шоу в инсталятор, прогресс бар установки становится уменьшенным в правом нижнем углу экрана, так вот вопрос может кто нибудь подсказать, как туда вместо слов распаковка, вставить оставшееся время до установки, а так же проценты выполнения (примерно так прогресс установки столькото% оставшееся время до завершения столько то часов,минут).
2. Как привязать слайд шоу к проценту установки
3. Как присобачить (и есть ли у кого рабочий вариант скрипта) для добавление в инсталятор проверку системных требований в начале установки.

Всем спасибо огромнейшее !!!

Devil Mehanik 30-03-2011 06:25 1646923

Всем доброго дня! Помогите мне пожалуйста сделать инсталлятор, с оформлением под айфон! Что для нужно и тп! Желательно со ссылачками)))
Извините, скрин не нашел

actavir 30-03-2011 07:57 1646968

Devil Mehanik, лови :) :) http://www.oszone.net/go.php?url=htt...ost.ru/4741045 А так то поиск по теме рулит)))))

Devil Mehanik 30-03-2011 09:15 1647006

actavir, ничего там нет! Он пишет "ошибка 404 - Вы запросили несуществующую страницу"
Че делать? К 17:00 должно быть сделано, а у меня еще скрипт не готов

Gnom_aka_Lexander 30-03-2011 09:25 1647017

newmangor, Издеваешся?
Цитата:

Цитата newmangor
бращаюсь к людям которые могут в эту программу дабавить некоторую опцию »

Ето к разработчику обращатся нужно.
Цитата:

Цитата newmangor
наварганил скрипт »

Ето в два клика делается программами istool либо innoide А три твоих вопроса есть в шапке темы.

Devil Mehanik, Поиск рулит, тебе-же сказали. я сразу два нашел. вот и вот.

Devil Mehanik 30-03-2011 11:47 1647129

Лександер, это я тоже находил, но по окончании компиляции файл просто не хочет открываться! Что мне делать?

LordSP 30-03-2011 12:04 1647139

Привет,у меня такая проблема,в сети натыкался на код,где можно на странице лицензионного соглашения,временно сделать неактивными кнопку "далее" и чебокс "принять...",пока не прокрутишь лицензию в окне,помогие пожалуйста. Спасибо!

mariolast 30-03-2011 12:14 1647144

Как то можно вытянуть MAC адрес в скрипте? Может есть сторонние dll-ки с функциями для этого?

R.i.m.s.k.y. 30-03-2011 12:51 1647169

Цитата:

Цитата mariolast
Как то можно вытянуть MAC адрес в скрипте? Может есть сторонние dll-ки с функциями для этого? »

присоединяюсь к вопросу, и до вопрос - айпишник как узнать?

Gnom_aka_Lexander 30-03-2011 13:19 1647192

На руборде отвечали, там можно и айпи взять, если я правильно понял.вот Там вроде сохраняется ини с параметрами сетевухи и из него считывается нужная информация.
Есть засада, если стоит роутер, то получим ip, который выдает роутер. Обойти можно подключившись к какому-нибудь сайту, например 2ip.ru, и считать ip с него.
Чуть позже:
Простенький инсталл, без претензий на высокие оценки, но достаточно симпатичный:) Метро-2

insombia 30-03-2011 16:50 1647300

у меня такая штука:вообщем когда я вставил картинку в инсталлятор то во первых как изменить цвет текста с черного на белый
во вторых как сделать чтобы дополнительные задачи типа directx показывались здесь http://i19.fastpic.ru/big/2011/0330/...f573b0a54f.jpg то сверху пишет какие задачи нужно выполнить а они не отображаются

LordSP 30-03-2011 17:04 1647308

А мне поможете с лицензией?

Gnom_aka_Lexander 30-03-2011 17:14 1647315

insombia,
Код:

procedure InitializeWizard();
  begin
    WizardForm.TasksList.Left := ScaleX(40);
    WizardForm.TasksList.Top := ScaleY(117);
    WizardForm.TasksList.Parent := WizardForm;
    WizardForm.TasksList.Hide;
 end;
procedure CurPageChanged(CurPageID: Integer);
begin
    WizardForm.TasksList.Hide;
  case CurPageID of
 wpSelectTasks:
  begin
    WizardForm.TasksList.Show;
    end;
  end;
end;

Както так...

LordSP 30-03-2011 17:15 1647316

Или хотя бы подскажите как сделать разделитель граф,при вводе серийного номера?

nik1967 30-03-2011 17:57 1647344

LordSP,
LicenseScroll
Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
LicenseFile=compiler:License.txt

[Files]
Source: compiler:InnoCallback.dll; Flags: dontcopy

[_Code]
type
  TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
const
  EM_GETFIRSTVISIBLELINE = $CE; TestLine = 5;
var
  TimerID: LongWord;

function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
  CurrLine: integer;
begin
  CurrLine:= SendMessage(WizardForm.LicenseMemo.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
  If CurrLine >= TestLine then
    begin
      WizardForm.LicenseAcceptedRadio.Enabled:= True;
      KillTimer(0, TimerID);
    end;
end;

procedure InitializeWizard();
begin
  WizardForm.LicenseAcceptedRadio.Enabled:= False;
end;

procedure CurPageChanged(CurPageID: Integer);
var
  pfunc: LongWord;
begin
  if CurPageID = wpLicense then
    begin
      pfunc:= WrapTimerProc(@OnTimer, 4);
      TimerID:= SetTimer(0, 0, 500, pfunc);
    end else
      KillTimer(0, TimerID);
end;

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


LordSP 30-03-2011 18:11 1647355

nik1967

Все также,кнопка далее не активна пока не установишь чебокс,а не после прокрутки скролла.

R3Pa4eK 30-03-2011 18:59 1647377

Как к MsgBox добавить не только кнопку ОК , а и кнопочку "Отмена"?

Gnom_aka_Lexander 30-03-2011 19:30 1647390

R3Pa4eK,
Код:

mbConfirmation, MB_YESNO)
если тебе это о чемто говорит.

R3Pa4eK 30-03-2011 19:41 1647396

Цитата:

Цитата Лександер
если тебе это о чемто говорит. »

Конечно говорит, спасибо! Только я чуть-чуть переделал и сделал вот так: MsgBox(Capt, mbConfirmation, MB_OKCancel); . Теперь мне надо реализовать такое: что-бы при нажатии на кнопку "Отмена" удалялась папка {app} и закрывался инсталл. Поможешь?

Gnom_aka_Lexander 30-03-2011 19:53 1647403

R3Pa4eK,
Код:

if MsgBox(Capt, mbConfirmation, MB_OKCANCEL)= IDCANCEL then - нужное тебе действие
- чего хоть сложного?
В моем ренегаде реализовано так:
Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
    ResultCode:integer;
begin
 if CurStep = ssDone then
 if FileExists('{#AppExe}') then \\ - проверка на наличие файла
  if MsgBox('{#SetupSetting("AppName")}' +' успешно ' +  ' установлена!' + #10#10#13 + 'Запустить ' + '{#SetupSetting("AppName")}' + '?' , mbInformation, MB_OKCANCEL) = IDOK then
  Exec(ExpandConstant('{#AppExe}'), '', '', SW_SHOW, ewNoWait, ResultCode); \\нужное действие на нажатие заявленной кнопки.
  end;
end;


nik1967 30-03-2011 19:57 1647406

Цитата:

Цитата LordSP
Все также,кнопка далее не активна пока не установишь чебокс,а не после прокрутки скролла. »

Цитата:

неактивными кнопку "далее" и чебокс "принять..."
Как то уж определись, что тебе надо.
Ну а переделать скрипт, который я выкладывал, не судьба?
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
LicenseFile=compiler:License.txt

[Files]
Source: compiler:InnoCallback.dll; Flags: dontcopy

[_Code]
type
  TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
const
  EM_GETFIRSTVISIBLELINE = $CE; TestLine = 5;
var
  TimerID: LongWord;

function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
  CurrLine: integer;
begin
  CurrLine:= SendMessage(WizardForm.LicenseMemo.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
  If CurrLine >= TestLine then
    begin
      WizardForm.NextButton.Enabled:= True;
      KillTimer(0, TimerID);
    end;
end;

procedure InitializeWizard();
begin
  WizardForm.LicenseAcceptedRadio.Hide;
  WizardForm.LicenseNotAcceptedRadio.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
var
  pfunc: LongWord;
begin
  if CurPageID = wpLicense then
    begin
      pfunc:= WrapTimerProc(@OnTimer, 4);
      TimerID:= SetTimer(0, 0, 500, pfunc);
    end else
      KillTimer(0, TimerID);
end;

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


Serega 30-03-2011 23:04 1647536

Цитата:

Цитата LordSP
Все также,кнопка далее не активна пока не установишь чебокс »

Ну вообще-то для этого и есть страница с Лицензией, если он не согласен, то не сможет установить программу, т.е. моё мнение - RadioButton'ы должны быть всегда.
Пример

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
LicenseFile=compiler:License.txt
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Libraries\InnoCallback.dll; Flags: dontcopy

[Code]
type
  TTextMetric = record
    tmHeight: Longint;
    tmAscent: Longint;
    tmDescent: Longint;
    tmInternalLeading: Longint;
    tmExternalLeading: Longint;
    tmAveCharWidth: Longint;
    tmMaxCharWidth: Longint;
    tmWeight: Longint;
    tmOverhang: Longint;
    tmDigitizedAspectX: Longint;
    tmDigitizedAspectY: Longint;
    tmFirstChar: Char;
    tmLastChar: Char;
    tmDefaultChar: Char;
    tmBreakChar: Char;
    tmItalic: Byte;
    tmUnderlined: Byte;
    tmStruckOut: Byte;
    tmPitchAndFamily: Byte;
    tmCharSet: Byte;
  end;

  Pointer = procedure(Sender: TObject);

function GetDC(hWnd: HWND): LongWord; external 'GetDC@user32.dll stdcall';
function SelectObject(DC: LongWord; p2: LongWord): LongWord; external 'SelectObject@gdi32.dll stdcall';
function GetWindowRect(hWnd: HWND; var lpRect: TRect): BOOL; external 'GetWindowRect@user32.dll stdcall';
function GetTextMetrics(DC: LongWord; var TM: TTextMetric): BOOL; external 'GetTextMetricsA@gdi32.dll stdcall';
function ReleaseDC(hWnd: HWND; hDC: LongWord): Integer; external 'ReleaseDC@user32.dll stdcall';
function WrapTimerProc(callback: Pointer; paramcount: Integer): LongWord; external 'wrapcallback@files:InnoCallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

const
  EM_GETRECT            = $00B2;
  EM_GETFIRSTVISIBLELINE = $00CE;

var
  TimerID: LongWord;
  IsReadLicense: Boolean;

function GetFirstVisibleLine(const Memo: TMemo): Integer;
begin
  Result := SendMessage(Memo.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
end;

function GetCountVisibleLines(const Memo: TMemo): Integer;
var
  OldFont: LongWord;
  Hand: THandle;
  TM: TTextMetric;
  Rect: TRect;
begin
  Hand := GetDC(Memo.Handle);
  try
    OldFont := SelectObject(Hand, Memo.Font.Handle);
    GetTextMetrics(Hand, TM);
    GetWindowRect(Memo.Handle, Rect);
    Result := ((Rect.Bottom - Rect.Top) div (TM.tmHeight + TM.tmExternalLeading));
  finally
    ReleaseDC(Memo.Handle, SelectObject(Hand, OldFont));
  end;
end;

function GetLastVisibleLine(const Memo: TMemo): Boolean;
begin
  Result := (GetFirstVisibleLine(Memo) + GetCountVisibleLines(Memo)) >= (Memo.Lines.Count-1);
end;

procedure TimerProc(Sender: TObject);
begin
  if not IsReadLicense and GetLastVisibleLine(WizardForm.LicenseMemo) then
    begin
      WizardForm.LicenseAcceptedRadio.Enabled := True;
//      WizardForm.LicenseAcceptedRadio.Checked := True;
      IsReadLicense := True;
    end;
end;

procedure InitializeWizard();
begin
  TimerID := 0;
  IsReadLicense := False;
  WizardForm.LicenseAcceptedRadio.Enabled := False;
//  WizardForm.LicenseAcceptedRadio.Hide;
//  WizardForm.LicenseNotAcceptedRadio.Hide;
//  WizardForm.LicenseMemo.Height :=  WizardForm.LicenseMemo.Height + ScaleY(35);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpLicense:
      if not IsReadLicense then
        TimerID := SetTimer(0, 0, 50, WrapTimerProc(@TimerProc, 0));
  else
    if TimerID > 0 then
      begin
        KillTimer(0, TimerID);
        TimerID := 0;
      end;
  end;
end;


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

P.S.
nik1967, этот пример из сборника скриптов, не совсем корректен, т.к. не определяет, прокрутил ли пользователь скролбар до конца.
Ну и по хорошему ещё сюда нужно прикрутить хинт или лэйбл какой-нибудь сделать, чтоб если пользователь резко прокрутил скролбар, то значит не читал и об этом написать ему, что мол читать надо вдумчиво... :)

newmangor 31-03-2011 08:32 1647738

Доброго все времени суток ! Помогите с вопросом ! факи читал нефига не понял !

[Tasks]
Name: additional; Description: "Дополнительное ПО";
Name: additional\dx; Description: "Обновить DirectX"; Flags: unchecked
Name: additional\vcr86; Description: "Обновить библиотеки С++ х86"; Flags: unchecked;
Name: additional\vcr64; Description: "Обновить библиотеки С++ х64"; Flags: unchecked;


[Run]
Filename: {src}\Redist\vcredist_x86.exe; Flags: nowait; Tasks: additional\vcr86; Parameters: /q;
Filename: {src}\Redist\vcredist_x64.exe; Flags: nowait; Tasks: additional\vcr64; Parameters: /q;
Filename: {src}\Redist\DirectX\dxsetup.exe; Flags: nowait; Tasks: additional\dx; Parameters: /silent;

Вопрос заключается в следующем:
Как сделать, чтобы файлы в секции [Run] запускались по очереди? Т.е. инсталляция второго файла начиналась только после того, как инсталляция первого файла закончилась или отменилась, желательно на данном примере !

Спасибо Огромное !!!

Gnom_aka_Lexander 31-03-2011 11:00 1647815

newmangor, удали флаг nowait - он заставляет не ожидать окончания предидущего запуска. И внимательно читаем справку - даже в русской это есть.

newmangor 31-03-2011 12:37 1647886

мб я не ту справку читаю ? ссылку мона или докум ? спс еще раз выручил !

Gnom_aka_Lexander 31-03-2011 13:43 1647969

Не знаю, насколько актуально, минимизация инсталла на странице инсталляции в правый нижний угол с корректным отображением на любом мониторе, с отключенным задним фоном.
читать дальше »
[Setup]
AppName=Avengerz
AppVerName=Avengerz
AppVersion=Avengerz
DefaultDirName={pf}\Avengerz
DefaultGroupName=Avengerz

[Files]
Source: {sys}\*.dll; DestDir: {app}; Flags: external deleteafterinstall

[code]
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard();
begin
WizardForm.CancelButton.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling then
begin
WizardForm.Bevel.Hide;
WizardForm.Bevel1.Hide;
WizardForm.BorderStyle:=bsDialog;
WizardForm.MainPanel.Visible:=False;
WizardForm.Width:=ScaleX(320);
WizardForm.Height:=ScaleY(127);
WizardForm.InnerNotebook.Left:=ScaleX(7);
WizardForm.InnerNotebook.Top:=ScaleY(7);
WizardForm.InnerNotebook.Width:=ScaleX(300);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(17);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(37);
WizardForm.ProgressGauge.Left:=ScaleX(0);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(122);
WizardForm.CancelButton.Top:=ScaleY(70);
WizardForm.Left:=GetSystemMetrics(16)-GetSystemMetrics(16)+ ScaleX(5);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(110);
end;
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Position:=poScreenCenter;
end
end;
На базе примера от Avengerz

Цитата:

Цитата Serega
необходимо соединение с интернетом »

А если нет интернета, то нет и внешнего IP :)

Serega 31-03-2011 20:56 1648368

Здравствуйте, накидал скрипт, как можно узнать IP адрес машины, на которой запущен инсталлятор (необходимо соединение с интернетом):
Пример

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
{===============================================================================}
{ Script name: GetMyIP.iss                                                      }
{ Script version: 1.0                                                          }
{ Author: Serega, http://forum.oszone.net/member.php?userid=88670              }
{                                                                              }
{ This script shows how to learn your IP                                        }
{ Этот скрипт показывает, как узнать свой IP                                    }
{===============================================================================}
var
  pnl: TPanel;
  lbl: TLabel;
  Memo: TMemo;
  Button: TButton;

function GetHtmlSource(const url: string): string;
var
  vHttp: Variant;
begin
  try
    vHttp := CreateOleObject('Microsoft.XMLHTTP');
    vHttp.open('GET', url, False);
    vHttp.send;
    Result := vHttp.responseText;
  except
    Result := 'Возникла ошибка при обращении к серверу, проверьте настройки соединения.';
  end;
end;

procedure ButtonClick(Sender: TObject);
var
  strHtml: string;
begin
  try
    Memo.Clear;
    lbl.Caption := '';
    strHtml := GetHtmlSource('http://2ip.ru/');
    Memo.Lines.Text := strHtml;
    if (strHtml <> '') and (Pos('ошибка', Copy(strHtml, 1, 20)) = 0) then
      begin
        Delete(strHtml, 1, Pos('class="ip"', strHtml));
        Delete(strHtml, 1, Pos('<big', strHtml));
        Delete(strHtml, 1, Pos('>', strHtml));
        SetLength(strHtml, Pos('<', strHtml)-1);
        lbl.Caption := 'Ваш IP адрес: ' + Trim(strHtml);
      end;
  finally
    SetLength(strHtml, 0);
  end;
end;

procedure InitializeWizard();
begin
  pnl := TPanel.Create(WizardForm);
  with pnl do
    begin
      Parent := WizardForm;
      Left := 0;
      Top := 0;
      Align := alClient;
    end;
  WizardForm.CancelButton.Parent := pnl;

  with TLabel.Create(WizardForm) do
    begin
      Parent := pnl;
      AutoSize := True;
      Left := ScaleX(15);
      Top := ScaleY(10);
      Caption := 'Исходный код страницы (http://2ip.ru/):';
    end;

  Memo := TMemo.Create(WizardForm);
  with Memo do
    begin
      Parent := pnl;
      SetBounds(ScaleX(15), ScaleY(30), WizardForm.ClientWidth - ScaleX(30), ScaleY(285));
      ReadOnly := True;
      ScrollBars := ssBoth;
      Text := '';
    end;

  Button := TButton.Create(WizardForm);
  with Button do
    begin
      Parent := pnl;
      SetBounds(ScaleX(300), WizardForm.CancelButton.Top, ScaleX(85), ScaleY(23));
      Caption := 'Узнать IP';
      OnClick := @ButtonClick;
    end;

  lbl := TLabel.Create(WizardForm);
  with lbl do
    begin
      Parent := pnl;
      AutoSize := True;
      Left := ScaleX(25);
      Top := ScaleY(328);
      Font.Size := 12;
    end;
end;

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

procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.CancelButton.Caption := 'Закрыть';
end;


Serega 01-04-2011 00:50 1648495

Здравствуйте, возникла сегодня у меня такая задача, как создать точку восстановления перед установкой программы.
Для этого можно конечно воспользоваться скриптом .vbs, смущает одно, сохраняем лишний файл на диск, затем запускаем...
Одним словом решил это дело реализовать без сохранения на диск:
SetRestorePoint

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[CustomMessages]
rus.otherGroup=Прочее:
rus.pointDesc=Создать системную контрольную точку (рекомендуется)
rus.pointMsg=Создание контрольной точки...

[Tasks]
Name: restorepoint; Description: {cm:pointDesc}; GroupDescription: {cm:otherGroup}; MinVersion: 0,5.1

[Files]
Source: compiler:Examples\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[Code]
{===============================================================================}
{ Script name: SetRestorePoint.iss                                              }
{ Script version: 1.0                                                          }
{ Author: Serega, http://forum.oszone.net/member.php?userid=88670              }
{                                                                              }
{ This script shows how to create restore point before install                  }
{ Этот скрипт показывает, как создать контрольную точку перед установкой        }
{                                                                              }
{ function SetRestorePoint(const PointName: string): Boolean;                  }
{===============================================================================}
const
  // Description http://msdn.microsoft.com/en-us/library/aa378847%28VS.85%29.aspx
  // Restore point type
  APPLICATION_INSTALL = 0;
  APPLICATION_UNINSTALL = 1;
  DEVICE_DRIVER_INSTALL = 10;
  MODIFY_SETTINGS = 12;
  CANCELLED_OPERATION = 13;
  // Event type
  BEGIN_SYSTEM_CHANGE = 100;
  END_SYSTEM_CHANGE = 101;
  BEGIN_NESTED_SYSTEM_CHANGE = 102;
  END_NESTED_SYSTEM_CHANGE = 103;

function SetRestorePoint(const PointName: string): Boolean;
var
  vObj, SR: Variant;
begin
  vObj := CreateOleObject('ScriptControl');
  vObj.Language := 'VBScript';
  SR := vObj.eval('GetObject("winmgmts:\\.\root\default:SystemRestore")');
  Result := SR.CreateRestorePoint(PointName, APPLICATION_INSTALL, BEGIN_SYSTEM_CHANGE) = 0;
end;

procedure CurPageChanged(CurPageID: Integer);
var
  msg: string;
begin
  if (CurPageID = wpInstalling) and IsTaskSelected('restorepoint') then
    try 
      msg := WizardForm.StatusLabel.Caption;
      WizardForm.StatusLabel.Caption := ExpandConstant('{cm:pointMsg}');
      WizardForm.Repaint;
      // создаём контрольную точку
      SetRestorePoint('Установка {#SetupSetting("AppName")}');

      WizardForm.StatusLabel.Caption := msg;
    finally
      SetLength(msg, 0);
    end;
end;


mariolast 01-04-2011 09:56 1648634

Цитата:

Цитата Лександер
На руборде отвечали, там можно и айпи взять, если я правильно понял.вот Там вроде сохраняется ини с параметрами сетевухи и из него считывается нужная информация.
Есть засада, если стоит роутер, то получим ip, который выдает роутер. Обойти можно подключившись к какому-нибудь сайту, например 2ip.ru, и считать ip с него.
Чуть позже:
Простенький инсталл, без претензий на высокие оценки, но достаточно симпатичный »

Тяжеловато выходит.
Если у меня виртуальная машина то появляется как минимкм еще 2 сетевых адаптера. А мне нужно мой физический вычислить.
Пробовал так
Код:

function GetMACAddress(): string;
var
  ResultCode: Integer;
  strArray: TArrayOfString;
  Temp: string;
  strMAC: string;
  strLen: integer;
  i: integer;
begin
  Result:= '';
  Exec('cmd.exe', '/c ipconfig /all >> ' + ExpandConstant('{tmp}\adapter.info'), '', SW_HIDE,
    ewWaitUntilTerminated, ResultCode);

  LoadStringsFromFile(ExpandConstant('{tmp}\adapter.info'), strArray);
  for i := 1 to GetArrayLength(strArray)-1 do begin
    strLen:= Length(strArray[i]);
    Temp:=strArray[i-1];
    if strLen > 16 then
    begin
//    MsgBox(IntToStr(Pos('VMware', Temp)), mbInformation, MB_OK);
    MsgBox(Temp, mbInformation, MB_OK);
    if (CompareStr('-', strArray[i][strLen-2] ) = 0) and
      (CompareStr('-', strArray[i][strLen-5] ) = 0) and
      (CompareStr('-', strArray[i][strLen-8] ) = 0) and
      (CompareStr('-', strArray[i][strLen-11]) = 0) and
      (CompareStr('-', strArray[i][strLen-14]) = 0) and
      (Pos('VMware', Temp) = 0) and
      (Pos('Hamachi', Temp) = 0) then
      Result:= Result + #10#13 + Copy(strArray[i], strLen-16, 17);
    end;
  end;
end;

В результате, на 7-ке как то работает, на XP нет. Для информации отладки смотрю переменную Temp, в 7-ке все что русскими выводится на экран крякозябрами (можно ли это поправить не знаю). На XP ее значение вообще пустое....

mariolast 01-04-2011 10:27 1648650

Цитата:

Цитата Serega
скрипт, как можно узнать IP адрес машины, на которой запущен инсталлятор »

Я для этого использую библиотеку IPUtils.dll

Serega 01-04-2011 10:50 1648668

Цитата:

Цитата mariolast
(можно ли это поправить не знаю) »

Можно, используйте конвертирование strArray[i] := DosToAnsi(strArray[i]), чуть поправил ваш пример:
читать дальше »

Код:

#include "ConvertString.iss"

function GetMACAddress(): string;
var
  ResultCode: Integer;
  strArray: TArrayOfString;
  Temp: string;
  strMAC: string;
  strLen: integer;
  i: integer;
begin
  Result := '';
  Exec('cmd.exe', '/c ipconfig /all >"' + ExpandConstant('{tmp}\adapter.info') + '"', '', SW_HIDE,
    ewWaitUntilTerminated, ResultCode);

  LoadStringsFromFile(ExpandConstant('{tmp}\adapter.info'), strArray);
  for i := 0 to GetArrayLength(strArray)-1 do
    if Length(strArray[i]) > 16 then
      begin
        strArray[i] := DosToAnsi(strArray[i]);
        strLen := Length(strArray[i]);
        MsgBox(strArray[i], mbInformation, MB_OK);
        if (CompareStr('-', strArray[i][strLen-2] ) = 0) and
          (CompareStr('-', strArray[i][strLen-5] ) = 0) and
          (CompareStr('-', strArray[i][strLen-8] ) = 0) and
          (CompareStr('-', strArray[i][strLen-11]) = 0) and
          (CompareStr('-', strArray[i][strLen-14]) = 0) and
          (Pos('VMware', strArray[i]) = 0) and
          (Pos('Hamachi', strArray[i]) = 0) then
          Result := Result + #10#13 + Copy(strArray[i], strLen-16, 17);
      end;
end;


Сам скрипт ConvertString.iss - здесь

Цитата:

Цитата mariolast
Я для этого использую библиотеку IPUtils.dll »

А вы думаете как она проверяет IP? Смысл один и тот же, только не нужно доп. библиотек.

mariolast 01-04-2011 11:45 1648724

Serega,
Ну это уже что то, уже читает под ХП текстовый файл, хоть и русские буквы крякозябрами все равно, но пока это не столь важно. Спасибо.

R.i.m.s.k.y. 01-04-2011 13:49 1648839

Цитата:

Цитата Serega
Можно, используйте конвертирование strArray[i] := DosToAnsi(strArray[i]), чуть поправил ваш пример:
читать дальше » »

Этот скрипт на семерке и хр правильно отрабатывает? ведь в семере слегка по другому вывод ipconfig сделан

duxa 01-04-2011 13:52 1648842

Цитата:

Я для этого использую библиотеку IPUtils.dll
Поделись пожалуйста dll'кой, сколько не искал примеры есть, а самой dll нет.

STRAYKER 01-04-2011 20:45 1649064

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

Gnom_aka_Lexander 01-04-2011 22:33 1649119

STRAYKER, лого-ссылка

Habetdin 01-04-2011 23:41 1649156

Цитата:

Цитата Serega
GetHtmlSource('http://2ip.ru/'); »

Лучше использовать адрес http://www.whatismyip.com/automation/n09230945.asp - по нему только IP, парсить не надо :)

shidow 02-04-2011 13:49 1649396

Как исправить? http://i18.fastpic.ru/big/2011/0328/...f8ec3f4033.png
Вот секция код

читать дальше »
[_Code]
////// Кнопки \\\\\\
const
ButtonWidth = 80;
ButtonHeight = 23;

var
WizardLabel: TLabel;
ButtonPanel: array of TPanel;
ButtonImage: array of TBitmapImage;
ButtonLabel: array of TLabel;
UsedButtons: array of TButton;
ButtonsCount: Integer;

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}\Button.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 InitializeWizard2();
begin
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('button.bmp')
LoadButtonImage(WizardForm.BackButton)
LoadButtonImage(WizardForm.NextButton)
LoadButtonImage(WizardForm.CancelButton)
LoadButtonImage(WizardForm.DirBrowseButton)
LoadButtonImage(WizardForm.GroupBrowseButton)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButtons()
end;
const
////// Инстал черный \\\\\\
Color = $000000; // Общий цвет инсталлятора $000000 - чёрный

procedure InitializeWizard1();
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:=$100800;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.GroupEdit.Color:=$100800;
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.WelcomeLabel1.Font.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.Color:=clWhite;
WizardForm.FinishedHeadingLabel.Font.Color:=clWhite;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clWhite;
//Избавиться от разделительных полос сверху и снизу
WizardForm.Bevel.visible:=true; // Если не надо, то закомментировать
WizardForm.BeveledLabel.visible:=true; // Если не надо, то закомментировать
WizardForm.Bevel1.visible:=true; // Если не надо, то закомментировать
//Избавляемся от полосы прокрутки в меню Всё готово к установке
WizardForm.ReadyMemo.ScrollBars:= ssNone // Если не надо, то закомментировать
end;

////// Картинка в левый нижний угол \\\\\\
var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;

procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://shidow.com', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard3();
begin
ExtractTemporaryFile('logo.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end;
////// Папка \\\\\\
procedure InitializeWizard4();
begin
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 InitializeWizard5();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Font.Name := 'Tahoma'
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Font.Name := 'Tahoma'
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;
var
WelcomeLabel1, WelcomeLabel2: TLabel;
BmpFile: TBitmapImage;
////// Cтраница приветствия \\\\\\
procedure InitializeWizard6();
begin
ExtractTemporaryFile('fon.bmp');

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
BmpFile.SetBounds(0, 0, 497, 320);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.hide;
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
WelcomeLabel1.Alignment:=taCenter;
Left:= ScaleX(176);
Top:= ScaleY(66);
Width:= ScaleX(301);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Name:='Tahoma'
Font.Size:= 12;
Font.Color:=ClWhite
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
WelcomeLabel2.Alignment:=taCenter;
Top:= ScaleY(136);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(300);
AutoSize:= false;
WordWrap:= true;
Font.Color:=ClWhite
Font.Name:='Segoe UI'
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;
end;
procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
InitializeWizard6();
end

0.07 02-04-2011 15:41 1649453

подскажите плз.
Как в скрипт айфона от Shepards, вставить ISDone?

vovka1021 02-04-2011 17:38 1649534

помогите. как это изменить в скрипте Need for Speed Undercover.

Black666angel 03-04-2011 04:58 1649812

vovka1021,
Ты хочешь удалить?
найди эти строки (закаментируи или удали)
читать дальше »
//rus.Language=Выберите язык игры:
//rus.LanguageRus=Русский
//rus.LanguageUS=English
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// LanguageButtonCount = 2;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// LanguageButton: array [1..LanguageButtonCount] of HWND;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//procedure SelectLanguage(hBtn:HWND);
//begin
// sndPlaySound(ExpandConstant('{tmp}\Click.wav'),$0001);
// BtnSetChecked(hBtn,True);
// if hBtn=LanguageButton[1] then begin
// BtnSetChecked(LanguageButton[2],False);
// LngNameLbl.Caption:=ExpandConstant('{cm:LanguageRus}');
// Rus:= True;
// end else begin
// BtnSetChecked(LanguageButton[1],False);
// LngNameLbl.Caption:=ExpandConstant('{cm:LanguageUS}');
// Rus:= False;
// end;
//end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// LanguageLabel := TLabel.Create(WizardForm);
// with LanguageLabel do begin
// AutoSize:=False;
// SetBounds(ScaleX(115), ScaleY(410), ScaleX(400), ScaleY(17));
// Transparent:=True;
// Font.Name:= 'Georgia'
// Font.Size:= 10;
// Font.Color:=clLime;
// Font.Style:=[fsBold, fsItalic];
// Caption:= ExpandConstant('{cm:Language}');
// Parent := WizardForm;
// end;
//
// LngNameLbl := TLabel.Create(WizardForm);
// with LngNameLbl do begin
// AutoSize:=False;
// SetBounds(ScaleX(300), ScaleY(410), ScaleX(100), ScaleY(17));
// Transparent:=True;
// Font.Name:= 'Georgia'
// Font.Size:= 10;
// Font.Color:=clLime;
// Font.Style:=[fsBold, fsItalic];
// Caption:= ExpandConstant('{cm:LanguageRus}');
// Parent := WizardForm;
// end;
//
// LanguageButton[1]:=BtnCreate(WizardForm.Handle,ScaleX(395),ScaleY(403),ScaleX(48),ScaleY(36),ExpandConstant('{tmp}\ru .png'),0,True);
// BtnSetEvent(LanguageButton[1],BtnClickEventID,WrapBtnCallback(@SelectLanguage,1));
// BtnSetEvent(LanguageButton[1],BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
// BtnSetCursor(LanguageButton[1],GetSysCursorHandle(32649));
//
// LanguageButton[2]:=BtnCreate(WizardForm.Handle,ScaleX(460),ScaleY(403),ScaleX(48),ScaleY(36),ExpandConstant('{tmp}\us .png'),0,True);
// BtnSetEvent(LanguageButton[2],BtnClickEventID,WrapBtnCallback(@SelectLanguage,1));
// BtnSetEvent(LanguageButton[2],BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
// BtnSetCursor(LanguageButton[2],GetSysCursorHandle(32649));
//
// BtnSetChecked(LanguageButton[1],True);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// LanguageLabel.Hide;
// LngNameLbl.Hide;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// BtnSetVisibility(LanguageButton[1],True);
// BtnSetVisibility(LanguageButton[2],True);
// LanguageLabel.Show;
// LngNameLbl.Show;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// BtnSetVisibility(LanguageButton[1],False);
// BtnSetVisibility(LanguageButton[2],False);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Gnom_aka_Lexander 03-04-2011 12:45 1649957

vovka1021, неправильный параметр запуска установки ДиректИкс.

vovka1021 03-04-2011 13:06 1649969

как правильно прописать???

0.07 03-04-2011 13:17 1649976

народ, а че никто не знает как мне помочь?
сам никак не могу придумать
пробовал через #include добавить ISDone.iss, но не получается

Gnom_aka_Lexander 03-04-2011 13:26 1649982

vovka1021,
Код:

[Run]
Filename: "{src}\DXSETUP.exe"; WorkingDir: "{src}\"; Parameters: "/silent";

только DXSETUP должен рядом с инсталлом находится, либо убирай его в папку со всеми файлами, и добавляй эту папку в путь к исполняемому файлу.
0.07,
Цитата:

Цитата 0.07
пробовал через #include добавить ISDone.iss, но не получается »

- не прокатит, нужно объединять функции. выложи скрипт с файлами. А насчет ISJoiner - там-же пример идет, как правильно объединять скрипты :)

0.07 03-04-2011 13:28 1649984

да я пробовал ISJoiner-не получается
а так я пока только учусь, и сам объединить не смогу

R.i.m.s.k.y. 03-04-2011 14:55 1650046

Наверное опять на свой код засмотрелся...
имеется два проекта инно, в них делается одна вещь - извлекается nircmd для прибития ненужных процессов
Код:

[Files]
Source: nircmd.exe; DestDir: {app}\Utilities\; Flags: ignoreversion
...
  ExtractTemporaryFile(ExpandConstant('nircmd.exe'));
  if FileExists(ExpandConstant('{tmp}\nircmd.exe')) then begin
    KillEmAlltmp; //убить всех!!!
 end;

Этот кусок кода из работающего скрипта вставил во второй скрипт и получил ошибку


WTF???

Habetdin 03-04-2011 15:07 1650058

R.i.m.s.k.y.,
Цитата:

Цитата R.i.m.s.k.y.
Flags: ignoreversion »

Может еще dontcopy?

0.07 03-04-2011 15:09 1650061

я конечно не шарю, но в ошибке написанно, что не найден файл "nircmd.exe", может второй скрипт лежит в другой папке

R.i.m.s.k.y. 03-04-2011 15:12 1650064

Цитата:

Цитата Habetdin
Может еще dontcopy? »

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

Цитата 0.07
я конечно не шарю, но в ошибке написанно, что не найден файл "nircmd.exe", может второй скрипт лежит в другой папке »

в том то и да что лежит! без этого ExtractTemporaryFile(ExpandConstant('nircmd.exe')); все компилится.

Serega 03-04-2011 15:21 1650075

Цитата:

Цитата R.i.m.s.k.y.
и получил ошибку »

если используете компрессию, не забываем указывать флаги nocompression и solidbreak

R.i.m.s.k.y. 03-04-2011 15:28 1650081

Цитата:

Цитата Serega
если используете компрессию, не забываем указывать флаги nocompression и solidbreak »

борода, те же фаберже только в профиль
добавлю что ExtractTemporaryFile(ExpandConstant('nircmd.exe')) вызывается в InitializeWizard

Gnom_aka_Lexander 03-04-2011 15:31 1650085

R.i.m.s.k.y., покажи скрипт, кажется догадываюсь, в чем дело :)
навскидку - сделай так:
Код:

[Files]
Source: nircmd.exe; DestDir: {app}\Utilities\; Flags: ignoreversion
Source: nircmd.exe;Flags: dontcopy nocompression solidbreak

- процентов на 99 поможет :)

R.i.m.s.k.y. 03-04-2011 15:40 1650092

Цитата:

Цитата Лександер
R.i.m.s.k.y., покажи скрипт, кажется догадываюсь, в чем дело »

в пароле было дело! флаг noencryption помог, всем спасибо!

vovka1021 03-04-2011 19:12 1650245

помогите. как прикрутить IsProgressBar.dll сюда чтобы было примерно так ну или как нибуть по другому,
чтобы отображался процесс установки, а то так кажется что комп завис!!
большое спасибо!

slysoft 03-04-2011 23:48 1650411

Вложений: 1
Люди добрые, помогите, после установки не работает деинсталяция, выдаёт такую ошибку: Снимок.jpg

Вот сам скрипт:
читать дальше »
; Скрипт создан при помощи мастера создания скриптов.
; СМ. ДОКУМЕНТАЦИЮ ДЛЯ ИЗУЧЕНИЯ ДЕТАЛЕЙ ОТНОСИТЕЛЬНО СОЗДАНИЯ ФАЙЛОВ СКРИПТА INNO SETUP!

#define MyAppName "Collapse"
#define MyAppVerName "Collapse v1.0"
#define MyAppPublisher "SlySoft"
#define MyAppURL "http://torrent.lurenet.lg.ua"
#define MyAppExeName "MadCheckers.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=E:\Инсталяторы
OutputBaseFilename=Collapse
SetupIconFile=E:\Раздачи!!!\Для игр\Шашки\12.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
WizardImageFile=1.bmp
WindowVisible=false
WizardImageBackColor=clGreen
WizardSmallImageFile=E:\Раздачи!!!\Для игр\Шашки\logo1.bmp
WindowStartMaximized=false
BackColor=clSilver
BackColor2=clSilver

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: additional; Description: "Дополнительное ПО";
Name: additional\dx; Description: "Обновить DirectX"; Flags: unchecked
Name: additional\vcr86; Description: "Обновить библиотеки C++ x86"; Flags: unchecked;

[Files]
Source: D:\игры\ИГРЫ\MadCheckers\MadCheckers.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\игры\ИГРЫ\MadCheckers\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: D:\игры\ИГРЫ\MadCheckers\unins000.exe; DestDir: {app}; Flags: ignoreversion
Source: logo1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: "C:\sound.wav"; DestDir: "{tmp}"; Flags: dontcopy
; ОТМЕТЬТЕ: Не используйте "Флажки: Проигнорировать версию" на любых общедоступных системных файлах


[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}
Name: {group}\Удалить Шашки v1.0; Filename: {uninstallexe}; WorkingDir: {app}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent
Filename: {src}\Redist\VisualC++\vcredist_x86.exe; Tasks: additional\vcr86; Parameters: /q;
Filename: {src}\Redist\DirectX\DXSETUP.exe; Tasks: additional\dx; Parameters: /silent;

[code]
function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';

function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

procedure InitializeWizard();
var
s:string;
width, height:Integer;
bitmap:TBitmap;
begin
ExtractTemporaryFile('sound.wav');
sndPlaySound(ExpandConstant('{tmp}\sound.wav'), $0001 or $0008);
end;

vovka1021 04-04-2011 00:27 1650430

как правильно прописать для DirectX 9.0 Web setup (которая через инет ставит)

№1 если пишу так: (работает только с DirectX 9.0)
Filename: "{src}\DirectX\dxsetup.exe"; WorkingDir: "{src}\DirectX"; Parameters: "/silent"; Check: DirectX; Flags: waituntilterminated; BeforeInstall: DirectXProgress;
когда выбираеш DirectX выдает ошибку и не ставится
когда не выбираеш то ошибок нет

№2 если пишу так: (работает только с DirectX 9.0)
Filename: "{src}\DirectX\dxsetup.exe"; WorkingDir: "{src}\"; Parameters: "/silent";
выдает ошибку не зависимо выбрал или нет DirectX



№3 если пишу так:
Filename: "{src}\DirectX\dxsetup.exe"; Tasks: "directx";
DirectX ставится независимо выбран он или нет

вот еще закономерность в 1 и 2 примере DirectX ставится только DirectX 9.0, а DirectX 9.0 Web setup не в какую не хочет
помогите!!!

Gnom_aka_Lexander 04-04-2011 09:34 1650561

Цитата:

Цитата slysoft
[Files]
Source: D:\игры\ИГРЫ\MadCheckers\MadCheckers.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\игры\ИГРЫ\MadCheckers\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: D:\игры\ИГРЫ\MadCheckers\unins000.exe; DestDir: {app}; Flags: ignoreversion
Source: logo1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: "C:\sound.wav"; DestDir: "{tmp}"; Flags: dontcopy
; ОТМЕТЬТЕ: Не используйте "Флажки: Проигнорировать версию" на любых общедоступных системных файлах »

Удали выделенную строчку, инно сама создаст исполняемый файл деинсталляции.
Цитата:

Цитата vovka1021
№3 если пишу так:
Filename: "{src}\DirectX\dxsetup.exe"; Tasks: "directx";
DirectX ставится независимо выбран он или нет »

напиши так:
Код:

Filename: "{src}\DirectX\dxsetup.exe";Check: DirectX;

R.i.m.s.k.y. 04-04-2011 10:47 1650607

vovka1021, 1 и 2 dxsetup.exe конкретно ругается на неправильный параметр, читай справку по его параметрам
покажи секцию Tasks и Code, проверь в Code не ставится ли галка все таки на него, случай 3 не может отрабатывать всегда при снятой галки в Tasks - DirectX.
А почему обязательно надо качать из инета? Это порочная практика - прога на метр качает гиг. Почему не положить нормальный дистр дирекса?

slysoft 04-04-2011 12:08 1650653

Цитата:

Цитата Лександер
Удали выделенную строчку, инно сама создаст исполняемый файл деинсталляции.>>

Удалил указаную строчку, но проблема осталась, выдаёт ту же ошибку!
Решил проблему удалив файлы деинсталяции в корневой папке!

P.S.: Спасибо Лександер, навёл на мысль!

extrimz 04-04-2011 13:39 1650735

Помогите пожалуйста сделать тихую установку для Helium music manager с помощью Inno Setup
имеется серийник.

пошагово пожалуйста подскажите как и что делать. Очень нужно

vovka1021 04-04-2011 15:31 1650822

знающие люди помогите пожалуйста!

как сделать прозрачный фон у прогрессбар
убрать его с странице завершении
как справится с ошибкой в конце установке
вот скрипт

insombia 04-04-2011 17:25 1650891

кто знает как сделать чтобы когда началась установка то прогресс бар переместился в правый угол экрана как у механиков?

gigabyte502 04-04-2011 18:23 1650932

Как сделать чтобы инсталлятор примерно на этапе после нажатия на Установить и до распаковки файлов чтобы он переименовал папку '{userdocs}\EA Games\The Sims 2' в '{userdocs}\EA Games\The Sims 2_old' если она есть?

KURBIT 04-04-2011 19:20 1650969

доброго времени суток попробую свой вопрос задать ещё раз нужно разбить установку на два диска непойму как это реализовать в скрипте
часть скрипта

#define GameID "{31B6B7E9-7A90-46F0-B105-3EAE62F6581E}"

#define GameName "Metro 2033"
#define GameVerName "Metro 2033 [v 1.0]"

#define NeedSize "6984"

#define Processor "3000"
#define VideoCard "128"
#define RAM "512"
#define WinVerMajor "5"
#define WinVerMinor "1"
#define ServicePack "2"

//#define ArcLocation "{src}\*.arc"

[Setup]
AppId={{#GameID}
AppName={#GameName}
AppVerName={#GameName}
AppPublisher=4A Games
AppPublisherURL=http://ru.akella.com
AppVersion=1.0
AppSupportURL={app}http://ru.akella.com/Page.aspx?id=support
AppUpdatesURL=http://ru.akella.com/Game.aspx?id=2292
AppReadmeFile={group}\ReadMe.lnk
DefaultDirName={pf}\Metro 2033
DefaultGroupName=4A Games\Metro 2033
OutputBaseFilename=setup
DirExistsWarning=no
MinVersion=0,5.01
VersionInfoDescription={#GameName}
SetupIconFile=D:\Inno Setup\Metro 2033\Metro 2033.ico
DiskSpanning=yes
SlicesPerDisk=2
DiskSliceSize=1666000000
DisableReadyPage=True

[Files]
Source: "InstallFiles\*"; Flags: dontcopy;
Source: "Slides\*"; Flags: dontcopy;
Source: "Icons\*"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;

Source: "InstallFiles\WizardImage.jpg"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\botva2.dll"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\ProgressBackground.png"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\ProgressImg.png"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\StatusPanel2.png"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\StatusPanel.png"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\Button.png"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\Tiger.cjstyles"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\Workspace.png"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\ISSkin.dll"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
Source: "InstallFiles\InnoCallback.dll"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;

Source: "D:\Games\Metro 2033\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension


;Source: "C:\Program Files\4A Games\Metro 2033\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ;

при компиляции появляется setup.exe и setup-1a.bin setup-1b.bin setup-2a.bin setup-2b.bin делю их на два диска запускаю всплывает вставьте второй диск но с первого установка не началась скрипт Need for Speed™ Undercover [2.2]

insombia 04-04-2011 20:10 1651009

Цитата:

Цитата KURBIT
при компиляции появляется setup.exe и setup-1a.bin setup-1b.bin setup-2a.bin setup-2b.bin делю их на два диска запускаю всплывает вставьте второй диск но с первого установка не началась скрипт Need for Speed™ Undercover [2.2] »

DiskSpanning=true
SlicesPerDisk=2

добавь в секцию setup

insombia 04-04-2011 21:32 1651064

http://i19.fastpic.ru/big/2011/0404/...d83a679453.jpg

KURBIT 04-04-2011 22:11 1651094

insombia, Проблема осталось

shidow 05-04-2011 16:54 1651595

insombia,
[Messages]
BeveledLabel=Твой текcт

LinkOFF 05-04-2011 17:54 1651637

Как мне можно изменить имя файла инсталятора (setup-1.bin на data-1.bin) или формат (setup-1.bin на setup-1.lin)

Vamp1re 05-04-2011 20:39 1651740

Дайте мне пожалуйста пару ссылок на прогресс бары, ато у меня 400% в процессе!

Gnom_aka_Lexander 05-04-2011 20:59 1651755

Vamp1re, Справку к ИсДеоне сложно прочитать? Я уже раз пять отвечал в этом форуме.

LinkOFF,
Цитата:

Цитата LinkOFF
(setup-1.bin на data-1.bin) »

- еще можно:
Код:

[Setup]
OutputBaseFilename=data

, а
Цитата:

Цитата LinkOFF
или формат (setup-1.bin на setup-1.lin) »

средствами инно - никак.

El Sanchez 05-04-2011 21:09 1651761

Цитата:

Цитата gigabyte502
Как сделать чтобы инсталлятор примерно на этапе после нажатия на Установить и до распаковки файлов чтобы он переименовал папку '{userdocs}\EA Games\The Sims 2' в '{userdocs}\EA Games\The Sims 2_old' если она есть? »

gigabyte502, к первому устанавливаемому файлу добавляете параметр BeforeInstall:
Код:

[Files]
Source: file1.exe; DestDir: {app}; BeforeInstall: RenameFolder
...
Source: fileN.exe; DestDir: {app}

[Code]
procedure RenameFolder;
begin
  RenameFile(ExpandConstant('{userdocs}\EA Games\The Sims 2'), ExpandConstant('{userdocs}\EA Games\The Sims 2_old'));
end;


Vamp1re 05-04-2011 21:15 1651767

Лександер, я читал там есть прогресс бар но он мне почемуто ненравиться! особенно етот круг под линией прогресса

insombia 05-04-2011 21:19 1651769

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

Gnom_aka_Lexander 05-04-2011 22:23 1651809

Цитата:

Цитата insombia
Как сделать чтобы установка ушла в левый угол экрана »

Прогрессбар в маленьком окне В левом нижнем углу

EvilAlex 06-04-2011 07:30 1651966

Доброго времени суток форумчане !

Вы кнопки для инсталов сами делаете или же есть какая-то прога ?

Зарание спасибо за ответ ...

Krinkels 06-04-2011 13:56 1652219

EvilAlex
Смотря какие кнопки ты имеешь ввиду. Если текстуры для кнопок то лучше рисовать самому, а если чисто кнопки то тут 2 варианта:
1. Руками
2. Воспользоваться компилятором от китайцев и там использовать редактор. Но опять же придется поработать ручками
:)

EvilAlex 06-04-2011 16:45 1652330

Krinkels, понятно, спосиб .

Gnom_aka_Lexander 06-04-2011 21:13 1652518

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

Serega 06-04-2011 22:19 1652561

Цитата:

Цитата Лександер
какой командой завершить созданную процедуру? »

end;

P.S.
Какой вопрос - такой ответ... :)

Serega 07-04-2011 13:08 1652979

Лександер, конечно для каждого случая нужно смотреть, но вот накидал, как пример:
Пример

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
var
  pnl: TPanel;

procedure CreateControl(const ParentControl: TWinControl);
// создаём все контролы
var
  i, lLeft, cLeft, aTop: Integer;
begin
  aTop := ScaleY(10);
  for i := 0 to 14 do
    begin
      with TLabel.Create(ParentControl) do
        begin
          Parent := ParentControl;
          AutoSize := True;
          Left := ScaleX(50);
          Top := aTop;
          Caption := 'TLabel № ' + IntToStr(i+1);
        end;
      with TCheckBox.Create(ParentControl) do
        begin
          Parent := ParentControl;
          SetBounds(ScaleX(200), aTop, ScaleX(100), ScaleY(14));
          Caption := 'TCheckBox № ' + IntToStr(i+1);
        end;
      with TEdit.Create(ParentControl) do
        begin
          Parent := ParentControl;
          SetBounds(ScaleX(350), aTop, ScaleX(100), ScaleY(20));
          Text := 'TEdit № ' + IntToStr(i+1);
        end;
      aTop := aTop + ScaleY(21);
    end;
end;

function DetectControl(const ParentControl: TWinControl): Boolean;
// проверяем наличие контролов
var
  i: Integer;
begin
  Result := False;
  for i := 0 to ParentControl.ControlCount-1 do
    if (ParentControl.Controls[i] is TLabel) or // проверяем, что контрол TLabel
      (ParentControl.Controls[i] is TCheckBox) or // проверяем, что контрол TCheckBox
      (ParentControl.Controls[i] is TEdit) then // проверяем, что контрол TEdit
      begin
        Result := True;
        Break;
      end;
end;

procedure ClearAllControl(const ParentControl: TWinControl);
// уничтожаем все контролы
var
  i: Integer;
begin
  { откровенно говоря с repeat..until ерись полнейшая... }
  repeat
    for i := 0 to ParentControl.ControlCount-1 do
      if (ParentControl.Controls[i] is TLabel) or // проверяем, что контрол TLabel
        (ParentControl.Controls[i] is TCheckBox) or // проверяем, что контрол TCheckBox
        (ParentControl.Controls[i] is TEdit) then // проверяем, что контрол TEdit
    { видимо какой-то глюк, но такое ощущение, что в этой процедуре не происходит задержки и
      цикл продолжается не дождавшись выполнения, в связи с чем некоторые контролы остаются }
          ParentControl.Controls[i].Free;
  until not DetectControl(ParentControl); // чтоб не зависнуть в цикле пришлось сделать доп. проверку
end;

procedure ButtonClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    0: CreateControl(pnl);
    1: ClearAllControl(pnl);
  end;
end;

procedure InitializeWizard();
var
  i, aLeft: Integer;
begin
  pnl := TPanel.Create(WizardForm);
  with pnl do
    begin
      Parent := WizardForm;
      Left := 0;
      Top := 0;
      Align := alClient;
    end;

  aLeft := ScaleX(100);
  for i := 0 to 1 do
    begin
      with TButton.Create(WizardForm) do
        begin
          Parent := pnl;
          SetBounds(aLeft, WizardForm.CancelButton.Top, ScaleX(150), ScaleY(23));
          case i of
            0: Caption := 'Создать все контролы';
            1: Caption := 'Разрушить все контролы';
          end;
          OnClick := @ButtonClick;
          Tag := i;
          aLeft :=  aLeft + ScaleX(160);
        end;
    end;
end;

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


EvilAlex 07-04-2011 13:59 1653014

Доброго времени суток !

Как зделать 3 разных кнопки в инстоляторе (Назад, Далее , Установить/Отмена/Завершить/выбор папок) ?

сами кнопки есть: http://rghost.ru/5110713 ...

вот если что скрипт: http://rghost.ru/5110569

вот что выдает инстал при запуске:


испробовал все что пришло на ум, помогите пожалуйсто .

если что: http://rghost.ru/5110611

Зарание благодарю .

P.S. Кнопки есть но они не подогнаны пока под инстал =)

Gnom_aka_Lexander 07-04-2011 14:29 1653041

Serega, спасибо, видимо, как сейчас есть - проще не придумаеш, так что не буду и голову ломать, просто хочется избавиться от километров кода :)
EvilAlex, такая ошибка говорит о том, что есть обращение к файлу, а сам файл отсутствует(буквалный перевод - деление на ноль:)) сейчас посмотрю твой скрипт.
Позже:
У тебя ошибку выбивает модуль фриарк. видимо гдето здорово попортил процедуры обращения к нему, либо удалил какой-нибудь нужный для модуля файл. если есть не испорченый скрипт - дай мне его, встрою тебе разные кнопки.

EvilAlex 07-04-2011 14:37 1653049

Лександер, скорее всего удолил, там 3 кнопки и я заменял в некоторых местах названия, может где-то что-то не то сделал ...

Edison007 07-04-2011 16:07 1653105

Парни у кого-нибудь есть код на реализацию токого: http://i2.pixs.ru/storage/3/2/7/Bezi...50_1987327.jpg

EvilAlex 07-04-2011 17:00 1653145

Edison007,

Для такова нет
читать дальше »
Service Temporarily Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
Apache Server at i2.pixs.ru Port 80

Edison007 07-04-2011 17:10 1653156

EvilAlex
http://s51.radikal.ru/i132/1104/0f/4faebeaff7dd.jpg

ChVL 07-04-2011 19:27 1653239

В секции [Setuр] есть строка:
AlwaysRestart=yes
Как прописать, чтобы она действовала только на Win 7? Т.е. чтобы окно с предложением перезагрузки появлялось на Win 7, а на ХР его не было?

R.i.m.s.k.y. 07-04-2011 19:53 1653258

попробуй в коде NeedRestart := True
Код:

var  Version: TWindowsVersion;
....
GetWindowsVersionEx (Version);
if ( (Version.Major = 6) and (Version.Minor >= 1) ) then begin
...
NeedRestart := True
...
end;

Не проверял - не обещаю что сработает.

Gnom_aka_Lexander 07-04-2011 19:59 1653267

ChVL, У меня вот так прокатило:
читать дальше »
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[_code]
var  Version: TWindowsVersion;
function NeedRestart(): Boolean;
begin
GetWindowsVersionEx (Version);
if ( (Version.Major = 6) and (Version.Minor >= 1) ) then begin
 Result := True;
 end;
end;


LordSP 07-04-2011 21:34 1653322

Ребят,есть такие вопросы:

1. Можно ли как-нибудь поменять расширение файла при разделении на тома?,к примеру: (не Setup-1.bin,а задать свое Data000.idd,как в Smart Install Maker,при этом сжатие тоже остается)

Gnom_aka_Lexander 07-04-2011 22:25 1653360

LordSP,
Код:

[Setup]
DiskSpanning=true
DiskSliceSize=1566000000
SlicesPerDisk=3

так будет не Setup-1.bin, а Setup-1а.bin, Setup-2а.bin, Setup-3а.bin. На другой диск будут файлы Setup-1b.bin, Setup-2b.bin, Setup-3b.bin -и так далее, по переименованию и смене расширения - уже флуд, я недавно отвечал.
Здесь всего 1265 сообщений, не нужно преувеличивать. Отлистай назад на пару страниц, я отвечал недавно.

LordSP 07-04-2011 22:31 1653370

Лександер,
Так дай ссылку,где отвечал,какой флуд!Здесь 1000000 сообщений!!

Лександер,

и еще как мне в этом противном коде: [Setup]
AppName=My Program
AppVerName=My Program ver.1.5
DefaultDirName={pf}\My Program

[code]
const
MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;
MB_ICONSTOP = $10;
MB_ICONNONE = $10;
MB_SYSTEMMODAL = $1000;

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';

procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
var
hWnd: Integer;
begin
Cancel:=False;
Confirm:=False;
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
if MessageBox(hWnd, 'The setup is not finished! Do you really want to abort?', 'Exit from Installer', MB_YESNO or $30 + MB_SYSTEMMODAL) = idYes
then
Cancel:=true;
end;


Сделать чтобы и диалоговое окно было поверх окон,и значок в этом окне используемый user32.dll/100 не был виден,или заменить....

В этом скрипте все нормально,а вот в другом не хочет поверх окон делать,если прописать так:
if MessageBox(hWnd, 'The setup is not finished! Do you really want to abort?', 'Exit from Installer', MB_YESNO or $1000 + MB_SYSTEMMODAL + $40 MB_ICONFORMATION) = idYes .то окно становиться беззвучным,но знвчок пропадает,только не в этом скрипте,а в другом....вообщем есть ли возможность его сменить?

Этот скрипт хочу совместить с другим,где окно информации...слева в угу "О программе"....,вот только работает с отображением значка :-(

Может как то индекс иконки можно указать?

Gnom_aka_Lexander 07-04-2011 22:45 1653381

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

Цитата LordSP
MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;
MB_ICONSTOP = $10;
MB_ICONNONE = $10;
MB_SYSTEMMODAL = $1000; »

индексы иконок.
Цитата:

Цитата LordSP
а вот в другом не хочет поверх окон делать »

соединил криво. и убирай портянки под спойлер. А то придет добрый модер и уберет пост целиком :)

LordSP 07-04-2011 23:01 1653395

Лександер,
Цитата:

Цитата Лександер
индексы иконок. »

Это я знаю,а как сделать отобраджение иконки вместо белого окошечка,соединив так:
MB_YESNO or $40 + MB_ICONFORMATION //если оставить так,то появляется бклое окошечко на форме.

MB_YESNO or $1000 + MB_SYSTEMMODAL)// если так, то окошко скрывается за формой,и невозможно нажать.)

MB_YESNO or $1000 + MB_SYSTEMMODAL + $40 MB_ICONFORMATION)//ну,а если так,то пропадает звук при действии...

Помоги.

Да и вообще,что мучатся у тебя случаем нет,скрипта,отображающего окно инсталлятора и конечно же диалоговые окна и ошибки,поверх всех окон Windows?

Gnom_aka_Lexander 07-04-2011 23:46 1653421

LordSP, все, что у меня есть - лежит здесь: готовые решения, качай архив, который называется пачка скриптов, и ройся, также поройся на форуме, на твой вопрос наверняка есть ответ :)

slysoft 08-04-2011 04:49 1653525

Цитата:

Цитата Лександер
лежит здесь: готовые решения »

Спасибо ОГРОМНОЕ, очень пригодилось!!!

Vamp1re 08-04-2011 12:56 1653772

Подскажите как через секцию RUN на финишной странице инсталлятора сделать запрос на запуск игры, ато я уже забыл :)

R.i.m.s.k.y. 08-04-2011 13:05 1653780

Цитата:

Цитата Vamp1re
Подскажите как через секцию RUN на финишной странице инсталлятора сделать запрос на запуск игры, ато я уже забыл »

Флаг postinstall
Filename: {app}\game.exe; Description: Игра; Flags: skipifsilent postinstall

Vamp1re 08-04-2011 16:34 1653968

Подскажите как мне перемещать кнопки

slysoft 08-04-2011 18:29 1654041

Вложений: 1
Всем доброго времени суток!!!
у меня возникла небольшая проблема, 1) можно ли как нибуть убрать чёрный фон, закрывающий картинку на финальной странице инсталятора, как показано на скринфоте. И ещё, 2) можно ли изменить фон окна?

Вот сам скрипт:
читать дальше »

function mciSendString(lpstrCommand: string; lpstrReturnString: string; uReturnLength:integer; hwndCallback:integer):integer;
external 'mciSendStringA@winmm.dll stdcall';
procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
ShellExec('', 'http://torrent.lurenet.lg.ua', '' , '', SW_SHOW, ewNoWait, ResCode)
end;
var
WelcomeLabel1, WelcomeLabel2, FinishedLabel, FinishedHeadingLabel: TLabel;
const
Color = clblack;
const
GWL_STYLE = (-16);
WS_CAPTION = $C00000;

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

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


procedure InitializeWizard();
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin
ExtractTemporaryFile('Button.bmp')

BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=20
Top:=325
Width:=200
Height:=30
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
Parent:=BtnPanel
end
begin
WizardForm.WizardBitmapImage.Width := ScaleX(497); //êîîðäèíàòû ïîïðàâèøü êàê òå íàäî)
WizardForm.WizardBitmapImage.Height := ScaleX(323);
////////çàâåðøåíèå
WizardForm.WizardBitmapImage2.Width := ScaleX(497);
WizardForm.WizardBitmapImage2.Height := ScaleX(323);
begin
ExtractTemporaryFile(ExpandConstant('ops.mp3'))
mciSendString(ExpandConstant('play {tmp}\ops.mp3 repeat'),'NULL',0,0)
begin
ExtractTemporaryFile('2.bmp');

WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp'));

WelcomeLabel1:= TLabel.Create(WizardForm);
WelcomeLabel1.AutoSize:= False;
with WizardForm.WelcomeLabel1 do
WelcomeLabel1.SetBounds(Left, Top, Width, Height);
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.SetBounds(Left, Top, Width, Height);
WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel2.Font.Color:= clWhite;
WelcomeLabel2.Transparent:= True;
WelcomeLabel2.WordWrap:= true;
WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent:= WizardForm.WelcomePage

FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.AutoSize:= False;
with WizardForm.FinishedHeadingLabel do
FinishedHeadingLabel.SetBounds(Left, Top, Width, Height);
FinishedHeadingLabel.Font:= WizardForm.FinishedHeadingLabel.Font
FinishedHeadingLabel.Font.Color:= clWhite;
FinishedHeadingLabel.Transparent:= True;
FinishedHeadingLabel.WordWrap:= true;
FinishedHeadingLabel.Caption:= WizardForm.FinishedHeadingLabel.Caption;
FinishedHeadingLabel.Parent:= WizardForm.FinishedPage

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
FinishedLabel.SetBounds(Left, Top, Width, Height);
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
FinishedLabel.Parent:= WizardForm.FinishedPage

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
end;
begin
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
begin
WizardForm.Font.Color:=clLime;
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:=clblack;
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.WelcomeLabel1.Font.Color:=clLime;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clLime;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clLime;
WizardForm.Bevel.visible:=False;
WizardForm.BeveledLabel.visible:=False;
WizardForm.Bevel1.visible:=False;
begin
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.WizardSmallBitmapImage.Left := ScaleX(0);
WizardForm.WizardSmallBitmapImage.Top := ScaleY(0);
WizardForm.WizardSmallBitmapImage.Width := WizardForm.MainPanel.Width;
WizardForm.WizardSmallBitmapImage.Height := WizardForm.MainPanel.Height;
begin
SetWindowLong(WizardForm.Handle, GWL_STYLE,
GetWindowLong(WizardForm.Handle, GWL_STYLE) and not WS_CAPTION);
end;
end
end;
end;
end;
end;
end;


Зарание всем спасибо!!!

Gnom_aka_Lexander 08-04-2011 18:41 1654048

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

Edison007 08-04-2011 19:36 1654074

Нужна помощь.
Как создать Мемо, в котором будет указан путь, и чтобы этот путь можно было перепечатывать?

Vamp1re 08-04-2011 19:56 1654096

У меня проблема с кнопками. Кнопка "Назад" отображаеться в неполном размере, и при етом надписи почти невидно. (Пробовал изменять размеры,опять перемещять, но все тоже) (см.рис)
Скрипт на всякий случай
#define NeedSize "5000000000"

#define NeedMem 512

;#define Components

;#define SecondProgressBar

;#define records
#define precomp04
;#define precomp038
;#define unrar

#include "isdone.iss"

[Setup]
AppName=Dragon Age 2
AppVerName=Dragon Age 2
DefaultDirName={pf}\Dragon Age 2
DefaultGroupName=EA Games\Dragon Age 2
OutputBaseFilename=Setup
AppPublisher=BIOWARE
SetupIconFile=.\icon.ico
VersionInfoCopyright=1.0
SolidCompression=yes
WizardSmallImageFile=WizModernSmallImage.bmp
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif

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

[CustomMessages]
Finished1=Программа Dragon Age 2 [RePack] by Duktator22 установлена на Ваш компютер. Нажмите <Завершить>, чтобы выйти из программы установки.
Start1=Вас приветствует Мастер установки Dragon Age 2 [RePack] by Duktator22
start2=Програма установит Dragon Age 2 [RePack] by Duktator22 на ваш компютер. Рекомендуеться закрыть все прочие приложения перед тем как продолжить. Нажмите <Далее>, чтобы продолжить, или <Отмена>, чтобы выйти из программы установки.

[Icons]
Name: "{group}\Запустить игру"; Filename: "{app}\bin_ship\DragonAge2.exe"
Name: "{group}\{cm:UninstallProgram,Dragon Age 2}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Dragon Age 2"; Filename: "{app}\bin_ship\DragonAge2.exe";
Name: "{commondesktop}\Dragon Age 2 настройки"; Filename: "{app}\DragonAge2Launcher.exe";
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Dragon Age 2"; Filename: "{app}\DragonAge2Launcher.exe";

[Tasks]
Name: VCCheck; Description: Установить Microsoft Visual C++
Name: PhysXCheck; Description: Установить Nvidia PhysX
Name: DirectXCheck; Description: Обновить Microsoft DirectX
Name: FXCheck; Description: Обновить Microsoft NET Framework

[Files]
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Logo.bmp; Flags: dontcopy
Source: PAPKA.bmp; Flags: dontcopy
Source: IMG1.bmp; Flags: dontcopy
Source: IMG2.bmp; Flags: dontcopy

[Run]
Filename: {src}\Redist\vcredist_x86.exe; Parameters: /q; StatusMsg: Устанавливаем Microsoft Visual C++ 2005 Redist...; Flags: skipifdoesntexist; Tasks: VCCheck; Check: CheckError
Filename: {src}\Redist\PhysX.exe; Parameters: /qn; StatusMsg: Устанавливаем Nvidia PhysX...; Flags: skipifdoesntexist; Tasks: PhysXCheck; Check: CheckError
Filename: {src}\Redist\DirectX\DXSETUP.exe; Parameters: /silent; StatusMsg: Устанавливаем Microsoft DirectX...; Flags: skipifdoesntexist; Tasks: DirectXCheck; Check: CheckError
Filename: {src}\Redist\dotNetFx35setup.exe; Parameters: /qn; StatusMsg: Устанавливаем Microsoft NET...; Flags: skipifdoesntexist; Tasks: PhysXCheck; Check: CheckError
Filename: {src}\setup-2.exe; WorkingDir: {src}; Parameters: "-o""{app}"" -y -aoa"; StatusMsg: Распаковка игровых архивов...; Flags: waituntilterminated;
Filename: {src}\setup-3.exe; WorkingDir: {src}; Parameters: "-o""{app}"" -y -aoa"; StatusMsg: Распаковка игровых архивов...; Flags: waituntilterminated;

[code]
const
Color = clblack;
ButtonWidth = 80; //Указываем размер кнопок
ButtonHeight = 23;

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

var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;
MainImage : TBitmapImage;
FinishedImage: TBitmapImage;
WelcomeLabel1, WelcomeLabel2,FinishedLabel, FinishedHeadingLabel: TLabel; //Надписи на на странице приветствия и на финишной странице


procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton

else
Exit
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
end;

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

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm) //Рисунок который ложится на кнопку
Image.Width:=497 //Обязательно прописать оригинальный размер рисунка
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm) //Текст кнопок
Labl.Left:=23 //Указываем положение текста
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite //Цвет текста
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure InitializeWizard();
var
BtnPanel: TPanel;
Logo: TBitmapImage;
begin
ExtractTemporaryFile('Logo.bmp')

BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=0
Top:=415
Width:=497
Height:=35
Parent:=WizardForm
end
Logo:=TBitmapImage.Create(WizardForm)
with Logo do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Logo.bmp')
Parent:=BtnPanel
end

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;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;

// Папка
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;
//Инсталл черный
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.WelcomeLabel1.Font.Color:=clWhite;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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:=clwhite;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=cllime;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clWhite;
WizardForm.ReadyMemo.ScrollBars:= ssNone
WizardForm.Bevel.visible:=False;
WizardForm.BeveledLabel.visible:=False;
WizardForm.Bevel1.visible:=False;

WizardForm.NextButton.Left:=450;
WizardForm.NextButton.Top:=400;
WizardForm.NextButton.Width:=80;
WizardForm.NextButton.Height:=30;

WizardForm.CancelButton.Left:=540;
WizardForm.CancelButton.Top:=400;
WizardForm.CancelButton.Width:=80;
WizardForm.CancelButton.Height:=30;

WizardForm.BackButton.Left:=360
WizardForm.BackButton.Top:=400
WizardForm.BackButton.Width:=80
WizardForm.BackButton.Height:=300

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

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

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

WizardForm.DirBrowseButton.Left:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
LoadButtonImage(WizardForm.BackButton,bidBack)

with WizardForm do //Размер установщика
begin
AutoScroll := False;
ClientHeight := ScaleY(453);
ClientWidth := ScaleX(639);
end;

begin
ExtractTemporaryFile('img1.bmp');
MainImage := TBitmapImage.Create(WizardForm);
with MainImage do
begin
Parent := WizardForm;
Left := 0;
Top := 0;
Width := 453;
Height := 639;
Width:= ScaleX(639);
Bitmap.LoadFromFile(ExpandConstant('{tmp}\img1.bmp'));
end;

ExtractTemporaryFile('img2.bmp');
FinishedImage := TBitmapImage.Create(WizardForm);
with FinishedImage do
begin
Parent := WizardForm;
Left := 0;
Top := 0;
Width := 453;
Height := 639;
Width:= ScaleX(639);
Bitmap.LoadFromFile(ExpandConstant('{tmp}\img2.bmp'));
end;

//WelcomePage, создаем надписи на странице
WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
Left:= ScaleX(175);
Top:= ScaleY(15);
Width:= ScaleX(312);
Height:= ScaleY(57);
AutoSize:= false;
Font.Style := [fsBold]
Transparent:= true;
WordWrap:= true;
Font.Size:= 13;
Font.Color:=ClWhite
Parent:= WizardForm;
Caption:=ExpandConstant('{cm:Start1}')
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
Top:= ScaleY(90);
Left:= ScaleX(175);
Width:= ScaleX(295);
Height:= ScaleY(312);
AutoSize:= false;
WordWrap:= true;
Font.Color:=ClWhite
Font.Size:= 8;
Transparent:= true;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:Start2}')
end;

FinishedHeadingLabel:=TLabel.Create(WizardForm);
with FinishedHeadingLabel do
begin
Top:= ScaleY(15);
Left:= ScaleX(175);
Width:= ScaleX(312);
Height:= ScaleY(57);
AutoSize:= false;
WordWrap:= true;
Font.Size:= 13;
Font.Style := [fsBold]
Font.Color:=ClWhite
Transparent:= true;
Parent:= WizardForm;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
end;

FinishedLabel:= TLabel.Create(WizardForm);
with FinishedLabel do
begin
Left:= ScaleX(175);
Top:= ScaleY(90);
Width:= ScaleX(295);
Height:= ScaleY(312);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Font.Color:=ClWhite
Font.Size:= 8;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:Finished1}')

end;
end;
end;

procedure HideComponents1;
begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
end;

procedure ShowComponents1(CurPageID: Integer);
begin
case CurPageID of
wpWelcome:
begin
WelcomeLabel1.Show
WelcomeLabel2.Show
end;
wpFinished:
begin
FinishedHeadingLabel.Show;
FinishedLabel.Show;
end;
end;
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
begin
HideComponents1;
ShowComponents1(CurPageID);
if CurPageID = wpWelcome then
begin
WizardForm.OuterNotebook.Hide;
FinishedImage.Hide;
end
else if CurPageID = wpFinished then
begin
WizardForm.OuterNotebook.Hide;
MainImage.Hide;
FinishedImage.Show;
end
else WizardForm.OuterNotebook.Show;
end;
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged2(CurPageID);
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 30 - ButtonLabel[bidBack].Width / 30);
ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);

end;

insombia 08-04-2011 22:56 1654269

Как сделать чтобы установка шла типа так http://pic.4m.net.ua/images/77301382401926032825.jpg

R3Pa4eK 09-04-2011 10:35 1654470

insombia, а что тебе именно надо?

insombia 09-04-2011 11:26 1654493

R3Pa4eK мне нужно чтобы когда игра устанавливалась то установка шла процентами хотябы

R3Pa4eK 09-04-2011 12:09 1654515

insombia, isdone тебе в помощь.

Vamp1re 09-04-2011 14:09 1654599

Дайте мне пожалуйста скрипт через который можно перемещать и изменять текст на страницах

insombia 09-04-2011 15:53 1654671

Как сделать 3D инсталлятор типа как в crysis 2 repack от recoding

R3Pa4eK 09-04-2011 17:05 1654710

insombia, никак.

insombia 09-04-2011 20:01 1654809

R3Pa4eK не может такого быть они же как то создали такой значит можно как то

Vamp1re 09-04-2011 22:21 1654900

insombia, есть один екземпляр етого скрипта, и он в автора :) и я недумаю что скоро ето закинут в интернет.

dracosha 09-04-2011 23:12 1654942

Serega, по этой ссылке Вы мне очень помогли...
Но спустя примерно пол года передо мной стала новая задача... Хотелось бы прописывать диапазон версий на которые может устанавливаться новая версия программы... Например месяц назад мною была выпущена версия 2.2.2.2
Три недели назад была версия 3.3.3.3
Две недели назад была версия 4.4.4.4
А сегодня я выпускаю на свет версию 5.5.5.5
Версию 5.5.5.5 можно ставить только на версии 3.3.3.3 и 4.4.4.4
Помогите пожалуйста с кодом

EvilAlex 10-04-2011 04:01 1655064

Доброго времени суток форумчане !

Кто может дать ссылку на скрипт и файлы для создания отдельно autorun ?

Зарание спасибо !

R.i.m.s.k.y. 10-04-2011 07:39 1655082

dracosha,
Result:= ( (build < MyAppVerBuild) and (build > MyAppVerBuildmin) ) or ( (revis < MyAppVerRevis) and (revis > MyAppVerRevismin) );

dracosha 10-04-2011 10:29 1655120

R.i.m.s.k.y., спасибо большое что откликнулись.
Я привел наверное немного грубый пример.
Дело в том что если например старая версия была 3.3.3.3 а новая будет 4.2.2.2 то последние цифры получается вроде как ниже хотя версия новая... В моем случае такое может случиться с тремя последними цифрами (т.е. с Minor, Build и Revis).

Edison007 10-04-2011 10:29 1655121

EvilAlex
http://rghost.ru/5149137

insombia 10-04-2011 10:54 1655128

Я где то видел что можно как то ускорить процесс установки это правда?если да то как?

shidow 10-04-2011 13:04 1655181

На последней странице пропал текст
http://i19.fastpic.ru/big/2011/0410/...a022ee7fbf.png
Помогите поправить
читать дальше »

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

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

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

[code]
////// Кнопки \\\\\\
const
ButtonWidth = 80;
ButtonHeight = 23;

var
WizardLabel: TLabel;
ButtonPanel: array of TPanel;
ButtonImage: array of TBitmapImage;
ButtonLabel: array of TLabel;
UsedButtons: array of TButton;
ButtonsCount: Integer;

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}\Button.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 InitializeWizard1();
begin
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('button.bmp')
LoadButtonImage(WizardForm.BackButton)
LoadButtonImage(WizardForm.NextButton)
LoadButtonImage(WizardForm.CancelButton)
LoadButtonImage(WizardForm.DirBrowseButton)
LoadButtonImage(WizardForm.GroupBrowseButton)
end;
////// Растягиваем картинки на на перво и последне станице \\\\\\
var
WelcomeLabel1, WelcomeLabel2, FinishedLabel, FinishedHeadingLabel: TLabel;

procedure InitializeWizard2();
begin
ExtractTemporaryFile('fon.bmp');

WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));

WelcomeLabel1:= TLabel.Create(WizardForm);
WelcomeLabel1.AutoSize:= False;
with WizardForm.WelcomeLabel1 do
WelcomeLabel1.SetBounds(Left, Top, Width, Height);
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.SetBounds(Left, Top, Width, Height);
WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel2.Font.Color:= clWhite;
WelcomeLabel2.Transparent:= True;
WelcomeLabel2.WordWrap:= true;
WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent:= WizardForm.WelcomePage

FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.AutoSize:= False;
with WizardForm.FinishedHeadingLabel do
FinishedHeadingLabel.SetBounds(Left, Top, Width, Height);
FinishedHeadingLabel.Font:= WizardForm.FinishedHeadingLabel.Font
FinishedHeadingLabel.Font.Color:= clWhite;
FinishedHeadingLabel.Transparent:= True;
FinishedHeadingLabel.WordWrap:= true;
FinishedHeadingLabel.Caption:= WizardForm.FinishedHeadingLabel.Caption;
FinishedHeadingLabel.Parent:= WizardForm.FinishedPage

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
FinishedLabel.SetBounds(Left, Top, Width, Height);
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
FinishedLabel.Parent:= WizardForm.FinishedPage

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
end;
//////\\\\\\
procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButtons()
end;
////// Растягиваем картинки на на перво и последне станице [Конец] \\\\\\
////// Кнопки [Конец] \\\\\\
const
Color = $000000;

////// Черный инсталл \\\\\\
procedure InitializeWizard3();
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:=$100800;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.GroupEdit.Color:=$100800;
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.WelcomeLabel1.Font.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clWhite;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clWhite;
//Избавиться от разделительных полос сверху и снизу
WizardForm.Bevel.visible:=true; // Если не надо, то закомментировать
WizardForm.BeveledLabel.visible:=true; // Если не надо, то закомментировать
WizardForm.Bevel1.visible:=true; // Если не надо, то закомментировать
//Избавляемся от полосы прокрутки в меню Всё готово к установке
WizardForm.ReadyMemo.ScrollBars:= ssNone // Если не надо, то закомментировать
end;
////// Черный инсталл [Конец] \\\\\\
procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
end;

R.i.m.s.k.y. 10-04-2011 13:50 1655201

dracosha, строковая переменная? тогда берешь к примеру 4.2.2.2, преобразуешь уго в число 1000*4+100*2+10*2+2 и сравниваешь.

Spector 10-04-2011 14:29 1655229

Подскажите скрипт авторана.
1. Если установлена программа и версии совпадают то запустить ее
2. Если не установлена тогда запустить setup

dracosha 10-04-2011 14:58 1655248

R.i.m.s.k.y., к сожалению я в этом не разбираюсь :(
а версию присваиваю вот так:

читать дальше »
Код:

#define MyAppVerMajor "0"
#define MyAppVerMinor "9"
#define MyAppVerBuild "19"
#define MyAppVerRevis "0"
#define MyAppVer MyAppVerMajor + "." + MyAppVerMinor + "." + MyAppVerBuild + "." + MyAppVerRevis

[Setup]
AppVersion={#MyAppVer}
VersionInfoVersion={#MyAppVer}


R3Pa4eK 10-04-2011 18:49 1655395

dracosha, если я правильно понял, то так:
#define MyAppVersion "1.0"
#define vers1 "1.0.0.0"

[Setup]
AppName={#MyAppName}
AppverName={#MyAppVersion}
AppVersion={#MyAppVersion}
VersionInfoVersion={#vers1}
VersionInfoTextVersion={#vers1}

dracosha 10-04-2011 19:34 1655425

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

R.i.m.s.k.y., а константам нельзя присвоить цифры примерно так?:
читать дальше »
Код:

const
  MyAppVerMajor = 3;
  MyAppVerMinor = 3 or 4;
  MyAppVerBuild = 3 or 4 or 5;
  MyAppVerRevis = 3 or 4 or 5;


Serega 10-04-2011 20:54 1655460

Цитата:

Цитата dracosha
Но спустя примерно пол года передо мной стала новая задача... »

Здравствуйте, да задач может быть сколько угодно... главное грамотно их решать... ;)
В данном, вашем случае можно поступить так:
Пример

Код:

[Setup]
AppName=My Program
AppId=MyProgram
AppVersion=5.5.5.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
function IsPreviousVersionUpdatable(const VerInstall: array of string): Boolean;
var
  InstallVersion, NeedInstall: string;
  i: Integer;
begin
  Result := False;
  case GetArrayLength(VerInstall) > 0 of
    True:
      try
        if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting('AppId')}_is1',
          'DisplayVersion', InstallVersion) then
          begin
            StringChange(InstallVersion, '.', '');
            for i := 0 to GetArrayLength(VerInstall)-1 do
                begin
                  NeedInstall := VerInstall[i];
                  StringChange(NeedInstall, '.', '');
                  if NeedInstall = InstallVersion then
                    begin
                      Result := True;
                      Break;
                    end;
                end;
          end;
      finally
        SetLength(NeedInstall, 0);
        SetLength(InstallVersion, 0);
      end;
    False: Result := True;
  end;
end;

function InitializeSetup(): Boolean;
begin
  Result := IsPreviousVersionUpdatable(['3.3.3.3', '4.2.2.2']);
  if not Result then
    MsgBox('Облом...', mbInformation, MB_OK);
end;



Цитата:

Цитата dracosha
а константам нельзя присвоить цифры примерно так? »

нет, на то они и константы, что имеют постоянное значение.

dracosha 10-04-2011 22:20 1655508

Serega, Большое спасибо

R.i.m.s.k.y. 11-04-2011 09:50 1655695

Цитата:

Цитата insombia
Я где то видел что можно как то ускорить процесс установки это правда?если да то как? »

Я когда-то давно писал: не использовать тяжелые режимы сжатия, не использовать AfterInstall/BeforeInstall на папках, а то отрабатывается на каждом файле из папки.

insombia 11-04-2011 17:59 1655938

Как сделать чтобы установку нельзя было отменить?

R.i.m.s.k.y. 11-04-2011 19:22 1655971

Цитата:

Цитата insombia
Как сделать чтобы установку нельзя было отменить? »

Format С: !!! ;)

а серьёзно ты что имел ввиду?
если чтобы потом нельзя было удалить из "Установка/удаление программ"
[Setup]
Uninstallable=false

а если тебе трэба чтобы батон Cancel нельзя было жмякнуть, тогда
[Setup]
AllowCancelDuringInstall=false

insombia 11-04-2011 20:20 1656011

Цитата:

Цитата R.i.m.s.k.y.
а если тебе трэба чтобы батон Cancel нельзя было жмякнуть, тогда
[Setup]
AllowCancelDuringInstall=false »

Это сенкс :)

actavir 11-04-2011 21:45 1656096

Народ тут увидел один репак очень оформление понравилось может кто-нибудь что-нибудь подобное своять?


insombia 11-04-2011 21:52 1656099

У когото есть скрипт на кнопки музыки вместе с картинкой?

actavir 12-04-2011 09:06 1656266

insombia, http://forum.ru-board.com/topic.cgi?...&limit=1&m=2#1 вот здесь самая первая библиотека bass.dll там же есть скрипт)))

Gnom_aka_Lexander 12-04-2011 11:29 1656367

Подскадите, пожалуйста, как на одну кнопку повесить несколько кликов?
Код:

procedure Click(Sender: TObject);
begin
if OnClick then
  TwoClick else OnClick;
end;
................
BackButton.OnClick := @Click;

процедура Click выбивает ошибку на then, мне нужно, чтоб по нажатию на кнопку заменялся ее OnClick
Интересный дефолтный
инсталл
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[_Code]
procedure InitializeWizard();
begin
      WizardForm.Color := clSilver;
      WizardForm.AutoScroll := False;
      WizardForm.ClientHeight := ScaleY(395);
      WizardForm.ClientWidth := ScaleX(635);

      WizardForm.WizardBitmapImage.Width := ScaleX(170);
      WizardForm.WizardBitmapImage.Height := WizardForm.ClientHeight;
      WizardForm.WizardBitmapImage.Parent := WizardForm;

      WizardForm.OuterNotebook.Left := WizardForm.WizardBitmapImage.Width;
      WizardForm.OuterNotebook.Width :=  WizardForm.ClientWidth-WizardForm.WizardBitmapImage.Width;
      WizardForm.OuterNotebook.Height := ScaleY(345);
      WizardForm.Bevel.Left := WizardForm.WizardBitmapImage.Width;
      WizardForm.Bevel.Top := WizardForm.OuterNotebook.Height;
      WizardForm.Bevel.Width := WizardForm.OuterNotebook.Width;

      WizardForm.InnerNotebook.Left := ScaleX(8);
      WizardForm.InnerNotebook.Width := WizardForm.OuterNotebook.Width-16;
      WizardForm.InnerPage.Color := clSilver;

      WizardForm.MainPanel.Left := WizardForm.WizardBitmapImage.Width;
      WizardForm.MainPanel.Width := WizardForm.ClientWidth-WizardForm.WizardBitmapImage.Width;
      WizardForm.MainPanel.Parent := WizardForm;
      WizardForm.MainPanel.Color := clGray;

      WizardForm.WizardSmallBitmapImage.Left := WizardForm.MainPanel.Width-WizardForm.WizardSmallBitmapImage.Width;
      WizardForm.WizardSmallBitmapImage.Top := ScaleY(0);

      WizardForm.PageDescriptionLabel.Left := ScaleX(32);
      WizardForm.PageDescriptionLabel.Width := WizardForm.MainPanel.Width-WizardForm.WizardSmallBitmapImage.Width-WizardForm.PageDescriptionLabel.Left;

      WizardForm.PageNameLabel.Width := WizardForm.MainPanel.Width-WizardForm.WizardSmallBitmapImage.Width-WizardForm.PageNameLabel.Left-10;

      WizardForm.BeveledLabel.Left := WizardForm.WizardBitmapImage.Width;
      WizardForm.BeveledLabel.Top := WizardForm.OuterNotebook.Height;

      WizardForm.CancelButton.Left := ScaleX(535);
      WizardForm.CancelButton.Top := ScaleY(360);

      WizardForm.NextButton.Left := ScaleX(445);
      WizardForm.NextButton.Top := ScaleY(360);

      WizardForm.BackButton.Left := ScaleX(365);
      WizardForm.BackButton.Top := ScaleY(360);

      WizardForm.WelcomePage.Color := clSilver;

      WizardForm.WelcomeLabel2.Left := ScaleX(16);
      WizardForm.WelcomeLabel2.Top := ScaleY(167);
      WizardForm.WelcomeLabel2.Width := ScaleX(437);
      WizardForm.WelcomeLabel2.Height := ScaleY(135);

      WizardForm.WelcomeLabel1.Parent := WizardForm.MainPanel;
      WizardForm.WelcomeLabel1.Left := ScaleX(0);
      WizardForm.WelcomeLabel1.Top := ScaleY(20);
      WizardForm.WelcomeLabel1.Width := WizardForm.MainPanel.Width;

      WizardForm.LicenseNotAcceptedRadio.Left := ScaleX(24);

      WizardForm.LicenseAcceptedRadio.Left := ScaleX(24);

      WizardForm.LicenseMemo.Width := WizardForm.InnerNotebook.Width;

      WizardForm.DirBrowseButton.Left := ScaleX(366);
      WizardForm.DirBrowseButton.Top := ScaleY(81);
      WizardForm.DiskSpaceLabel.Top := ScaleY(112);
      WizardForm.GroupBrowseButton.Left := ScaleX(366);
      WizardForm.GroupBrowseButton.Top := ScaleY(214);
      WizardForm.GroupBrowseButton.Parent := WizardForm.SelectDirPage;

      WizardForm.DirEdit.Left := ScaleX(24);
      WizardForm.GroupEdit.Left := ScaleX(24);
      WizardForm.GroupEdit.Top := ScaleY(216);
      WizardForm.GroupEdit.Parent := WizardForm.SelectDirPage;

      WizardForm.SelectGroupBitmapImage.Top := ScaleY(136);
      WizardForm.SelectGroupBitmapImage.Parent := WizardForm.SelectDirPage;

      WizardForm.NoIconsCheck.Top := ScaleY(220);
      WizardForm.NoIconsCheck.Parent := WizardForm.SelectDirPage;

      WizardForm.SelectStartMenuFolderBrowseLabel.Parent := WizardForm.SelectDirPage;
      WizardForm.SelectStartMenuFolderBrowseLabel.Top := ScaleY(180);

      WizardForm.SelectStartMenuFolderLabel.Parent := WizardForm.SelectDirPage;
      WizardForm.SelectStartMenuFolderLabel.Top := ScaleY(145);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
    if CurPageID = wpWelcome then WizardForm.WizardSmallBitmapImage.Hide else WizardForm.WizardSmallBitmapImage.Show;
    if CurPageID = wpWelcome then WizardForm.WelcomeLabel1.Show else WizardForm.WelcomeLabel1.Hide;
end;

может кому пригодится в качестве базы :)

insombia 12-04-2011 21:31 1656793

Как разделить установку на 2 диска чтобы каждый занимал по 4 30 гб хотябы?

Serega 13-04-2011 09:09 1657114

Цитата:

Цитата Лександер
как на одну кнопку повесить несколько кликов? »

Один из вариантов, это задавать свойство Tag := 0, 1 и так далее, выполняешь какой-то код, затем меняешь значения при каждом клике:
Пример

Код:

procedure Click(Sender: TObject);
begin
  case TButton(Sender).Tag of
    0:begin
        { выполняем какой-то код... }
        { присваиваем новое значение }
        TButton(Sender).Tag := 1;
      end;
    1:begin
        { выполняем какой-то код... }
        { присваиваем новое значение }
        TButton(Sender).Tag := 0;
      end;
  end;
  { для примера, отобразим в зоголовке }
  WizardForm.Caption := 'BackButton.Tag := ' + IntToStr(TButton(Sender).Tag);
end;


Цитата:

Цитата Лександер
процедура Click выбивает ошибку на then, мне нужно, чтоб по нажатию на кнопку заменялся ее OnClick »

Ну допустим на then ошибки быть не может, компилятор вам просто говорит, что для проверки условия данных не достаточно и тем более не понятно, что такое if OnClick then.
Если меняете стандартные функции кнопок, то лучше использовать их родные, такие как function BackButtonClick(CurPageID: Integer): Boolean;, а уже в них разрешать выполнение, либо запрещать.

Arsi000 13-04-2011 14:21 1657311

как сделать так чтобы установщик дополнения брал значение в реестре и если его нет писал бы сообщение что прога не установлена вот мой пример только как то его доработать бы надо не знаю как. да и кстати устанавлиивать он должен из внешней папки
[Files]
Source: {src}\Content - Installer Data\*; DestDir: "{code:getData}"; Flags: skipifsourcedoesntexist ignoreversion external
Код:


function getData(S:String): String;
var
    InsPath: String;
    Reg: boolean;   
begin
    Reg := RegQueryStringValue(HKLM, 'SOFTWARE\Mycompany\Myproga, 'InstallPath', InsPath);
 Result := InsPath;
end;


Habetdin 13-04-2011 15:01 1657338

Arsi000, как-то так :)
Код:

[Files]
Source: {src}\Content - Installer Data\*; DestDir: "{reg:HKLM\SOFTWARE\My Company\My Program,InstallPath|{pf}\My Program}"; Flags: skipifsourcedoesntexist ignoreversion external

[code]
function DetectInstallRegKey: Boolean;
var
  Path: string;
begin
  if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\My Company\My Program', 'InstallPath', Path) then
    if Path <> '' then
      Result:= True
    else
      Result:= False;
end;

function InitializeSetup(): Boolean;
begin
  Result:= DetectInstallRegKey;
  if Result = False then
  MsgBox('На вашем компьютере не найдена программа My Program.' + #13#10
        'Установка дополнения к My Program невозможна!', mbInformation, MB_OK);
end;


LordSP 14-04-2011 17:58 1658371

Ребят есть вопрос: Как в этом скрипте:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:InnoSetupTest.

[CustomMessages]
ProgressBar_Caption=ProgressBar Caption
ProgressBar_Description=ProgressBar Description

[code]
var
DSProgressBar: TNewProgressBar;

{ ProgressBar_Activate }

procedure ProgressBar_Activate(Page: TWizardPage);
begin
// enter code here...
end;

{ ProgressBar_ShouldSkipPage }

function ProgressBar_ShouldSkipPage(Page: TWizardPage): Boolean;
begin
Result := False;
end;

{ ProgressBar_BackButtonClick }

function ProgressBar_BackButtonClick(Page: TWizardPage): Boolean;
begin
Result := True;
end;

{ ProgressBar_NextkButtonClick }

function ProgressBar_NextButtonClick(Page: TWizardPage): Boolean;
begin
Result := True;
end;

{ ProgressBar_CancelButtonClick }

procedure ProgressBar_CancelButtonClick(Page: TWizardPage; var Cancel, Confirm: Boolean);
begin
// enter code here...
end;

{ ProgressBar_CreatePage }

function ProgressBar_CreatePage(PreviousPageId: Integer): Integer;
var
Page: TWizardPage;
begin
Page := CreateCustomPage(
PreviousPageId,
ExpandConstant('{cm:ProgressBar_Caption}'),
ExpandConstant('{cm:ProgressBar_Description}')
);

{ DSProgressBar }
DSProgressBar := TNewProgressBar.Create(Page);
with DSProgressBar do
begin
Parent := Page.Surface;
Left := ScaleX(0);
Top := ScaleY(88);
Width := ScaleX(413);
Height := ScaleY(49);
Min := 0;
Max := 100;
end;

with Page do
begin
OnActivate := @ProgressBar_Activate;
OnShouldSkipPage := @ProgressBar_ShouldSkipPage;
OnBackButtonClick := @ProgressBar_BackButtonClick;
OnNextButtonClick := @ProgressBar_NextButtonClick;
OnCancelButtonClick := @ProgressBar_CancelButtonClick;
end;

Result := Page.ID;
end;

{ ProgressBar_InitializeWizard }

procedure InitializeWizard();
begin
ProgressBar_CreatePage(wpInstalling);
end;

Заменить стандартный прогресс-бар,тем что появляется в конце страницы,пробовал wpInstalling,не помогло,появляется,сразу после установки...Please Help!

LordSP 14-04-2011 18:17 1658383

Ребят есть вопрос: Как в этом скрипте:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:InnoSetupTest.

[CustomMessages]
ProgressBar_Caption=ProgressBar Caption
ProgressBar_Description=ProgressBar Description

[code]
var
DSProgressBar: TNewProgressBar;

{ ProgressBar_Activate }

procedure ProgressBar_Activate(Page: TWizardPage);
begin
// enter code here...
end;

{ ProgressBar_ShouldSkipPage }

function ProgressBar_ShouldSkipPage(Page: TWizardPage): Boolean;
begin
Result := False;
end;

{ ProgressBar_BackButtonClick }

function ProgressBar_BackButtonClick(Page: TWizardPage): Boolean;
begin
Result := True;
end;

{ ProgressBar_NextkButtonClick }

function ProgressBar_NextButtonClick(Page: TWizardPage): Boolean;
begin
Result := True;
end;

{ ProgressBar_CancelButtonClick }

procedure ProgressBar_CancelButtonClick(Page: TWizardPage; var Cancel, Confirm: Boolean);
begin
// enter code here...
end;

{ ProgressBar_CreatePage }

function ProgressBar_CreatePage(PreviousPageId: Integer): Integer;
var
Page: TWizardPage;
begin
Page := CreateCustomPage(
PreviousPageId,
ExpandConstant('{cm:ProgressBar_Caption}'),
ExpandConstant('{cm:ProgressBar_Description}')
);

{ DSProgressBar }
DSProgressBar := TNewProgressBar.Create(Page);
with DSProgressBar do
begin
Parent := Page.Surface;
Left := ScaleX(0);
Top := ScaleY(88);
Width := ScaleX(413);
Height := ScaleY(49);
Min := 0;
Max := 100;
end;

with Page do
begin
OnActivate := @ProgressBar_Activate;
OnShouldSkipPage := @ProgressBar_ShouldSkipPage;
OnBackButtonClick := @ProgressBar_BackButtonClick;
OnNextButtonClick := @ProgressBar_NextButtonClick;
OnCancelButtonClick := @ProgressBar_CancelButtonClick;
end;

Result := Page.ID;
end;

{ ProgressBar_InitializeWizard }

procedure InitializeWizard();
begin
ProgressBar_CreatePage(wpInstalling);
end;

Заменить стандартный прогресс-бар,тем что появляется в конце страницы,пробовал wpInstalling,не помогло,появляется,сразу после установки...Please Help!

LinkOFF 14-04-2011 19:17 1658421

как мне после установки была галка "посетить сайт" и выйти туда

R.i.m.s.k.y. 14-04-2011 19:27 1658428

Цитата:

Цитата LinkOFF
как мне после установки была галка "посетить сайт" и выйти туда »

Filename: http://www.SVP-Team.com; Description: Сходить на сайтег; Flags: shellexec skipifsilent postinstall Unchecked

insombia 14-04-2011 22:03 1658526

Как сделать чтобы установочный файлы были фриарк и по нажатию на них они распаковывали файлы в папку какуюто?

david141 15-04-2011 07:03 1658681

У меня три вопроса если можно.
Как сделать такое окно после окна приветствия?



Как сделать выбор браузера по умолчанию?



Как сделать так чтобы файлы были не в setup.exe а подхватывались из папки?


СПАСИБО.

Gnom_aka_Lexander 15-04-2011 09:35 1658744

LordSP, david141, Как сделать, чтобы получить ответ на свой вопрос?
1. Научиться оформлять посты и пользоваться тегами, дабы не замусоривать форум.
2. Научиться пользоваться поиском, - ответ ты получиш только в том случае, если подобного вопроса не было.
3. научится читать справку к программе - на третий твой вопрос ответ знает даже школьник.

R.i.m.s.k.y. 15-04-2011 10:09 1658764

Цитата:

Цитата david141
Как сделать так чтобы файлы были не в setup.exe а подхватывались из папки? »

Гы, ответ даже на этой странице есть, и не в шапке!

LordSP 15-04-2011 11:53 1658871

Ребят еще такой вопрос,мучаюсь с этим скриптом никак понять не могу,как соединить так чтобы,путь присваивался из кода,если нет,выдавал сообщения о не нахождении пути,и еще чтобы сразу проверялась версия,если не совпадает с заданной,тоже появляется сообщение и установка прекращается,но есть еще и такой вопрос:Можно сделать чтобы сообщения появлялись по очереди,или же одним сообщением.
Вот скрипт: Сорри за то что целиком,просто не умею я спойлеры делать :-( Не судите строго!

[Setup]
AppName=GetDeviceInfo
AppVerName=GetDeviceInfo
DefaultDirName={code:GetInstallDir}
DisableDirPage=yes

[Files]
Source: "D:\CDMS\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[code]
Function GetInstallDir( AppID: String ): String; var dir: String;
begin
RegQueryStringValue(HKCU, 'SOFTWARE\Matrix', 'Path', dir);
Result:= dir;
end;

function InitializeSetup1(): Boolean; var ResultStr: String;
begin
Result:= True;
if not RegValueExists(HKCU, 'SOFTWARE\Matrix','Path') then
begin
MsgBox('Путь установки не опознан!', mberror, mb_ok);
Result:=False;
exit;
end;
begin
RegQueryStringValue(HKCU, 'Software\Matrix', 'Version', ResultStr);
if ResultStr='1.1.0' then
begin
Result := MsgBox('Поиск установленных компонентов:' #13#13 'Компоненты найдены. Продолжить установку?', mbConfirmation, MB_YESNO) = idYes;
if Result = False then
MsgBox('Поиск установленных компонентов:' #13#13 'Установка прервана.', mbInformation, MB_OK);
end
else MsgBox('Поиск установленных компонентов:' #13#13 'Версия неверна!!', mbConfirmation, MB_OK);
end
end;

VonFront 15-04-2011 17:37 1659143

Добрый день, есть два простых вопроса, и более того ответы на них скорее всего уже есть, но увы нет времени искать.
Подскажите или ткните носом куда надо.

Inno Setup версия 5,4,2

вопрос первый как правильно прописать чтоб файлы скидывались по такому пути?
%userprofile%\Application Data\ПАПКА\ а то inno setup почему то на рабочем столе создает %userprofile%

как я понял verysilent и silent устонавливают в тихую, но мне надо чтоб установочный файл после копирования запускался, а не остовался лежать, тоесть надо убрать возможность снять галочку "Запустить ПО" по оканчании установки, чтоб он это автоматом делал.

И как его попросить чтоб он не создовал файлы деинсталяции unins000.exe unins000.dat

Спасибо, надеюсь на понимание, правда совсем нет времени читать всю ветку.

VonFront 15-04-2011 17:48 1659150

Добрый день, есть два простых вопроса, и более того ответы на них скорее всего уже есть, но увы нет времени искать.
Подскажите или ткните носом куда надо.

Inno Setup версия 5,4,2

вопрос первый как правильно прописать чтоб файлы скидывались по такому пути?
%userprofile%\Application Data\ПАПКА\ а то inno setup почему то на рабочем столе создает %userprofile%

как я понял verysilent и silent устонавливают в тихую, но мне надо чтоб установочный файл после копирования запускался, а не остовался лежать, тоесть надо убрать возможность снять галочку "Запустить ПО" по оканчании установки, чтоб он это автоматом делал.

И как его попросить чтоб он не создовал файлы деинсталяции unins000.exe unins000.dat

Спасибо, надеюсь на понимание, правда совсем нет времени читать всю ветку.

murlakatamenka 15-04-2011 18:14 1659174

VonFront, в инно свои переменные есть (можно посмотреть в родном help-е)
путь для вашего скрипта - {userappdata}/ПАПКА
для запуска файла используйте
[Run]
Filename: "путь к файлу"; Flags: shellexec postinstall

Gnom_aka_Lexander 15-04-2011 20:39 1659235

Сваял по просьбе, развитие темы вертикального статусбара, надеюсь понравится :) встроен ИсДоне.

LordSP, архив не битый, уже 70 человек скачало и никто не жаловался. архиватор, видимо битый у тебя :)

Переделал для игры ведьмак, приделал авторан, доработал страницу установки.Скачать

boss911 15-04-2011 21:21 1659247

Цитата:

Цитата VonFront
%userprofile%\Application Data\ПАПКА\ »

Код:

{userappdata}\ПАПКА
Цитата:

Цитата VonFront
надо убрать возможность снять галочку "Запустить ПО" по оканчании установки, чтоб он это автоматом делал. »

Код:

[Run]
Filename: {app}\PROG.exe; Description: Запустить ПО; Flags: postinstall skipifsilent

Цитата:

Цитата VonFront
чтоб он не создовал файлы деинсталяции unins000.exe unins000.dat »

Код:

[Setup]
Uninstallable=false


R.i.m.s.k.y. 15-04-2011 21:40 1659254

Цитата:

Цитата VonFront
И как его попросить чтоб он не создовал файлы деинсталяции unins000.exe unins000.dat »

[Setup]
Uninstallable=false

LordSP 15-04-2011 22:47 1659298

Лександер,

Архив битый,перезалей....

victor2006 15-04-2011 23:32 1659331

Всем привет.
Подскажите, пожалуйста, какую переменную надо использовать в секции [setup], чтобы при установке было произведено копирование файлов в директорию C:\Users\ИМЯ ПОЛЬЗОВАТЕЛЯ\Saved Games ?

Все переменные из справки ведут или в C:\Users\ ИМЯ ПОЛЬЗОВАТЕЛЯ \Documents или в «вариации» C:\Users\ ИМЯ ПОЛЬЗОВАТЕЛЯ \AppData
Спасибо.

R.i.m.s.k.y. 16-04-2011 11:40 1659582

Цитата:

Цитата Лександер
Сваял по просьбе, развитие темы вертикального статусбара »

щито это? скрин можно?
Цитата:

Цитата victor2006
C:\Users\ ИМЯ ПОЛЬЗОВАТЕЛЯ \Documents »

а если отсечь?
Код:

s:=ExpandConstant('{userdocs}');
StringChangeEx(S, '\Documents', '', True);
StringChangeEx(S, '\Мои документы', '', True);

Мой вопрос:
как расшифровать эту запись:
Код:

DefaultDirName={code:FunctionRegPath|{pf}\Vmd}
где FunctionRegPath - это имя функции, возвращающей то, что надо.
Что значит | ?
Как это вообще работает?

LordSP 16-04-2011 11:59 1659596

Ребят,помогите с прогресс баром,он неправильно отображается на всех страницах,увеличить то я его увеличил,а вот как сделать чтобы он оказался на своем месте,пожалуйста Хелп!!!

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

[code]
procedure InitializeWizard();
begin
with WizardForm do
begin
ProgressGauge.Top:=ScaleY(88);
ProgressGauge.Left:=ScaleX(0);
ProgressGauge.Width:=ScaleX(413);
ProgressGauge.Height:=ScaleY(49);
ProgressGauge.Parent:= WizardForm;
end
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageId = wpInstalling then
begin
WizardForm.ProgressGauge.Show;
end
end;

R3Pa4eK 16-04-2011 14:10 1659691

LordSP, ProgressGauge.Parent:= WizardForm.InstallingPage;

Gnom_aka_Lexander 16-04-2011 14:27 1659704

R3Pa4eK, если ты заметил, то прогрессбар специально на визардформ вынесен был, тут в CurPageChanged нужно:
Код:

procedure CurPageChanged(CurPageID: Integer);
 begin if CurPageId = wpInstalling then  begin WizardForm.ProgressGauge.Show else WizardForm.ProgressGauge.Hide;
    end;
 end;


LordSP 16-04-2011 15:37 1659737

R3Pa4eK, Лександер, ,Спасибо ребят,а то единственную переменную не добавил, и надо же,оказывается все просто,вот только разве к ProgressGauge.Parent:= WizardForm,можно добавлять переменные страниц? ProgressGauge.Parent:= WizardForm.InstallingPage (FinishingPage,WelcomePage)???

Gnom_aka_Lexander 16-04-2011 15:53 1659739

Parent - расположение, можно указывать вообще чего душе угодно, хоть WizardForm.WizardSmallBitmapImage :)
Третий вариант, жду предложений и пожеланий:)
The Witcher - Ведьмак

LordSP 16-04-2011 17:46 1659783

Лександер, Чуть не забыл,вот на примере,покажи как использовать свой шрифт в процессе установки,только отдельным независимым кодом,если можно пожалуйста :-)

ivsatel 16-04-2011 17:52 1659784

Как избавиться от дописки в секции регистра [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
к любой программе дописывается _is1. А хотелось бы просто название программы.

Gnom_aka_Lexander 16-04-2011 18:42 1659809

ivsatel, никак, эта "дописка" обязательна и пишется она не к программе, а к ИД программы, если он не указан, то используется название в качестве ИД, служит для того, чтобы если совершенно случайно будет устанавливаться программа с таким-же ИД, но другим названием, их ключи деинсталляции не перепутались. - будет дописано _is2

ivsatel 16-04-2011 18:48 1659813

Лександер, А возможно ли как-то указать его? Имею в виду ID.

Gnom_aka_Lexander 16-04-2011 19:01 1659822

ivsatel, в секции сетап:
AppID={{EE7C4A60-4568-459E-BDDB-D3100BF2BC1C} - ID игры ведьмак. очень желательно использовать оригинальный ID, потому что большинство официальных пачей ишут по нему то, что они должны пачить.
LordSP, пример использования внешнего шрифта

ivsatel 16-04-2011 20:43 1659867

Лександер, получилось:
{EE7C4A60-4568-459E-BDDB-D3100BF2BC1C}_is1
Отключил запись в реестр инсталлятором. А возможно ли сделать те же записи только через [code] ?

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Prog]
"Language"="1049"
"DisplayName"="My Prog"
"DisplayVersion"="1.0.0"
"DisplayIcon"="C:\\Program Files\\My Prog\\My Prog.exe"
"UninstallString"="C:\\Program Files\\My Prog\\My Prog.exe"
"URLInfoAbout"="http://"

LordSP 16-04-2011 21:02 1659878

Лександер, Спасибо!
Еще один вопросик,это посложнее: В этом скрипте как реализовать чтобы путь был взят из секции code,но при этом если нет записи о пути установки в реестре,выдывалось сообщение,что не найден путь,а также при этом проверялась версия,если ниже установленной,то выдавалось,что версия не соответствует:
[code]
[Setup]
AppName=GetDeviceInfo
AppVerName=GetDeviceInfo
DefaultDirName={code:GetInstallDir}

Код:

Function GetInstallDir( AppID: String ): String; var dir: String; var ResultStr: String;
begin
  RegQueryStringValue(HKCU, 'SOFTWARE\Matrix', 'Version', ResultStr);
    ResultStr:='1.1.0'
    RegQueryStringValue(HKCU, 'SOFTWARE\Matrix', 'Path', dir);
  Result:= dir;
end;
 
function InitializeSetup(): Boolean;
begin
 Result:= True;
 if not RegValueExists(HKCU, 'SOFTWARE\Matrix', 'Version') then
 begin
  if not RegValueExists(HKCU, 'SOFTWARE\Matrix','Path') then
  begin
  MsgBox('Программа не найдена!', mberror, mb_ok);
  Result:=False;
  exit;
  end
 end
end;

Цитата:

Цитата LordSP
Function GetInstallDir( AppID: String ): String; var dir: String; var ResultStr: String; begin RegQueryStringValue(HKCU, 'SOFTWARE\Matrix', 'Version', ResultStr); ResultStr:='1.1.0' RegQueryStringValue(HKCU, 'SOFTWARE\Matrix', 'Path', dir); Result:= dir; end; »

Вот тут ли можно,создать сообщение,еще можно ли сделать последовательный вывод сообщение,сначала о пути,а потом о версии,и можно одним сообщением,лучше рассмотреть 2 варианта.

Gnom_aka_Lexander 16-04-2011 21:13 1659885

LordSP,
Цитата:

Цитата Serega
Сборник скриптов в в формате .chm от Krinkels; »

в шапку лень заглянуть? там как раз есть ответ на твой вопрос, по остальным примерам в шапке тоже можно потыкать :)

LordSP 16-04-2011 21:24 1659893

Лександер, Я уже и в шапке искал и в скриптах смотрел,не нашел к сожалению.
Еще такое ты случаем не обладаешь скриптом,который корректно без ошибок заменяет стандартное окно "О программе".. у меня был один,но после выхода из инсталлятора,либо завершения его работы,слышен звук ошибки.

wertulll 17-04-2011 06:40 1660079

Pебят подскажите пожалуйста как зделать картинку на последнем окне туже что и на первом и вернуть текст. как правильно дописать окно завершение установки? в этом скрипте подскажите пожалуйста!!!
читать дальше »
[Setup]
AppId={{35133CCE-057F-4218-9C63-007B8E03A776}
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
WizardImageFile=D:\image\WizardImage.bmp
WizardSmallImageFile=D:\image\WizardSmallImage.bmp

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



[Files]
Source: "D:\image\button.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\black_folder.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\logo.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "D:\image\background.bmp"; DestDir: "{tmp}"; Flags: dontcopy

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

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

var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
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
end;

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

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm)
Image.Width:=160
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm)
Labl.Left:=13
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
end;

procedure InitializeWizard1();
begin
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:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

procedure InitializeWizard2();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 55;
Width := 483;
end;
with PageNameLabel do begin
Font.Name := 'Tahoma'
Width := Width - 200;
Left := Left + 0;
end;
with PageDescriptionLabel do begin
Font.Name := 'Tahoma'
Width := Width - 483;
Left := Left + 483;
end;
end;
end;

const
Color = clblack;

procedure InitializeWizard3();
begin
WizardForm.PageNameLabel.Font.Color:=clWhite;
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.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.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;
WizardForm.PageNameLabel.Font.Color:=clWhite;
WizardForm.Bevel.visible:=true ;
WizardForm.BeveledLabel.visible:=false ;
WizardForm.Bevel1.visible:=true ;
WizardForm.ReadyMemo.ScrollBars:= ssNone
end;

procedure InitializeWizard4();
begin
ExtractTemporaryFile('black_folder.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\black_folder.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\black_folder.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
end;

var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;

procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://ñàéò.ðó', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard5();
begin
ExtractTemporaryFile('logo.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(161);
Height := ScaleY(36);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end;

var
WelcomeLabel1, WelcomeLabel2: TLabel;
BmpFile: TBitmapImage;

procedure InitializeWizard6();
begin
ExtractTemporaryFile('background.bmp');

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\background.bmp'));
BmpFile.SetBounds(0, 0, 483, 320);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.hide;
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
Left:= ScaleX(200);
Top:= ScaleY(35);
Width:= ScaleX(303);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Name:='Tahoma'
Font.Style := [fsBold]
Font.Size:= 12;
Font.Color:=ClWhite
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
Top:= ScaleY(90);
Left:= ScaleX(200);
Width:= ScaleX(270);
Height:= ScaleY(300);
AutoSize:= false;
WordWrap:= true;
Font.Color:=ClWhite
Font.Name:='Tahoma'
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
InitializeWizard6();
end;

LordSP 17-04-2011 07:04 1660081

wertulll, Для примера скачай это ,там разберешься.

wertulll 17-04-2011 07:08 1660083

чёт не хатит скачиватся :search:

LordSP 17-04-2011 07:48 1660089

wertulll, С сервисом проблема,Вот

LordSP 17-04-2011 08:24 1660097

wertulll, Перезалил,Держи

frozengrob 17-04-2011 10:16 1660131

А можно ли как нибудь применить Растровые картинки при смене фона установочника пишет типа нельзя . Пожалуйста помогите если можно пишет ошибку Bitmap image is not valid. Вставлял и растровые и векторные всё равно пишет.

Gnom_aka_Lexander 17-04-2011 11:42 1660166

frozengrob, Стандартный фрмат изображениий - бмп и ико, остальное только внешними библиотеками. Читай шапку, там есть все, что нужно.

frozengrob 17-04-2011 12:40 1660185

Лександер Огромное спасибо я разобрался )) Будь добр подскажи как в Репаке при установке сделать так чтобы проигрывалась музыка или кто знает дайте легкий скрипт) Пожалуйста. или хотя бы ссылку

insombia 17-04-2011 12:42 1660187

frozengrob музыку можно сделать чтобы играла через inno setup gamescript generator а вот чтобы с кнопкой я не знаю и сам

R.i.m.s.k.y. 17-04-2011 13:49 1660210

Цитата:

Цитата insombia
музыку можно сделать чтобы играла через inno setup gamescript generator а вот чтобы с кнопкой я не знаю и сам »

в шапке "Коллекция скриптов", там есть "Пример 1 – музыка воспроизводится только при нажатии кнопки «play»"

LinkOFF 17-04-2011 17:12 1660319

подскажите пожалуйста как мне сделать чтоб наверху где написано "пожалуйста подождите пока..." была картинка по всей длине
Типо такого:http://forum.oszone.net/attachment.p...1&d=1303046804

murlakatamenka 17-04-2011 17:42 1660333

Несколько тонких вопросов :
1. Как можно настроить, чтобы отдельные папки/файлы сохранялись в отдельные .bin-файлы ?
2. Как можно сделать, чтобы в зависимости от версии Windows (32/64 бита) ключи реестра создавались соответственно в HKLM/Software/... и HKLM/Software/Wow6432Node/...
3. Подскажите нормальный вариант для сплэша. Хочу сделать следующее: сначала появляется лого Mass Effect (появление плавное, т.е. со сменой прозрачности), а потом так же плавно появляестся 2 (это цифра, для Mass Effect 2 всё делается :))и спустя некоторое врмя они плавно исчезают. isgsg.dll у меня не работает вообще (Win 7 x64), вариант через sleep мне не нравится тем, что при наведении на сплэш курсор меняется на со стрелки на кружок. С картинками поработать смогу (в Photoshop).
Спасибо за помощь.

R.i.m.s.k.y. 17-04-2011 18:13 1660352

Цитата:

Цитата murlakatamenka
2. Как можно сделать, чтобы в зависимости от версии Windows (32/64 бита) ключи реестра создавались соответственно в HKLM/Software/... и HKLM/Software/Wow6432Node/... »

стандартная функция IsWin64 и Check: ()
Check: (not IsWin64); Root: HKLM; Subkey: SOFTWARE\Gabest\Media Player Classic;...
Check: IsWin64; Root: HKLM; Subkey: Software\Wow6432Node\Gabest\Media Player Classic...
не забудь
[Setup]
ArchitecturesInstallIn64BitMode=x64

и вообще в справке почитай про небольшие отличия между х86 и х64

YURSHAT 17-04-2011 18:58 1660375

LordSP,
Цитата:

Цитата LordSP
Лександер, Я уже и в шапке искал и в скриптах смотрел,не нашел к сожалению.
Еще такое ты случаем не обладаешь скриптом,который корректно без ошибок заменяет стандартное окно "О программе".. у меня был один,но после выхода из инсталлятора,либо завершения его работы,слышен звук ошибки. »

скрипт
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code_]
function AppendMenu(hMenu: HMENU; uFlags, uIDNewItem: UINT; lpNewItem: PChar): BOOL;
  external 'AppendMenuA@user32.dll stdcall';
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU; external 'GetSystemMenu@user32.dll stdcall';

const
  WM_SYSCOMMAND = $0112;
  MF_DELETE    = $200;
  MF_SEPARATOR  = $800;
  MF_BYPOSITION = $400;

var
  Menu: TMenuItem;

procedure AppOnMessage(var Msg: TMsg; var Handled: Boolean);
begin
  if Msg.message = WM_SYSCOMMAND then
    if Msg.wParam = Menu.Handle then
      MsgBox('Здесь могла бы быть ваша реклама... ', mbInformation, MB_OK);;
end;

procedure InitializeWizard();
begin
  // попытаемя удалить родное меню 'О программе'
  if not AppendMenu(GetSystemMenu(Wizardform.Handle, True), MF_DELETE, 0, SetupMessage(msgAboutSetupMenuItem)) then
    WizardForm.Position:= poScreenCenter;
  // создаём сепаратор
  AppendMenu(GetSystemMenu(Wizardform.Handle, False), MF_SEPARATOR, 0, '');
  Menu:= TMenuItem.Create(WizardForm); // создаём ссылку на менюшку
  // добавляем свой пункт в системное меню 'О программе'
  AppendMenu(GetSystemMenu(Wizardform.Handle, False), MF_BYPOSITION, Menu.Handle, SetupMessage(msgAboutSetupMenuItem));
  Application.OnMessage:= @AppOnMessage;
end;

для ResTools'овской инно

LinkOFF 17-04-2011 20:03 1660397

помогите пожалуйста скрепить 2 скрипта.В одном игра со скином и скартинкой во весь инстал,а в другом вставка логотипа и у меня не получается их скрепить.Помогите пожалуйста.Зарание спасибо

Вот скрипт http://rghost.ru/5225030

Gnom_aka_Lexander 17-04-2011 20:20 1660413

R.i.m.s.k.y., еще проще, задается стандартный для х32 ключ, в х64 он автоматом поправляется как нужно - лично проверил. А также обращения к ключу идут с этой поправкой - тоже проверено.
LinkOFF, прикрепил соединенный скрипт, ты энд один пропустил.

R.i.m.s.k.y. 17-04-2011 20:31 1660419

Цитата:

Цитата Лександер
R.i.m.s.k.y., еще проще, задается стандартный для х32 ключ, в х64 он автоматом поправляется как нужно - лично проверил. А также обращения к ключу идут с этой поправкой - тоже проверено. »

Типа HKCU32/HKCU64? это да, но ...Software\Wow6432Node\... оно не учитывает, тоже проверил

Gnom_aka_Lexander 17-04-2011 20:34 1660421

Цитата:

Цитата R.i.m.s.k.y.
Wow6432Node\. »

оно учитывает, я-же говорю - проверял неоднократно, все вписывается правильно, и обращение, например из авторана, идет без Wow6432Node, но оно учитывается.Вот, для проверки - удали строчки распаковки исдоне, чтоб не было ошибок, и установи, потом запусти еще раз. И обрати внимание на реестр.

YURSHAT 17-04-2011 20:40 1660422

LinkOFF,
Цитата:

Цитата LinkOFF
помогите пожалуйста скрепить 2 скрипта.В одном игра со скином и скартинкой во весь инстал,а в другом вставка логотипа и у меня не получается их скрепить.Помогите пожалуйста.Зарание спасибо »

держите
Код:

#define MyAppName "Mass Effect"
#define MyAppVersion "1.0"
#define MyAppPublisher "BioWare"
#define MyAppURL "http://www.torrent-games.net/"
#define MyAppExeName "MassEffectLauncher.exe"

[Setup]
AppId={{D9C5ACA8-A99E-4431-AC50-236359DA74F8}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=out
OutputBaseFilename=setup
WizardImageFile=img\WizardImage.bmp
WizardSmallImageFile=img\WizardSmallImage.bmp
SetupIconFile=img\setup.ico
DisableReadyPage=yes
AllowNoIcons=yes
Compression=lzma
SolidCompression=no
DiskSpanning=yes
DiskSliceSize=727000000
PrivilegesRequired=poweruser

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

[Files]
Source: "skin\isskin.dll"; DestDir: "{app}"; Flags: dontcopy
Source: "skin\tiger_v2.cjstyles"; DestDir: "{tmp}"; Flags: dontcopy
Source: "img\papka.bmp"; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: "img\img.bmp"; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: "img\logo.bmp"; DestDir: "{tmp}"; Flags: dontcopy nocompression
;Source: "D:\Games\Fallout New Vegas\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{group}\Начать игру"; Filename: "{app}\{#MyAppExeName}";
Name: "{group}\Удалить игру"; Filename: "{uninstallexe}";
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}";


[Code_]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

var
WLabel1, WLabel2,
FLabel1, FLabel2: TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;
BmpFile: TBitmapImage;
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;

procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://сайт.ру', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard1();
begin
WizardForm.BorderStyle:= bsDialog;
WizardForm.Bevel.Hide
WizardForm.Bevel1.Hide

WizardForm.PageNameLabel.Font.Color:=clwhite;
WizardForm.LicenseAcceptedRadio.Font.Color:=clwhite;
WizardForm.LicenseNotAcceptedRadio.Font.Color:=clwhite;
WizardForm.Font.Color:=clwhite;

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;

ExtractTemporaryFile('img.bmp');
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\img.bmp'));
BmpFile.SetBounds(0, 0, 497, 313);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.WizardBitmapImage.Width := 497;
WizardForm.WizardBitmapImage.Height := 313;
WizardForm.WizardSmallBitmapImage.Left:=0;
WizardForm.WizardSmallBitmapImage.Width:=497;
WizardForm.WizardSmallBitmapImage.Height:=58;
WizardForm.PageDescriptionLabel.Width:=300;
WizardForm.PageNameLabel.Width:=300;
WizardForm.FileNameLabel.Visible:=False;
WizardForm.ProgressGauge.Top:=ScaleY(100);
WizardForm.StatusLabel.Top:=ScaleY(80);
WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(176);
WLabel1.Top := ScaleY(80);
WLabel1.Width := ScaleX(301);
WLabel1.Height := ScaleY(54);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Font.Size := 11;
WLabel1.Font.Style := [fsBold];

WLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;
WLabel2 :=TLabel.Create(WizardForm);
WLabel2.Top := ScaleY(130);
WLabel2.Left := ScaleX(176);
WLabel2.Width := ScaleX(301);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;

WLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;
WizardForm.WizardBitmapImage2.Width := 497;
WizardForm.WizardBitmapImage2.Height := 313;
FLabel1 := TLabel.Create(WizardForm);
FLabel1.Left := ScaleX(176);
FLabel1.Top := ScaleY(80);
FLabel1.Width := ScaleX(301);
FLabel1.Height := ScaleY(54);
FLabel1.AutoSize := False;
FLabel1.WordWrap := True;
FLabel1.Font.Size := 11;
FLabel1.Font.Style := [fsBold];

FLabel1.Caption := WizardForm.FinishedHeadingLabel.Caption;
FLabel1.Transparent := True;
FLabel1.Parent := WizardForm.FinishedPage;
FLabel2 :=TLabel.Create(WizardForm);
FLabel2.Top := ScaleY(130);
FLabel2.Left := ScaleX(176);
FLabel2.Width := ScaleX(301);
FLabel2.Height := ScaleY(53);
FLabel2.AutoSize := False;
FLabel2.WordWrap := True;

FLabel2.Caption := '{#MyAppName} установлена на Ваш компьютер.' #13#13
'Нажмите «Завершить», чтобы выйти из программы установки.';
FLabel2.Transparent := True;
FLabel2.Parent := WizardForm.FinishedPage;
begin
PageNameLabel := TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left := ScaleX(10);
Top := ScaleY(10);
Width := ScaleX(300);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Style := [fsBold];
Transparent := True;
Parent := WizardForm.MainPanel;
end;

PageDescriptionLabel := TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left := ScaleX(15);
Top := ScaleY(25);
Width := ScaleX(400);
Height := ScaleY(30);
AutoSize := False;
WordWrap := True;
Transparent := True;
Parent := WizardForm.MainPanel;
end;

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := Mainpanel.Width;
Height := MainPanel.Height;
end;
end;
end;
end;
end;

procedure InitializeWizard2();
begin
ExtractTemporaryFile('logo.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end;

function InitializeSetup(): Boolean;
begin
        ExtractTemporaryFile('tiger_v2.cjstyles');
        LoadSkin(ExpandConstant('{tmp}\tiger_v2.cjstyles'), '');
        Result := True;
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
end;

procedure DeinitializeSetup();
begin
  ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
  UnloadSkin();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
end;
end;


R.i.m.s.k.y. 17-04-2011 20:48 1660426

Цитата:

Цитата R.i.m.s.k.y.
Типа HKCU32/HKCU64? это да, но ...Software\Wow6432Node\... оно не учитывает, тоже проверил »

Цитата:

Цитата Лександер
оно учитывает, я-же говорю »

SEREGA!!! рассуди нас, скудоумных, как правильно?

LinkOFF 17-04-2011 20:50 1660427

А можете еще сказать как сделать чтоб после у становки выкинуло на сайт автоматически(без подтверждения)

R.i.m.s.k.y. 17-04-2011 20:52 1660428

Цитата:

Цитата LinkOFF
А можете еще сказать как сделать чтоб после у становки выкинуло на сайт автоматически »

за такое руки отрывать, не скажу как сделать, а был бы модером - забанил бы того кто подскажет ;)

Цитата:

Цитата Лександер
скрипт ведьмака

Ахринеть проще! Б-Р-А-В-О!

LinkOFF 17-04-2011 21:00 1660433

Да мне автоматом надо.Я с галкой "Посетить сайт" знаю как

И как убрать вот это http://i19.fastpic.ru/big/2011/0417/...0a4e1c32c9.jpg

R.i.m.s.k.y. 17-04-2011 21:12 1660437

Цитата:

Цитата LinkOFF
И как убрать вот это »

прочитать в шапке коллекцию сриптов
procedure InitializeWizard();
begin
...
WizardForm.FileNameLabel.Visible:= False;
или как верно подсказывает Лександер
WizardForm.FilenameLabel.Hide;
...

Gnom_aka_Lexander 17-04-2011 21:16 1660440

Цитата:

Цитата R.i.m.s.k.y.
Б-Р-А-В-О! »

Половина - YURSHATу - авторан его :)

LinkOFF 17-04-2011 21:36 1660455

R.i.m.s.k.y. скажи пожалуйста очень надо

Serega 17-04-2011 21:41 1660461

Цитата:

Цитата R.i.m.s.k.y.
рассуди нас »

Если мы указываем в секции [Setup] директиву ArchitecturesInstallIn64BitMode=x64, то доп. проверки производить не нужно. Запись будет перенаправлена на HKLM\Software\Wow6432Node\Gabest\Media Player Classic..
Но, есть хорошая поговорка: человеку свойственно ошибаться, а компьютер позволяет ему это делать ещё быстрее...
Поэтому я всегда использую доп. проверку Check: IsWin64, чтоб быть на 100% уверенным, что на клиентской машине, в независимости от от её глюков, запись будет сделана куда мне надо.

R.i.m.s.k.y. 17-04-2011 21:50 1660472

Serega, странно
использую ArchitecturesInstallIn64BitMode=x64, строчка кода
Components: pl\mpc; Root: HKLM; Subkey: SOFTWARE\Gabest\Media Player Classic; ValueType: string; ValueName: ExePath; ValueData: {app}\MPC\mpc-hc.exe; Flags: uninsdeletekey
и в результате запись реестра
\\\Registry\HKEY_LOCAL_MACHINE\SOFTWARE\Gabest\Media Player Classic\ExePath
никаких HKLM\Software\Wow6432Node\Gabest\Media Player Classic

Что я делаю не так?

LinkOFF 17-04-2011 21:54 1660475

Serega ты хоть скажешь как сделать чтоб после установки на сайт выкидывало без подтверждения

Gnom_aka_Lexander 17-04-2011 22:05 1660485

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

Serega, R.i.m.s.k.y., Давайте остынем и подумаем :) Wow6432Node - подключ создаваемый для х32 приложений, ArchitecturesInstallIn64BitMode=x64 - автоматически заставляет писать напрямую, без Wow6432Node, и тогда действительно нужно писать в скрипт разные ключи и проверку IsWin64, а без этой строчки - ArchitecturesInstallIn64BitMode=x64 достаточно указать ключ для х32 и все всегда запишется правильно.

murlakatamenka 17-04-2011 22:39 1660509

LinkOFF, сделать это просто, но я не считаю правильным, что пользователю не предоставляют выбор. может он не хочет на ваш сайт заходить ?
как я понял, что ArchitecturesInstallIn64BitMode=x64 позволяет больше ничего не дописывать. но на всякий случай чеки можно добавить, раз тут споры пошли по этому поводу.
осталось ещё 2 вопроса
Цитата:

Цитата murlakatamenka
1. Как можно настроить, чтобы отдельные папки/файлы сохранялись в отдельные .bin-файлы ?
3. Подскажите нормальный вариант для сплэша. Хочу сделать следующее: сначала появляется лого Mass Effect (появление плавное, т.е. со сменой прозрачности), а потом так же плавно появляестся 2 (это цифра, для Mass Effect 2 всё делается )и спустя некоторое врмя они плавно исчезают. isgsg.dll у меня не работает вообще (Win 7 x64), вариант через sleep мне не нравится тем, что при наведении на сплэш курсор меняется на со стрелки на кружок. С картинками поработать смогу (в Photoshop).
»

upd. значит вообще ничего делать не надо, ключи сами в реестр 64-битных систем правильно пропишутся

Serega 17-04-2011 23:21 1660544

Цитата:

Цитата R.i.m.s.k.y.
Что я делаю не так? »

Цитата:

Цитата Лександер
Давайте остынем и подумаем »

Насчёт остынем, я и не нагревался... :) а насчет подумаем, это правильно.
Ну нет у меня под рукой х64 версии чтоб проверить, тогда открываем Справку и читаем... долго читаем... :)
И вот, что я увидел:
Цитата:

Цитата из Справки
64-bit mode is selected if the user is running a 64-bit version of Windows and the system's processor architecture is included in the value of the ArchitecturesInstallIn64BitMode [Setup] section directive.
// здесь текст...
In 64-bit mode:
// ещё текст... и самое главное:
This is because Setup/Uninstall temporarily disables WOW64 file system redirection

Т.е. при указании директивы ArchitecturesInstallIn64BitMode отключается системная переадресация и тогда нужно указывать доп. проверки.
Но если в вашей сборке есть файлы, которые будут работать только на х64, то эту диррективу указывать нужно:
Цитата:

Цитата из Справки
Normally, you should not change this directive from its default value unless your application contains native 64-bit binaries.


Хочу_спросить 18-04-2011 01:43 1660610

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

R.i.m.s.k.y. 18-04-2011 09:14 1660713

Цитата:

Цитата LinkOFF
R.i.m.s.k.y. скажи пожалуйста очень надо »

нед

Цитата:

Цитата Serega
In 64-bit mode:
// ещё текст... и самое главное:
This is because Setup/Uninstall temporarily disables WOW64 file system redirection »

т.е. в 64битном режиме - при ArchitecturesInstallIn64BitMode=x64 - отключается запись в syswow64 и эти ключи надо указывать руками. Я так понял/перевел.
Или можно не указывать ArchitecturesInstallIn64BitMode=x64, тогда все 32битные/разрядные ключи будут писаться в syswow64.

Цитата:

Цитата Serega
Normally, you should not change this directive from its default value unless your application contains native 64-bit binaries »

мои паки - содержат, но я за реестром в этой части слежу внимательно, везде понатыканы IsWin64 / Not IsWin64

В общем "Следи за собой, будь осторожен" (с) Цой

Serega 18-04-2011 09:44 1660734

Цитата:

Цитата R.i.m.s.k.y.
при ArchitecturesInstallIn64BitMode=x64 - отключается запись в syswow64 и эти ключи надо указывать руками. Я так понял/перевел.
Или можно не указывать ArchitecturesInstallIn64BitMode=x64, тогда все 32битные/разрядные ключи будут писаться в syswow64. »

Всё правильно.
Цитата:

Цитата R.i.m.s.k.y.
везде понатыканы IsWin64 / Not IsWin64 »

Я так же всегда делаю, но думаю надо всё же поэкспериментировать, т.е. добраться до х64 и произвести установку без указания директивы ArchitecturesInstallIn64BitMode=x64, но с обязательным указанием для файлов IsWin64 / not IsWin64...
Просто у меня есть такое подозрение, что в таком варианте должно быть всё нормально, т.е. все файлы будут на своих местах.

R.i.m.s.k.y. 18-04-2011 09:55 1660744

Serega, держи 500-ю юбилейную благодарность ;)

Serega 18-04-2011 10:48 1660775


Цитата:

Цитата R.i.m.s.k.y.
держи 500-ю юбилейную благодарность »

:lol: Хотя это запрещено правилами, но спасибо.

my-94 18-04-2011 11:26 1660803

Ребята помогите текст по середине сделать на 1 и на последней странице и чтобы картинок вообще не было

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

[Setup]
AppName=Machinarium
AppVerName=Machinarium
DefaultDirName={pf}\Machinarium
DefaultGroupName=Machinarium
VersionInfoCopyright=Bulat Ziganshin, Victor Dobrov, SotM, CTACKo, Alex Muscle
OutputBaseFilename=setup
OutputDir=.
UsePreviousAppDir=false
DirExistsWarning=no
ShowLanguageDialog=no

[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: {group}\Играть; Filename: {app}\machinarium.exe
Name: {group}\Удалить; Filename: {app}\unins000.exe
Name: {commondesktop}\Машинариум; Filename: {app}\machinarium.exe

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

[CustomMessages]
rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек

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

[code]
const
Archives = '{src}\*.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;

type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
/// PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif

TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;

TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;

if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;

// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;

// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s

// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0

for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb

// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;

procedure CurStepChanged1(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;

// стандартный способ отката (не нужна CurPageChanged1), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged1(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure InitializeWizard1();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;

// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;

// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;

[Setup]


; --- Source: ISSkinSetupSilver.iss ------------------------------------------------------------
[Files]
; Add the ISSkin DLL used for skinning Inno Setup installations.
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy

; Add the Visual Style resource contains resources used for skinning,
; you can also use Microsoft Visual Styles (*.msstyles) resources.
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy

[code]
// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup2(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup2();
begin
// Hide Window before unloading skin so user does not get
// a glimpse of an unskinned window before it is closed.
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;


[Setup]


; --- Dispatching code ------------------------------------------------------------

[code]

procedure CurStepChanged(CurStep: TSetupStep);
begin
CurStepChanged1(CurStep);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
end;

procedure InitializeWizard();
begin
InitializeWizard1();
end;

function InitializeSetup(): Boolean;
begin
Result := InitializeSetup2(); if not Result then exit;
end;

procedure DeinitializeSetup();
begin
DeinitializeSetup2();
end;

R.i.m.s.k.y. 18-04-2011 11:33 1660806

Цитата:

Цитата my-94
Ребята помогите текст по середине сделать на 1 и на последней странице и чтобы картинок вообще не было »

чего-то мне все это лепру напоминает

my-94 18-04-2011 12:01 1660832

чего делать если я не могу это сделать ? (приходится просить)

murlakatamenka 18-04-2011 15:07 1660983

my-94, используй расширенный компилятор для Inno, там много чего можно сделать с компонентами инсталлятора (поменять цвета, размеры, положение и т.д.)

LinkOFF 18-04-2011 17:06 1661068

как сделать чтоб небыло вот этого(катинка была чтоб) http://i19.fastpic.ru/big/2011/0418/...1cc81ed210.jpg и приподнять надписи(Завершение мастера установки...)

murlakatamenka 18-04-2011 19:10 1661138

LinkOFF, приподнять надписи - см. мой предыдущий пост, а вот RunList прозрачным не делается, но чтобы его убрать, можно в свойствах указать для Width и Height значения 0

R.i.m.s.k.y. 19-04-2011 12:45 1661647

где можно почитать как работать с # define?
а нужно поправить имя выходного экзешника:

есть несколько переменных
# define www1 = True
# define www2 = False

нужно чтобы если какой-то www был True то к имени компилируемого файла добавлялось wwwНОМЕР
т.е. в данном случае получилось setup_www1.exe

nik1967 19-04-2011 13:08 1661678

Цитата:

Цитата R.i.m.s.k.y.
где можно почитать как работать с # define? »

Может быть здесь: Inno Setup Help\Inno Setup Preprocessor\Directives?

R.i.m.s.k.y. 19-04-2011 13:34 1661692

Цитата:

Цитата nik1967
Может быть здесь: Inno Setup Help\Inno Setup Preprocessor\Directives »

ага, видел, скупость этой части справки поражает.
все равно не догоняю как не_в_коде а в таких дефайнах склеить строчки и приплюсовать буквы.

Shegorat 19-04-2011 18:12 1661860

R.i.m.s.k.y.
Наверно так, возможно можно и проще сделать, но я не знаю как по-другому
читать дальше »
Код:

#define www1 False
#define www2 True
#define www3 False
#define www4 False

#if www1 == True
  #define SetupName "www1"
#elif www2 == True
  #define SetupName "www2"
#elif www3 == True
  #define SetupName "www3"
#elif www4 == True
  #define SetupName "www4"
#endif

[Setup]
AppName=MyApp
AppVername=MyApp
DefaultDirname={pf}\MyApp
OutputBaseFilename=setup_{#SetupName}


murlakatamenka 19-04-2011 18:33 1661868

Shegorat, вы тот, о ком я думаю ? (FreeArc+InnoSetup support и т.д.)

nik1967 19-04-2011 19:19 1661897

murlakatamenka,
Да, и что так удивляет?

R.i.m.s.k.y. 19-04-2011 21:02 1661932

Цитата:

Цитата Shegorat
Наверно так, возможно можно и проще сделать, но я не знаю как по-другому »

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

# define POT_in_rimpack = "POT_"
# define KMP_in_rimpack = ""
...
OutputBaseFilename=RimPack_{#POT_in_rimpack}{#KMP_in_rimpack}0.35.1
...
#if POT_in_rimpack == "POT_"
 ...
#endif
...
function POT_in_rim(): Boolean;
begin
if (ExpandConstant('{#POT_in_rimpack}') = 'POT_') then Result := True else Result := False;
end;
...


Sotonisto 20-04-2011 14:44 1662358

Всем добрый день. Кто может выложить скрипт такого инсталлятора? Очень понравился :) Напоминает мне инсталл Nvidia :)

Gnom_aka_Lexander 20-04-2011 15:18 1662383

Попал в засаду - у секции Languages нет возможности проверки(Check). оставить родной переключатель языка, который перед установкой - не получится, - при отмене установки из этого окошка, вылезает ошибка, поскольку он пытается завершить процессы, которые не были еще начаты.
Вопрос - можно-ли языки установки переключать из кода?
Или завершить работу до InitializeSetup?

Все, справился В общем, если нужно завершить инсталл до начала InitializeSetup чтобы не выбивало ошибку :
читать дальше »
Код:

procedure DeinitializeSetup();
 begin
    if InitializeSetup then
      gdipShutdown
      BASS_Stop
      BASS_Free
 end;


Lunch927 20-04-2011 19:41 1662568

Sotonisto, Как бы тебе его никто не даст. И он меньше напоминает инсталл нвидии. Вот что напоминает нвидию: http://i20.fastpic.ru/big/2011/0420/...a046a4db98.png

Serega 20-04-2011 20:45 1662615

Цитата:

Цитата Лександер
Все, справился В общем, если нужно завершить инсталл до начала InitializeSetup чтобы не выбивало ошибку »

В корне не правильно, при закрытии инсталлятора вы принудительно вызываете функцию InitializeSetup, которая срабатывает при инициализации установки. Удалите из своего инсталлятора функцию InitializeSetup и при компилляции скрипта у вас будет ошибка на if InitializeSetup then.
При закрытии вы должны проверять, были ли инициализированы ваши доп. функции и если да, то только после этого выполнять их уничтожение.
Пример

Код:

var
  BassInit, gdiInit: Boolean;

function InitializeSetup(): Boolean;
begin
  BassInit := False;
  gdiInit := False;
  // здесь какой-то ваш код
end;

procedure InitializeWizard();
begin
  // здесь производите инициализацию Bass, затем
  // только после этого пишите:
  BassInit := True;
  // здесь производите инициализацию Gdi, затем
  // только после этого пишите:
  gdiInit := True;
end;

procedure DeinitializeSetup();
begin
  if gdiInit then
    gdipShutdown;
  if BassInit then
    begin
      BASS_Stop;
      BASS_Free;
    end;
end;


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

Sotonisto 21-04-2011 10:52 1662944

Цитата:

Цитата Lunch927
Вот что напоминает нвидию: http://i20.fastpic.ru/big/2011/0420/...a046a4db98.png »

:o Поделись скриптом плз :)

R.i.m.s.k.y. 21-04-2011 17:16 1663268

Есть вот такой код
Код:

var
  kmp, gom, mpc, la, pot, pReg, aReg, kReg, gReg, mReg, lReg: Integer;

procedure CorCheck;
{ корректируем отмеченность радиобатонов }
var
  i: Integer;
begin
  for i := pReg to mReg do
    if WizardForm.ComponentsList.ItemEnabled[i] then
      begin
        WizardForm.ComponentsList.ItemEnabled[aReg] := True;
        WizardForm.ComponentsList.Checked[i] := True;
        Break;
      end;
end;


procedure CheckComponents;
var  Correct: Boolean; xxx, ffdDesc, splittersDesc, AviSynthDesc : integer;
begin
  Correct := True;
  xxx := 0;
  ffdDesc := WizardForm.ComponentsList.Items.IndexOf('{#ffdDesc}');
  splittersDesc := WizardForm.ComponentsList.Items.IndexOf('{#splittersDesc}');
  AviSynthDesc := WizardForm.ComponentsList.Items.IndexOf('{#AviSynthDesc}');
  if (IsComponentSelected('pl\pot') and pot_in_rim) then begin
    if ( (not ffdexist) and (not IsComponentSelected('ffd')) ) then begin
      WizardForm.ComponentsList.Checked[ffdDesc]:=True;
      WizardForm.ComponentsList.ItemEnabled[ffdDesc]:=False;
    WizardForm.ComponentsList.Repaint;
    end;
    if ( (not haaliexists) and (not IsComponentSelected('splitters')) ) then begin
      WizardForm.ComponentsList.Checked[splittersDesc]:=True;
      WizardForm.ComponentsList.ItemEnabled[splittersDesc]:=False;
    WizardForm.ComponentsList.Repaint;
    end;
  end
  else begin
    WizardForm.ComponentsList.ItemEnabled[splittersDesc]:=True;
    if not IsComponentSelected('svp') then WizardForm.ComponentsList.ItemEnabled[ffdDesc]:=True;
  WizardForm.ComponentsList.Repaint;
  end; //pl/pot
  if IsComponentSelected('svp') then begin
    if ( (not ffdexist) and (not IsComponentSelected('ffd')) ) then begin
      WizardForm.ComponentsList.Checked[ffdDesc]:=True;
      WizardForm.ComponentsList.ItemEnabled[ffdDesc]:=False;
    WizardForm.ComponentsList.Repaint;
    end;
    if ( (not avs) and (not IsComponentSelected('AviSynth')) ) then  begin
      WizardForm.ComponentsList.Checked[AviSynthDesc]:=True;
      WizardForm.ComponentsList.ItemEnabled[AviSynthDesc]:=False;
    WizardForm.ComponentsList.Repaint;
    end;
  end
  else begin
    WizardForm.ComponentsList.ItemEnabled[AviSynthDesc]:=True;
    if ((not IsComponentSelected('pl\pot')) and pot_in_rim) then WizardForm.ComponentsList.ItemEnabled[ffdDesc]:=True;
  WizardForm.ComponentsList.Repaint;
  end; //svp
  WizardForm.ComponentsList.Repaint;
 
//#if Full == True
    { узнаем порядковые номера наших компонентов... }
    pot := WizardForm.ComponentsList.Items.IndexOf('{#potDesc}');
    kmp := WizardForm.ComponentsList.Items.IndexOf('{#kmpDesc}');
    gom := WizardForm.ComponentsList.Items.IndexOf('{#gomDesc}');
    mpc := WizardForm.ComponentsList.Items.IndexOf('{#mpcDesc}');
    la := WizardForm.ComponentsList.Items.IndexOf('{#laDesc}');
    aReg := WizardForm.ComponentsList.Items.IndexOf('{#aDesc}');
    if pot>=0 then begin pReg := WizardForm.ComponentsList.Items.IndexOf('{#pDesc}'); xxx := xxx + 1; end;
    if kmp>=0 then begin kReg := WizardForm.ComponentsList.Items.IndexOf('{#kDesc}'); xxx := xxx + 1; end;
    if gom>=0 then begin gReg := WizardForm.ComponentsList.Items.IndexOf('{#gDesc}'); xxx := xxx + 1; end;
    if mpc>=0 then begin mReg := WizardForm.ComponentsList.Items.IndexOf('{#mDesc}'); xxx := xxx + 1; end;
    if la>=0  then begin lReg := WizardForm.ComponentsList.Items.IndexOf('{#lDesc}'); xxx := xxx + 1; end;
  { сразу проверим, все ли интиресующие компоненты доступны... }  //not WizardForm.ComponentsList.Checked[gom] and
//  if (not WizardForm.ComponentsList.Checked[kmp] and not WizardForm.ComponentsList.Checked[mpc] and not WizardForm.ComponentsList.Checked[gom] and not WizardForm.ComponentsList.Checked[la] and not WizardForm.ComponentsList.Checked[pot]) then begin
    //WizardForm.ComponentsList.Checked[kReg] := False; WizardForm.ComponentsList.ItemEnabled[kReg]:=False;
    //WizardForm.ComponentsList.Checked[mReg] := False; WizardForm.ComponentsList.ItemEnabled[mReg]:=False;
    //WizardForm.ComponentsList.Checked[gReg] := False; WizardForm.ComponentsList.ItemEnabled[gReg]:=False;
    //WizardForm.ComponentsList.Checked[lReg] := False; WizardForm.ComponentsList.ItemEnabled[lReg]:=False;
    if pot>=0 then begin if not WizardForm.ComponentsList.Checked[pot] then begin xxx := xxx - 1; end; end;
    if kmp>=0 then begin if not WizardForm.ComponentsList.Checked[kmp] then begin xxx := xxx - 1; end; end;
    if mpc>=0 then begin if not WizardForm.ComponentsList.Checked[mpc] then begin xxx := xxx - 1; end; end;
    if gom>=0 then begin if not WizardForm.ComponentsList.Checked[gom] then begin xxx := xxx - 1; end; end;
    if la>=0  then begin if not WizardForm.ComponentsList.Checked[la]  then begin xxx := xxx - 1; end; end;
    if xxx = 0 then begin
//      MsgBox('xxx = ' + inttostr(xxx), mbInformation, MB_OK);
      WizardForm.ComponentsList.Checked[aReg] := False; WizardForm.ComponentsList.ItemEnabled[aReg] := False;
    end
//  end;
  { в зависимости от того на кого кликнули, производим действия }
  if pot>=0 then begin if WizardForm.ComponentsList.Checked[pot] then WizardForm.ComponentsList.ItemEnabled[pReg]:=True else WizardForm.ComponentsList.ItemEnabled[pReg]:=False; end;
  if kmp>=0 then begin if WizardForm.ComponentsList.Checked[kmp] then WizardForm.ComponentsList.ItemEnabled[kReg]:=True else WizardForm.ComponentsList.ItemEnabled[kReg]:=False; end;
  if mpc>=0 then begin if WizardForm.ComponentsList.Checked[mpc] then WizardForm.ComponentsList.ItemEnabled[mReg]:=True else WizardForm.ComponentsList.ItemEnabled[mReg]:=False; end;
  if gom>=0 then begin if WizardForm.ComponentsList.Checked[gom] then WizardForm.ComponentsList.ItemEnabled[gReg]:=True else WizardForm.ComponentsList.ItemEnabled[gReg]:=False; end;
  if la>=0  then begin if WizardForm.ComponentsList.Checked[la]  then WizardForm.ComponentsList.ItemEnabled[lReg]:=True else WizardForm.ComponentsList.ItemEnabled[lReg]:=False; end;
  case WizardForm.ComponentsList.ItemIndex of
    kmp: ; gom: ; mpc: ; la: ; pot: ;
    else Correct := False;
  end;
  if Correct then
    CorCheck;
  { перерисуем лист компонентов }
//  #endif
  WizardForm.ComponentsList.Repaint;
end;


procedure ComponentOnClick(Sender: TObject);
begin
  CheckComponents;
  if WizardSelectedComponents(False) = '' then WizardForm.NextButton.Enabled:= False else WizardForm.NextButton.Enabled:= True;
  WizardForm.ComponentsList.Repaint;
end;


procedure InitializeWizard();
  WizardForm.ComponentsList.OnClick := @ComponentOnClick;

делает важную весчь
1. ставит галки на компоненты если компонент* нужен проге а в системе нету и засвечивает чтобы не сняли, если с компонента* снять выбор - нужные компоненты становятся для свободного выбора.
2. также делает доступным или недоступным пункт для регистрации файлов на плеер, если плеер не выбран пункт регистрации файлов на него просто засвечивается.
Вторая часть робит (ну еще бы, Серега делал ;) ), в вот первая сбоит - сразу при запуске {#AviSynthDesc} не засвечен но выбран, если щелкнуть по нему - он засвечивается, а вот {#ffdDesc} галка легко снимается и ставится, пока с четвертого щелчка не застветится.

Где я накосячил?

для svp нужен ffd и avisynth, для pot нужен ffd и splitters

Lunch927 21-04-2011 17:45 1663288

Sotonisto, Конечно, за вами уже выехали...

AN9ROS 21-04-2011 18:03 1663301

Извините за глупый вопрос как делать оформление на инсталятор*???

insombia 21-04-2011 22:10 1663478

AN9ROS инсталятор


Code
читать дальше »
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Tiger.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
UnloadSkin();
end;

R.i.m.s.k.y. 21-04-2011 23:28 1663521

Цитата:

Цитата R.i.m.s.k.y.
Есть вот такой код
делает важную весчь
1. ставит галки на компоненты если компонент* нужен проге а в системе нету и засвечивает чтобы не сняли, если с компонента* снять выбор - нужные компоненты становятся для свободного выбора.
2. также делает доступным или недоступным пункт для регистрации файлов на плеер, если плеер не выбран пункт регистрации файлов на него просто засвечивается.
Вторая часть робит (ну еще бы, Серега делал ), в вот первая сбоит - сразу при запуске {#AviSynthDesc} не засвечен но выбран, если щелкнуть по нему - он засвечивается, а вот {#ffdDesc} галка легко снимается и ставится, пока с четвертого щелчка не застветится.
Где я накосячил?
для svp нужен ffd и avisynth, для pot нужен ffd и splitters »

Разобрался, надо было условия более корректно ставить

R.i.m.s.k.y. 22-04-2011 09:52 1663697

Neutron,
по второму вопросу ответ есть в сборнике скриптов в шапке
Код:

[Setup]
DefaultDirName={reg:HKLM\Software\My Program, Path}

где будет браться путь из HKLM\Software\My Program , где ключ обозван Path , где в ключе Path хранится путь до того, что тебе надо.
Вот как отключить окно выбора пути установки:

[Setup]
DefaultDirName={pf}\My Program
DisableDirPage=yes

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

С первым можно попробовать так:
Код:

Function InitializeSetup: Boolean;
var res : integer;
begin
...
Exec('ping.exe ', ' 2ip.ru ', ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilTerminated, res);
if res > 0 then begin
MsgBox('Надено подключение к интернету. Установка будет прекращена'+Filepath, mbInformation, MB_OK);
Result := False;
end;
end; //InitializeSetup


MrAWP 22-04-2011 21:12 1664090

Здравствуйте! Очень нужна помощь в реализации казалось бы простой фишки, от которой зависит выход релиза.

Принцип: пользователь качает базовый пакет программы, во время установки на определенной странице (допустим, на стандартной странице выбора компонентов установки) он выбирает дополнительные пакеты для этой программы, который инсталлятор сам вытянет из нужного сервера и распакует во время установки.

На первый взгляд, всё просто - скачал плагин ISDownloader для IS, нашел уже чеё-то готовый скрипт который проверяет, выбран ли компонент и качает. Вот этот скрипт:

Код:

[Components]
Name: Component1; Description: Антивирус касперского; Flags: checkablealone; Types: full
Name: Component2; Description: Commfort Chat; Flags: checkablealone; Types: full
Name: Component3; Description: IpTv Player; Flags: checkablealone; Types: full
Name: Component4; Description: VideoLan (VLC); Flags: checkablealone; Types: full
Name: Component5; Description: Opera Browser; Flags: checkablealone; Types: full

[Для Code (бб-код форума не парсится)]

procedure InitializeWizard();
begin
 itd_init;

if ISComponentSelected('Component1') then itd_addfile('http://192.168.1.153/mhhl/install/KAV6WKS_2011-09-18_x600_05E5A9CD.key',expandconstant('{tmp}\KAV6WKS_2011-09-18_x600_05E5A9CD.key'));
if ISComponentSelected('Component1') then itd_addfile('http://192.168.1.153/mhhl/install/kav.msi',expandconstant('{tmp}\kav.msi'));
if ISComponentSelected('Component2') then itd_addfile('http://192.168.1.153/mhhl/install/Chat.exe',expandconstant('{tmp}\Chat.exe'));
if ISComponentSelected('Component3') then itd_addfile('http://192.168.1.153/mhhl/install/iptvLan.exe',expandconstant('{tmp}\iptvLan.exe'));
if ISComponentSelected('Component4') then itd_addfile('http://192.168.1.153/mhhl/install/vlc.exe',expandconstant('{tmp}\vlc.exe'));
if ISComponentSelected('Component5') then itd_addfile('http://192.168.1.153/mhhl/install/Opera11.exe',expandconstant('{tmp}\Opera11.exe'));


 itd_downloadafter(wpReady);
end;

Но вот беда - файлы качаются ВСЕ, независимо от того что выбрано на странице компонентов :(

Затем наткнулся на скрипт, в котором реализовано то что я хочу, но через костыли (вот он - http://freetexthost.com/osq0sfyeav) - тут перед появлением приветствия вылетают поочередно окошки для каждого компонента (типа: Ставить Это... Да/Нет), потом появляются нормальные окна установщика, окно с выбором компонентов (которое, естественно ни на что не влияет), но качает то что надо.

Прошу у вас помощи, т.к. срывается важный релиз. Гляньте кто-нибудь 1й код, мб там ошибка? Если там всё норм и это баг плагина, возможно ли действовать по принципу 2го кода, но создать новую страницу, которая будет иммитировать обычную страницу с компонентами(с чекбоксами)?

Заранее огромное спасибо за помощь.

R.i.m.s.k.y. 22-04-2011 21:53 1664123

MrAWP, ты компоненты обрабатываешь когда до самого окна компонентов еще очередь не дошла но оно уже создано - в InitializeWizard.
Почитай в справке Installation order, а пока попробуй так:
Код:

procedure InitializeWizard();
begin
end;

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpReady then begin
 itd_init;

if ISComponentSelected('Component1') then itd_addfile('http://192.168.1.153/mhhl/install/KAV6WKS_2011-09-18_x600_05E5A9CD.key',expandconstant('{tmp}\KAV6WKS_2011-09-18_x600_05E5A9CD.key'));
if ISComponentSelected('Component1') then itd_addfile('http://192.168.1.153/mhhl/install/kav.msi',expandconstant('{tmp}\kav.msi'));
if ISComponentSelected('Component2') then itd_addfile('http://192.168.1.153/mhhl/install/Chat.exe',expandconstant('{tmp}\Chat.exe'));
if ISComponentSelected('Component3') then itd_addfile('http://192.168.1.153/mhhl/install/iptvLan.exe',expandconstant('{tmp}\iptvLan.exe'));
if ISComponentSelected('Component4') then itd_addfile('http://192.168.1.153/mhhl/install/vlc.exe',expandconstant('{tmp}\vlc.exe'));
if ISComponentSelected('Component5') then itd_addfile('http://192.168.1.153/mhhl/install/Opera11.exe',expandconstant('{tmp}\Opera11.exe'));
 itd_downloadafter(wpInstalling);
end;//wpReady
end;//CurPageChanged

Только смотри чтобы промежуточные окна инно не были отключены а то условие не сработает, тогда wpReady смени на то, что наступает перед wpInstalling, на wpSelectProgramGroup к примеру

страницы идут в следующем порядке
wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished

Serega 22-04-2011 21:53 1664124

Цитата:

Цитата MrAWP
Но вот беда - файлы качаются ВСЕ, независимо от того что выбрано на странице компонентов »

Ответ есть в ваших словах, немного вдумайтесь...
Когда срабатывает procedure InitializeWizard(); и когда нужно проверять ISComponentSelected?

P.S.
R.i.m.s.k.y., извиняюсь когда писал поста не было...

R.i.m.s.k.y. 22-04-2011 22:06 1664127

Цитата:

Цитата Serega
R.i.m.s.k.y., извиняюсь когда писал поста не было... »

ничего, лучше глянь, я не попутал If CurPageID=wpReady then begin и itd_downloadafter(wpInstalling);

MrAWP 22-04-2011 22:19 1664130

R.i.m.s.k.y., Serega спасибо вам большое, а то б сам наверное никогда не допер что дело в этом) Кажется работает.

Serega 22-04-2011 22:26 1664134

Цитата:

Цитата R.i.m.s.k.y.
я не попутал If CurPageID=wpReady then begin и itd_downloadafter(wpInstalling); »

Да в принципе всё нормально, единственное я бы посадил эту проверку в function NextButtonClick, ну и в itd_downloadafter указал wpReady, чтоб загрузка доп. программ шла до установки основной программы.

R.i.m.s.k.y. 22-04-2011 22:36 1664136

Цитата:

Цитата MrAWP
R.i.m.s.k.y., Serega спасибо вам большое, а то б сам наверное никогда не допер что дело в этом) Кажется работает. »

читай справку и будешь таким же крутым ;)

vovka1021 23-04-2011 23:52 1664662

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

скрипт

[Files]
Source: "gifctrl.dll"; Flags: dontcopy solidbreak
Source: 0023.gif; Flags: dontcopy solidbreak

[code]
const
HALIGN_CENTER = 0;
HALIGN_LEFT = 1;
HALIGN_RIGHT = 2;
VALIGN_CENTER = 0;
VALIGN_TOP = 1;
VALIGN_BOTTOM = 2;
FIT_NONE = 0;
FIT_WIDTH = 1;
FIT_HEIGHT = 2;
FIT_BOTH = 3;
CLR_INVALID = $FFFFFFFF;

function NewGifbWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND; external 'newgifwnd@files:gifctrl.dll stdcall';
function FreeGifWnd(hWndGif: HWND): Boolean; external 'freegifwnd@files:gifctrl.dll stdcall';
function FreeAllGifWnd(): Boolean; external 'freeallgifwnd@files:gifctrl.dll stdcall';
function GifWndSetParent(hWndGif: HWND; hWndParent: HWND): Boolean; external 'gifwndsetparent@files:gifctrl.dll stdcall';
function GifWndSetBounds(hWndGif: HWND; X, Y, nWidth, nHeight: Integer): Boolean; external 'gifwndsetbounds@files:gifctrl.dll stdcall';
function GifWndLoadFromFile(hWndGif: HWND; HAlign, VAlign: Integer; BGColor: DWord; Fit: integer; GifFileName: PChar): Boolean; external 'gifwndloadfromfile@files:gifctrl.dll stdcall';

var
GifPanel: TPanel;
GIFHWND: HWND;

function InitializeSetup(): Boolean;
begin
GIFHWND := 0;
Result := True;
end;

procedure DeinitializeSetup();
begin
FreeAllGifWnd();
end;

procedure InitializeWizard();
var
GifFileName: String;
Lbl: TNewStaticText;
begin
ExtractTemporaryFile('0023.gif');

GIFHWND := NewGifbWnd(WizardForm.Handle, ScaleX(30), WizardForm.Bevel.Top + ScaleY(8), 88, 31);
GifWndLoadFromFile(GIFHWND, HALIGN_CENTER, VALIGN_CENTER, CLR_INVALID, FIT_NONE, ExpandConstant('{tmp}\0023.gif'));
Lbl := TNewStaticText.Create(WizardForm);
Lbl.Parent := WizardForm;
Lbl.AutoSize := False;
Lbl.SetBounds(ScaleX(30), WizardForm.Bevel.Top + ScaleY(8), 88, 31);
end;


с этим:

У меня не доходит как сделать првильно.

Большое спасибо!

LordSP 24-04-2011 07:22 1664723

Serega, Сергей а покажи пример:
Цитата:

Цитата Serega
Да в принципе всё нормально, единственное я бы посадил эту проверку в function NextButtonClick, ну и в itd_downloadafter указал wpReady, чтоб загрузка доп. программ шла до установки основной программы. »


MrAWP 24-04-2011 11:03 1664774

В продолжение проблемы http://forum.oszone.net/post-1664090.html#post1664090

Загрузка теперь, как я уже писал, работает на ура но появилась другая проблему которую заметил только сейчас - если на странице выбора комнонентов или после нее хотя бы 1 раз вернуться на пред. страницу, то все следующие переходы по страницам установщика будут сопровождаться вылетающей ошибкой: "Liteui_Init: Error code 1410". Если нажимать ОК в окне ошибки, то она пропадает и установщик продолжает работу, но раздражает такое окошко на каждом шагу ужасно. Может быть проблема в инициализации itd_init или нужно заменить CurPageID на NextButtonClick?

Вот еще раз код:

Код:

procedure InitializeWizard();
begin
end;

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpReady then begin
 itd_init;


if ISComponentSelected('Component1') then itd_addfile('http://www.sherlocksoftware.org/petz/files/petz4.zip',expandconstant('{tmp}\1.zip'));
if ISComponentSelected('Component2') then itd_addfile('http://www.sherlocksoftware.org/petz/files/petz4.zip',expandconstant('{tmp}\2.zip'));
if ISComponentSelected('Component3') then itd_addfile('http://www.sherlocksoftware.org/petz/files/petz4.zip',expandconstant('{tmp}\3.zip'));
if ISComponentSelected('Component4') then itd_addfile('http://www.sherlocksoftware.org/petz/files/petz4.zip',expandconstant('{tmp}\4.zip'));
if ISComponentSelected('Component5') then itd_addfile('http://www.sherlocksoftware.org/petz/files/petz4.zip',expandconstant('{tmp}\5.zip'));
 
itd_downloadafter(wpInstalling);
end;
end;

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

Serega 24-04-2011 11:48 1664797

Цитата:

Цитата LordSP
покажи пример: »

С этой библиотекой в архиве, идут примеры, там и так всё доходчиво расписано, так что применить на практике труда не составляет.
Цитата:

Цитата MrAWP
то все следующие переходы по страницам установщика будут сопровождаться вылетающей ошибкой: "Liteui_Init: Error code 1410" »

Ну так естественно, т.к. при повторном возвращении на эту страницу, производится повторная инициализация.
Либо добавьте проверку на то, была ли библиотека уже инициализирована, либо инициализируйте библиотеку в процедуре InitializeWizard.

xanloz 24-04-2011 13:51 1664844

Кто поправит скрипт?
P.S. Можете поставить заставку файлом SGS2.png и можете сделать чтоб Visual C++ запускал файл с определением если система Windows x64, то в папке х64 или если Windows x86 - х86.
Я не требую, я прошу мож кто-то сделает?

shidow 24-04-2011 14:11 1664851

Цитата:

Цитата xanloz
P.S. Поставьте заставку файлом SGS2.png и можете сделать чтоб Visual C++ запускал файл с определением если система Windows x64, то в папке х64 или если Windows x86 - х86.

Вы уважаемый, не требуйте!

xanloz 24-04-2011 14:21 1664858

Цитата:

Цитата shidow
Вы уважаемый, не требуйте! »

я не требую я попросил! я вообще не требую никогда. просто не правильно выразился.

MrAWP 24-04-2011 16:48 1664928

Цитата:

Цитата Serega
либо инициализируйте библиотеку в процедуре InitializeWizard »

Я так и сделал, но ошибка почему то все равно вылетала. Проблема вроде как решилась после замены проверка на wpInstalling вместо wpReady.

R.i.m.s.k.y. 24-04-2011 17:35 1664946

Цитата:

Цитата MrAWP
Я так и сделал, но ошибка почему то все равно вылетала. Проблема вроде как решилась после замены проверка на wpInstalling вместо wpReady. »

а в секции setup случайно нет строчки DisableReadyPage=true???

insombia 24-04-2011 19:01 1664987

Как разделить установку на 2 диска по 4 гб каждый для GTA 4?

Serega 24-04-2011 20:28 1665030

Цитата:

Цитата MrAWP
Проблема вроде как решилась после замены проверка на wpInstalling вместо wpReady »

Интересное высказывание, главное уверенное... надо так:
Пример

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl
Name: en; MessagesFile: compiler:Languages\English.isl

[Types]
Name: full; Description: Full installation
Name: custom; Description: Custom installation; Flags: iscustom

[Components]
Name: comp1; Description: Component 1; Types: full custom
Name: comp2; Description: Component 2; Types: full

#define ITDRoot ReadReg(HKEY_LOCAL_MACHINE,'Software\Sherlock Software\InnoTools\Downloader','InstallPath','')

[Files]
Source: {#ITDRoot}\itdownload.dll; Flags: dontcopy nocompression solidbreak
Source: {#ITDRoot}\languages\*.ini; Flags: dontcopy nocompression solidbreak

[Code]
#include ITDRoot + '\it_download.iss'
procedure LoadITDLang;
var
  lang: string;
begin
  { заранее нужно перевести на русский файл *.ini }
  lang := ExpandConstant('{language}');
  try
    ExtractTemporaryFile('itd_' + lang + '.ini');
    ITD_LoadStrings(ExpandConstant('{tmp}\itd_' + lang + '.ini'));
  except
  end;
end;

procedure InitializeWizard();
begin
  ITD_Init; // Currently a NOP. Don't count on it in future.
  LoadITDLang;
  ITD_DownloadAfter(wpReady);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  if CurPageID = wpSelectComponents then
    begin
      ITD_ClearFiles;
      if IsComponentSelected('comp1') then
        ITD_AddFile('http://www.sherlocksoftware.org/petz/files/dogz5.zip', ExpandConstant('{tmp}\dogz5.zip'));
      if IsComponentSelected('comp2') then
        ITD_AddFile('http://www.sherlocksoftware.org/petz/files/petz4.zip', ExpandConstant('{tmp}\petz4.zip'));
    end;
end;


Цитата:

Цитата insombia
Как разделить установку на 2 диска »

Почитайте в Справке, секция [Setup], разделы DiskSpanning и DiskSliceSize.

murlakatamenka 24-04-2011 21:32 1665055

xanloz, возможно вам помогут флаги 32 bit и 64 bit в секции [Run] (не уверен)
также посмотрите в help-e статью о IsWin64
Serega, R.i.m.s.k.y. и Лександер, всё верно по поводу моего старого вопроса о реестре 32- и 64-битных систем. терь и я проверил, что ничего добавлять не надо, ключи пишутся через Wow6432Node на x64, на x32 сразу в software. В скрипте задано просто HKLM/Software
по прежнему интересно
Цитата:

1. Как можно настроить, чтобы отдельные папки/файлы сохранялись в отдельные .bin-файлы ?
3. Подскажите нормальный вариант для сплэша. Хочу сделать следующее: сначала появляется лого Mass Effect (появление плавное, т.е. со сменой прозрачности), а потом так же плавно появляестся 2 (это цифра, для Mass Effect 2 всё делается )и спустя некоторое врмя они плавно исчезают. isgsg.dll у меня не работает вообще (Win 7 x64), вариант через sleep мне не нравится тем, что при наведении на сплэш курсор меняется на со стрелки на кружок. С картинками поработать смогу (в Photoshop).
вопрос 3 я смогу реализовать в Delphi, прикрутить к инсталлятору это дело потом можно ?
также есть мысли в том же Delphi написать dll для сплэша, мой друг сказал, что это несложно.

Serega 24-04-2011 22:07 1665071

Цитата:

Цитата murlakatamenka
чтобы отдельные папки/файлы сохранялись в отдельные .bin-файлы ? »

Не совсем понятно, что вы имеете ввиду, просто некоторые создают внешние архивы и затем переименовывают их в .bin, если вам нужно другое, то почитайте в Справке о разбитии на диски, секция [Setup], разделы DiskSpanning и DiskSliceSize
Цитата:

Цитата murlakatamenka
прикрутить к инсталлятору это дело потом можно ? »

конечно, пример написания библиотеки на Делфи есть в папке Examples\MyDll\Delphi\
Цитата:

Цитата murlakatamenka
мой друг сказал, что это несложно. »

на самом деле, не сложно - это когда знаешь...

xanloz 24-04-2011 22:36 1665089

Кто поправит скрипт?
P.S. Можете поставить заставку файлом SGS2.png? (isgsg.dll у меня не работает вообще (Win7 x32))

murlakatamenka 25-04-2011 02:19 1665167

Цитата:

Цитата Serega
Не совсем понятно, что вы имеете ввиду, просто некоторые создают внешние архивы и за »

Serega, можно поподробнее. Это как раз то, что меня интересовало, ведь так можно будет, к примеру, делать репаки обновляемыми (например патч вышел или кряк обновился), или русификаторы / англофикаторы добавлять и т.д.
насчёт dll посмотрю попозже, если появятся вопросы и не найду ответов сам, то сюда обращусь :)

Lunch927 25-04-2011 12:47 1665374

xanloz, Хватит плодить сообщения, если один раз проигнорили, то и следующие разы не помогут... -___-

R.i.m.s.k.y. 25-04-2011 13:44 1665404

Как сделать так что бы при выборе головного компонента на его подкомпонентах ставились галки в нужных местах но потом свободно снимались/перемещались.
Types recom не подходит, указание на подкомпоненте выбирает и головной компонент, а по умолчанию он должен быть выключен.

короче: как в коде на странице компонентов организовать проверку что компонент выбран был только что и расставить галки один раз, я запнулся как раз на месте "компонент был выбран только что"

Решено: надо было в коде обяъвление переменно делать не в CheckComponents, а выше.

REOLINE 25-04-2011 18:33 1665560

Здравствуйте! Я Репакер с КЗ ProZorg. Правда тут другой ник.
решил сделать себе новый инсталл, и запарился с одной вещью. необходимо изменить верхнюю панельку икстала (там где свернуть/закрыть). Скрипт дам. писать на мыло указав свой ник.kazantsev_92@mail.ru Спасибо

insombia 25-04-2011 22:52 1665675

как сделать для игры выбор кряков? припустим для Hitman : Blood Money

R.i.m.s.k.y. 25-04-2011 22:56 1665679

Цитата:

Цитата insombia
как сделать для игры выбор кряков? припустим для Hitman : Blood Money »

через [Tasks] или [Components] c флагом exclusive, а в секции [Files] копируешь кряк после основных файлов.

R.i.m.s.k.y. 25-04-2011 23:48 1665705

Цитата:

Цитата REOLINE
Здравствуйте! Я Репакер с КЗ ProZorg. Правда тут другой ник.
решил сделать себе новый инсталл, и запарился с одной вещью. необходимо изменить верхнюю панельку икстала (там где свернуть/закрыть). Скрипт дам. писать на мыло указав свой ник.kazantsev_92@mail.ru Спасибо »

было, поиск рулит

Tco 03 26-04-2011 13:07 1665894

Господа! Подскажите пожалуйста. Возможно ли применить какой-нибудь атрибут, чтобы скрыть папку целиком?
Атрибут "Hidden System" скрывает только файлы находящиеся в папке.

R.i.m.s.k.y. 26-04-2011 13:37 1665905

Tco 03,
господа все в Париже! ;)
Пробовал в секции [Files]? попробуй так:
[Dirs]
Name: "{app}\data"; Attribs: hidden system

Gnom_aka_Lexander 26-04-2011 22:15 1666237

Подскажите пожалуйста, можно-ли управлять секцией [Tasks], то есть выбором задач из этой секции?

R.i.m.s.k.y. 26-04-2011 22:22 1666242

Цитата:

Цитата Лександер
Подскажите пожалуйста, можно-ли управлять секцией [Tasks], то есть выбором задач из этой секции? »

Да, берешь и управляешь.
Поточнее чего хочешь-то? если из кода то половина случаев переживает замену, к примеру, WizardForm.TasksList.Checked на WizardForm.ComponentsList.Checked

Gnom_aka_Lexander 26-04-2011 22:38 1666256

R.i.m.s.k.y., можно пример, как вот этими задачами по отдельности управлять?
читать дальше »
Код:

[Tasks]
Name: icons; Description: "{cm:icons}";
Name: rusik; Description: "{cm:rusik}";


R.i.m.s.k.y. 26-04-2011 22:39 1666258

еще раз - что значит управлять?
вот к примеру код из дистра для Smooth Video Project - если нету FFDShow галку с него не снимешь
Код:

procedure TasksListClickCheck(Sender: TObject);
var
  Item: Integer;
begin
  if (not ffdexist2) then begin
    Item := WizardForm.TasksList.Items.IndexOf(ExpandConstant('{cm:FFD}')); if WizardForm.TasksList.ItemIndex = Item then WizardForm.TasksList.Checked[item] := True;
  end;
...
end;


procedure InitializeWizard();
...
WizardForm.TasksList.OnClickCheck := @TasksListClickCheck;
...


Gnom_aka_Lexander 26-04-2011 22:54 1666267

Цитата:

Цитата R.i.m.s.k.y.
еще раз - что значит управлять? »

Это значит, что я создаю свой чекбокс и с него управляю задаче - выбрана-невыбрана :)
спасибо, сам сколько пеняю людям, что зыбыли работы Виктора Доброва, а там куча веще до сих пор актуальных :)
Но это не совсем то, что мне нужно...

R.i.m.s.k.y. 26-04-2011 23:05 1666273

в шапке http://victor-dobrov.narod.ru/InnoSetupScripts.7z
ищи "Как объединить секцию [code] из предыдущего примера и команды раздела [Tasks]?"

Gnom_aka_Lexander 27-04-2011 13:49 1666595

Можно-ли получить текст надписи PageNameLabel и PageDescriptionLabel со строго определенной страницы? Чтобы показать их на другой странице.

shao 27-04-2011 14:54 1666635

Вложений: 1
Есть K-LiteMegaCodecPack_6.7.0, созданная в Инно. Вот :


В справке к ней по установке возможно создание :
Код:

Unattended installation

An unattended installation is a silent installation that doesn't
require any user interaction. Run the setup with the command-line
parameter "-MakeUnattended" (without quotes) to activate the
Unattended Install Maker wizard. Follow the instructions given in
the wizard to create a fully customized unattended installation.

Запустив с параметрами:
Код:

"KLMCP670.exe" -MakeUnattended
Таким , вот образом :



После чего создаётся два файла :

Код:

klcp_mega_unattended.ini

klcp_mega_unattended.bat ,

с командой "KLMCP670.exe" /verysilent /norestart /LoadInf=".\klcp_mega_unattended.ini"



Искал в справке к Инно. Ничего подобного не нашёл по параметру Unattended Install Maker.
Такого параметра установки нет.
И ничего подобного также.
Ну , кроме параметра командной строки инсталлятора '/SAVEINF=', но это ведь не то....

В скрипте также ничего нет. Смотрел.
Хотя , с моими то знаниями..... :)

Но как-то ведь эта возможность реализована в Инно.... Как это можно сделать ?

Буду благодарен за помощь и советы !
Спасибо!

Скрипт прилагается...

R.i.m.s.k.y. 27-04-2011 15:30 1666655

нихера не понимаю, почему не работает

var S: TArrayOfString; i : integer;
for i:=0 to 4 do begin
S[i]:='';
end;

S[0]:=SystemVersionPanel.Text;
S[1]:=ProcessorMHzPanel.Text;
S[2]:=VideoRAMPanel.Text;
S[3]:=AudioPanel.Text;
S[4]:=RAMTotalPanel.Text

SaveStringsToFile(ExpandConstant('{src}\www.txt'), S, False); // сохраняем файл


на строке S[i]:=''; или S[0]:=SystemVersionPanel.Text; ошибка "Out of range"

Всего то хочу в Ultimate Test Black.iss добавить вывод чего скрипт собрал о системе в текстовый файлик.
Как это сделать?


Цитата:

Цитата shao
Искал в справке к Инно. Ничего подобного не нашёл по параметру Unattended Install Maker. »

ну и что, разраб клайта в коде сделал проверку на доппараметры комстроки -MakeUnattended, а innoup секцию код не вытаскивает в привычном скрипте инно, вытаскивает в bin файлик

Gnom_aka_Lexander 27-04-2011 16:17 1666680

R.i.m.s.k.y.,
Цитата:

Цитата R.i.m.s.k.y.
SaveStringsToFile(ExpandConstant('{src}\www.txt' »

src - у тебя не на сменном носителе случайно?

R.i.m.s.k.y. 27-04-2011 16:21 1666685

Цитата:

Цитата Лександер
src - у тебя не на сменном носителе случайно »

нет, ошибка "Out of range" в строке присваивания S[i] переменной, я ж написал

El Sanchez 27-04-2011 16:33 1666696

Цитата:

Цитата R.i.m.s.k.y.
не понимаю, почему не работает »

R.i.m.s.k.y., а массив-то хоть существует? Строка SetArrayLength(S, 5) есть?

Цитата:

Цитата Лександер
Можно-ли получить текст надписи PageNameLabel и PageDescriptionLabel со строго определенной страницы? Чтобы показать их на другой странице. »

Лександер, самое простое тексты прописать в [Messages]:
Код:

[Messages]
WizardSelectDir=blablabla
SelectDirDesc=blabla
...

или использовать SetupMessage (при необходимости StringChangeEx для обработки результата):
Код:

MsgBox(SetupMessage(msgWizardSelectDir), mbInformation, MB_OK);
MsgBox(SetupMessage(msgSelectDirDesc), mbInformation, MB_OK);


MrAWP 27-04-2011 21:54 1666869

Как получить из реестра месторасположение Firefox (если он установлен) и выполнить действия, аналогичные этому бат-файлу:

start /d"{путь_к_firefox.exe}" firefox {tmp}/plugin.xpi

то есть нужно по сути открыть файл xpi через файрфокс чтобы начать установку плагина.

shao 27-04-2011 23:39 1666896

R.i.m.s.k.y., спасибо!

Цитата:

Цитата R.i.m.s.k.y.
.....вытаскивает в bin файлик »

Да, есть там такой...

Цитата:

Цитата R.i.m.s.k.y.
разраб клайта в коде сделал проверку на доппараметры комстроки -MakeUnattended »

Цитата:

Цитата R.i.m.s.k.y.
а innoup секцию код не вытаскивает в привычном скрипте инно »

К сожалению я в кодах не силён.....
Буду признателен, если кто такой код набросает....Если не сложно.

R.i.m.s.k.y. 28-04-2011 08:44 1667009

Код:

[*C*ode]
var: www: integer; // переменную объявляем за пределами функций/процедур, так она будет доступна всем

Function InitializeSetup: Boolean;
var st :string; i: Integer;
begin
  www := -1; // три значения: -1 - не изменялось, 0 - нет, 1 - да
  for i:=2 to ParamCount do begin
    st := Lowercase(ParamStr(i));
    Result := True;
    case st of
      Lowercase('/www_on') : www := 1;
      Lowercase('/www_off') : www := 0;
    end;
    Result := True; //а то почему-то Result "фолсится" и дистр закрывается не пикнув
  end; //case
end; //InitializeSetup

Function param_www_on: Boolean;
begin
if (www = 1) then Result := True else Result := False;
end;

[Files]
Source: nircmd.exe; DestDir: {app}\Utilities\; Flags: ignoreversion noencryption; Check: param_www_on


Serega 28-04-2011 09:34 1667026

Цитата:

Цитата shao
Если не сложно. »

Накидал пример, как это делается:
Пример

Код:

; имя файла
#define NameInf "unattended.ini"

#define MyAppName "My Program"
#define MyAppVerName "My Program 1.5"
#define MyAppExeName "MyProg.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=True
OutputDir=.
ShowLanguageDialog=auto
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: en; MessagesFile: compiler:Languages\English.isl
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
en.WelcomeLabel2=Click Next to continue, or Cancel to exit.
ru.WelcomeLabel2=Нажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти.
en.CreateDesktopIconAllUsers=For all users
ru.CreateDesktopIconAllUsers=Для всех пользователей
en.CreateDesktopIconUserOnly=For the current user only
ru.CreateDesktopIconUserOnly=Для текущего пользователя
en.UnattendedCaption=Unattended Install Maker for %1
ru.UnattendedCaption=Создание атоматического инсталлятора для %1
en.UnattendedCancelButton=Finish
ru.UnattendedCancelButton=Готово
en.FinishedHeadingLabel=Here something we write...
ru.FinishedHeadingLabel=Тут что-то пишем...
en.FinishedLabel=Here something we write...%n%n%nClick Finish.
ru.FinishedLabel=Тут что-то пишем...%n%n%nНажмите на кнопку "Готово".

[Components]
Name: main; Description: Main Files; Types: full compact custom; Flags: fixed
Name: help; Description: Help Files; Types: full
Name: help\english; Description: English; Types: full
Name: help\dutch; Description: Dutch; Types: full

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Components: main
Name: desktopicon\common; Description: {cm:CreateDesktopIconAllUsers}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: exclusive
Name: desktopicon\user; Description: {cm:CreateDesktopIconUserOnly}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: exclusive unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: unchecked

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app};  Components: main; Flags: ignoreversion
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: help\english; Flags: ignoreversion
Source: compiler:Examples\Readme-Dutch.txt; DestDir: {app}; Components: help\dutch; Flags: ignoreversion

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}; Tasks: desktopicon\common
Name: {userdesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}; Tasks: desktopicon\user
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon

[Code]
var
  MakeUnattended: Boolean;
 
function InitializeSetup(): Boolean;
begin
  Result := True;
  MakeUnattended := Pos('-MAKEUNATTENDED', Uppercase(GetCmdTail)) > 0;
end;

procedure CreateBat;
begin
  SaveStringToFile(
    ExtractFilePath(ExpandConstant('{srcexe}')) + ChangeFileExt('{#NameInf}', '.bat'), // имя батника
    '"' + ExtractFileName(ExpandConstant('{srcexe}')) + '" /verysilent /norestart /LoadInf=".\{#NameInf}"'#13#10, // сама запись
    False); // указываем, перезаписывать файл, если такой уже есть
end;

procedure SaveInfo;
var
  FileName, Value: string;
begin
  FileName := ExtractFilePath(ExpandConstant('{srcexe}')) + '{#NameInf}';
  SetIniString('Setup', 'Lang', ActiveLanguage, FileName); // язык
  SetIniString('Setup', 'Dir', ExpandConstant('{app}'), FileName); // выбранный каталог
  SetIniString('Setup', 'Group', ExtractFileName(ExpandConstant('{group}')), FileName); // группа
  SetIniBool('Setup', 'NoIcons', WizardForm.NoIconsCheck.Checked, FileName); // создавать или нет ярлык
  // указываем тип установки
  case WizardForm.TypesCombo.ItemIndex of
    0: SetIniString('Setup', 'SetupType', 'full', FileName);
    1: SetIniString('Setup', 'SetupType', 'compact', FileName);
    2: SetIniString('Setup', 'SetupType', 'custom', FileName);
  end;
  // проверяем какие компоненты выбраны
  Value := '';
  if IsComponentSelected('main') then
    Value := 'main,';
  if IsComponentSelected('help') then
    Value := Value + 'help,';
  if IsComponentSelected('help\english') then
    Value := Value + 'help\english,';
  if IsComponentSelected('help\dutch') then
    Value := Value + 'help\dutch,';
  if Value <> '' then
    SetLength(Value, Length(Value)-1);
  SetIniString('Setup', 'Components', Value, FileName);
  // проверяем доп. задачи
  Value := '';
  if IsTaskSelected('desktopicon') then
    Value := 'desktopicon,';
  if IsTaskSelected('desktopicon\common') then
    Value := Value + 'desktopicon\common,';
  if IsTaskSelected('desktopicon\user') then
    Value := Value + 'desktopicon\user,';
  if IsTaskSelected('quicklaunchicon') then
    Value := Value + 'quicklaunchicon,';
  if Value <> '' then
    SetLength(Value, Length(Value)-1);
  SetIniString('Setup', 'Tasks', Value, FileName);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if (CurPageID = wpReady) and MakeUnattended then
    begin
      SaveInfo;  // сохраняем выбранные данные
      CreateBat; // пишем батник
      // делаем имитацию финальной страницы
      with WizardForm do
        begin
          NextButton.Hide;
          BackButton.Hide;
          CancelButton.Left := ScaleX(310);
          CancelButton.Caption := ExpandConstant('{cm:UnattendedCancelButton}');
          FinishedHeadingLabel.Caption := ExpandConstant('{cm:FinishedHeadingLabel}');
          FinishedLabel.Caption := ExpandConstant('{cm:FinishedLabel}');
          FinishedPage.Show;
        end;
    end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if MakeUnattended then
    begin // если Unattended, то закрываем инсталлятор по тихому
      Cancel := True;
      Confirm := False;
    end;
end;

procedure InitializeWizard();
begin
  if MakeUnattended then
    with WizardForm do // при Unattended, указываем свои надписи
      begin
        Caption := ExpandConstant('{cm:UnattendedCaption,{#MyAppName}}');
        WelcomeLabel1.Caption := ExpandConstant('{cm:UnattendedCaption,{#MyAppName}}');
        WelcomeLabel2.Caption := ExpandConstant('{cm:WelcomeLabel2}');
      end;
end;


R.i.m.s.k.y. 28-04-2011 09:48 1667030

Цитата:

Цитата Serega
Накидал пример, как это делается: »

а я то подумал что ему надо просто пример как из комстроки параметры вытягивать...

как в define определить переменную path вида {src}\q1w2 ?

Serega 28-04-2011 09:57 1667031

Цитата:

Цитата R.i.m.s.k.y.
как из комстроки параметры вытягивать »

самое простое, это Pos('искомые данные', GetCmdTail) > 0... да писанины получается меньше ;)

Serega 28-04-2011 10:32 1667042

Цитата:

Цитата R.i.m.s.k.y.
как в define определить переменную path вида {src}\q1w2 ? »

Объясните подробней, может проще будет обойтись записью типа {code:GetPath}?
Код:

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {code:GetPath}; Flags: ignoreversion

[Code]
function GetPath(s: string): string;
begin
  Result := ExpandConstant('{src}\q1w2');
end;


R.i.m.s.k.y. 28-04-2011 10:45 1667057

Цитата:

Цитата Serega
Объясните подробней, может проще будет обойтись записью типа »

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

где взять iputils.dll???

нашел только тут http://forum.ru-board.com/topic.cgi?...1&start=760#10 но способ п*ц убиться как вытащить

R.i.m.s.k.y. 28-04-2011 11:01 1667062

а где тут был скрипт с вытаскиванием айпишника из ipconfig?
искать нет никакой возможности, с форумом сегодня какой-то ахтунг, постоянно time-out.
Желательно в личку или admin@rimsky.net
вытащить файл с выводом ipconfig не фокус, для меня фокус потом из него строчку с айпишником выдернуть.

Цитата:

Цитата Лександер
А если нет интернета, то нет и внешнего IP »

а внутренний за айпи не считается?

Serega 28-04-2011 12:40 1667103

Цитата:

Цитата R.i.m.s.k.y.
где взять iputils.dll??? »

здесь
Цитата:

Цитата R.i.m.s.k.y.
а где тут был скрипт с вытаскиванием айпишника из ipconfig? »

здесь и на следующей странице, я его немного поправил.
Цитата:

Цитата R.i.m.s.k.y.
а внутренний за айпи не считается? »

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

R.i.m.s.k.y. 28-04-2011 13:52 1667124

Цитата:

Цитата Serega
не совсем понятно, что именно вы под этим имеете ввиду? есть IP внешний и IP локальный...
лучше опишите подробней, что хотите сделать. »

локальный айпи нужен
хочу взять скрипт Utimate Test, присобачить к нему запись инфо о системе через запятую в расшаренную папку сервера, запустить через КД, а потом импортировать в эксель с разделителем ",", получится список кампов в сетке с имена пользователей, айпишниками, внутренностями камопв и тп.
Цитата:

Цитата Serega
здесь и на следующей странице, я его немного поправил. »

на страницах код по узнаванию макадреса, а мне айпишник нужен, мак адрес узнается по "-", айпишник так не узнаешь, у самого тяму не хватает.
Ведь недавно пробегал код по узнаванию айпишника через разгребание вывода ipconfig, а не через IPUtils (который непонятно почему на 1/3 машин could not call proc)

R.i.m.s.k.y. 28-04-2011 14:43 1667144

Вложений: 1
опять нихера не понимаю
Код:

[Files]
Source: d:\New\IPUtils.dll; DestDir: {tmp}; Flags: dontcopy noencryption nocompression


procedure InitializeWizard();
begin
  ExtractTemporaryFile(ExpandConstant('IPUtils.dll'));

вот такая ошибка, имя файла копировал а не набирал руками
http://forum.oszone.net/attachment.p...1&d=1303987375

Habetdin 28-04-2011 15:08 1667152

R.i.m.s.k.y., а зачем ExpandConstant?

Gnom_aka_Lexander 28-04-2011 15:14 1667162

R.i.m.s.k.y., обратил внимание - когда ставиш Flags: dontcopy, DestDir лучше вообще не указывать, а библиотеки лучше в InitializeSetup сетап распаковывать, так, примерно:
Код:

function InitializeSetup: Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\IPUtils.dll')) then ExtractTemporaryFile('IPUtils.dll');
  Result:=true;
end;


R.i.m.s.k.y. 28-04-2011 15:21 1667164

Цитата:

Цитата Habetdin
а зачем ExpandConstant »

от безисходности ;)
Цитата:

Цитата Лександер
так, примерно »

да, в InitializeSetup я засунуть не догадался! помогло

а с выдергиванием айпишника из выхлопа ipconfig никто не поможет?

если кслероз мне не изменяет, Лександр ссылку на руборд давал где был такой пример.

Gnom_aka_Lexander 28-04-2011 16:20 1667198

R.i.m.s.k.y., Давал, даю еще раз :) ссылка

R.i.m.s.k.y. 28-04-2011 16:21 1667200

Цитата:

Цитата Лександер
Давал, даю еще раз ссылка »

а мак адрес и айпишник разве одно и тоже?
в ссылке функция GetMACAddress
эту видел, и находил раньше

Gnom_aka_Lexander 28-04-2011 16:29 1667204

R.i.m.s.k.y., Не, не одно и то-же, мак адрес генерируется опираясь на конфу твоего железа, а Ип выдает твой провайдер.

R.i.m.s.k.y. 28-04-2011 16:47 1667218

Цитата:

Цитата Лександер
R.i.m.s.k.y., Не, не одно и то-же, мак адрес генерируется опираясь на конфу твоего железа, а Ип выдает твой провайдер. »

я в курсе, но почему то все упорно при вопросе дать код на айпишник дают ссылку на этот код макадреса.
айпи дает не только провайдер, есть еще и в локальной сети
мне надо в локальной сети, потому как на некоторых машиназ iputils не срабатывает - could not call proc

Gnom_aka_Lexander 28-04-2011 17:34 1667241

R.i.m.s.k.y., локального ип на некоторых машинах может и не быть :) даже если подключение через сеть идет - я знаю парочку таких провайдеров, отсюда и ошибка.

R.i.m.s.k.y. 28-04-2011 18:41 1667256

Цитата:

Цитата Лександер
локального ип на некоторых машинах может и не быть даже если подключение через сеть идет - я знаю парочку таких провайдеров, отсюда и ошибка. »

не мой случай, почитай на прошлой странице я написал на кой мне это надо, айпишнник есть у всех, а ошибка у 1/3 .

Serega 28-04-2011 20:57 1667286

Цитата:

Цитата R.i.m.s.k.y.
вот такая ошибка »

Цитата:

Цитата Лександер
обратил внимание - когда ставиш Flags: dontcopy, DestDir лучше вообще не указывать »

Совершенно верно, меня даже удивляет, зачем писать DestDir: {tmp}, когда ты распаковываешь сам и тем более ещё раньше чем сработает секция [Files]...
Цитата:

Цитата R.i.m.s.k.y.
айпи дает не только провайдер, есть еще и в локальной сети »

Согласен, если только вы находитесь в локальной сети... я допустим нет, как и 70% из присутствующих здесь на форуме и локальный IP у всех по умолчанию 127.0.0.1
Цитата:

Цитата R.i.m.s.k.y.
мне надо в локальной сети, потому как на некоторых машиназ iputils не срабатывает - could not call proc »

не знаю почему не срабатывает, по умолчанию должен выводить 127.0.0.1, но как вариант используйте try..except..end и в случае ошибки выводите 127.0.0.1
Цитата:

Цитата Лександер
локального ип на некоторых машинах может и не быть »

неправда, смотрите выше

EvilAlex 28-04-2011 20:59 1667288

Здравствуйте уважаемые форумчане !

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

Зарание спасибо !

R.i.m.s.k.y. 28-04-2011 21:40 1667303

Цитата:

Цитата Serega
не знаю почему не срабатывает, по умолчанию должен выводить 127.0.0.1, но как вариант используйте try..except..end и в случае ошибки выводите 127.0.0.1 »

спасибо, но поздно, скрипт уже в ГП КД, завтра будут результаты в логах, или не будут, как луна повернется ;)

R.i.m.s.k.y. 29-04-2011 09:45 1667422

Вложений: 1
Цитата:

Цитата Serega
как вариант используйте try..except..end и в случае ошибки выводите 127.0.0.1 »

теже фаберже только сбоку - could not call proc
на тех кампах вин хр3, может в этом дело?

собрал свой вариант вычисления айпишника, айпиадреса, айпи, IP адреса, IPAdress, IP Adress, IPAdres, IP Adres (это были теги для поиска ;)
нужен AdapterWatch http://www.nirsoft.net/utils/awatch.html

Код:

[Files]
Source: "awatch.exe"; Flags: dontcopy noencryption nocompression

[*C*ode]
ip : string; // переменная будет доступна всем функциям в коде

Procedure GetIPAdress();
var S: TArrayOfString; i,res : Integer; st : string;
begin
  ExtractTemporaryFile('awatch.exe');
  Exec(ExpandConstant('{tmp}\awatch.exe'), ' /stab tab1.txt 1 ',ExpandConstant('{tmp}'),SW_HIDE,ewWaitUntilTerminated,res);
  LoadStringsFromFile(ExpandConstant('{tmp}\tab1.txt'), S); // загружаем файл
  for i:= 0 to GetArrayLength(S)-1 do begin
    if (Pos(AnsiUpperCase('IP Addresses'), AnsiUpperCase(S[i])) > 0) then begin
      st:=S[i];
      break;
    end;
  end;
  StringChangeEx(st, 'IP Addresses', '', True);
  st:=TrimLeft(st);
  st:=copy(st,0,Length(st)-pos('(',st)-1);
  StringChangeEx(st, '(', '', True);
  st:=TrimRight(st);
  ip:=st;
end;
procedure InitializeWizard();
begin
  GetIPAdress;
  MsgBox('Your IP adress ' + ip, mbInformation, MB_OK);
  .....
end;


R.i.m.s.k.y. 29-04-2011 12:10 1667458

Цитата:

Цитата EvilAlex
Ктонибудь может дать скрипт для воспроизведения музыки в инстоляторе с кнопкой паузы и пуска ? »

благородный дон уже почитал сообщения в шапке и попробовал Inno Setup GameScript Generator? и поиском успел воспользоваться? и все равно не помогло?

Serega 29-04-2011 13:20 1667494

Цитата:

Цитата R.i.m.s.k.y.
собрал свой вариант вычисления айпишника »

Я рад, что вы смогли решить свою проблему.

R.i.m.s.k.y. 29-04-2011 13:29 1667499

Цитата:

Цитата Serega
Я рад, что вы смогли решить свою проблему. »

я тоже ;)

Gnom_aka_Lexander 29-04-2011 15:09 1667558

Serega, локальный IP у всех по умолчанию 127.0.0.1- позволю себе не согласится, это адрес хоста внутри самого компьютерра, и локальным не является, поскольку из локальной сети не виден.

Sotonisto 29-04-2011 17:37 1667623

Всем доброго времени суток. Как обычно нужна ваша помощь :)
1. Можно ли к стандартному (не заскинованому, без музыки и пр.) инсталлятору добавить авторан, например, YURSHAT'a (скрипт NFSU)?
2. Поделитесь ссылкой на скрипт, при котором инсталл проверял установлено ли приложение. Если установлено - выдавал соответствующее сообщение и зыкрывался.
Заранее спасибо.

R.i.m.s.k.y. 29-04-2011 18:02 1667634

Цитата:

Цитата Sotonisto
2. Поделитесь ссылкой на скрипт, при котором инсталл проверял установлено ли приложение. Если установлено - выдавал соответствующее сообщение и зыкрывался.
Заранее спасибо. »

Код:

[*C*ODE]
function haaliexists(): Boolean;
Var haaliPath: string;
begin
  if not IsWin64 then begin
    RegQueryStringValue(HKLM, 'SOFTWARE\HaaliMkx','Install_Dir', haaliPath);
    if FileExists (RemoveQuotes(haaliPath)+'\splitter.ax') then Result := True else Result := False;
  end;
  if IsWin64 then begin
    RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\HaaliMkx','Install_Dir', haaliPath);
    if FileExists (RemoveQuotes(haaliPath)+'\splitter.ax') then Result := True else Result := False;
  end;
end;

Function InitializeSetup: Boolean;
Begin
...
if (not haaliexists) then begin
  MsgBox('Проги нет! Ложки нет! Жисть не удалась!', mbInformation, MB_OK);
  result:=false
  end
  else result:=true;
end;


murlakatamenka 29-04-2011 18:18 1667641

Цитата:

Цитата Sotonisto
2. Поделитесь ссылкой на скрипт, при котором инсталл проверял установлено ли приложение. Если установлено - выдавал соответствующее сообщение и зыкрывался.
Заранее спасибо. »

можно проверять через реестр
Цитата:

Можно ли в Inno Setup задать, чтобы установка начиналась только если в реестре присутствует некоторый ключ? Вот готовый скрипт.
Код:

#define DateTime GetDateTimeString('ddddd','','')

[Setup]
AppName=CheckRegValue
AppVerName=CheckRegValue and select Component
DefaultDirName={pf}\My Program  OutputBaseFilename=Setup (сборка от {#DateTime})

[Tasks]
Name: eng; Description: Английская версия; Check: CheckKey
Name: rus; Description: Русская версия; Check: not CheckKey

[Коде] //заменить коде на Сode
Function CheckKey: Boolean;
Begin
if ExpandConstant('{reg:HKLM\Software\LucasArts\Star Wars Empire at War\1.0,CD Key}') = 'fc4c-3d8-05f-d411-uk20' then Result:= True
End;

Function InitializeSetup: Boolean;
Begin
If RegValueExists(HKLM, 'Software\LucasArts\Star Wars Empire at War\1.0\ExePath', ExpandConstant('{#SetupSetting("DefaultDirName")}')) then Result:=  True
else MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' не установлена!', mbInformation, mb_Ok)
End;

что здесь надо Вам, догадаетесь. взято из faq ру-борда

MrAWP 30-04-2011 18:20 1668137

up!

Помогите вытащить путь к firefox.exe из реестра (ключ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe , параметр Path - папка, в который лежит firefox.exe), а затем открыть через него xpi файл для установки плагина.

заранее спасибо.

Habetdin 01-05-2011 01:33 1668311

MrAWP, вместо ссылки впишите параметры для установки xpi:
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[code]
function DetectInstallRegKey: Boolean;
var
  Firefox: string;
  res: Integer;
begin
  if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe', '', Firefox) then
    if Firefox <> '' then
        Exec(Firefox, 'http://forum.oszone.net/index.php?referrerid=150730', '', SW_SHOW, ewWaitUntilTerminated, res);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpFinished then
    DetectInstallRegKey;
end;


mariolast 01-05-2011 05:33 1668324

Проконсультируйте если кто в курсе. При следующем раскладе

Compression=lzma2/ultra64
InternalCompressLevel=ultra64
SolidCompression=true

после запуска инсталлятора происходит пауза этак минуты две. Если убираю SolidCompression, то запускается мгновенно, но размер инсталлятора существенно больше. Это как то можно поправить?

R.i.m.s.k.y. 01-05-2011 08:10 1668336

Цитата:

Цитата mariolast
Если убираю SolidCompression, то запускается мгновенно, но размер инсталлятора существенно больше. Это как то можно поправить? »

есть ExtractTemporaryFile в коде? попробуй эти файлы в секции Files вынести в отдельные строчки и поставь флаг solidbreak
solidbreak
When solid compression is enabled, this flag instructs the compiler to finalize the current compression stream and begin a new one before compressing the file(s) matched by Source. This allows Setup to seek to the file instantly without having to decompress any preceding files first. May be useful in a large, multi-component installation if you find too much time is being spent decompressing files belonging to components that weren't selected.

Gnom_aka_Lexander 01-05-2011 12:18 1668400

Neutron,
читать дальше »
Код:

procedure InitializeWizard();
begin
  with WizardForm.ComponentsList do
  begin
    Visible := False;
  end;
end;


MrAWP 01-05-2011 12:46 1668409

Habetdin, спасибо огромное, работает)

Единственный нюанс - в Exec(Firefox, 'file:///{tmp}/plugin.xpi', '', SW_SHOW, ewWaitUntilTerminated, res); нету распознавания {tmp}, т.е. работает только если написать прямой путь, типа C:/plugin.xpi. Можно ли заставить выполнять файл из системной папки temp?

R.i.m.s.k.y. 01-05-2011 13:28 1668417

Цитата:

Цитата MrAWP
Можно ли заставить выполнять файл из системной папки temp »

можно, заставляй выполняться! ;)
а вообще если бы ты читал хотя бы иногда форум то наверняка наткнулся на функцию ExpandConstant
Exec(Firefox, 'file:///'+ExpandConstant('{tmp}')+'/plugin.xpi', '', SW_SHOW, ewWaitUntilTerminated, res)

MrAWP 01-05-2011 14:02 1668430

R.i.m.s.k.y., спасибо)
извиняюсь за свою некомпетентность)

LinkOFF 01-05-2011 18:42 1668559

Может кто-нибудь дать ссылку на depack.exe(вместе с 7z.dll) зарание спасибо

дайте ссылку на depack.exe c 7z.dll

El Sanchez 02-05-2011 16:44 1669020

Цитата:

Цитата R.i.m.s.k.y.
а с выдергиванием айпишника из выхлопа ipconfig никто не поможет? »

Цитата:

Цитата R.i.m.s.k.y.
собрал свой вариант вычисления айпишника, айпиадреса, айпи, IP адреса, IPAdress, IP Adress, IPAdres, IP Adres (это были теги для поиска
нужен AdapterWatch »

R.i.m.s.k.y., можно и без сторонних средств, например, использовать WMI:
Код:

[code]
type
  IP_ADDR_INFO = array of record
      Description: String;
      IPv4: String;
      IPv6: String;
  end;

function GetLocalIP(var IPAddrInfo: IP_ADDR_INFO): Boolean;
var
  objSWbemLocator, objSWbemServices, objSWbemObjectSet, objRegExp, objRegExpMatches: Variant;
  IndexCount, i: Byte;
  strBuf, ptrnIPv4, ptrnIPv6: String;
begin
  try
      objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
      objRegExp := CreateOleObject('VBScript.RegExp');
  except
      ShowExceptionMessage;
      Exit;
  end;
  ptrnIPv4 := '(\d{1,3}[.]){3}\d{1,3}'; //IPv4 regexp
  ptrnIPv6 := //IPv6 regexp
      '(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,6})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|' +
      '(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|//(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|' +
      '(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}){1,1})|' +
      '((([0-9a-fA-F]{1,4}:){1,7}|:):)|(:(:[0-9a-fA-F]{1,4}){1,7})|(((([0-9a-fA-F]{1,4}:){6})(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
      '((([0-9a-fA-F]{1,4}:){5}[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
      '(([0-9a-fA-F]{1,4}:){5}:[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
      '(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
      '(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,3}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
      '(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,2}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})';

  objSWbemServices := objSWbemLocator.ConnectServer();
  objSWbemServices.Security_.ImpersonationLevel := 3;
  IndexCount := objSWbemServices.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration').Count;
  objSWbemObjectSet := objSWbemServices.ExecQuery('SELECT Description,IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE');

  for i := 1 to IndexCount do
  try
      SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)+1);
      strBuf := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).GetObjectText_;
      IPAddrInfo[GetArrayLength(IPAddrInfo)-1].Description := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).Properties_.Item('Description').Value;
      objRegExp.Pattern := ptrnIPv4;
      if objRegExp.Test(strBuf) then
      begin
        objRegExpMatches := objRegExp.Execute(strBuf);
        IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv4 := objRegExpMatches.Item[0].Value;
      end;
      objRegExp.Pattern := ptrnIPv6;
      if objRegExp.Test(strBuf) then
      begin
        objRegExpMatches := objRegExp.Execute(strBuf);
        IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv6 := objRegExpMatches.Item[0].Value;
      end;
  except
      GetExceptionMessage;
      SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)-1);
  end;
  Result := (GetArrayLength(IPAddrInfo) > 0);
end;

procedure InitializeWizard();
var
  i: Byte;
  arr: IP_ADDR_INFO;
begin
  if GetLocalIP(arr) then for i := 0 to GetArrayLength(arr)-1 do
  MsgBox(
      'Description: ' + arr[i].Description + #13#10 +
      'IPv4: ' + arr[i].IPv4 + #13#10 +
      'IPv6: ' + arr[i].IPv6 + #13#10, mbInformation, MB_OK);
end;


R.i.m.s.k.y. 02-05-2011 18:44 1669098

Спасибо!

insombia 02-05-2011 21:55 1669199

Как сделать чтобы время во время установки ишло?

YURSHAT 03-05-2011 15:13 1669547

Цитата:

Цитата insombia
Как сделать чтобы время во время установки ишло? »

Вам нужно системное время или время до завершения установки?

insombia 03-05-2011 19:29 1669715

YURSHAT время до завершения установки

YURSHAT 03-05-2011 20:47 1669748

insombia

Пример
Код:

[Setup]
AppName=FreeArc Example
AppVerName=FreeArc Example 3.3 Extreme
DefaultDirName={pf}\FreeArc Example

[Files]
Source: compiler:innocallback.dll; DestDir: {tmp}; Flags: dontcopy;
Source: {win}\Help\; DestDir: {app}; Flags: external;

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

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

[CustomMessages]
rus.hour= часов
rus.min= мин
rus.sec= сек

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

var
StartInstall: Integer;
TimeLabel: TLabel;
TimerID: Longword;

function GetTickCount: DWord; external 'GetTickCount@kernel32';
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 cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
    if detail then            {hh: mm:ss format}
        Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
    else if Ticks/3600 >= 1000 then    {more than hour}
        Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
    else if Ticks/60 >= 1000 then    {1..60 minutes}
        Result:= IntToStr(Ticks/60000) +m+' '+ IntToStr(Ticks/1000 - Ticks/1000/60*60) +s
    else Result:= Format('%.1n', [Abs(Ticks/1000)]) +s    {less than one minute}
End;

procedure GetTime(HandleW, Msg, idEvent, TimeSys: LongWord);
var Remaining: Integer;
begin
with WizardForm.ProgressGauge do begin
  if position > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position))
    TimeLabel.Caption:= 'Inoaeinu ' + TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)
    if (Remaining = 0) then TimeLabel.Caption:= 'Завершение...'
  end;
end;

procedure InitializeWizard();
begin
TimeLabel:= TLabel.Create(WizardForm)
TimeLabel.SetBounds(ScaleX(0), ScaleY(80), ScaleX(457), ScaleY(20));
TimeLabel.AutoSize:= False
TimeLabel.Transparent:= True;
TimeLabel.Parent:= WizardForm.InstallingPage;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep = ssInstall then
  begin
    StartInstall:= GetTickCount
    TimerID:= SetTimer(0,0, 500, WrapTimerProc(@GetTime, 4))
  end;
end;

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


insombia 03-05-2011 21:31 1669769

YURSHAT У тебя случайно нету кода для изменения шрифта обычного на georgia или ещё на какой то?

vint56 03-05-2011 21:49 1669776

insombia,
читать дальше »
#define Font "Zombie.ttf"
#define FontName "DS Zombie Cyr"

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

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

[Files]
Source: {#Font}; Flags: dontcopy;

[code]
var
IsCustomFontInstalled: boolean;
FontName: string;

function AddFontResource(FileName: PAnsiChar): Integer; external 'AddFontResourceA@gdi32.dll stdcall';
function RemoveFontResource(FileName: PAnsiChar): BOOL; external 'RemoveFontResourceA@gdi32.dll stdcall';

Procedure InitializeWizard();
begin
ExtractTemporaryFile('{#Font}');
IsCustomFontInstalled:=AddFontResource(ExpandConstant('{tmp}')+'\{#Font}')>0;
if IsCustomFontInstalled then SendMessage(HWND_BROADCAST,$1D,0,0);
if FontExists('{#FontName}') then FontName:='{#FontName}' else FontName:='Arial';
WizardForm.Font.Name:= FontName;
end;

procedure DeInitializeSetup();
begin
WizardForm.Free
if IsCustomFontInstalled then
if RemoveFontResource(ExpandConstant('{tmp}')+'\{#Font}') then SendMessage(HWND_BROADCAST,$1D,0,0);
end;

insombia 03-05-2011 22:33 1669800

vint56 та это как-то сложно запущено помню когда то я по другому использовал шрифты типа langoption но ошибку выдаёт

El Sanchez 04-05-2011 08:39 1669957

insombia,
может так?
Код:

[Setup]
DefaultDialogFontName=Georgia


murlakatamenka 04-05-2011 13:05 1670071

Цитата:

Цитата El Sanchez
insombia,
может так?
Код:
[Setup]
DefaultDialogFontName=Georgia

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

vint56 04-05-2011 14:40 1670114

insombia,
http://rghost.ru/5463661

N00bak 04-05-2011 15:42 1670158

как сделать в скрипте чтоб он просил вставить второй диск и как ему указать какие файлы где должны лежать помогите оч нужно

insombia 04-05-2011 16:00 1670166

N00bak
DiskSpanning=true
DiskSliceSize=1145766400
SlicesPerDisk=2

это пример а насчет файлов не знаю

как сделать чтобы писалось типа как тут http://img34.imageshack.us/img34/406...0504101831.png
размер жд доступно и т д?

El Sanchez 04-05-2011 16:12 1670176

Цитата:

Цитата murlakatamenka
но если у пользователя шрифта не будет ? »

murlakatamenka, будет использован
Код:

8-point Microsoft Sans Serif or MS Sans Serif
Цитата:

Цитата murlakatamenka
в таком случае надо скрипт от винта, там шрифт устанавливается в систему пользователя »

Ну, можно и средствами Inno:
Код:

[Files]
Source: "OZHANDIN.TTF"; DestDir: "{fonts}"; FontInstall: "Oz Handicraft BT"; Flags: onlyifdoesntexist uninsneveruninstall

Цитата:

Цитата N00bak
как сделать в скрипте чтоб он просил вставить второй диск и как ему указать какие файлы где должны лежать помогите оч нужно »

N00bak, ищите в справке о параметрах DiskSpanning, DiskSliceSize, SlicesPerDisk секции [Setup]:
Код:

[Setup]
DiskSpanning=true
...
To optimally fill 4.7 GB recordable DVDs, use:
SlicesPerDisk=3
DiskSliceSize=1566000000


N00bak 04-05-2011 16:14 1670179

спс)

в первые с такой проблемой столкнулся)

N00bak 04-05-2011 16:22 1670182

Вложений: 1
может в скрипт сделаете?
а?
вот он

N00bak 04-05-2011 16:26 1670185

insombia
нет чтоб он диск второй просил а не завершал установку

ваш способ не подошел у меня архивы запакованы фриарком

Edison007 04-05-2011 17:13 1670206

N00bak
Используй IsDone

N00bak 04-05-2011 17:17 1670209

Edison007
там оформление и функционал пропадет мне надо чтоб он остался скриптов то полно которые разбивают на 2 диска они есть мне над что он именно в этот сделать

YURSHAT 04-05-2011 19:52 1670277

Цитата:

Цитата El Sanchez
Ну, можно и средствами Inno:
[Files]
Source: "OZHANDIN.TTF"; DestDir: "{fonts}"; FontInstall: "Oz Handicraft BT"; Flags: onlyifdoesntexist uninsneveruninstall »

Оно то можно конечно, но ничего не получится :)
Пользователю нужно, чтобы в инсталляторе исользовался кастомный шрифт, а вышепреведенный пример этого не позволяет, так как по вашему примеру шрифт установится на этапе ssInstall, а шрифт должен использоватся еще при инициализации мастера, а может быть и еще раньше. К тому же использование кастомного шрифта путем предварительной его установки в систему не лучший вариант, так как многим может не понравится, что инсталл втихую от них что-то устанавливает в систему.
С учетом вышесказанного, лучший вариант это временное использование внешнего шрифта во врема работы инсталла и последующее его удаление по завершению инсталляции, так как у меня сделано в скрипте Undercover т.е. пример, который привел товарищ vint56.

El Sanchez 04-05-2011 20:50 1670300


YURSHAT, спасибо, сглупил я. Предыдущий мой пост считать ересью. :)

N00bak 05-05-2011 10:40 1670572

кто нить может обьединить мой скрипт с исданом?без потерь оформления?

EvilAlex 05-05-2011 13:45 1670663

Здравствуйте форумчане !

Подскажите пожалуйста чем кроме фриарка можно еще паковать и главное как ?

Заранее спасибо !

R.i.m.s.k.y. 05-05-2011 14:48 1670691

Цитата:

Цитата EvilAlex
Подскажите пожалуйста чем кроме фриарка можно еще паковать и главное как »

самим инно :tongue:
неплохо жмет, при паковке ведьмака инно на макс сжатие оказался хуже всего на 100метров чем 7зип

murlakatamenka 05-05-2011 15:29 1670712

EvilAlex, знаю, что ребятки используют precomp + srep + freearc
кажется, R.i.m.s.k.y. рекомендовал 7-zip без сжатия + freearc
лично я обхожусь средствами Inno, т.к. остальным пользоваться не умею и никогда не пробовал
вот полезная информция с сайта FreeArc


а как с помощью FreeArc делать ? т.е. я пакую игровые ресурсы фриарком, а что дальше ?
читать дальше »

Readme к скрпту Shegorat на сайте фриарка.
Цитата:

Добавление архивов
Для того чтобы использовать этот скрипт вам нужно добавить архивы в массив архивов. Этот процесс практически полностью автоматизирован, вам нужно только заполнить строку Archives.
Рассмотрим строку Archives установленную по умолчанию:
#define Archives "{src}\data1.bin;DestDir:{app}\;Disk:1;Components:Russian"
#define Archives Archives + "|" + "{src}\data2.bin;DestDir:{app}\data;Disk:1"
#define Archives Archives + "|" + "{src}\data3.bin;DestDir:{app}\data2;Disk:2;Components:English"
#define Archives Archives + "|" + "{src}\data4.bin;DestDir:{app}\data3;Disk:2"
Первая строчка регистрирует строку Archives, последующие просто добавляют к ней данные об архивах.
исходя из этого, при упаковке надо создавать не .arc-файлы, а .bin и потом просто добавлять их, как в примере. Расширение тут в принципе не важно, ну уж пусть будет привычное бин. Хотелось бы научиться, т.к. удобно обновлять репаки при выходе нового патча или таблетки.
upd. Написал этот пост и решил попробовать. Создал фриарком архив .bin, добавил его в define и проверил на скрипте Shegorat, всё нормально. Удобно, однако :)


ещё интересно, как использовать для фриарка srep вместо rep по умолчанию
на страничке SREP для Inno
написано
Цитата:

How to set up FreeArc to use SREP in filter mode
Add the following section to your arc.ini:
[External compressor:srep]
;options = l%d (minimal match length, default=512)
packcmd = srep {options} -temp=srep.tmp - - <stdin> <stdout>
unpackcmd = srep -d -temp=srep.tmp - - <stdin> <stdout>
я это добавил, а что дальше ?

R.i.m.s.k.y. 05-05-2011 17:11 1670782

Цитата:

Цитата murlakatamenka
кажется, R.i.m.s.k.y. рекомендовал 7-zip без сжатия + freearc »

ваш склероз вам изменяет ;)
я только самим инно пакую, остальное считаю от лукавого

EvilAlex 05-05-2011 19:04 1670843

Цитата:

Цитата R.i.m.s.k.y.
Цитата murlakatamenka: кажется, R.i.m.s.k.y. рекомендовал 7-zip без сжатия + freearc »
ваш склероз вам изменяет
я только самим инно пакую, остальное считаю от лукавого
------- »

Тоже самое !

Gnom_aka_Lexander 06-05-2011 12:53 1671228

EvilAlex, Это, конечно, оффтопик, но ведьмак неплохо жмется голым фриарком - у меня на дополненом издании, со всеми приключениями, он поместился на один двд+ около полторы сотни метров свободно осталось, самим инно не пробовал, но подозреваю, что не намного хуже сожмется - там мало плохо сжимаемых данных.

R.i.m.s.k.y. 06-05-2011 12:59 1671230

у меня все дополненное издание со всеми приключениями + мп3 из игры + мп3 по мотивам + рип фильма об игре, в общем все что было в издании_не_помню_каком - 8,9 гиг, 100 метров лишних чтобы на 2двд не влезть

Imitri7 06-05-2011 16:47 1671364

решил проблему

R.i.m.s.k.y. 06-05-2011 18:03 1671399

не поверишь - прочитать шапку!
пример скрипта, позволяющий получить путь к стандартным папкам Windows

тоже мне проблема - справку почитать наконец-то

Gnom_aka_Lexander 06-05-2011 18:19 1671409

Imitri7, Еще проще :) {userappdata} на виста-7 будет C:/Users/User name/AppData/Roaming, а на ХР C:/Documents and Settings/User name/Application Data/. Проверено неоднократно :)

insombia 06-05-2011 19:59 1671470

У кого-то есть какой-то простой скрипт распаковки фриарков?просто когда я делаю инсталятор то ошибки при комплияции даёт

Gnom_aka_Lexander 06-05-2011 20:33 1671492

insombia, Погуглить не судьба? Держи, выбирай :)

STRAYKER 07-05-2011 16:45 1671938

Возможно ли разобрать инсталятор созданый в Inno Setup на его составляющие ?
Ну там на скины, картинки инсталятора и сами файлы.

R.i.m.s.k.y. 07-05-2011 17:29 1671959

я пользуюсь innoup, вытаскивает все кроме секции Code и если инсталлер без пароля http://sourceforge.net/projects/innounp/files/

если почитать шапку - http://forum.oszone.net/post-1236326-33.html

crashDark 07-05-2011 18:10 1671987

Здравствуйте, вот у меня одна проблема! Украшения инсталла сделал, музыка, картинки на заднем и переднем плане и т.д. Так вот, когда у меня заканчивается коплимировка у меня просто напросто не открывается инсталлятор. Но когда убираю украшения то инсталлятор работает. Использовал файлы FreeArc.

http://rghost.ru/5505781 вот мой скрипт. Буду очень благодарен если разберётесь. Просто уже больше месяца не могу разобраться с ошибкой.

slysoft 07-05-2011 19:46 1672045

Вложений: 1
Всем доброго времени суток, подскажите что нужно дописать в скрипте, чтоб текст (Не создавать папку в меню "Пуск"), тоже был цвета "lime", а не чёрным, заранее Благадарю!!!
читать дальше »
const
Color = clblack;

procedure InitializeWizard();
begin
WizardForm.Font.Color:=clLime;
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:=clblack;
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.WelcomeLabel1.Font.Color:=clLime;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clLime;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clLime;
WizardForm.Bevel.visible:=False;
WizardForm.BeveledLabel.visible:=False;
WizardForm.Bevel1.visible:=False;
end;

Gnom_aka_Lexander 07-05-2011 20:35 1672069

crashDark,
Свою секцию [Files] замени на
вот эту:
[Files]
Source: logo1.bmp; DestDir: {tmp}; Flags: dontcopy noencryption nocompression solidbreak;
Source: 2.bmp; DestDir: {tmp}; Flags: dontcopy noencryption nocompression solidbreak;
Source: Button2.bmp; Flags: dontcopy noencryption nocompression solidbreak;
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy noencryption nocompression solidbreak;
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy noencryption nocompression solidbreak;
Source: "D:\Games\Crysis 2.arc"; DestDir: "{app}"; Flags: ignoreversion;
Source: 1.arc; DestDir: {tmp}; Flags: ignoreversion ;


slysoft, На WizardForm.NoIconsCheck невозможно изменить цвет текста.

insombia 07-05-2011 21:21 1672095

Кто-то может помочь со скриптом не как не могу сделать распаковку фриарков оно файл арк устанавлевает но не распаковывает его может кто-то мне помоч?

читать дальше »
#define MyAppName "Dark Sector"

[Setup]
AppName=Dark Sector
AppVersion=1.0
DefaultDirName={pf}\Dark Sector
DefaultGroupName=Dark Sector
OutputDir=D:\Dark Sector Repack
OutputBaseFilename=setup
AllowCancelDuringInstall=false
Compression=lzma/ultra64
DiskSpanning=true
DiskSliceSize=1145766400
SlicesPerDisk=3
WizardImageFile=C:\Users\Urban\Desktop\1234611108_darksector.bmp
InternalCompressLevel=ultra64
WizardSmallImageFile=C:\Users\Urban\Desktop\dark_sector.bmp
SolidCompression=true

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Messages]
BeveledLabel=RePack от Urban 4M
DiskSpaceMBLabel=Требуется как минимум 6,08 Гб свободного дискового пространства.

[CustomMessages]
russian.Welcome1=Вас приветствует Мастер установки игры Dark Sector
russian.Welcome2=Программа установит игру Dark Sector на Ваш компьютер.Рекомендуется закрыть антивирусные пакеты, а также все прочие приложения перед тем, как продолжить.%n%nНажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти из программы установки.
russian.StartMenuLbl=Нажмите «Установить», чтобы продолжить. Если Вы хотите выбрать другую папку, нажмите «Обзор».
russian.QuickLaunch=Создать ярлык в Панели быстрого запуска
russian.Desktop=Создать ярлык на Рабочем столе
russian.FinishedHeading=Установка игры Dark Sector успешно завершена.
russian.FinishedLabel=Игра Dark Sector была успешно установлена на Ваш компьютер. Для ее запуска выберите соответствующий ярлык в меню «Пуск» или на Рабочем столе.
russian.FinishedLabel2=Нажмите «Завершить», чтобы выйти из программы установки.
russian.Uninstall=Удалить Dark Sector?

[Files]
Source: C:\Users\Urban\Desktop\Tiger.cjstyles; DestDir: {tmp}; Flags: dontcopy
Source: C:\Users\Urban\Desktop\ISSkin.dll; DestDir: {tmp}; Flags: dontcopy
Source: D:\Dark Sector/*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов

[Icons]
Name: {group}\Dark Sector; Filename: {app}\Dark Sector
Name: {group}\UninstallProgram,Dark Sector; Filename: {uninstallexe}

[Run]
Filename: D:\Dark Sector\DS.exe; Description: Запустить игру; Flags: nowait postinstall skipifsilent

[code]
/////////////////////////////////////Механиковская установка//////////////////////////////////////////////////////////
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard();
begin
//Выносим кнопку "Отмена" на передний план
WizardForm.CancelButton.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling then
begin
WizardForm.BorderStyle:=bsDialog;
WizardForm.MainPanel.Visible:=False;
WizardForm.Width:=ScaleX(320);
WizardForm.Height:=ScaleY(127);
WizardForm.InnerNotebook.Left:=ScaleX(7);
WizardForm.InnerNotebook.Top:=ScaleY(7);
WizardForm.InnerNotebook.Width:=ScaleX(300);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(17);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(37);
WizardForm.ProgressGauge.Left:=ScaleX(0);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(122);
WizardForm.CancelButton.Top:=ScaleY(70);
WizardForm.Left:=GetSystemMetrics(16)-ScaleX(315);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(105);
WizardForm.Bevel.hide;
WizardForm.Bevel1.hide;
end;
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;{Размер окна по горизонтали}
WizardForm.Height:=392;{Размер окна по вертикали}
WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
end
end;

/////////////////////////////////////Вставка скина//////////////////////////////////////////////////////////
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('Tiger.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\Tiger.cjstyles', '');
Result:=True;
end;

procedure DeinitializeSetup;
begin
ShowWindow(WizardForm.Handle,0);
UnloadSkin();
end;
//////////////////////////////////////////////////////////////////////////////
что нужно подобавлять чтобы не убирать скрипт установки как у механиков?

slysoft 07-05-2011 21:53 1672124

Ясно, спасибо Лександер!

Вот возник ещё один вопрос, как убрать кнопку "Назад" на странице приветствия и чтоб вместо звёздочек на кнопках были надписи "Назад", "Далее" и "Отмена" http://forum.oszone.net/attachment.p...1&d=1304791051 , Заранее всем спасибо за помощь, а вот сам скрипт который использовал
читать дальше »
[Files]
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy

[Code_]

const
ButtonWidth = 80;
ButtonHeight = 23;

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

var
WizardLabel: TLabel;
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
n: Integer;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
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
end;

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

procedure ButtonLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
begin
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;
if ButtonLabel[TLabel(Sender).Tag].Enabled then
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
ButtonImage[TLabel(Sender).Tag].Left:= -160
end;
end;

procedure WizardLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm)
Image.Width:=240
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseMove:=@ButtonLabelMove
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm)
Labl.Left:=23
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseMove:=@ButtonLabelMove
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
ButtonLabel[AButtonIndex].Left:= ButtonPanel[AButtonIndex].Width div 2 - ButtonLabel[AButtonIndex].Width div 2;
ButtonLabel[AButtonIndex].Top:= ButtonPanel[AButtonIndex].Height div 2 - ButtonLabel[AButtonIndex].Height div 2;
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure InitializeWizard();
begin
WizardLabel:= TLabel.Create(WizardForm)
WizardLabel.Left:= ScaleX(0)
WizardLabel.Top:= ScaleY(0)
WizardLabel.Width:= ScaleX(497);
WizardLabel.Height:= ScaleY(360);
WizardLabel.Transparent:= True;
WizardLabel.AutoSize:=false;
WizardLabel.Caption:='';
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:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
UpdateButton(WizardForm.DirBrowseButton,bidDirBrowse)
UpdateButton(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

или дайте другой скрипт, или ссылку!!!

Ну ответьте кно нибудь плиззз!!!

crashDark 07-05-2011 22:58 1672169

Лександер, спасибо огромное. Помогла ваша помощь.

insombia 07-05-2011 23:08 1672174

у меня есть проблемка когда при установке софта припустим убрать галочку с директа после установки он все равно устанавлевается как исправить?

Tco 03 07-05-2011 23:47 1672200

slysoft
Как у тебя вообще появилась кнопка <Назад на странице приветствия?

Чтобы переименовать кнопки, можно сделать так:
читать дальше »
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Messages]
russian.ButtonBack=< Назад
russian.ButtonNext=Далее >
russian.ButtonInstall=Установить
russian.ButtonFinish=Завершить


Вот пример отключения кнопки Далее> на странице приветствия и переименование кнопки Отмена, на странице выбора папки установки.
читать дальше »
[code]
Procedure CurPageChanged(CurPageID: Integer);
Begin
If CurPageID = wpWelcome Then
Begin
WizardForm.CancelButton.Hide;
End;

If CurPageID = wpSelectDir Then
Begin
If WizardForm.FindComponent('CancelButton') is TButton
Then
TButton(WizardForm.FindComponent('CancelButton')).Caption:='Выйти';
End;
End;

Tco 03 08-05-2011 00:15 1672216

Хочу перепаковать одну программу, но нужно чтобы обновления к этой программе подходили к перепакованной программе.
То есть, как правильно зарегистрировать перепакованную программу, чтобы обновления для оригинальной программы находили путь установки к перепакованной программе?

R.i.m.s.k.y. 08-05-2011 07:48 1672270

Tco 03, RegShot тебе в руки

Tco 03 08-05-2011 08:22 1672274

R.i.m.s.k.y. Очень исчерпывающий ответ! А по подробней, если можно? :)

R.i.m.s.k.y. 08-05-2011 08:33 1672277

по-умолчанию предполагается, что люди, попадающие по клавишам с первого раза, умеют сами искать информацию в подсказанном направлении.

0. Яндексим "RegShot скачать", скачиваем, распаковываем, запускаем.
1. Настраиваем регшот не только на сканирование реестра, но и файлов в папке виндоуса и Users (в настройках, да), ставим также вывод результатов в рег-файлики
2. Делаем снимок 1
3. Ставим прогу с оригинального инсталлятора
4. Делаем снимок 2 и получаем рег-файлик с различиями
5. Импортируем его через IsTool в свой инсталлер, файлы раскидываем руками.
6. Повторить 2-5 в вин64
7. Думаю, ты уже догадался, что неплохо бы поправить в скрипте абсолютные пути на относительные {app}\... и повыкидывать лишний мусор

slysoft 08-05-2011 12:02 1672387

Всем доброго времени суток и с Наступающим праздником, помогите пожалуйста объеденить два скрипта, а то у меня, когда объединяю ошибку бьёт на этой строке procedure CurPageChanged(CurPageID: Integer); , пишет идентифити экстендет, по отдельности всё работает отлично,первый скрипт
читать дальше »
; Скрипт создан при помощи мастера создания скриптов.
; СМ. ДОКУМЕНТАЦИЮ ДЛЯ ИЗУЧЕНИЯ ДЕТАЛЕЙ ОТНОСИТЕЛЬНО СОЗДАНИЯ ФАЙЛОВ СКРИПТА INNO SETUP!

#define MyAppName "Call of Duty Black Ops"
#define MyAppVerName "Call of Duty Black Ops v1.6"
#define MyAppPublisher "SlySoft"
#define MyAppURL "http://***"
#define MyAppExeName "MadCheckers.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=E:\Инсталяторы
OutputBaseFilename=BlackOps
SetupIconFile=E:\Раздачи!!!\Для игр\Шашки\12.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
WizardImageFile=1.bmp
WindowVisible=false
WizardImageBackColor=clGreen
WizardSmallImageFile=E:\Раздачи!!!\Для игр\Шашки\logo1.bmp
WindowStartMaximized=false
BackColor=clSilver
BackColor2=clSilver

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: additional; Description: "Дополнительное ПО";
Name: additional\dx; Description: "Обновить DirectX"; Flags: unchecked
Name: additional\vcr86; Description: "Обновить библиотеки С++ х86"; Flags: unchecked;

[Files]
Source: D:\игры\ИГРЫ\MadCheckers\MadCheckers.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\игры\ИГРЫ\MadCheckers\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: logo1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\ops.mp3; DestDir: {tmp}; Flags: dontcopy
Source: 2.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Button1.bmp; Flags: dontcopy
; ОТМЕТЬТЕ: Не используйте "Флажки: Проигнорировать версию" на любых общедоступных системных файлах
; Add the ISSkin DLL used for skinning Inno Setup installations.
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy

; Add the Visual Style resource contains resources used for skinning,
; you can also use Microsoft Visual Styles (*.msstyles) resources.
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy


[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}
Name: {group}\Удалить Шашки v1.0; Filename: {uninstallexe}; WorkingDir: {app}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent
Filename: {src}\Redist\VisualC++\vcredist_x86.exe; Tasks: additional\vcr86; Parameters: /q;
Filename: {src}\Redist\DirectX\DXSETUP.exe; Tasks: additional\dx; Parameters: /silent;

[code]
// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), 'NormalBlack.ini');
Result := True;
end;

procedure DeinitializeSetup();
begin
// Hide Window before unloading skin so user does not get
// a glimse of an unskinned window before it is closed.
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;
function mciSendString(lpstrCommand: string; lpstrReturnString: string; uReturnLength:integer; hwndCallback:integer):integer;
external 'mciSendStringA@winmm.dll stdcall';
procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
ShellExec('', 'http://***', '' , '', SW_SHOW, ewNoWait, ResCode)
end;
var
WelcomeLabel1, WelcomeLabel2, FinishedLabel, FinishedHeadingLabel: TLabel;
const
Color = clblack;


procedure InitializeWizard();
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin
ExtractTemporaryFile('Button1.bmp')

BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=20
Top:=325
Width:=200
Height:=30
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button1.bmp')
Parent:=BtnPanel
end
begin
WizardForm.WizardBitmapImage.Width := ScaleX(497); //координаты поправишь как те надо)
WizardForm.WizardBitmapImage.Height := ScaleX(323);
////////завершение
WizardForm.WizardBitmapImage2.Width := ScaleX(497);
WizardForm.WizardBitmapImage2.Height := ScaleX(323);
begin
ExtractTemporaryFile(ExpandConstant('ops.mp3'))
mciSendString(ExpandConstant('play {tmp}\ops.mp3 repeat'),'NULL',0,0)
begin
ExtractTemporaryFile('2.bmp');

WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp'));

WelcomeLabel1:= TLabel.Create(WizardForm);
WelcomeLabel1.AutoSize:= False;
with WizardForm.WelcomeLabel1 do
WelcomeLabel1.SetBounds(Left, Top, Width, Height);
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.SetBounds(Left, Top, Width, Height);
WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel2.Font.Color:= clWhite;
WelcomeLabel2.Transparent:= True;
WelcomeLabel2.WordWrap:= true;
WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent:= WizardForm.WelcomePage

FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.AutoSize:= False;
with WizardForm.FinishedHeadingLabel do
FinishedHeadingLabel.SetBounds(Left, Top, Width, Height);
FinishedHeadingLabel.Font:= WizardForm.FinishedHeadingLabel.Font
FinishedHeadingLabel.Font.Color:= clWhite;
FinishedHeadingLabel.Transparent:= True;
FinishedHeadingLabel.WordWrap:= true;
FinishedHeadingLabel.Caption:= WizardForm.FinishedHeadingLabel.Caption;
FinishedHeadingLabel.Parent:= WizardForm.FinishedPage

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
FinishedLabel.SetBounds(Left, Top, Width, Height);
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
FinishedLabel.Parent:= WizardForm.FinishedPage

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
end;
begin
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
begin
WizardForm.Font.Color:=clLime;
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:=clblack;
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.WelcomeLabel1.Font.Color:=clLime;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clLime;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clLime;
WizardForm.Bevel.visible:=False;
WizardForm.BeveledLabel.visible:=False;
WizardForm.Bevel1.visible:=False;
begin
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.WizardSmallBitmapImage.Left := ScaleX(0);
WizardForm.WizardSmallBitmapImage.Top := ScaleY(0);
WizardForm.WizardSmallBitmapImage.Width := WizardForm.MainPanel.Width;
WizardForm.WizardSmallBitmapImage.Height := WizardForm.MainPanel.Height;
end
end;
end;
end;
end;
end;

соеденить с этим
читать дальше »
[Files]
;Изображение размером 240x23
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy

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

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

var
WizardLabel: TLabel;
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
n: Integer;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
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
end;

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

procedure ButtonLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
begin
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;
if ButtonLabel[TLabel(Sender).Tag].Enabled then
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
ButtonImage[TLabel(Sender).Tag].Left:= -160
end;
end;

procedure WizardLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm)
Image.Width:=240
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseMove:=@ButtonLabelMove
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm)
Labl.Left:=23
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseMove:=@ButtonLabelMove
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
ButtonLabel[AButtonIndex].Left:= ButtonPanel[AButtonIndex].Width div 2 - ButtonLabel[AButtonIndex].Width div 2;
ButtonLabel[AButtonIndex].Top:= ButtonPanel[AButtonIndex].Height div 2 - ButtonLabel[AButtonIndex].Height div 2;
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure InitializeWizard();
begin
WizardLabel:= TLabel.Create(WizardForm)
WizardLabel.Left:= ScaleX(0)
WizardLabel.Top:= ScaleY(0)
WizardLabel.Width:= ScaleX(497);
WizardLabel.Height:= ScaleY(360);
WizardLabel.Transparent:= True;
WizardLabel.AutoSize:=false;
WizardLabel.Caption:='';
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:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
UpdateButton(WizardForm.DirBrowseButton,bidDirBrowse)
UpdateButton(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

Заранее премного благодарен!!!

crashDark 08-05-2011 12:36 1672418

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

И ещё один вопрос вот скриншот , как сделать такую оболочку? Таким же цветом! Буду благодарен.

Gnom_aka_Lexander 08-05-2011 20:26 1672700

slysoft, Кинь файлы, ща соединю тебе :)

EvilAlex 08-05-2011 20:54 1672718

Здравствуйте форумчане !

Помогите пожалуйста сделать установочник по типо, скачалось и установилось !

Я нашел какойто скрипт но он только скачивет зип архив с сайта и нечего больше не происходит, а мне нужно чтобы он скачал хотябы архив зип и установил его создав ярлык на рабочем столе !

пример того что надо:

точто жолтым мне не нужно !
Заранее спасибо !

Gnom_aka_Lexander 08-05-2011 21:36 1672739

EvilAlex, тебе нужно вот это , там библиотечка, и довольно подробный пример использования.
Распаковать можно вот этим , ща пример накидаю

EvilAlex 08-05-2011 21:47 1672744

Лександер, спс, ща посмотрим что получиться! Если что сможеш подсказать ?

Влад2012 08-05-2011 21:48 1672745

Подскажите, пожалуйста, как реализовать подхват настроек из reg файлов (как в репаках от elchupakabra?)

insombia 08-05-2011 21:50 1672747

У кого-то есть закос под шепарда?

EvilAlex 08-05-2011 21:57 1672752

Лександер, выручай, вообще не доходит что там как 0_о Мне бы пример готовый, яб на нем натренировался, а так я только нашел в их справках про размер и ссылки, про установку не слова

R.i.m.s.k.y. 08-05-2011 22:05 1672760

Цитата:

Цитата Влад2012
Подскажите, пожалуйста, как реализовать подхват настроек из reg файлов (как в репаках от elchupakabra? »

вас ист дас elchupakabra?
а вообще почитать в шапке "сборник вопросов", третий пример сверху



Gnom_aka_Lexander 08-05-2011 22:05 1672761

EvilAlex, вот накидал тебе распаковку на базе твоего примера + Библиотечка от Экспедитора.
читать дальше »
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
Compression=zip

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

[Files]
Source: is7z.dll; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: "{group}\Удалить"; IconFilename: "{app}\unins000.exe"; Filename: "{app}\unins000.exe"

[code]
var
ProgressBar : TNewProgressBar;
ExtractFile:TNewStaticText;
Button1:TButton;

procedure Extract7z (hWnd, hpb, hst: THandle; fpath, extractPath, pass:pchar); external 'Extract7z@files:is7z.dll stdcall';
procedure CancelExtract; external 'CancelExtract@files:is7z.dll stdcall';

procedure download();
begin
itd_init;

//Let's download two zipfiles from my website..
itd_addfile('http://87.224.140.43/files/setup1.zip',expandconstant('{tmp}\setup1.zip'));

//Start the download after the "Ready to install" screen is shown
itd_downloadafter(wpReady);
end;

procedure InitializeWizard();
begin
download();

ProgressBar := TNewProgressBar.Create(WizardForm);
ExtractFile:=TNewStaticText.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressBar.Left := Left;
ProgressBar.Top := Top + ScaleX(55);
ProgressBar.Width := Width;
ProgressBar.Height := Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.max := 100;
ProgressBar.Position := 0;
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width := Width;
ExtractFile.top:=Top + ScaleX(35);
ExtractFile.caption:='Распаковка архива 7zip';
end;
end;

procedure Button1OnClick(Sender: TObject);
begin
CancelExtract;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall then
begin
Button1:=TButton.create(WizardForm);
Button1.parent:=WizardForm;
Button1.width:=135;
Button1.caption:='Отменить распаковку';
Button1.left:=260;
Button1.top:=WizardForm.cancelbutton.top;
Button1.OnClick:=@Button1OnClick;
try

if FileExists (expandconstant('{tmp}\setup1.zip')) then begin // проверяем наличие файла
Extract7z (wizardform.handle, progressbar.handle, ExtractFile.handle, ExpandConstant('{tmp}') + '\setup1.7z', ExpandConstant('{app}'), '');
end;
Button1.visible:=false;
except
MsgBox('Неверный пароль!', mbInformation, MB_OK);
Button1.visible:=false;
end;
end;
end;
Во вложении архив с библиотечкой и этим-же скриптом.

insombia,
Цитата:

Цитата insombia
У кого-то есть закос под шепарда? »

У Гугла. http://rghost.ru/4896048

EvilAlex 08-05-2011 22:19 1672775

Лександер, вот что выдает, я хз http://rghost.ru/5599931

Gnom_aka_Lexander 08-05-2011 22:23 1672777

EvilAlex, залей целиком свой скрипт замени вот в этой строчке 7z на zip - пропустил...
Код:

Extract7z (wizardform.handle, progressbar.handle, ExtractFile.handle, ExpandConstant('{tmp}') + '\setup1.zip', ExpandConstant('{app}'), '');

EvilAlex 08-05-2011 22:27 1672782

Лександер, http://rghost.ru/5600921 это тот что ты дал, я скопировл, потом добавил is7z.dll и нажал на копиляцию, он создал сетап и я нажал установка, фаил скачиваеться и когда идет распаковка архивов 7зип то вылетает ошибка, жмеш ок и снова компиляцию, показывет в инстале окошко с надписью "Неправельный пароль", жму ок и он пшет что установка прошла успешно, а куда и что он установил хз !!! Также установлена itd0.3.5.exe

Gnom_aka_Lexander 08-05-2011 22:36 1672784

Цитата:

Цитата EvilAlex
а куда и что он установил хз !!! »

- сюда: DefaultDirName={pf}\My Program - ты сам указываеш, куда распаковывать, мне нужен полный скрипт - иначе никак не проверить.

EvilAlex 08-05-2011 22:40 1672787

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

у мня только твой пример и все, есть еще 1 http://rghost.ru/5603241 тут и все! больше нет ни каких ...

Gnom_aka_Lexander 09-05-2011 00:07 1672846

EvilAlex, Держи, тока консольное окошко на распаковке будет, тут уж звиняй, мож кто подскажет, как на прогрессбаре распаковку показать, вместо консоли.

solvador 09-05-2011 13:55 1673057

Всех с Праздником!
Подскажите, как в бинарном файле произвести поиск значений (допустим "C7 46 04 00 00 18 00") и определить смещение, если такие значения есть.
Пример поиска строковых данных есть
читать дальше »
Код:

procedure ReadFromFile();
var
  FS: TFileStream;
  str: string;
  i: integer;
begin
  str:= StringOfChar(' ', 10);
  FS := TFileStream.Create(ExpandConstant('{src}\test.bin'), fmOpenReadWrite);
  try
    FS.Seek(1,soFromBeginning);
    FS.ReadBuffer(str, 10);
    MsgBox(str, mbInformation, MB_OK);
  finally
    FS.Free;
  end;
end;

а вот как быть с поиском шестнадцатеричных...

Даже такие варианты пробовал :lol:
читать дальше »
Код:

procedure ReadFromFile2();
var
  FS: TFileStream;
  strd,str: string;
  shag: integer;
 begin
  str:= StringOfChar(' ',6);
  shag:= 740349
  FS := TFileStream.Create(ExpandConstant('{src}\test.bin'), fmOpenReadWrite);
  try repeat
    FS.Seek(shag,soFromBeginning);
    FS.ReadBuffer(str, 6);
    strd:= IntToStr(Ord(str[1]))+IntToStr(Ord(str[2]))+IntToStr(Ord(str[3]))+IntToStr(Ord(str[4]))+IntToStr(Ord(str[5]))+IntToStr(Ord(str[6]))
    if strd = '1997040024' then MsgBox('bingo', mbInformation, MB_OK); //нашли значение и определили смещение
    shag:= shag + 1
    until shag = 741353
  finally
    FS.Free;
  end;
end;

Конечно же это извращение... Так кто подскажет как нормально сделать?...

R.i.m.s.k.y. 09-05-2011 14:10 1673066

нашел в своих примерах скриптов, может поможет
Код:

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}

[*C*ode]
procedure WriteToFile();
var
  FS: TFileStream;
  str: string;
  i: integer;
begin
  str:= '';
  for i:= 0 to 10 do str:= str + IntToStr(Random(10)); // сгенерили рандомную строку
  FS := TFileStream.Create(ExpandConstant('{app}\MyProg.exe'), fmOpenReadWrite); // открыли файл
  try
    FS.Seek(1572,soFromBeginning); // установили курсор по смещению 1572 от начала файла
    FS.WriteBuffer(str, Length(str)); // записали рандомную строку в позицию курсора
  finally
    FS.Free; // освободили файл
  end;
end;

procedure ReadFromFile();
var
  FS: TFileStream;
  str: string;
  i: integer;
begin
  str:= StringOfChar(' ', 10); // подготовили буфер для чтения длиной 10 байт
  FS := TFileStream.Create(ExpandConstant('{app}\MyProg.exe'), fmOpenReadWrite); // открыли файл
  try
    FS.Seek(1572,soFromBeginning); // установили курсор по смещению 1572 от начала файла
    FS.ReadBuffer(str, Length(str)); // считали в буфер 10 байт от позиции курсора
    MsgBox(str, mbInformation, MB_OK); // вывели сообщение с тем, что считали
  finally
    FS.Free; // освободили файл
  end;
end;

procedure ReadFromFileByte();
var
  FS: TFileStream;
  str: string;
  i: integer;
 begin
  str:= StringOfChar(' ',1);
  FS := TFileStream.Create(ExpandConstant('{src}\struct.dat'), fmOpenReadWrite);
  try
    FS.Seek(21,soFromBeginning);
    FS.ReadBuffer(str, 1);
    i:= Ord(str[1]);
    MsgBox(IntToStr(i), mbInformation, MB_OK);
  finally
    FS.Free;
  end;
end;

procedure DeinitializeSetup();
begin
  ReadFromFile(); // прочитали строку из файла
  WriteToFile(); // записали строку в файл
  ReadFromFile(); // опять прочитали
end;


solvador 09-05-2011 14:16 1673069

R.i.m.s.k.y.,
В этом примере тоже ищется строка. А надо чтобы искались hex значения.
Таких примеров я не встречал.

А может есть сторонние утилиты, работающие с бинарными файлами через командную строку.

ЗЫ за пример Спасибо, но он у меня есть. И ничего толкового я из него извлечь не смог.

insombia 09-05-2011 15:29 1673113

Проблема с фриарком когда делаю скрипт выдаёт ошибку

murlakatamenka 09-05-2011 18:19 1673181

insombia, ну переменная не определена, что тут непонятного ?
мб при объединении скриптов в var добавить её забыли. иногда ошибки есть из-за отсутствия ; после предыдущей операции в коде, я так понимаю, это из-за расширенного компилятора эти ошибки бывают.

insombia 09-05-2011 20:51 1673267

murlakatamenka как сделать чтобы она определилась?

murlakatamenka 09-05-2011 23:03 1673341

вернее было сказать, что она не объявлена
В секции [code] после var написать FilenameLabel: TLabel;

slysoft 09-05-2011 23:55 1673393

Цитата:

Цитата Лександер
slysoft, Кинь файлы, ща соединю тебе »

Лександер вот файлы http://rghost.ru/5737321, раньше кинуть не получилось, заранее тебе спасибо!!!

Gnom_aka_Lexander 10-05-2011 11:02 1673581

slysoft, забирай, но все это можно вообще двумя строчками сделать, а кнопки и цвета поменять в скине - гораздо корректнее будет работать.

А вот мой вариант - тока код намного короче, и работа элементов корректнее :) Я тебе советую лучше им воспользоваться :)

slysoft 10-05-2011 11:17 1673589

Спасибо огромное Лександер, всё работает, УРА!!!

Gnom_aka_Lexander 10-05-2011 16:06 1673762

Вложений: 1
Цитата:

Цитата crashDark
Вот сама ошибка а именно белый фон на концовке установки. Как его убрать? »

Держи пример - нужно скрыть Ран-лист и создать свой чекбокс, который выполнит эту функцию.

ChVL 10-05-2011 19:08 1673883

Как прописать атрибут файла Только чтение? В строку Source: добавляю Permissions: everyone-readexec, но ничего не происходит. Что ещё не хватает или как правильно?
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
P.S. Зашёл в топик и сразу был ошарашен: куда я попал?? - "Мня", "ща", "тока"... С каких пор здесь процветает падонкавский жаргон?

Gnom_aka_Lexander 10-05-2011 19:27 1673893

Цитата:

Цитата ChVL
Как прописать атрибут файла Только чтение? »

Код:

[Files]
Source: My_file; DestDir: {app}; Attribs: readonly

Цитата:

Цитата ChVL
Зашёл в топик и сразу был ошарашен: куда я попал?? »

этож модно, ниче ты не понимаеш :) А если серьезно - школота уже второй форум загаживает...

Bond01 10-05-2011 20:34 1673929

Подскажите: Как внести данные(скрипт) в реестр(ключ), после установки программы, например с помощью рег-файла чтобы инсталятор искал рядом этот файлик, а потом тихо запускал или с помощью Inf или еще как то?
Это решение нужно для аддона, чтобы пользователи могли вносить свои ключи.

Gnom_aka_Lexander 10-05-2011 20:56 1673937

Bond01, Можно вот так:
Код:

procedure CurStepChanged(CurStep: TSetupStep);
 var
  reg,RegEdit: string;
  ResultCode: Integer;
  begin
  if CurStep = ssDone  then begin  //по окончании установки
  RegEdit := ExpandConstant('{sys}\reg.exe');// вызов консольной системной утилиты для работы с реестром
  reg := ExpandConstant('{src}\') + 'reg.reg';  // берем рег-файл рядом с инсталлом
  Exec(RegEdit, ' import ' + ' ' + AddQuotes(reg),ExpandConstant('{src}'),SW_HIDE, ewWaitUntilTerminated, ResultCode);  // импортируем файл реестра
  end;

поправил пример - была ошибка - CurStepChanged6 - опечатался :) Правильно CurStepChanged

Bond01 10-05-2011 21:09 1673939

Лександер,
Пишет - Неизвестный идентификатор "RegEdit"

Gnom_aka_Lexander 10-05-2011 21:38 1673959

Bond01, извиняюсь :)
Код:

procedure CurStepChanged(CurStep: TSetupStep);
 var
  reg,RegEdit: string;
  ResultCode: Integer;
  begin
  if CurStep = ssDone  then begin  //по окончании установки
  RegEdit := ExpandConstant('{sys}\reg.exe');// вызов консольной системной утилиты для работы с реестром
  reg := ExpandConstant('{src}\') + 'reg.reg';  // берем рег-файл рядом с инсталлом
  Exec(RegEdit, ' import ' + ' ' + AddQuotes(reg),ExpandConstant('{src}'),SW_HIDE, ewWaitUntilTerminated, ResultCode);  // импортируем файл реестра
  end;


solvador 10-05-2011 21:41 1673960

Лександер reg тоже надо добавить

Serega 10-05-2011 22:16 1673983

Цитата:

Цитата solvador
Конечно же это извращение... Так кто подскажет как нормально сделать? »

Конечно :) самое быстрое, это прочитать файл в строку и найти искомое значение через Pos(SubStr, S: String): Integer;
Цитата:

Цитата solvador
Таких примеров я не встречал »

Всё просто
Пример

Код:

function ReadFromFile(const FileName, SearchStr: string): Integer;
var
  FS: TFileStream;
  Buf: AnsiString;
begin
  Result := -1;
  if not FileExists(FileName) then Exit;
  FS := TFileStream.Create(FileName, fmOpenRead);
  try
    Buf := StringOfChar(#32, FS.Size);
    FS.Seek(0, soFromBeginning);
    FS.ReadBuffer(Buf, FS.Size);
    Result := Pos(SearchStr, Buf);
  finally
    FS.Free;
    SetLength(Buf, 0);
  end;
end;

function InitializeSetup(): Boolean;
begin
  MsgBox(IntToStr(ReadFromFile(ExpandConstant('{src}\test.bin'), #$C7#$46#$04#$00#$00#$18#$00)), mbInformation, MB_OK);
end;


Unhero 11-05-2011 12:21 1674191

Добрый день, всем, поиском пользовался, но совершенно безрезультатно, суть проблемы в следующем, скрипт созданный Inno Setup должен запустить ещё один инсталлятор, и автоматически нажать все кнопки <Next>, поставив галочку в "Лицензии", возможно ли такое, если есть пример, если нет дайте хотя бы линк где копать. Пробовал разные параметры, вроде /SILENT и /VERYSILENT - не помогло.

Unhero 11-05-2011 13:35 1674243

Neutron, дело в том, что я не могу установить, какой у меня тип инсталлятора, поэтому какие я только параметры не подставлял

Unhero 11-05-2011 14:59 1674316

Neutron, не помогла программка, выдаёт нечто:

USSF detected that the file you selected is a valid PE file.
However, it couldn't identify its type.
The header returned by PEiD was 'Install Stub 32-bit -> InstallShield [Overlay]'

Bond01 11-05-2011 15:36 1674341

Лександер, опять что-то не то, выдает ошибка компилятора неожиданный конец файла.
Разобрался :)
Код:

end;
end;

Спасибо.

solvador 11-05-2011 15:47 1674353

Цитата:

Цитата Serega
Конечно самое быстрое, это прочитать файл в строку и найти искомое значение через Pos(SubStr, S: String): Integer; »

Спасибо за отличный пример :up

insombia 11-05-2011 20:20 1674539

Как сделать чтобы когда создался инсталятор розделеный припустим на 4 диска то его название было setup-1,setup-2,setup-3, setup-4, а не setup-а, setup-b,setup-c,setup-d ?

LinkOFF 11-05-2011 21:25 1674575

Вложений: 1
Можете мне пожалуйста соеденить два скрипта в один а то у меня чего-то не получается
http://forum.oszone.net/attachment.p...1&d=1305134630

LinkOFF 11-05-2011 21:28 1674579

insombia в секции [setup] есть параметр SlicesPerDisk(SlicesPerDisk=2) поставь на 1

lletol 12-05-2011 01:37 1674677

Здравствуйте, подскажите пожалуйста как можно сделать так, что б при установке скрипт проверял установлена ли программа и если программа установлена, то предлагала обновить ПО , устанавливая только некоторые компоненты из инсталлятора. Заранее спасибо

Unhero 12-05-2011 08:56 1674734

Neutron, то есть определить ключи не возможно?

Unhero 12-05-2011 09:53 1674754

кстати PEid выдаёт что инсталлятор - Gentee Installer Custom [Overlay] *, но под него не могу найти ключ, сколько не копаю

Unhero 12-05-2011 12:45 1674900

Neutron, дело в том, что я эти темы видел и по ссылкам в них ходил, ответа на мой вопрос там нет (

El Sanchez 12-05-2011 15:44 1674976

Цитата:

Цитата Neutron
По умолчанию, если по файлу inf, кликнуть правой кнопкой мыши и нажать установить, обычно, вроде происходит установка, »

Neutron, так можно устанавливать только legacy-драйверы, у которых в inf-файле присутствует секция DefaultInstall. У вас же WDM-драйвер. Для legacy-драйверов подошло бы это:
Код:

[Files]
Source: driver\*; DestDir: {tmp}\driver; Flags: deleteafterinstall recursesubdirs createallsubdirs
[Run]
Filename: {tmp}\driver\filename.inf; Verb: install; Flags: shellexec waituntilterminated

Для установки WDM-драйверов нужны сторонние средства, например, утилита devcon:
Код:

[Files]
Source: devcon.exe; DestDir: {tmp}; Flags: deleteafterinstall
Source: driver\*; DestDir: {tmp}\driver; Flags: deleteafterinstall recursesubdirs createallsubdirs
[Run]
Filename: {tmp}\devcon.exe; Parameters: "install ""{tmp}\driver\filename.inf"" HWID устройства"; Flags: runhidden


Цитата:

Цитата Unhero
Neutron, то есть определить ключи не возможно? »

Unhero, если разработчик инсталлятора не очистил поле тихой установки в общих настройках инсталляции проекта, то параметр: -silent

ChVL 12-05-2011 17:28 1675038

Как отключить стартовое окно Welcome to...?
Пробовал с помощью такого скрипта:
Код:

[сode]
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL;
external 'ShowWindow@user32.dll stdcall delayload';

function InitializeSetup(): Boolean;
var
  res: Integer;
begin
  ShowWindow(Application.Handle, SW_Hide);
end;

Окно подавляет, но при этом файл не срабатывает (без скрипта всё работает, но с окном, где требуется нажать кнопочку).
Где ошибка?
Т.е. фактически мне нужна тихая установка двойным кликом по файлу (остальные окна отключаются без проблем).

Gnom_aka_Lexander 12-05-2011 18:03 1675063

ChVL, Абсолютно все окна скрыть невозможно после версии 5.39, вроде - окно перед установкой обязательно будет показано, с этим ничего не сделать...

El Sanchez 12-05-2011 18:19 1675077

Лександер, а как же
Код:

[Setup]
DisableWelcomePage=yes

? :wink:

insombia 12-05-2011 18:32 1675090

как сделать такое сочитание игр http://i2.fastpic.ru/big/2011/0512/7...cf147c875.png?

ChVL 12-05-2011 20:05 1675146

Лександер,
Похоже, Вы правы. Порылся в архивах и в одном FAQ увидел такое:
Цитата:

Возможна ли быстрая и очень быстрая установка без использования параметров командной строки /SILENT или /VERYSILENT?
Нет и не будет. Если требуется свести к минимуму участие пользователя в установке, используйле директивы Disable* секции [Setup].
El Sanchez,
У меня этих Disable'ов 5 штук прописано. Этот, видимо, появился позже (в моей справке его нет). Не работает, однако. Вместо окна Welcome to... появляется другое: Ready to Install (тоже с кнопочками), несмотря на то, что строка DisableReadyPage=yes имеется. DisableWelcomePage=yes, кстати, является аналогом скрипта:
Код:

[сode]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;


Gnom_aka_Lexander 12-05-2011 21:06 1675189

Цитата:

Цитата El Sanchez
Лександер, а как же
Код:
[Setup]
DisableWelcomePage=yes »

А толку? Даже фукция сокрытия страниц (ShouldSkipPage ) не поможет - если скрыть абсолютно все страницы, то Риди Пейдж все равно будет показана.

Цитата:

Цитата insombia
как сделать такое сочитание игр »

ПРимерно так - для секции файлов, по аналогии - реестр прописывать, а так - справка, примеры - в шапке и в самой проге.
читать дальше »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
;суда кладем игру без языковых файлов
Source: "Игра1 анг\*"; DestDir: {app}\Игра1; Flags: recursesubdirs createallsubdirs; Components: a;
;суда кладем языковые файлы английского языка
Source: "Игра1 анг\*"; DestDir: {app}\Игра1; Flags: recursesubdirs createallsubdirs; Components: a\1;
;суда кладем языковые файлы русского языка
Source: "Игра1 рус\*"; DestDir: {app}\Игра1; Flags: recursesubdirs createallsubdirs; Components: a\2;

;суда кладем игру без языковых файлов
Source: Игра2\*; DestDir: {app}\Игра2; Flags: recursesubdirs createallsubdirs; Components: b;
;суда кладем языковые файлы английского языка
Source: "Игра2 анг\*"; DestDir: {app}\Игра2; Flags: recursesubdirs createallsubdirs; Components: b\1;
;суда кладем языковые файлы русского языка
Source: "Игра2 рус\*"; DestDir: {app}\Игра2; Flags: recursesubdirs createallsubdirs; Components: b\2;

[Components]
Name: a; Description: Игра1; Types: full
Name: a\1; Description: Игра1 анг; Types: full; Flags: exclusive
Name: a\2; Description: Игра1 рус; Types: full; Flags: exclusive

Name: b; Description: Игра2; Types: full
Name: b\1; Description: Игра2 анг; Types: full; Flags: exclusive
Name: b\2; Description: Игра2 рус; Types: full; Flags: exclusive

crashDark 13-05-2011 00:17 1675299

Всем доброго дня!!! Вот у меня один вопрос возник! Как распаковать файлы freeArc?

EvilAlex 13-05-2011 03:23 1675347

Дорого времени суток !

Нужна помощь в исправлении скрипта ...

создав и запустив инстал в строке "Осталось времени:" показывает "Тестовый прогон", а не время до окончания установки !


и по оканчанию установки в строке "Время установки" показывает "Тестовый прогон", а не затраченое время !


Вот сам скрипт и его файлы - СКРИПТ

Поправьте кто может пожалуйста !?
Заранее Благодарю !!!

Gnom_aka_Lexander 13-05-2011 09:41 1675440

EvilAlex, ;#define records найди у себя, после тестовой установки удали точку с запятой перед этой строчкой а файл records.inf, который будет рядом с инсталлом положи рядом со скриптом - и откомпилируй заново - все заработает как надо.
Если к чемуто идет справка, то обязательно нужно ее внимательно прочесть :)

El Sanchez 13-05-2011 10:43 1675508

Цитата:

Цитата Лександер
Даже фукция сокрытия страниц (ShouldSkipPage ) не поможет - если скрыть абсолютно все страницы, то Риди Пейдж все равно будет показана. »

Лександер, да, верно. Хотя можно еще немного изврата:
Код:

[code]
procedure InitializeWizard();
begin
  with WizardForm do SetBounds(-Left, -Top, Width, Height);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  PostMessage(WizardForm.NextButton.Handle, 245, 0, 0);
end;


ChVL 13-05-2011 11:03 1675519

El Sanchez,
ИЗврат действительно работает!!

salat 14-05-2011 03:13 1676035

Комрады, просветите.
Как правильно вписывать несколько архивов в скрипте типа:

[Files]
Source: {src}\Data.arc; DestDir: {app}; Flags: external dontcopy
Source: {src}\Data2.arc; DestDir: {app}; Flags: external dontcopy

[code]
Скрипт ЭТОТ . Там в этой секции нету дефайна куда вписывать пути.

И дальше куда их на распаковку вписывать?
Чет гемороился несколько часов так и не получилось два архива распаковать только один.

и вот еще что.
UnPackError:= UnPack('{#Archives}')
За что отвечает этот параметр и как сюда вписывать также несколько архивов?

Заранее спасибо.

lmiol 14-05-2011 07:48 1676065

у мееня стоит:

Код:

[Types]
Name: "full"; Description: "Все компоненты";
Name: "custom"; Description: "Выбрать компоненты"; Flags: iscustom

[Components]
Name: "main"; Description: "блабла"; Types: full custom; Flags: fixed
Name: "plug"; Description: "блабла2"; Types: full custom
Name: "browser"; Description: "блабла3"; Types: full custom
Name: "manual"; Description: "блабла4"; Types: full custom
Name: "anti"; Description: "блабла5"; Types: full custom

а мненеобходимо чтобы пользователь перед выбором компонентов выбирал еще один выбор STANDART и PRO с флагом exclusive (дальше у каждого выбора снова будет выбор "Все компоненты" и "Выбрать компоненты" только у каждого свои)

R.i.m.s.k.y. 14-05-2011 10:50 1676120

Цитата:

Цитата lmiol
ЗЫ все разы что тут писал, все мне помогли, форум фонтастика »

во-первых я за форумом слежу со второй части и что-то не припомню такого сообщения.
во-вторых - нихрена не понятно

Serega 14-05-2011 20:19 1676391

Цитата:

Цитата lmiol
а мненеобходимо »

объясните более подробно, что вы хотите сделать...
Цитата:

Цитата R.i.m.s.k.y.
во-вторых »

Делаю вам замечание.
Неоднократно замечал за вами, особенно в последнее время, такие сообщения... рекомендую освежить в памяти правила форума и адекватно писать свои ответы.

insombia 14-05-2011 22:30 1676457

Как сделать такие функции в инсталяторе?

crashDark 14-05-2011 23:09 1676478

Всем доброго вечера, вот я не могу соединить мой скрипт со скриптом FreeArc. Можете пожалуйста решить эту проблему?
Вот ссылка на скрипт FreeArc http://rghost.ru/6384851, вот на мой скрипт http://rghost.ru/6385001.

insombia 15-05-2011 12:56 1676670

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

LinkOFF 15-05-2011 19:26 1676833

Какой параметр нужно поставить в секции [run] чтоб дождаться конца установки

insombia 15-05-2011 22:23 1676937

LinkOFF опиши подробнее что тебе нужно

murlakatamenka 16-05-2011 02:44 1677053

Цитата:

Какой параметр нужно поставить в секции [run] чтоб дождаться конца установки
LinkOFF, флаг waituntilterminated ждёт завершения предыдущей операции до начала следующей
возможно нужен postinstall, т.к. при нём операции выполняются после завершения установки

R.i.m.s.k.y. 16-05-2011 08:48 1677114

Цитата:

Цитата murlakatamenka
postinstall, т.к. при нём операции выполняются после завершения установки »

не совсем, этот флаг на последней странице установки делает галку, к примеру, "Показать README"
Код:

[Run]
Filename: "{app}\README.TXT"; Description: "Показать README"; Flags: postinstall shellexec skipifsilent

и таки да, запускает отмеченное галкой после нажатия кнопки "Завершить"

ivsatel 16-05-2011 19:27 1677381

Есть *.xml файл с настройками программы. Часть из этих настроек указывает на местоположение ресурсов нужных для этой программы.
Возможно ли автозаполнение этих строк с подменой стандартного указания C:\Program Files на {app}

Gnom_aka_Lexander 16-05-2011 21:03 1677438

ivsatel, Можно, есть готовый модуль для работы с xml - файлами.

ivsatel 16-05-2011 22:59 1677505

Основываясь на этом примере:

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

Код:

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

[Files]
Source: report.xml; Flags: dontcopy

(Code)
Function InitializeSetup: Boolean;
var
  xml, currNode, rootNode, subNode, xmlParser, Fragment: Variant;
begin
  ExtractTemporaryFile('report.xml');

  xml:= CreateOleObject('MSXML2.DOMDocument');
  xml.async:= false;
  xml.preserveWhiteSpace:= true;
  xml.load(ExpandConstant('{tmp}\report.xml'));

  currNode:= xml.selectSingleNode('//SMBIOS/section[(@name=''Mainboard'')]')
  MsgBox(currNode.text, mbInformation, MB_OK);

//        ----------------------------------------------
  xmlParser:= CreateOleObject('MSXML2.DOMDocument');

//'Создание объявления XML
  xmlParser.appendChild(xmlParser.createProcessingInstruction('xml', 'version="1.0" encoding="windows-1251"'));

//'Создание комментария
  xmlParser.appendChild(xmlParser.createComment('Текст комментария'));

//'Создание корневого элемента
  rootNode:= xmlParser.appendChild(xmlParser.createElement('ROOT'));

//'Создание первого вложенного элемента
  subNode:= rootNode.appendChild(xmlParser.createElement('SUB'));
  subNode.text:= 'Текст первого вложенного элемента';

//'Создание второго вложенного элемента
  subNode:= rootNode.appendChild(xmlParser.createElement('SUB'));

//'Создание раздела CDATA
  subNode.appendChild(xmlParser.createCDATASection('<<< >>> &&& Произвольные текстовые данные'));

//'Создание ссылки на примитив
  subNode.appendChild(xmlParser.createEntityReference('amp'));

//'Создание текстового узла
  subNode.appendChild(xmlParser.createTextNode('Текст второго вложенного элемента'));

//'Создание третьего вложенного элемента с использованием пространства имён
  subNode:= rootNode.appendChild(xmlParser.createNode(1, 'html:H1', 'http://www.w3c.org/TR/REC-html40/'));
  subNode.text:= 'Заголовок HTML';

//'Создание четвёртого и пятого вложенных элементов с использованием фрагмента
  Fragment:= xmlParser.createDocumentFragment;
  Fragment.appendChild(xmlParser.createElement('SUB'));
  Fragment.appendChild(xmlParser.createElement('SUB'));
  rootNode.appendChild(Fragment);

  xmlParser.save('C:\Test.xml')
End;



Попытался изменить код в своих нуждах, но при установке выходит ошибка "Недопустимое число параметров" в чем ошибка?

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

Код:

Function InitializeSetup: Boolean;
var
  xml, currNode, rootNode, subNode, xmlParser, Fragment: Variant;
begin
  ExtractTemporaryFile('preferences.xml');

  xml:= CreateOleObject('MSXML2.DOMDocument');
  xml.async:= false;
  xml.preserveWhiteSpace:= true;
  xml.load(ExpandConstant('{tmp}\preferences.xml'));

//        ----------------------------------------------
  xmlParser:= CreateOleObject('MSXML2.DOMDocument');

//'Создание объявления XML
  xmlParser.appendChild(xmlParser.createProcessingInstruction('xml', 'version="1.0" encoding="UTF-8"'));

//'Создание корневого элемента MyProgSettings
  rootNode:= xmlParser.appendChild(xmlParser.createElement('MyProgSettings', 'version="1"'));

//'Создание первого вложенного элемента MyProgHotkeys
  subNode:= rootNode.appendChild(xmlParser.createElement('PuntoHotkeys'));
  subNode.text:= '19,275,1043,1169,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4179,0,0,0,0';
 
  //'Создание вложенного элемента LayoutSwitchKey
  subNode:= rootNode.appendChild(xmlParser.createElement('LayoutSwitchKey'));
  subNode.text:= '0';

  //'Создание вложенного элемента SeparateLangCombination
  subNode:= rootNode.appendChild(xmlParser.createElement('SeparateLangCombination'));
  subNode.text:= '0';

    //'Создание вложенного элемента TransparentFormsFiller
  subNode:= rootNode.appendChild(xmlParser.createElement('TransparentFormsFiller'));
  subNode.text:= '0';     

    //'Создание вложенного элемента CheckForUpdate
  subNode:= rootNode.appendChild(xmlParser.createElement('CheckForUpdate'));
  subNode.text:= 'No';

  //'Создание вложенного элемента RunAtStartup
  subNode:= rootNode.appendChild(xmlParser.createElement('RunAtStartup'));
  subNode.text:= 'Yes';

  //'Создание вложенного элемента DontConvertCapitals
  subNode:= rootNode.appendChild(xmlParser.createElement('DontConvertCapitals'));
  subNode.text:= 'No';

  //'Создание вложенного элемента DontShowTrayIcon
  subNode:= rootNode.appendChild(xmlParser.createElement('DontShowTrayIcon'));
  subNode.text:= 'No';

  //'Создание вложенного элемента ChangeIconClrOnMisprint
  subNode:= rootNode.appendChild(xmlParser.createElement('ChangeIconClrOnMisprint'));
  subNode.text:= 'Yes';

  //'Создание вложенного элемента ShowCurLayoutInWndIcon
  subNode:= rootNode.appendChild(xmlParser.createElement('ShowCurLayoutInWndIcon'));
  subNode.text:= 'No';

  //'Создание вложенного элемента ShowPopupOnException
  subNode:= rootNode.appendChild(xmlParser.createElement('ShowPopupOnException'));
  subNode.text:= 'Yes';

  //'Создание вложенного элемента ExceptionCount
  subNode:= rootNode.appendChild(xmlParser.createElement('ExceptionCount'));
  subNode.text:= '2';

  //'Создание вложенного элемента FixTwoUpperLetters
  subNode:= rootNode.appendChild(xmlParser.createElement('FixTwoUpperLetters'));
  subNode.text:= 'Yes';

  //'Создание вложенного элемента FixInvertedCase
  subNode:= rootNode.appendChild(xmlParser.createElement('FixInvertedCase'));
  subNode.text:= 'Yes';

  //'Создание вложенного элемента ShowLayoutFlags
  subNode:= rootNode.appendChild(xmlParser.createElement('ShowLayoutFlags'));
  subNode.text:= 'Yes';

  //'Создание вложенного элемента OneKeySwitchLayoutEnabled
  subNode:= rootNode.appendChild(xmlParser.createElement('OneKeySwitchLayoutEnabled'));
  subNode.text:= 'No';

  //'Создание вложенного элемента BinarySwitchLayout
  subNode:= rootNode.appendChild(xmlParser.createElement('BinarySwitchLayout'));
  subNode.text:= 'No';

  //'Создание вложенного элемента DisablePreHandle
  subNode:= rootNode.appendChild(xmlParser.createElement('DisablePreHandle'));
  subNode.text:= 'No';

  //'Создание вложенного элемента AllSoundsEnabled
  subNode:= rootNode.appendChild(xmlParser.createElement('AllSoundsEnabled'));
  subNode.text:= 'Yes';

  //'Создание вложенного элемента FirstLaunch
  subNode:= rootNode.appendChild(xmlParser.createElement('FirstLaunch'));
  subNode.text:= 'No';

  //'Создание вложенного элемента SeparateLangKeysEnabled
  subNode:= rootNode.appendChild(xmlParser.createElement('SeparateLangKeysEnabled'));
  subNode.text:= 'No';

  //'Создание вложенного элемента ShowQuickWordsListInLeftBtnMenu
  subNode:= rootNode.appendChild(xmlParser.createElement('ShowQuickWordsListInLeftBtnMenu'));
  subNode.text:= 'Yes';

  //'Создание вложенного элемента DontReactOnOtherLangs
  subNode:= rootNode.appendChild(xmlParser.createElement('DontReactOnOtherLangs'));
  subNode.text:= 'No';

  //'Создание вложенного элемента SingleLayout
  subNode:= rootNode.appendChild(xmlParser.createElement('SingleLayout'));
  subNode.text:= 'No';

  //'Создание вложенного элемента ShowTooltips
  subNode:= rootNode.appendChild(xmlParser.createElement('ShowTooltips'));
  subNode.text:= 'No';

  //'Создание вложенного элемента EnableDiary
  subNode:= rootNode.appendChild(xmlParser.createElement('EnableDiary'));
  subNode.text:= 'No';

  //'Создание вложенного элемента DiarySkipSepWords
  subNode:= rootNode.appendChild(xmlParser.createElement('DiarySkipSepWords'));
  subNode.text:= 'Yes';

  //'Создание вложенного элемента ScrollAsCaps
  subNode:= rootNode.appendChild(xmlParser.createElement('ScrollAsCaps'));
  subNode.text:= 'No';

  //'Создание вложенного элемента HidePopIndicAfterLayoutChange
  subNode:= rootNode.appendChild(xmlParser.createElement('HidePopIndicAfterLayoutChange'));
  subNode.text:= 'No';

  //'Создание вложенного элемента PSWorks
  subNode:= rootNode.appendChild(xmlParser.createElement('PSWorks'));
  subNode.text:= 'Yes';

  //'Создание вложенного элемента DisableHotKeysWhenTurnedOff
  subNode:= rootNode.appendChild(xmlParser.createElement('DisableHotKeysWhenTurnedOff'));
  subNode.text:= 'No';

  //'Создание вложенного элемента FixPopupIndicator
  subNode:= rootNode.appendChild(xmlParser.createElement('FixPopupIndicator'));
  subNode.text:= 'No';

  //'Создание вложенного элемента ShowUsefulTips
  subNode:= rootNode.appendChild(xmlParser.createElement('ShowUsefulTips'));
  subNode.text:= 'No';

  //'Создание вложенного элемента EnableIntelliMenus
  subNode:= rootNode.appendChild(xmlParser.createElement('EnableIntelliMenus'));
  subNode.text:= 'No';

  //'Создание вложенного элемента AutoReplaceAlways
  subNode:= rootNode.appendChild(xmlParser.createElement35('AutoReplaceAlways'));
  subNode.text:= 'Yes';

  //'Создание вложенного элемента TurnOffDiaryInProgExceptions
  subNode:= rootNode.appendChild(xmlParser.createElement('TurnOffDiaryInProgExceptions'));
  subNode.text:= 'No';

  //'Создание вложенного элемента ShowFormsFiller
  subNode:= rootNode.appendChild(xmlParser.createElement('ShowFormsFiller'));
  subNode.text:= 'No';

  //'Создание вложенного элемента ReplaceOnEnterAndTab
  subNode:= rootNode.appendChild(xmlParser.createElement('ReplaceOnEnterAndTab'));
  subNode.text:= 'Yes';

  //'Создание вложенного элемента ReplaceOnSpace
  subNode:= rootNode.appendChild(xmlParser.createElement('ReplaceOnSpace'));
  subNode.text:= 'No';

  //'Создание вложенного элемента DontShowTranslitWin
  subNode:= rootNode.appendChild(xmlParser.createElement('DontShowTranslitWin'));
  subNode.text:= 'No';

  //'Создание вложенного элемента FullUnhookWhenDisabled
  subNode:= rootNode.appendChild(xmlParser.createElement('FullUnhookWhenDisabled'));
  subNode.text:= 'No';

  //'Создание вложенного элемента EnableClipboardHistory
  subNode:= rootNode.appendChild(xmlParser.createElement('EnableClipboardHistory'));
  subNode.text:= 'No';

  //'Создание вложенного элемента AutoSaveClipboardToDiary
  subNode:= rootNode.appendChild(xmlParser.createElement('AutoSaveClipboardToDiary'));
  subNode.text:= 'No';

  //'Создание вложенного элемента EnableMouseEmulation
  subNode:= rootNode.appendChild(xmlParser.createElement('EnableMouseEmulation'));
  subNode.text:= 'No';

  //'Создание вложенного элемента DisableCapsLock
  subNode:= rootNode.appendChild(xmlParser.createElement('DisableCapsLock'));
  subNode.text:= 'No';

  //'Создание вложенного элемента PopupIndicatorPos
  subNode:= rootNode.appendChild(xmlParser.createElement('PopupIndicatorPos'));
  subNode.text:= 'CPoint(300, 300)';

  //'Создание вложенного элемента FormsFillerRect
  subNode:= rootNode.appendChild(xmlParser.createElement('FormsFillerRect'));
  subNode.text:= 'CRect(100, 100, 350, 500)';

  //'Создание вложенного элемента RestrictKeysEnabled
  subNode:= rootNode.appendChild(xmlParser.createElement('RestrictKeysEnabled'));
  subNode.text:= 'No,No,No,No,No,No,No';

  //'Создание вложенного элемента MinDiaryRecordWords
  subNode:= rootNode.appendChild(xmlParser.createElement('MinDiaryRecordWords'));
  subNode.text:= '1';

  //'Создание вложенного элемента CurrentAdviceNum
  subNode:= rootNode.appendChild(xmlParser.createElement('CurrentAdviceNum'));
  subNode.text:= '0';

  //'Создание вложенного элемента DontSwitchOnOtherLangs
  subNode:= rootNode.appendChild(xmlParser.createElement('DontSwitchOnOtherLangs'));
  subNode.text:= 'No';

  //'Создание вложенного элемента Sounds
  subNode:= rootNode.appendChild(xmlParser.createElement('Sounds'));
  subNode.text:= '{app}\MyProg\Sounds\typerus.wav,{app}\MyProg\Sounds\typeeng.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\misprint.wav,{app}\MyProg\Sounds\ru.wav,{app}\MyProg\Sounds\en.wav,{app}\MyProg\Sounds\reverse.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\switch.wav,{app}\MyProg\Sounds\replace.wav';

  //'Создание вложенного элемента SoundsStates
  subNode:= rootNode.appendChild(xmlParser.createElement('SoundsStates'));
  subNode.text:= '98304003,131072003,163840002,45875202,65536003,131072003,131072002,131072002,131072002,131072002,131072002,98304002,111411203,124518403,32768003,26214402';

  //'Создание вложенного элемента AskF12Support
  subNode:= rootNode.appendChild(xmlParser.createElement('AskF12Support'));
  subNode.text:= 'No';

  xmlParser.save('{userappdata}\preferences.xml')
End;


El Sanchez 17-05-2011 08:42 1677629

ivsatel, так вам же нужно заменить данные, а не новые записать. Пример функции, заменяющей данные между всеми найденными тегами в файле:
Код:

[code]
function ReplaceDataXML(FileName, TagName, Data: String): Boolean;
var
  oXMLDoc, objNodeList: Variant;
  i: integer;
  MD5: String;
begin
  if not FileExists(FileName) then Exit;
  MD5 := GetMD5OfFile(FileName);
  try
    oXMLDoc := CreateOleObject('Microsoft.XMLDOM');
  except
    ShowExceptionMessage;
    Exit;
  end;
  oXMLDoc.async := False;
  oXMLDoc.load(FileName);
  objNodeList := oXMLDoc.getElementsByTagName(TagName);
  for i := 0 to objNodeList.length-1 do
    objNodeList.item[i].firstChild.data := Data;
  oXMLDoc.save(FileName);
  Result := (MD5 <> GetMD5OfFile(FileName));
end;

//где-то там вызов
if ReplaceDataXML(ExpandConstant('{src}\preferences.xml'), 'filename', 'blablabla') then
  MsgBox('OK', mbInformation, MB_OK)
else
  MsgBox('Failure', mbError, MB_OK);


ArtemYa 17-05-2011 11:50 1677740

Подскажите пожалуйста. Задача такая, при установке пользователю нужно сделать выбор, выбрать один из 5-ти dll файлов, который в дальнейшем будет установлен и зарегестрирован на компьютере. Подскажите, как организовать такой выбор?

Imitri7 17-05-2011 19:59 1678086

давно не был...
начал писать скрипт и передо мной встала задача сделать чекбокс с таким же положением как при флаге fixed
вот то что проделал сам
PHP код:

MyCheck1 := TCheckBox.Create(WizardForm);
with MyCheck1 do
begin
Top 
:= Label1.Top ScaleY(1);
Left := ScaleX(4)
Width := ScaleX(15);
Enabled:=false;
end

собственно появился вот такой вопрос, как сделать чтобы галочка была нажата?

Sotonisto 17-05-2011 20:17 1678096

Всем привет! Сегодня мой друг купил игру The Witcher 2. Устанавливал ее при мне.
Я заметил что инсталл русской версии создан innostup'ом :) Есть у кого скрипт такого инсталлятора (ну или похожий)? ;)

Изображения "вытащить" получилось, а вот звуки (при нажатии на кнопки) и все остальное - нет :(

serg aka lain 17-05-2011 20:45 1678116

Imitri7,
Цитата:

Цитата Imitri7
как сделать чтобы галочка была нажата? »

Код:

Checked := True;

ivsatel 17-05-2011 22:20 1678153

Посмотрите пожалуйста, в чем ошибка?

Код:

procedure ChangeString;
var
  S: TArrayOfString;
  F: string;
  i: Integer;
begin
  F:= ExpandConstant('C:\report.txt');
  if not FileExists(F) then Exit; // если файла нет, выходим
  LoadStringsFromFile(F, S); // загружаем файл
  for i:= 0 to GetArrayLength(S)-1 do
    if Pos('c:\Program Files', S[i]) > 0 then
      S[i]:= {app};  // записываем параметр
  SaveStringsToFile(F, S, False); // сохраняем файл
end;


lmiol 18-05-2011 02:02 1678246

попробую описать подробней с наглядным нарисованным примером мое предыдущее сообщение:

Пользователь видит приветствие инсталятора, после он переходит на страницу в которой идет выбор между Free и Premium (рисунок 1), при выборе Premium идет дальше выбор компонентов для выбора Premium (рисунок 2) (и нужно сделать так чтобы для Free и Premium были разные выборы компонентов.
Сделано вот для чего. Человеку выбравшему Free, будет идти установка упрощенных файлов (что будет занимать меньше места на жестком диске) а для Premium Полная установка главных файлов. (что необходимо всем кто заказал Premium)



Gnom_aka_Lexander 18-05-2011 15:00 1678510

lmiol, Поиск -великая вещ, ну почему так лениво потратить на него пять минут?

ArtemYa 18-05-2011 15:43 1678547

Отвечаю:
Смотрите [Components] section

ArtemYa 18-05-2011 15:46 1678549

Подскажите пожалуйста, возможно ли в окне "Выбор компанентов", настраиваемом [Components] section, убрать выпадающий список типа установки (полная, компактная, выборочная)?

Gnom_aka_Lexander 18-05-2011 15:59 1678560

ArtemYa, Можно так:
[code]
Код:

procedure InitializeWizard();
begin
WizardForm.TypesCombo.Hide
end;


Sotonisto 18-05-2011 16:04 1678562

Народ, а есть ли для Inno какая-нибудь таблица цветов? Например я хочу заменить цвет шрифтов на такой или такой . Как прописать эти цвета (...=$...)?

ArtemYa 18-05-2011 16:04 1678563

Получилось!
Лександер, большое спасибо!

Gnom_aka_Lexander 18-05-2011 16:12 1678572

Sotonisto, в инно обратные цвета - пример - в фотошопе #12-22-32, в инно $32-22-12 - тоесть первые два знака меняеш местами с последними двумя

nik1967 18-05-2011 16:15 1678574

Sotonisto, Inno использует систему цвета BGR. Подбираешь цвет, например в фотошопе, и затем меняешь местами 2 первых знака с двумя последними. Например: в фотошопе - $FF55AA, в Inno - $AA55FF.
Пардон, Александр быстрее оказался.

ArtemYa 18-05-2011 17:22 1678624

Подскажите пожалуйста, как в окне "Выбор компанентов" отключить вывод размерности файлов при установке.

R.i.m.s.k.y. 18-05-2011 17:26 1678627

Я пользуюсь "индусским" способом - делаю две одинаковых строчки в секции Files но в первой Check: IsWin64, а во второй Check: Not IsWin64
Это сбивает инно с толку и он не показывает размер.

[Files]
Source: report.xml; DesDir: {app}; components: a; Check: IsWin64
Source: report.xml; DesDir: {app}; components: a; Check: Not IsWin64

lmiol 18-05-2011 20:42 1678722

Цитата:

Цитата Лександер
lmiol, Поиск -великая вещ, ну почему так лениво потратить на него пять минут? »

насчет поиска вы то знали что на странице было, а я ничего не нашел, я то и искать не понял что нужно вообще (а так спасибо конечно)
cкрипт добавил но это не то (мб надо еще чтото переделать в коде?)
при выборе простого пользователя установка идет своим чередом
а при выборе продвинутого идет выбор компонентов, а мне нада чтобы при том и при том выборе был выбор компонентов, только разных файлов

El Sanchez 18-05-2011 22:03 1678768

Цитата:

Цитата ArtemYa
Подскажите пожалуйста, как в окне "Выбор компанентов" отключить вывод размерности файлов при установке. »

ArtemYa,
Код:

[Setup]
ShowComponentSizes=false

lmiol, у вас 5 компонентов. Какие компоненты должны входить в PRO, а какие в STANDART?

lmiol 18-05-2011 22:29 1678780

El Sanchez:
Полный скрипт
Код:

[Setup]
AppName=Quake Live
AppVerName="Quake Live"
AppPublisher=Mio Dark Project
CreateAppDir=no
DefaultGroupName=Mio Dark Project\Quake Live
AllowNoIcons=yes
OutputDir=Output
OutputBaseFilename=Quake Live
SetupIconFile=setup.ico
Compression=lzma/ultra
SolidCompression=yes
ShowTasksTreeLines=yes
DisableProgramGroupPage=yes
WizardImageFile=Big.bmp
WizardSmallImageFile=Small.bmp
UninstallDisplayIcon={app}\Uninstall\uninstall.ico
UninstallFilesDir={app}\Uninstall
WizardImageStretch=no
AlwaysShowComponentsList=no

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

[Types]
Name: "full"; Description: "Все компоненты";
Name: "custom"; Description: "Выбрать компоненты"; Flags:  iscustom

[Components]
Name: "main"; Description: "Главные файлы Quake Live"; Types: full custom; Flags: fixed
Name: "main2"; Description: "Главные файлы Quake Live Premium"; Types: full custom; Flags: fixed
Name: "browser2"; Description: "Портативный Firefox под Quake Live Premium"; Types: full custom
Name: "plug"; Description: "Плагин Quake Live"; Types: full custom
Name: "browser"; Description: "Портативный Firefox под Quake Live"; Types: full custom
Name: "manual"; Description: "Руководство и Награды"; Types: full custom
Name: "anti"; Description: "Античит PunkBuster"; Types: full custom

[CustomMessages]
HeaderLabelPage=Выберите тип вашего аккаунта
MyRadioCaption_1=Standart
MyRadioCaption_2=Premium / Pro
PageTextHeader=На этой странице Вы можете выбрать тип вашего аккаунта, который вы используете в игре.
MyText_1=Будут установлены файлы которые доступны для игроков без подписки.
MyText_2=Будут установлены файлы которые доступны для игроков с Premium/Pro подпиской.


[Tasks]
Name: "desktopicon"; Description: "Создать ярлык на Рабочем Столе"; GroupDescription: "{cm:AdditionalIcons}"

[Files]
source: "uninstall.ico"; Components: main; DestDir: "{code:DetectWindows}\uninstall"; Flags: ignoreversion
Source: "usercur\*"; Components: main; DestDir: "{code:DetectWindows}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "usercur2\*"; Components: manual; DestDir: "{code:DetectWindows}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "programfiles\*"; Components: browser; DestDir: "{pf}\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "pk3standart\*"; Components: main; DestDir: "{code:DetectWindows}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension nocompression
Source: "pk3Premium\*"; Components: main; DestDir: "{code:DetectWindows}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension nocompression
Source: "pbsvc.exe" ;Components: anti;DestDir: "{tmp}"; Flags: ignoreversion
Source: "QuakeLiveNP_433.msi" ;Components: plug;DestDir: "{tmp}"; Flags: ignoreversion

[cоde]
function GetModuleHandle(lpModuleName: LongInt): LongInt;
 external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt;
 external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth,
      cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;
 external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt;
 external 'DestroyIcon@user32.dll stdcall';

const
  DI_NORMAL = 3;

var
  MyNewPage: TWizardPage;
  Rect: TRect;
  HIcon: LongInt;
  AIconFileName: String;
  MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

procedure GetInstTypePage();
begin
  MyNewPage := CreateCustomPage(wpWelcome,
    ExpandConstant('{cm:HeaderLabelPage}'), '');



  with TNewStaticText.Create(WizardForm) do
  begin
    Width := WizardForm.InnerNotebook.Width;
    Height := ScaleY(26);
    WordWrap := True;
    Caption := ExpandConstant('{cm:PageTextHeader}');
    Parent := MyNewPage.Surface;
  end;

  MyRadioBtn_1 := TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_1 do
  begin
    Top := ScaleY(50);
    Width := ScaleX(150);
    Caption := ExpandConstant('{cm:MyRadioCaption_1}');
    Checked := True;
    Parent := MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do
  begin
    Left := ScaleX(16);
    Top := ScaleY(68);
    Width := WizardForm.InnerNotebook.Width - ScaleX(60);
    Height := ScaleY(26);
    WordWrap := True;
    Caption := ExpandConstant('{cm:MyText_1}');
    Parent := MyNewPage.Surface;
  end;

  MyRadioBtn_2 := TNewRadioButton.Create(WizardForm);
  with MyRadioBtn_2 do
  begin
    Top := ScaleY(120);
    Width := ScaleX(150);
    Caption := ExpandConstant('{cm:MyRadioCaption_2}');
    Parent := MyNewPage.Surface;
  end;

  with TNewStaticText.Create(WizardForm) do
  begin
    Left := ScaleX(16);
    Top := ScaleY(138);
    Width := WizardForm.InnerNotebook.Width - ScaleX(60);
    Height := ScaleY(26);
    WordWrap := True;
    Caption := ExpandConstant('{cm:MyText_2}');
    Parent := MyNewPage.Surface;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID >= wpSelectDir) and (PageID < wpReady) and (MyRadioBtn_1.Checked) then
    Result := True;
end;

procedure InitializeWizard();
begin
  GetInstTypePage();
end;
function DetectWindows(s: string): string;
var
  SubKeyName, ResultStr: string;
begin
  SubKeyName:= 'Software\Microsoft\Windows NT\CurrentVersion';
  RegQueryStringValue(HKLM, SubKeyName, 'ProductName', ResultStr);
  if Pos('XP', ResultStr) > 0 then
    Result:= ExpandConstant('{%APPDATA}\id Software')
  else
  if Pos('Vista', ResultStr) > 0 then
    // не знаю, будет ли это C:\Users\Ваше_имя_пользователя\AppData\LocalLow\id Software
    // проверить не где
    Result:= ExpandConstant('{%APPDATA}\LocalLow\id Software')
  else Result:= '{%APPDATA}\LocalLow\id Software'; // сюда нужно вписать путь по дефолту, т.е. если не XP или Vista
end;



в Стандарт должны входить такие компоненты:
Код:

Name: "main"; Description: "Главные файлы Quake Live"; Types: full custom; Flags: fixed
Name: "plug"; Description: "Плагин Quake Live"; Types: full custom
Name: "browser"; Description: "Портативный Firefox под Quake Live"; Types: full custom
Name: "manual"; Description: "Руководство и Награды"; Types: full custom
Name: "anti"; Description: "Античит PunkBuster"; Types: full custom

а в Премиум
Код:

Name: "main2"; Description: "Главные файлы Quake Live Premium"; Types: full custom; Flags: fixed
Name: "plug"; Description: "Плагин Quake Live"; Types: full custom
Name: "browser2"; Description: "Портативный Firefox под Quake Live Premium"; Types: full custom
Name: "manual"; Description: "Руководство и Награды"; Types: full custom
Name: "anti"; Description: "Античит PunkBuster"; Types: full custom

(так как у меня в премиуме устанавливаться должны и стандартные файлы то рk3standart папка должна быть и там и там (т.е. и в Стандарт и в Премиум должна быть строчка Главные файлы Quake Live с флагом fixed но в стандарте в ней pk3standart, а в премиуме pk3standart и pk3premium)

Bond01 19-05-2011 19:21 1679203

Привет всем.
Цитата:

Подскажите: Как внести данные(скрипт) в реестр(ключ), после установки программы, например с помощью рег-файла чтобы инсталятор искал рядом этот файлик, а потом тихо запускал?
Это решение нужно для аддона, чтобы пользователи могли вносить свои ключи.
Сейчас ищу решение, чтобы сначала запускался файл реестра, а потом уже шла установка программы, если ключ верен.

LinkOFF 19-05-2011 20:04 1679214

Что надо прописать в скрипте чтобы после установки удалились прописаные файлы

Gnom_aka_Lexander 19-05-2011 22:36 1679290

Bond01, Можно модернизировать тот пример, который я давал:
читать дальше »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
var
RegClick: TNotifyEvent;
procedure Reg;
begin
RegEdit := ExpandConstant('{sys}\reg.exe');// вызов консольной системной утилиты для работы с реестром
reg := ExpandConstant('{src}\') + 'reg.reg'; // берем рег-файл рядом с инсталлом
Exec(RegEdit, ' import ' + ' ' + AddQuotes(reg),ExpandConstant('{src}'),SW_HIDE, ewWaitUntilTerminated, ResultCode); // импортируем файл реестра
end;

procedure RegClick();
begin
if WizardForm.CurPageID=wpReady then // добавляем клик только на странице готовности
//begin // Проверить, как стабильнее работает
Reg // выполняем procedure Reg;
//end; // Проверить, как стабильнее работает
OldClick(Sender); // выполняем родной клик
end;

procedure InitializeWizard();
begin
OldClick:= WizardForm.NextButton.OnClick; // Заставляем не забыть родной клик
WizardForm.NextButton.OnClick:=@RegClick; // Задаем новый клик
end;
Вносится в реестр будет по нажатии кнопки далее на странице готовности.

murlakatamenka 20-05-2011 02:06 1679362

ребят, а кто может подсказать источники с репаками ПО (.NET Framework, G4WL [Games for Windows Live]) ?
нужны они для уменьшения размера репака (последний G4WL 250 мб весит)

R.i.m.s.k.y. 20-05-2011 08:28 1679424

Цитата:

Цитата murlakatamenka
ребят, а кто может подсказать источники с репаками ПО (.NET Framework, G4WL [Games for Windows Live]) ?
нужны они для уменьшения размера репака (последний G4WL 250 мб весит) »

Системные компоненты НЕЛЬЗЯ перепаковывать. Сам догадаешься почему?

murlakatamenka 20-05-2011 12:03 1679544

R.i.m.s.k.y., да ладно, расскажите почему же ?
есть репаки дотнет фрэймворка, и авторы xp-сборок (loner, zver) их спокойно и без проблем используют
пример
вот ещё вопрос, как слелать это (2 неактивных чекнутых чекбокса с двумя вариантами exlusive-ов)?

R.i.m.s.k.y. 20-05-2011 12:25 1679552

К примеру регшот от vcredist 2008 занимает 12 метров!
Для каждой версии венды свои файлы, свои настройки в зависимости от уже установленных патчей и компонентов. Вы уверены на 101% что черти и звери это учитывают? У Вас не было компов со зверьсборкой на которой работала только эта зверьсборка и больше ничего?
Авторы xp-сборок (loner, zver) имеют доступ к внутренним кодам инсталлеров и дистрибутивов чтобы ПРАВИЛЬНО БЕЗ УЩЕРБА ДЛЯ ОПЕРАЦИОННОЙ СИСТЕМЫ перепаковать их с учетом всех нюансов?
Ответ - НЕТ. Пакуют по принципу "у меня не глючит".
Ради интереса попробуйте сами сделать перепак того же фреймворка, придется перебрать over 9000 файлов и ключей реестра, а неплохо бы учесть ОС х64, а еще неплохо бы учесть ранее установленные фреймворки, если есть, или нету.
В общем эти перепаки - от лукавого.

Если хочется их ставить тихо и незаметно - у всех майкрософских дистров есть ключик /? он выведет все параметры как ставить, для большинства /Q - тихая установка, но при этом может потребоваться указать временную папку /T:D:\Temp

Отдельно стоят "наборы" оригинальных системных компонентов, но их признак правильности - рядом идет батничек, который по сути запускает весь этот колхоз с "тихими" ключами. Их можно, такие я сам собираю :-)

ЗЫ: я довольно много общаюсь на форумах и замечал, что некоторых коробит обращение на "ты", мол вотку не пили, других коробит обращение на "Вы", мол в нете принято на "ты", так что если я кому то "тыкнул" или "выкнул", не обижайтесь.
А вообще стараюсь обращаться так же как и ко мне. Вот в Вашем случае перешел на "Вы" ;)

murlakatamenka 20-05-2011 13:14 1679572

R.i.m.s.k.y., спасибо за развёрнутый ответ
про ключики знаю, сам использовал /? для vcredist чтобы найти /qu-ключ для него (тихая установка вообще без всякого взаимодйствия с пользователем)
я там пост ещё подредактировал, вопрос добавил
по поводу ты/вы мне не принципиально. достаточно просто соблюдать праила хорошего тона и уважать каждого участника форума. лично моя позицияя по этому поводу - использовать "вы" by default, если кого-то это не устроит, то можно перейти на 'ты", никаких проблем

R.i.m.s.k.y. 20-05-2011 14:20 1679606

что-то не грузится картинко в подправленном сообщении

murlakatamenka 20-05-2011 15:43 1679654

R.i.m.s.k.y., ссылка не прямая была, а на просмотр. терь норм
через [Components] такое не сделать
я кое-чего сделал похожее через [код]. спрятал TypeCombo и поднял повыше ComponentsList, подобавлял элементы. вот что вышло
читать дальше »
Код:

[коде]
var
lang,langrus,langeng,sound,soundrus,soundeng : TComponent;

procedure InitializeWizard();
begin
  WizardForm.TypesCombo.Hide;
  WizardForm.ComponentsDiskSpaceLabel.Hide;
  WizardForm.ComponentsList.Top:= WizardForm.ComponentsList.Top - 20;
  lang:=WizardForm.ComponentsList.AddCheckBoxEx('язык игры','',0,true,false,true,true,WizardForm,true)
  langrus:=WizardForm.ComponentsList.AddRadioButton('русский','',1,false,True,WizardForm)
  langeng:=WizardForm.ComponentsList.AddRadioButton('английский','',1,false,True,WizardForm)
  sound:=WizardForm.ComponentsList.AddCheckBoxEx('язык озвучки','',0,true,false,true,true,WizardForm,true)
  soundrus:=WizardForm.ComponentsList.AddRadioButton('русский','',1,false,True,WizardForm)
  soundeng:=WizardForm.ComponentsList.AddRadioButton('английский','',1,false,True,WizardForm)
end;


про with ... do begin end знаю, можете не писать :)

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

Sollar 20-05-2011 15:48 1679658

Здравствуйте, подскажите мне убогому, что есть Can_cont() ????
и как правильно писать несколько условий в чеке, ничего не срабатывает(((
check: can_cont() and iswin64
check: (can_cont() and iswin64)
check: (can_cont()) and (iswin64)
check: ((can_cont()) and (iswin64))

Sollar 20-05-2011 16:06 1679669

инсталлятор UltraVNC, прежде всего интересует что такое can_cont() и с чем его едят, как писать несколько условий в check, со скобками по-всякому экспериментировал, ничего не получилось
ну и самое главное, почему не отрабатывает winvnc -install
З.Ы. в паскаль код можете не смотреть, там все правильно


HTML код:

[CustomMessages]
en.MyAppName={#AppName}
en.MyAppVerName={#AppName} %1
en.firewall=Configuring Windows firewall...
en.SupportURL=http://forum.ultravnc.info
en.UpdatesURL=http://www.uvnc.com
en.PublisherURL=http://www.uvnc.com

de.MyAppName={#AppName}
de.MyAppVerName={#AppName} %1
de.firewall=Die Windows Firewall wird konfiguriert...
de.SupportURL=http://forum.ultravnc.info
de.UpdatesURL=http://www.uvnc.com
de.PublisherURL=http://www.uvnc.com

fr.MyAppName={#AppName}
fr.MyAppVerName={#AppName} %1
fr.firewall=Die Windows Firewall wird konfiguriert...
fr.SupportURL=http://forum.ultravnc.info
fr.UpdatesURL=http://www.uvnc.com
fr.PublisherURL=http://www.uvnc.com

en.FullInstall=Full installation
de.FullInstall=Vollstдndige Installation
fr.FullInstall=Installation complиte

en.CustomInstall=Custom installation
de.CustomInstall=Benutzerdefinierte Installation
fr.CustomInstall=Installation personnalisйe

en.ServerOnly=UltraVNC Server Only
de.ServerOnly=Nur UltraVNC Server
fr.ServerOnly=Seulement UltraVNC Server
en.ServerOnlyS=UltraVNC Server Only  "silent"
de.ServerOnlyS=Nur UltraVNC Server  "silent"
fr.ServerOnlyS=Seulement UltraVNC Server  "silent"

en.ViewerOnly=UltraVNC Viewer Only
de.ViewerOnly=Nur UltraVNC Viewer
fr.ViewerOnly=Seulement UltraVNC Viewer

en.InstallService=&Register %1 as a system service
de.InstallService=%1 als System-Dienst &registrieren
fr.InstallService=&Installation et enregistrement d'%1 comme service systиme

en.ServerConfig=Server configuration:
de.ServerConfig=Server Konfiguration:
fr.ServerConfig=Configuration serveur:

en.StartService=&Start or restart %1 service
de.StartService=%1 Dienst (erneut) &starten
fr.StartService=&Dйmarrer ou redйmarrer %1 le service

en.CreateDesktopIcons=Create %1 &desktop icons
de.CreateDesktopIcons=%1 &Desktop-Symbole anlegen
fr.CreateDesktopIcons=Crйer les icфnes d'%1 sur le &bureau

en.Starting=Starting %1 service...
de.Starting=%1 Dienst starten...
fr.Starting=Dйmarrage du service %1...

en.Stopping=Stopping %1 service...
de.Stopping=%1 Dienst stoppen...
fr.Stopping=Arrкt du service %1...

en.Removing=Removing %1 service...
de.Removing=%1 Dienst entfernen...
fr.Removing=Suppression du service %1...

en.Registering=Registering %1 service...
de.Registering=%1 Dienst registrieren...
fr.Registering=Enregistrement service %1...

en.Passwd=Check set initial password...
de.Passwd=Check set initial password...
fr.Passwd=Check set initial password...

[Types]
Name: full; Description: {cm:FullInstall}
Name: server; Description: {cm:ServerOnly}
Name: server_silent; Description: {cm:ServerOnlyS}
Name: viewer; Description: {cm:ViewerOnly}
;Name: custom; Description: {cm:CustomInstall}; Flags: iscustom

[Components]
Name: UltraVNC_Server_S; Description: UltraVNC Server Silent; Types: server_silent; Flags: disablenouninstallwarning
Name: UltraVNC_Server; Description: UltraVNC Server; Types: full server; Flags: disablenouninstallwarning
Name: UltraVNC_Viewer; Description: UltraVNC Viewer; Types: full viewer; Flags: disablenouninstallwarning

[Tasks]
Name: installservice; Description: {cm:InstallService,UltraVNC Server}; GroupDescription: {cm:ServerConfig}; Components: UltraVNC_Server UltraVNC_Server_S; MinVersion: 0,1; Check: isTaskChecked('installservice')
Name: installservice; Description: {cm:InstallService,UltraVNC Server}; GroupDescription: {cm:ServerConfig}; Components: UltraVNC_Server UltraVNC_Server_S; MinVersion: 0,1; Flags: unchecked; Check: not(isTaskChecked('installservice'))
Name: startservice; Description: {cm:StartService,UltraVNC}; GroupDescription: {cm:ServerConfig}; Components: UltraVNC_Server UltraVNC_Server_S; MinVersion: 0,1; Check: isTaskChecked('startservice')
Name: startservice; Description: {cm:StartService,UltraVNC}; GroupDescription: {cm:ServerConfig}; Components: UltraVNC_Server UltraVNC_Server_S; MinVersion: 0,1; Flags: unchecked; Check: not(isTaskChecked('startservice'))
Name: desktopicon; Description: {cm:CreateDesktopIcons,UltraVNC}; Components: UltraVNC_Viewer UltraVNC_Server UltraVNC_Server_S; Check: isTaskChecked('desktopicon')
Name: desktopicon; Description: {cm:CreateDesktopIcons,UltraVNC}; Components: UltraVNC_Viewer UltraVNC_Server UltraVNC_Server_S; Flags: unchecked; Check: not(isTaskChecked('desktopicon'))
Name: associate; Description: {cm:AssocFileExtension,UltraVNC Viewer,.vnc}; Components: UltraVNC_Viewer; Check: isTaskChecked('associate')
Name: associate; Description: {cm:AssocFileExtension,UltraVNC Viewer,.vnc}; Components: UltraVNC_Viewer; Flags: unchecked; Check: not(isTaskChecked('associate'))


[Files]
; component independent files
Source: isxdl.dll; Flags: dontcopy
Source: UltraVNC.ico; Flags: dontcopy
Source: WizModernSmallImage-IS.bmp; Flags: dontcopy

Source: check_install.exe; DestDir: {app}; Components: UltraVNC_Server_S; BeforeInstall: StopVNC_S; Flags: restartreplace
Source: check_install.exe; DestDir: {app}; Components: UltraVNC_Server; BeforeInstall: StopVNC; Flags: restartreplace
Source: Whatsnew.txt; DestDir: {app}
Source: Licence.txt; DestDir: {app}
Source: Readme.txt; DestDir: {app}
; server files
; winvnc.exe needs to be first here because it triggers stopping WinVNC service/app.
Source: winvnc.exe; DestDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; Check: Can_cont()
Source: logmessages.dll; DestDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; Check: Can_cont()
Source: vnchooks.dll; DestDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; Check: Can_cont()
; mslogon I files
Source: logging.dll; DestDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; Check: Can_cont()
Source: authadmin.dll; DestDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; Check: Can_cont()
Source: workgrpdomnt4.dll; DestDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; Check: Can_cont()
Source: ldapauth.dll; DestDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; MinVersion: 0,5.0; Flags: restartreplace ignoreversion replacesameversion; Check: Can_cont()
Source: ldapauthnt4.dll; DestDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; MinVersion: 0,4.0; OnlyBelowVersion: 0,5.0; Flags: restartreplace ignoreversion replacesameversion; Check: Can_cont()
Source: ldapauth9x.dll; DestDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; MinVersion: 4.0,0; Flags: restartreplace ignoreversion replacesameversion; Check: Can_cont()
; mslogon II files
Source: C:\UltraVNC_install\CertMgr.exe; DestDir: {app}; Flags: IgnoreVersion restartreplace replacesameversion;
Source: C:\UltraVNC_install\certdrv.cer; DestDir: {app}; Flags: IgnoreVersion restartreplace replacesameversion;

Source: C:\UltraVNC_install\certdrv2.cer; DestDir: {app}; Flags: IgnoreVersion restartreplace replacesameversion; Components: "UltraVNC_Server_S UltraVNC_Server UltraVNC_Viewer";
Source: authSSP.dll; DestDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; MinVersion: 0,1; Flags: restartreplace ignoreversion replacesameversion; Check: Can_cont()
Source: MSLogonACL.exe; DestDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; MinVersion: 0,1; Flags: restartreplace ignoreversion replacesameversion; Check: Can_cont()
Source: vncviewer.exe; DestDir: {app}; Components: UltraVNC_Viewer; Flags: restartreplace ignoreversion replacesameversion
Source: SCHook.dll; DestDir: {app}; Components: UltraVNC_Server; Flags: restartreplace ignoreversion replacesameversion
Source: cad.exe; DestDir: {app}; Components: UltraVNC_Server; Flags: restartreplace ignoreversion replacesameversion
Source: plugins\MSRC4Plugin.dsm; DestDir: {app}
Source: plugins\Whatsnew.txt; DestDir: {app}\Plugins
Source: plugins\Licence.txt; DestDir: {app}\Plugins

Source: plugins\MSRC4Plugin.dsm; DestDir: {app}\Plugins
Source: plugins\Readme.txt; DestDir: {app}\Plugins
Source: uvnc_settings.exe; DestDir: {app}
Source: driver\vista64\driver\driver7x64.cer; DestDir: {app}\driver\vista64\driver; Components: "UltraVNC_Server UltraVNC_Server_S"; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000;
Source: driver\vista64\driver\mv2.cat; DestDir: {app}\driver\vista64\driver; Components: "UltraVNC_Server UltraVNC_Server_S"; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000;
Source: driver\vista64\driver\mv2.dll; DestDir: {app}\driver\vista64\driver; Components: "UltraVNC_Server UltraVNC_Server_S"; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000;
Source: driver\vista64\driver\mv2.inf; DestDir: {app}\driver\vista64\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000
Source: driver\vista64\driver\mv2.sys; DestDir: {app}\driver\vista64\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000
Source: driver\vista64\install.bat; DestDir: {app}\driver\vista64; Components: "UltraVNC_Server UltraVNC_Server_S"; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000;
Source: driver\vista64\install_silent.bat; DestDir: {app}\driver\vista64; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000
Source: driver\vista64\license.txt; DestDir: {app}\driver\vista64; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000
Source: driver\vista64\setupdrv.exe; DestDir: {app}\driver\vista64; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000
Source: driver\vista64\uninstall.bat; DestDir: {app}\driver\vista64; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000
Source: driver\vista64\uninstall_silent.bat; DestDir: {app}\driver\vista64; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000

Source: driver\vista\driver\driver7x32.cer; DestDir: {app}\driver\vista\driver; Components: "UltraVNC_Server UltraVNC_Server_S"; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000;
Source: driver\vista\driver\mv2.cat; DestDir: {app}\driver\vista\driver; Components: "UltraVNC_Server UltraVNC_Server_S"; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000;
Source: driver\vista\driver\mv2.dll; DestDir: {app}\driver\vista\driver; Components: "UltraVNC_Server UltraVNC_Server_S"; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000;
Source: driver\vista\driver\mv2.inf; DestDir: {app}\driver\vista\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000
Source: driver\vista\driver\mv2.sys; DestDir: {app}\driver\vista\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000
Source: driver\vista\install.bat; DestDir: {app}\driver\vista; Components: "UltraVNC_Server UltraVNC_Server_S"; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000;
Source: driver\vista\install_silent.bat; DestDir: {app}\driver\vista; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000
Source: driver\vista\license.txt; DestDir: {app}\driver\vista; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000
Source: driver\vista\setupdrv.exe; DestDir: {app}\driver\vista; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000
Source: driver\vista\uninstall.bat; DestDir: {app}\driver\vista; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000
Source: driver\vista\uninstall_silent.bat; DestDir: {app}\driver\vista; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,6.0.6000

Source: driver\w2K\driver\driverw2k.cer; DestDir: {app}\driver\w2K\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.0.2195; OnlyBelowVersion: 0,5.01.2600
Source: driver\w2K\driver\mv2.cat; DestDir: {app}\driver\w2K\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.0.2195; OnlyBelowVersion: 0,5.01.2600
Source: driver\w2K\driver\mv2.dll; DestDir: {app}\driver\w2K\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.0.2195; OnlyBelowVersion: 0,5.01.2600
Source: driver\w2K\driver\mv2.inf; DestDir: {app}\driver\w2K\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.0.2195; OnlyBelowVersion: 0,5.01.2600
Source: driver\w2K\driver\mv2.sys; DestDir: {app}\driver\w2K\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.0.2195; OnlyBelowVersion: 0,5.01.2600
Source: driver\w2K\install.bat; DestDir: {app}\driver\w2K; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.0.2195; OnlyBelowVersion: 0,5.01.2600
Source: driver\w2K\install_silent.bat; DestDir: {app}\driver\w2K; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.0.2195; OnlyBelowVersion: 0,5.01.2600
Source: driver\w2K\license.txt; DestDir: {app}\driver\w2K; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.0.2195; OnlyBelowVersion: 0,5.01.2600
Source: driver\w2K\setupdrv.exe; DestDir: {app}\driver\w2K; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.0.2195; OnlyBelowVersion: 0,5.01.2600
Source: driver\w2K\uninstall.bat; DestDir: {app}\driver\w2K; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.0.2195; OnlyBelowVersion: 0,5.01.2600
Source: driver\w2K\uninstall_silent.bat; DestDir: {app}\driver\w2K; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.0.2195; OnlyBelowVersion: 0,5.01.2600

Source: driver\xp\driver\driverxpx32.cer; DestDir: {app}\driver\xp\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp\driver\mv2.cat; DestDir: {app}\driver\xp\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp\driver\mv2.dll; DestDir: {app}\driver\xp\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp\driver\mv2.inf; DestDir: {app}\driver\xp\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp\driver\mv2.sys; DestDir: {app}\driver\xp\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp\install.bat; DestDir: {app}\driver\xp; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp\install_silent.bat; DestDir: {app}\driver\xp; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp\license.txt; DestDir: {app}\driver\xp; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp\setupdrv.exe; DestDir: {app}\driver\xp; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp\uninstall.bat; DestDir: {app}\driver\xp; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp\uninstall_silent.bat; DestDir: {app}\driver\xp; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000

Source: driver\xp64\driver\driverxpx64.cer; DestDir: {app}\driver\xp64\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp64\driver\mv2.cat; DestDir: {app}\driver\xp64\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp64\driver\mv2.dll; DestDir: {app}\driver\xp64\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp64\driver\mv2.inf; DestDir: {app}\driver\xp64\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp64\driver\mv2.sys; DestDir: {app}\driver\xp64\driver; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp64\install.bat; DestDir: {app}\driver\xp64; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp64\install_silent.bat; DestDir: {app}\driver\xp64; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp64\license.txt; DestDir: {app}\driver\xp64; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp64\setupdrv.exe; DestDir: {app}\driver\xp64; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp64\uninstall.bat; DestDir: {app}\driver\xp64; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Source: driver\xp64\uninstall_silent.bat; DestDir: {app}\driver\xp64; Components: UltraVNC_Server UltraVNC_Server_S; Flags: restartreplace ignoreversion replacesameversion; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000

Source: C:\Ultravnc\UltraVNC\ultravnc.ini; DestDir: {app}; Components: "UltraVNC_Server_S UltraVNC_Server UltraVNC_Viewer"; Flags: restartreplace IgnoreVersion replacesameversion;
Source: C:\Ultravnc\UltraVNC\20110505_Viewer_ClientAuth.pkey; DestDir: {app}; Flags: IgnoreVersion restartreplace replacesameversion;
Source: C:\Ultravnc\UltraVNC\SecureVNCPlugin.dsm; DestDir: {app}; Flags: IgnoreVersion restartreplace replacesameversion; Components: "UltraVNC_Server_S UltraVNC_Server UltraVNC_Viewer";
Source: C:\Ultravnc\UltraVNC\20110505_Server_ClientAuth.pubkey; DestDir: {app}; Flags: IgnoreVersion restartreplace replacesameversion;
Source: C:\UltraVNC_install\devcon.exe; DestDir: {app};
Source: C:\UltraVNC_install\devconx64.exe; DestDir: {app};
Source: C:\Ultravnc\UltraVNC\1.txt; DestDir: {app}; Check: isWin64; Flags: IgnoreVersion replacesameversion 32bit restartreplace; Components: "UltraVNC_Server_S UltraVNC_Server UltraVNC_Viewer";
Source: C:\Ultravnc\UltraVNC\2.txt; DestDir: {app}; Check: isWin64; Flags: IgnoreVersion restartreplace replacesameversion 64bit; Components: "UltraVNC_Server_S UltraVNC_Server UltraVNC_Viewer";




[Icons]
Name: {userdesktop}\UltraVNC Server; Filename: {app}\winvnc.exe; Components: UltraVNC_Server UltraVNC_Server_S; IconIndex: 0; Tasks: desktopicon; Check: Can_cont()
Name: {userdesktop}\UltraVNC Viewer; Filename: {app}\vncviewer.exe; IconIndex: 0; Components: UltraVNC_Viewer; Tasks: desktopicon
Name: {userdesktop}\UltraVNC Viewer Directx; Filename: {app}\vncviewer_tab.exe; IconIndex: 0; Components: UltraVNC_Viewer; Tasks: desktopicon

Name: {group}\UltraVNC Viewer; FileName: {app}\vncviewer.exe; WorkingDir: {app}; IconIndex: 0; Components: UltraVNC_Viewer
Name: {group}\UltraVNC Viewer Directx; FileName: {app}\vncviewer_tab.exe; WorkingDir: {app}; IconIndex: 0; Components: UltraVNC_Viewer
Name: {group}\UltraVNC Server; FileName: {app}\WinVNC.exe; WorkingDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; IconIndex: 0; Check: Can_cont()


Name: {group}\UltraVNC Viewer\Run UltraVNC Viewer (Listen Mode); FileName: {app}\vncviewer.exe; Parameters: -listen; WorkingDir: {app}; IconIndex: 0; Components: UltraVNC_Viewer
Name: {group}\UltraVNC Viewer\Run UltraVNC Viewer (Listen Mode Encrypt)); FileName: {app}\vncviewer.exe; Parameters: -dsmplugin msrc4plugin.dsm -listen 5500; WorkingDir: {app}; IconIndex: 0; Components: UltraVNC_Viewer
Name: {group}\UltraVNC Viewer\Show UltraVNC Viewer Help; FileName: {app}\vncviewer.exe; Parameters: -help; WorkingDir: {app}; IconIndex: 0; Components: UltraVNC_Viewer

Name: {group}\UltraVNC Server\Install WinVNC Service; FileName: {app}\WinVNC.exe; Parameters: -install; WorkingDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; Check: Can_cont()
Name: {group}\UltraVNC Server\Remove WinVNC Service; FileName: {app}\WinVNC.exe; Parameters: -uninstall; WorkingDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; Check: Can_cont()
Name: {group}\UltraVNC Server\Start WinVNC Service; FileName: {app}\WinVNC.exe; Parameters: -startservice; WorkingDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; Check: Can_cont()
Name: {group}\UltraVNC Server\Stop WinVNC Service; FileName: {app}\WinVNC.exe; Parameters: -stopservice; WorkingDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; Check: Can_cont()
Name: {group}\Edit Settings; FileName: {app}\uvnc_settings.exe; WorkingDir: {app}; Components: UltraVNC_Server UltraVNC_Server_S; Check: Can_cont()

[Registry]
Root: HKCR; Subkey: .vnc; ValueType: string; ValueName: ; ValueData: VncViewer.Config; Flags: uninsdeletevalue; Tasks: associate
Root: HKCR; Subkey: VncViewer.Config; ValueType: string; ValueName: ; ValueData: VNCviewer Config File; Flags: uninsdeletekey; Tasks: associate
Root: HKCR; Subkey: VncViewer.Config\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\vncviewer.exe,0; Tasks: associate
Root: HKCR; Subkey: VncViewer.Config\shell\open\command; ValueType: string; ValueName: ; ValueData: """{app}\vncviewer.exe"" -config ""%1"""; Tasks: associate
Root: HKLM; SubKey: SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List; ValueType: string; ValueName: "C:\\Program Files\\UltraVNC\\winvnc.exe"; ValueData: "C:\\Program Files\\UltraVNC\\winvnc.exe:*:Enabled:UltraVNC"; Flags: UninsDeleteKey;

[Run]
Filename: {app}\WinVNC.exe; Parameters: -install; Flags: runhidden; Components: "UltraVNC_Server_S UltraVNC_Server UltraVNC_Viewer"; Tasks: installservice; StatusMsg: "{cm:Registering, UltraVNC}"; Check: Can_cont();
Filename: net; Parameters: start uvnc_service; Flags: runhidden; Components: UltraVNC_Server UltraVNC_Server_S; Tasks: startservice; StatusMsg: {cm:Starting,UltraVNC}
filename: {sys}\netsh; Parameters: firewall add portopening TCP 5900 vnc5900; StatusMsg: {cm:firewall}; Flags: runhidden; MinVersion: 0,5.01; Components: UltraVNC_Server UltraVNC_Server_S; Check: Can_cont()
Filename: {sys}\netsh; Parameters: firewall add portopening TCP 5800 vnc5800; StatusMsg: {cm:firewall}; Flags: runhidden; MinVersion: 0,5.01; Components: UltraVNC_Server UltraVNC_Server_S; Check: Can_cont()
Filename: {sys}\netsh; Parameters: "firewall add allowedprogram ""{app}\vncviewer.exe"" ""vncviewer.exe"" ENABLE ALL"; StatusMsg: {cm:firewall}; Flags: runhidden; MinVersion: 0,5.01; Components: UltraVNC_Viewer

Filename: {app}\driver\w2k\setupdrv.exe; Parameters: install; Flags: runhidden; Components: UltraVNC_Server UltraVNC_Server_S; Check: Can_cont(); MinVersion: 0,5.0.2195; OnlyBelowVersion: 0,5.01.2600
Filename: {app}\driver\xp\setupdrv.exe; Parameters: install; Flags: runhidden; Components: UltraVNC_Server UltraVNC_Server_S; Check: Can_cont() and not isWin64; MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Filename: {app}\certmgr.exe; Parameters: "-add -c ""{app}\driver\vista64\driver\driver7x64.cer"" -s -r localMachine TrustedPublisher"; Check: (Can_cont() and isWin64); MinVersion: 0,6.0.6000; Components: "UltraVNC_Server_S UltraVNC_Server UltraVNC_Viewer"; Flags: RunHidden;
Filename: {app}\driver\vista64\setupdrv.exe; Parameters: install; Flags: runhidden 64bit; Check: ( (Can_cont()) and (isWin64)); MinVersion: 0,6.0.6000; Components: "UltraVNC_Server_S UltraVNC_Server UltraVNC_Viewer";
Filename: {app}\driver\xp64\setupdrv.exe; Parameters: install; Flags: runhidden 64bit; Components: "UltraVNC_Server UltraVNC_Server_S"; Check: (Can_cont() and (isWin64)); MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000;
Filename: {app}\certmgr.exe; Parameters: "-add -c ""{app}\driver\vista\driver\driver7x32.cer"" -s -r localMachine TrustedPublisher"; Components: "UltraVNC_Server_S UltraVNC_Server UltraVNC_Viewer"; Flags: RunHidden; Check: ( (Can_cont()) and (not isWin64)); MinVersion: 0,6.0.6000;
Filename: {app}\driver\vista\setupdrv.exe; Parameters: install; Flags: runhidden 32bit; check: ( (Can_cont()) And (not isWin64)); MinVersion: 0,6.0.6000;
Filename: {app}\WinVNC.exe; Parameters: -install; Flags: runhidden; Components: "UltraVNC_Server UltraVNC_Server_S"; Tasks: installservice; StatusMsg: "{cm:Registering, UltraVNC}"; Check: Can_cont();
Filename: net; Parameters: start uvnc_service; Flags: runhidden; Components: UltraVNC_Server UltraVNC_Server_S; Tasks: startservice; StatusMsg: {cm:Starting,UltraVNC};

[UninstallRun]
Filename: net; Parameters: stop uvnc_service; Flags: runhidden; RunOnceId: StopVncService; Components: UltraVNC_Server UltraVNC_Server_S; Tasks: startservice; StatusMsg: {cm:Stopping, UltraVNC}
Filename: {app}\WinVNC.exe; Parameters: -uninstall; Flags: runhidden; RunOnceId: RemoveVncService; Components: UltraVNC_Server UltraVNC_Server_S; Tasks: installservice; StatusMsg: {cm:Removing,UltraVNC}
Filename: {sys}\netsh; Parameters: firewall delete portopening TCP 5900 vnc5900; StatusMsg: {cm:firewall}; Flags: runhidden; MinVersion: 0,5.01; Components: UltraVNC_Server UltraVNC_Server_S
Filename: {sys}\netsh; Parameters: firewall delete portopening TCP 5800 vnc5800; StatusMsg: {cm:firewall}; Flags: runhidden; MinVersion: 0,5.01; Components: UltraVNC_Server UltraVNC_Server_S
Filename: {sys}\netsh; Parameters: "firewall delete allowedprogram program=""{app}\vncviewer.exe"""; StatusMsg: {cm:firewall}; Flags: runhidden; MinVersion: 0,5.01; Components: UltraVNC_Viewer

Filename: {app}\driver\w2k\setupdrv.exe; Parameters: uninstall; Flags: runhidden; Components: UltraVNC_Server UltraVNC_Server_S; Check: Can_cont(); MinVersion: 0,5.0.2195; OnlyBelowVersion: 0,5.01.2600
Filename: {app}\driver\xp\setupdrv.exe; Parameters: uninstall; Flags: runhidden; Components: UltraVNC_Server UltraVNC_Server_S; Check: Can_cont(); MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000
Filename: {app}\driver\vista\setupdrv.exe; Parameters: uninstall; Flags: runhidden; Components: UltraVNC_Server UltraVNC_Server_S; Check: Can_cont(); MinVersion: 0,6.0.6000
Filename: {app}\driver\xp64\setupdrv.exe; Parameters: uninstall; Flags: runhidden; Components: "UltraVNC_Server UltraVNC_Server_S"; Check: Can_cont(); MinVersion: 0,5.01.2600; OnlyBelowVersion: 0,6.0.6000;
Filename: {app}\driver\vista64\setupdrv.exe; Parameters: uninstall; Flags: runhidden; Components: "UltraVNC_Server UltraVNC_Server_S"; Check: Can_cont(); MinVersion: 0,6.0.6000;


Gnom_aka_Lexander 20-05-2011 17:47 1679732

Цитата:

Цитата murlakatamenka
вот ещё вопрос, как слелать это (2 неактивных чекнутых чекбокса с двумя вариантами exlusive-ов)? »

Так вот:
читать дальше »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Components]
Name: a; Description: 1; Flags: fixed; Types: custom compact full
Name: a\1; Description: 1-1; Types: custom compact full; Flags: exclusive
Name: a\2; Description: 1-2; Flags: exclusive; Types: custom compact
Name: b; Description: 1; Flags: fixed; Types: custom compact full
Name: b\1; Description: 1-1; Types: custom compact full; Flags: exclusive
Name: b\2; Description: 1-2; Flags: exclusive; Types: custom compact

murlakatamenka 21-05-2011 17:54 1680215

Лександер, да, спасибо. это то, что нужно
такой вопрос, а свои типы создать можно вместо встроенных custom full и compact ?
(спрашиваю, а зачем не знаю :))

Gnom_aka_Lexander 21-05-2011 18:15 1680220

murlakatamenka, Можно. Поиграйся с прогами IsTool и InnoIDE - там создание всех секций, кроме кода, удобно автоматизировано.
Проги обе глюковаты, но одна в одном, другая - в другом, и с успехом друг-друга компенсируют :)

murlakatamenka 22-05-2011 01:39 1680393

Лександер, в основном использую связку InnoIDE + Inno Setup с расширенным компилятором. полный комплект различных утилит в InnoUltra есть.

yourikom 23-05-2011 08:41 1680901

Всем доброе время суток.

я только начал юзать инно и у меня сразу вопрос:

как поменять цвет в самом инсталяторе (в меню именно а не шрифт)

покажите пример полный пожалуста

и как вставить свою музыку????

я пытался, но сетап или не запускался патом или запускался, но вместо музыки звук
предупреждения windows без перерыва
-------------
Пожалуста помогите

yourikom 23-05-2011 12:18 1680987

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
; Since no icons will be created in "{group}", we don't need the wizard
; to ask for a Start Menu folder name:
DisableProgramGroupPage=yes
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=userdocs:Inno Setup Examples Output

[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
Source: "Sound.wav"; DestDir: "{tmp}"; Flags: dontcopy

[code]
function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile(ExpandConstant('sound.wav'));
sndPlaySound(ExpandConstant('{tmp}\sound.wav'), $0001 or $0008);
end;


[Icons]
Name: "{commonprograms}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"

ВОТ И Я НЕ ПОЙМУ ПОЧЕМУ НЕ ИГРАЕТ МУЗЫКА

LinkOFF 24-05-2011 22:05 1681986

Как мне поменять цвет шрифта на каждой странице инсталлятора

Gnom_aka_Lexander 25-05-2011 10:30 1682208

LinkOFF, так:
Код:

procedure InitializeWizard();
  begin
    WizardForm.Font.Color := clLime;
end;


DevilisH 25-05-2011 16:47 1682382

Помогите, пожалуйста с такой проблемой: у меня черный инсталлятор и текст белого цвета, но фон страницы с дополнительными задачами серый (текста не видно). Как сделать его черным, чтобы текст был виден?
http://i042.radikal.ru/1105/c2/cacbc1c62bb6.jpg

Gnom_aka_Lexander 25-05-2011 17:02 1682393

DevilisH, в procedure InitializeWizard(); добавь строчку: WizardForm.TasksList.Color := clBlack;

LinkOFF 26-05-2011 16:42 1683130

Как изменить цвет шрифта на первой странице инсталятора и если можно на каждой отдельно

Alexey_KF 26-05-2011 23:03 1683324

Помогите!
Есть две программы program1.exe и program2.exe
Хочу собрать инстолятор с таким условием;
1. Чтоб во время установки пользователь выбирал какую программу установить
2. После выбора начиналась установка program.exe

Все обрыл, перелистал нимогу ничего сделать.
Помогите пожалуйста!!!!!!!!!!!!!!!!

vint56 27-05-2011 10:48 1683550

Alexey_KF,
читать дальше »
[Setup]
AppName=My Program
AppVersion=1.5
;AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

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

[Files]
Source: C:\Users\Vitaly\Desktop\Программа1.exe; DestDir: {app}; Components: prog1
Source: C:\Users\Vitaly\Desktop\Программа2.exe; DestDir: {app}; Components: prog2

[Types]
Name: full; Description: Full installation; Flags: iscustom
[Components]
Name: prog1; Description: Программа1; Flags: exclusive
Name: prog2; Description: Программа2; Flags: exclusive

Alexey_KF 27-05-2011 13:07 1683635

vint56,
спасибо, но мне не нужно чтоб была распаковка в програм файлс... Мне нужно чтоб была распаковка например во временную папку и чтоб после того как программа 1 установилась инстолятор удалися из временной папки...
Во как

Пожалуйста помогите!

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

Habetdin 27-05-2011 17:06 1683771

Alexey_KF,
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: Setup/program1.exe; DestDir: {tmp}; DestName: program.exe; Flags: ignoreversion deleteafterinstall; Components: com1
Source: Setup/program2.exe; DestDir: {tmp}; DestName: program.exe; Flags: ignoreversion deleteafterinstall; Components: com2

[Types]
Name: custom; Description: Custom; Flags: iscustom;

[Components]
Name: com1; Description: "Install Program #1"; Flags: exclusive
Name: com2; Description: "Install Program #2"; Flags: exclusive

[Run]
Filename: {tmp}\program.exe; WorkingDir: {tmp}; Flags: runhidden waituntilterminated


insombia 27-05-2011 17:34 1683786

Как сделать инсталятор как у каталистов(новой версии)?

Alexey_KF 27-05-2011 19:21 1683836

Habetdin, Спасибо!!! только вместо строчек
DefaultDirName={pf}\My Program
OutputDir=.

я сделал так:
CreateAppDir=no


Еще вопрос: У меня над прогресс баром виден путь распаковки.. Его скрыть можно?

nik1967 28-05-2011 09:18 1684019

Цитата:

Цитата Alexey_KF
Еще вопрос: У меня над прогресс баром виден путь распаковки.. Его скрыть можно? »

Можно:
Код:

WizardForm.FilenameLabel.Hide;
Цитата:

Цитата insombia
Как сделать инсталятор как у каталистов(новой версии)? »

Руками :smirk: Я ведь как то сделал.

Alexey_KF 28-05-2011 15:40 1684125

nik1967, куда именно строчку вставлять?

Gnom_aka_Lexander 28-05-2011 15:54 1684128

Alexey_KF,
Код:

procedure InitializeWizard();
begin
 WizardForm.FilenameLabel.Hide;
end;


insombia 28-05-2011 19:30 1684211

nik1967, :o а можеш дать плиз свой скриптик?

murlakatamenka 29-05-2011 02:46 1684382

insombia, создаёте кастомные лэйблы, чекбоксы, кнопки, панельки и вперёд. внешний вид подсмотрен у инсталлеров от Good Old Games aka GOG

Gnom_aka_Lexander 29-05-2011 20:10 1684712

vovka1021, держи , все лень доделать было.

Gnom_aka_Lexander 29-05-2011 21:40 1684754

vovka1021, Найди такой кусок кода, и замени этим:
Код:

//************************************************ [Начало - Скрываем ненужные страницы] ***************************************************//
function ShouldSkipPage(PageID: Integer): Boolean;
 begin
    if (PageID =wpSelectTasks) then Result:= True;
 end;
//************************************************ [Конец - Скрываем ненужные страницы] ***************************************************//

Потом ниже найди wpSelectTasks: и замени wpSelectProgramGroup:.

LinkOFF 29-05-2011 22:48 1684789

Здрасьте, а как убрать на финальной странице установки надпись "Время установки: 7 минут".Скрипт Isdone

lmiol 29-05-2011 23:39 1684815

эммм не хочеться тревожить лишний раз и настойчиво просить, но все же не поможет ктонибуть по моему посту который я оставил 11 дней назад

murlakatamenka 30-05-2011 11:39 1684986

LinkOFF, очень просто
закомментируйте эту строчку в фунуции ProgressCallback
Код:

LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;

LinkOFF 30-05-2011 13:50 1685071

murlakatamenka, спасибо
Как изменить цвет шрифта на первой странице инсталятора и если можно на каждой отдельно

R.i.m.s.k.y. 30-05-2011 13:59 1685077

каким макаром можно в инно узнать запущен ли экзешник %appname.exe%?

murlakatamenka 30-05-2011 14:30 1685108

R.i.m.s.k.y., можно отслеживать по запущенному процессу
сча найду код и приведу
надо dll ISTask.dll
Код:

[Files]
Source: ISTask.dll; DestDir: {app}; Flags: dontcopy

[Коде]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

//**************************************************//
procedure InitializeWizard();
begin
  If RunTask('имя_процесса', false) then
    begin
      //что-нить делаем
    end;
end;

переделал из этого (проверка, запущен ли винамп, если да, убиваем процесс)
Код:

[Files]
Source: ISTask.dll; DestDir: {app}; Flags: dontcopy

[Коде]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

//**************************************************//
function InitializeSetup(): Boolean;
begin
  If RunTask('winamp.exe', false) then
    begin
      if MsgBox('Программа Winamp используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
        begin
          KillTask('winamp.exe');
          Result:= True;
        end else
          Exit;
    end;
Result:=True;
end;

LinkOFF,
Код:

if CurPageID=имя_страницы then WizardForm.Font=имя_шрифта;
страницы например wpWelcome, wpSelectDir, wpReady, wpFinished и т.д. (можно посмотреть в хелпе)

R.i.m.s.k.y. 30-05-2011 14:49 1685114

Цитата:

Цитата murlakatamenka
надо dll ISTask »

где его взять?

murlakatamenka 30-05-2011 15:02 1685117

http://rghost.ru/8574801 - ISTask.dll

Gnom_aka_Lexander 30-05-2011 15:04 1685121

R.i.m.s.k.y., если используеш мою сборку, то есть в папке Dll Pack в корне компилятора (compiler:Dll Pack\ISTask.dll) - для секции файлс

R.i.m.s.k.y. 30-05-2011 15:07 1685122

Цитата:

Цитата Лександер
если используеш мою сборку, то есть в папке Dll Pack в корне компилятора (compiler:Dll Pack\ISTask.dll) - для секции файлс »

ога, юзую твою лайт

murlakatamenka 30-05-2011 15:09 1685125

вообще-то dll входит в Inno Setup Scripting (ссылка есть в шапке)
а скрипт взял из сборника скриптов от Krinkels (-//-)
Лександер, InnoUltra - это ваша сборка ? вы и есть Ultra ?

R.i.m.s.k.y. 30-05-2011 15:16 1685127

Цитата:

Цитата murlakatamenka
Лександер, InnoUltra - это ваша сборка ? вы и есть Ultra ? »

у него в подписи ведь ссылка на сайт :cool:

El Sanchez 30-05-2011 16:17 1685154

Цитата:

Цитата R.i.m.s.k.y.
каким макаром можно в инно узнать запущен ли экзешник %appname.exe%? »

R.i.m.s.k.y.,
Код:

[code]
function IsProcessRunning(FileName: String): Boolean;
var
  objSWbemLocator, objSWbemServices: Variant;
begin
  try
    objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  except
    ShowExceptionMessage;
    Exit;
  end;
  objSWbemServices := objSWbemLocator.ConnectServer();
  objSWbemServices.Security_.ImpersonationLevel := 3;
  Result := (objSWbemServices.ExecQuery('SELECT * FROM Win32_Process WHERE Name="' + FileName + '"').Count > 0);
end;

procedure InitializeWizard();
begin
  if IsProcessRunning('notepad.exe') then
    MsgBox('yes', mbInformation, MB_OK)
  else
    MsgBox('no', mbError, MB_OK);
end;

Цитата:

Цитата lmiol
эммм не хочеться тревожить лишний раз и настойчиво просить, но все же не поможет ктонибуть по моему посту который я оставил 11 дней назад »

lmiol, единственный вариант, что мне пришел в голову, это создание кастомного ComponentsList, наполнение которого зависело бы от радиокнопок Standart/Pro (как на скрине). Свою страницу с радиокнопками создать-то можно, как и кастомный ComponentsList, но с синхронизацией кастомного и визардовского List'ов тяжело (там еще и TypesCombo нужно учитывать и комстроку). В общем, отложил задачу напотом, извиняйте.

R.i.m.s.k.y. 30-05-2011 16:28 1685161

Цитата:

Цитата El Sanchez
SELECT * FROM Win32_Process WHERE Name= »

на вин64 SELECT * FROM Win32_Process нормально отработает? или надо будет делать еще и SELECT * FROM Win64_Process ???

El Sanchez 30-05-2011 18:26 1685232

Цитата:

Цитата R.i.m.s.k.y.
на вин64 SELECT * FROM Win32_Process нормально отработает? »

R.i.m.s.k.y., да

R.i.m.s.k.y. 30-05-2011 18:47 1685240

SELECT * FROM Win32_Process в вин64 отберет и 64разрядные процессы?

El Sanchez 30-05-2011 20:32 1685291

Цитата:

Цитата R.i.m.s.k.y.
SELECT * FROM Win32_Process в вин64 отберет и 64разрядные процессы? »

Да, все что отображается в диспетчере задач. И в Windows-системах нет Win64_* классов.

Snork911 31-05-2011 12:24 1685596

Пожалуйста подскажите, как изменить расположение кнопок и надписей в моей установке...
И как включить в установку создание резервной копии файлов, которые заменяет установщик.....

LinkOFF 31-05-2011 17:52 1685813

чем можно пережать файлы очень сильно?

serhio 31-05-2011 18:13 1685830

Вложений: 1
Всем привет! Подскажите пожалуйста что такое "препроцессор"?

LinkOFF 31-05-2011 18:13 1685833

Цитата:

Цитата murlakatamenka
if CurPageID=имя_страницы then WizardForm.Font=имя_шрифта;
страницы например wpWelcome, wpSelectDir, wpReady, wpFinished и т.д. (можно посмотреть в хелпе) »

А в какую функция код всиавлять

serhio 31-05-2011 18:19 1685840

LinkOFF,
Цитата:

Цитата LinkOFF
чем можно пережать файлы очень сильно? »

FreeArc

murlakatamenka 31-05-2011 18:45 1685854

LinkOFF,
вставлять в [code] конечно
Код:

[Коде]
begin
if CurPageID=имя_страницы then WizardForm.Font=имя_шрифта;
end;


LinkOFF 31-05-2011 18:59 1685860

Цитата:

Цитата murlakatamenka
вставлять в [code] конечно »

У меня вылезает Unknown identifier 'CurPageID'

if CurPageID=wpWelcome then WizardForm.Font=clblack;
Примерно так вставлять цвет?

Цитата:

Цитата serhio
FreeArc »

А еще сильней?

R.i.m.s.k.y. 31-05-2011 19:04 1685867

Цитата:

Цитата LinkOFF
У меня вылезает Unknown identifier 'CurPageID' »

Код:

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpWelcome then WizardForm.Font=clblack
end;


Gnom_aka_Lexander 31-05-2011 19:09 1685870

Цитата:

Цитата serhio
Всем привет! Подскажите пожалуйста что такое "препроцессор"? »

Отсюда качаеш issrc-5.4.2.zip и распаковываеш в папку с Инно, это и есть препроцессор.
Цитата:

Цитата LinkOFF
У меня вылезает Unknown identifier 'CurPageID' »

данный тебе код нужно вставлять в procedure CurPageChanged(CurPageID: Integer);
Цитата:

Цитата LinkOFF
if CurPageID=wpWelcome then WizardForm.Font=clblack; »

Да, именно так.

murlakatamenka 31-05-2011 19:41 1685893

лень было скрипты мне посмотреть
да, точно надо в CurPageChanged вставлять, это процедура, которая отслеживает смену страниц в инсталляторе
Цитата:

procedure CurPageChanged(CurPageID: Integer);
Called after a new wizard page (specified by CurPageID) is shown

serhio 31-05-2011 20:04 1685904

Лександер, спасибо за подсказку! :wink:

LinkOFF,
Цитата:

Цитата LinkOFF
А еще сильней? »

по-моему это самый сильный.

kenny_danger 31-05-2011 22:27 1685985

в общем нужен скрипт который бы автоматом искал папку со steam аккаунтом
D:\Steam\steamapps\account_name
видел такое в нескольких инсталяторах, но походу они на installshield
http://www.esl.eu/de/css/download/18324844/
в этом
http://www.roccat.org/Downloads/Onli...tgui300css.zip
как это реализовать в inno setup

Habetdin 01-06-2011 00:20 1686036

kenny_danger, нужно поискать путь в реестре в ветке HKLM\Software\Valve, ну или HKCU\Software\Valve

kenny_danger 01-06-2011 09:37 1686181

Цитата:

Цитата Habetdin
kenny_danger, нужно поискать путь в реестре в ветке HKLM\Software\Valve, ну или HKCU\Software\Valve »

ну я нашел в HKLM\Software\Valve\Steam (InstallPath D:\Steam)
как это реализовать DefaultDirName
что то не врублю

kenny_danger 01-06-2011 10:06 1686191

да и мне нужно чтобы устанавливалось в папку
D:\Steam\steamapps\имя_аккаунта
до аккаунта допустим он найдет а как он найдет сам аккаунт они у всех разные

есть у меня одна ддлка как то выдрал из какого то инсталятора, мб поможет
http://narod.ru/disk/14677281001/steamseldir.dll.html

zero 414 01-06-2011 21:48 1686685

народ, подскажите что нужно в скрипт добавить, чтобы при отмене установки игры не начинал ставиться софт

LinkOFF 02-06-2011 16:44 1687167

Подскажите пожалуйста.У меня вылезает Duplicate identifier 'CURPAGECHANGED' когда я вставляю в скрипт

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpWelcome then WizardForm.Font=clblack
end;

если можете то втавьте пожалуйста процедуру в скрипт.
Вот скрипт:http://rghost.ru/download/9068071/12...762/Script.rar

Этот скрипт для изменения цвета шрифта на странице

murlakatamenka 02-06-2011 17:12 1687196

LinkOFF, подружитесь с английским языком и/или словариком
у вас 2 процедуры с одинаковым названием, чего быть не должно, поэтому и ошибка
в поцедуру - procedure CurStepChanged(CurStep: TSetupStep);
добавьте код
Код:

if CurStep = ssDone and MyError then begin
    LabelTime3.Hide;
    WizardForm.Caption:= ExpandConstant('{cm:Error}');
    WizardForm.FinishedLabel.Font.Color:= clRed;
    WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
end;

а этот кусок можно будет удалить
Код:

Procedure CurPageChanged(CurPageID: Integer);
Begin
  if (CurPageID = wpFinished) and MyError then
  begin
    LabelTime3.Hide;
    WizardForm.Caption:= ExpandConstant('{cm:Error}');
    WizardForm.FinishedLabel.Font.Color:= clRed;
    WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
  end;
end;


serhio 02-06-2011 17:38 1687209

Парни,помогите разобратся в 2х вопросах:
1) что и куда вписать в скрипт что-бы в конце процедуры устанавливался Soft: DerectX и т.д.
2) как распаковать архив "arc"
В шапке пункт "Распаковка архивов FreeArc" не помог. Или я может что недопонял! :sorry:

murlakatamenka 02-06-2011 18:18 1687224

serhio, 1) в конце какой процедуры ? в конце установки ?
обычно доп по делается через секцию [Tasks] и [Run], с доп по сам пару месяцеев назад разбирался, вот примерчик
Код:

[Tasks]
Name: additional; Description: "Дополнительное ПО";
Name: additional\dx; Description: "Обновить DirectX"; Flags: unchecked
Name: additional\vcr; Description: "Обновить библиотеки Visual C++"; Flags: unchecked;

...

[Run]
Filename: {src}\Redist\DirectX\dxsetup.exe; Tasks: additional\dx; StatusMsg: Установка DirectX; Parameters: /silent;
Filename: {src}\Redist\vcredist_x86.exe; Tasks: additional\vcr; StatusMsg: Обновление библиотек  Visual C++; Parameters: /q;

2) для распаковки .arc используйте ISDone, замечательная dll, которая идёт вместе с примерным скриптом и подробным и толковым описанием в .chm-файле

serhio 02-06-2011 18:22 1687226

murlakatamenka, Да,в конце установки программы.

murlakatamenka 02-06-2011 18:25 1687229

serhio, смотрите предыдущий пост, отредактировал его.
ещё в секцию [Setup] можно добавить
Код:

ShowTasksTreeLines=true
тогда появятся соединяющие линии (так имхо красивее и немного удобней)

LinkOFF 02-06-2011 18:45 1687239

murlakatamenka, а можешь мне в скрипт код сам добавить, а то я сейчас ухожу.Буду искренне благодарен!

LinkOFF 02-06-2011 21:35 1687326

murlakatamenka, Пожалуйста добавь а то у меня не получается

мне пишет Type mismatch.Что делать?

Imitri7 03-06-2011 12:17 1687680

требуется изменить цвет прогрессбара + чтобы обязательно показывались проценты
есть вот такая нараблтка
PHP код:

function SetWindowTheme(hwndHWNDpszSubAppNamepcharpszSubIdListpchar): Longintexternal 'SetWindowTheme@uxtheme.dll stdcall delayload';

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

procedure CurPageChanged(CurPageIDInteger);
begin
if CurPageID=wpSelectDir then
SendMessage
(wizardform.progressgauge.Handle, $04090, $000977FF); 


murlakatamenka 03-06-2011 17:00 1687886

vovka1021, не нашёл, если ставить цвет clNone, то получается чёрный

serhio 03-06-2011 21:23 1688034

Вложений: 1
Всем привет! Подскажите пожалуйсто как решить эту проблемку?

murlakatamenka 03-06-2011 21:31 1688035

serhio, по видимому, забыли объявить переменную
Код:

[Коде]
var
FileNameLabel: TLabel;


Dark_Delphin 03-06-2011 21:36 1688036



Как убрать серый фон?


Вот скрипт
читать дальше »
#define NeedSize "10000000000"

#define Components

;#define records
;#define precomp04
#define precomp038
;#define unrar

[Setup]
AppName=ISDone
AppVerName=ISDone
DefaultDirName={pf}\ISDone
OutputDir=.
OutputBaseFilename=Setup
SolidCompression=yes
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif
WizardImageFile=img.bmp
WizardSmallImageFile=img.bmp
#ifdef Components
[Types]
Name: "full"; Description: "Full installation"; Flags: iscustom

[Components]
Name: "text"; Description: "Язык субтитров"; Types: full; Flags: fixed
Name: "text\rus"; Description: "Русский"; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: "text\eng"; Description: "Английский"; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
Name: "voice"; Description: "Язык озвучки"; Types: full; Flags: fixed
Name: "voice\rus"; Description: "Русский"; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
Name: "voice\eng"; Description: "Английский"; Flags: exclusive; ExtraDiskSpaceRequired: 600000000
#endif

[Files]
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef precomp038
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\RTconsole.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif


[CustomMessages]
russian.ExtractedFile=Распаковывается файл:
russian.CancelButton=Отменить распаковку
russian.Error=Ошибка распаковки!

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

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

[code]
var
LabelPct,LabelCurrFileName: TLabel;
ISDoneProgressBar: TNewProgressBar;
MyCancelButton: TButton;
OveralPct,Cancel:integer;
CallBack:longword;
MyError:boolean;

type
TCallback = function (Pct: integer;CurrentFile:string): longword;
TMessage = record hWnd: HWND; msg, wParam: Word; lParam: LongWord; Time: TFileTime; pt: TPoint; end;

function PeekMessage(var lpMsg: TMessage; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMessage): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMessage): Longint; external 'DispatchMessageA@user32.dll stdcall';

function WrapMyCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:innocallback.dll stdcall';

function ISArcExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password, CfgFile, WorkPath: AnsiString):BOOL; external 'ISArcExtract@files:ISDone.dll stdcall';
function IS7ZipExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password: AnsiString):BOOL; external 'IS7zipExtract@files:ISDone.dll stdcall';

function ISPrecompExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISPrecompExtract@files:ISDone.dll stdcall';
function ISSRepExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile, IdxFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISSrepExtract@files:ISDone.dll stdcall';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):BOOL; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall';
function StartRecord(RecordFileName:AnsiString; AllComponents:longword):BOOL; external 'StartRecord@files:ISDone.dll stdcall';
function CheckPoint(CurComponent:Integer):BOOL; external 'CheckPoint@files:ISDone.dll stdcall';
function StopRecord:BOOL; external 'StopRecord@files:ISDone.dll stdcall';

function ProgressCallback(Pct: integer; CurrentFile:AnsiString): longword;
var Msg: TMessage;
begin
if Pct<=ISDoneProgressBar.Max then
ISDoneProgressBar.Position := Pct;
LabelPct.Caption := IntToStr(Pct div 10)+'.'+chr(48 + Pct mod 10)+'%';
LabelCurrFileName.Caption :=ExpandConstant('{cm:ExtractedFile} ')+CurrentFile;
while PeekMessage(Msg, 0, 0, 0, 1) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
Result := Cancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then Cancel:=1;
end;

procedure InitializeWizard();
begin
////////////
WizardForm.MainPanel.Color := clsilver;
WizardForm.WizardBitmapImage.Width := 497;
WizardForm.WizardBitmapImage2.Width := 497;
WizardForm.PageNameLabel.Width:=0;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.Font.Color:=clblack;

WizardForm.Color:=clsilver;
WizardForm.WelcomePage.Color:=clsilver;
WizardForm.InnerPage.Color:=clsilver;
WizardForm.FinishedPage.Color:=clsilver;

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;

with TLabel.Create(WizardForm) do begin
AutoSize:=WizardForm.WelcomeLabel1.AutoSize;
Left:=WizardForm.WelcomeLabel1.Left;
Top:=WizardForm.WelcomeLabel1.Top
Width:=WizardForm.WelcomeLabel1.Width
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;
Top:=WizardForm.WelcomeLabel2.Top
Width:=WizardForm.WelcomeLabel2.Width
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;


/////////////////////////////////////////////
ISDoneProgressBar := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar do begin
Left := ScaleX(0);
Top := ScaleY(40);
Width := ScaleX(417);
Max := 1000;
Height := WizardForm.ProgressGauge.Height;
Parent := WizardForm.InstallingPage;
end;
LabelPct := TLabel.Create(WizardForm);
with LabelPct do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := WizardForm.ProgressGauge.Width;
Top := WizardForm.ProgressGauge.Top + ScaleY(40);
Alignment := taCenter;
Caption := '';
end;
LabelCurrFileName := TLabel.Create(WizardForm);
with LabelCurrFileName do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := WizardForm.ProgressGauge.Width;
Left := ScaleX(0);
Top := WizardForm.ProgressGauge.Top + ScaleY(25);
Caption := '';
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and MyError then
begin
WizardForm.Caption:= ExpandConstant('{cm:Error}');
WizardForm.FinishedLabel.Font.Color:= clRed;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var ChComp, TmpValue:longword;
n:integer;
begin
if CurStep = ssInstall then begin //Если необходимо, можно переделать на ssPostInstall
WizardForm.ProgressGauge.Hide;
WizardForm.CancelButton.Visible:=false;
MyCancelButton:=TButton.Create(WizardForm);
with MyCancelButton do begin
Parent:=WizardForm;
Width:=ScaleX(135);
Caption:=ExpandConstant('{cm:CancelButton}');
Left:=ScaleX(360);
Top:=WizardForm.cancelbutton.top;
OnClick:=@CancelButtonOnClick;
end;
CallBack:=WrapMyCallback(@ProgressCallback,2);
Cancel:=0;
OveralPct:=0;

// Распаковка всех необходимых файлов в папку {tmp}. Это необходимо для того, чтобы
//выполнять установку в момент ssInstall, и секция [Run] выполнялась после установки.
#ifdef records
ExtractTemporaryFile('records.inf');
#endif

#ifdef precomp038
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('RTconsole.exe');
ExtractTemporaryFile('precomp038.exe');
ExtractTemporaryFile('zlib1.dll');
#endif


// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
ChComp:=0;
#ifdef Components
TmpValue:=1;
if IsComponentSelected('text\rus') then ChComp:=ChComp+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') then ChComp:=ChComp+TmpValue; //компонент 2
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\rus') then ChComp:=ChComp+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\eng') then ChComp:=ChComp+TmpValue; //компонент 4
#endif

StartRecord(ExpandConstant('{src}\records.inf'),ChComp);
repeat
MyError:=true;

if not ISArcExtract ( 0, OveralPct, 0, ExpandConstant('{src}\muzk.arc'), ExpandConstant('{app}'), false,CallBack, '', '', '') then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\muzk.srep'), ExpandConstant('{app}\muzk.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\muzk.pcf'), ExpandConstant('{app}\muzk.7z'), true, CallBack ) then break;
if not IS7ZipExtract ( 0, OveralPct, 0, ExpandConstant('{app}\muzk.7z'), ExpandConstant('{app}'), true, CallBack, '' ) then break;

MyError:=false;
until true;
StopRecord;

MyCancelButton.Visible:=false;
WizardForm.CancelButton.Visible:=true;
end;
if (CurStep=ssPostInstall) and MyError then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);
end;




Заранее спасибо.

Gnom_aka_Lexander 03-06-2011 22:12 1688045

ntrx, Держи

serhio 03-06-2011 23:23 1688089

Блин, не выходит распаковать архив .arc, не ISDone.dll ни Распаковка архивов FreeArc из шапки не помогает.
Может ли кто дать [code] c которым у кого-нибудь распаковка была удачна, и что при этом прописывали в [Files]?

insombia 03-06-2011 23:24 1688091

murlakatamenka
если добавить переменную то тогда выдаёт такое

http://pic.4m.net.ua/images/30146520742891938260.jpg

serhio 03-06-2011 23:47 1688108

insombia, тоже самое выскакивает! :sorry:

ILIA_1992 04-06-2011 11:03 1688233

У кого нибудь есть такой скрипт

очень нужен он.

insombia 04-06-2011 11:35 1688242

ILIA_1992 http://rghost.ru/4896048 сам ним пользуюсь

serhio http://rghost.ru/2927495

vovka1021 04-06-2011 11:51 1688250

ILIA_1992,


http://rghost.ru/9316501

ILIA_1992 04-06-2011 13:00 1688270

insombia, vovka1021,
спасибо


у меня вопрос по этому скрипту vovka1021 http://rghost.ru/9316501

как можно убрать раздел компоненты ???
и как сделать чтобы распаковывал bin файлы ???

insombia 04-06-2011 13:04 1688271

ILIA_1992 Полезное сообщение это благодарность :happy:

Как сделать такую фишку как у каталистов чтобы в инсталяторе приоритет установки выставлять? И ещё как сделать чтобы архивы распаковывались как у механиков через некоторое время прогресс бар был уже на середине установки

zero 414 04-06-2011 14:03 1688308

ILIA_1992
чтобы убрать компоненты, нужно закомментировать строку #define Components

murlakatamenka 04-06-2011 14:35 1688320

insombia, про приоритет установки
читать дальше »
Код:

[Setup]
 AppName=App
 AppVersion=1.0
 DefaultDirName={pf}\App

 [Коде]
 const
 NORMAL_PRIORITY_CLASS = $00000020;
 IDLE_PRIORITY_CLASS = $00000040;
 HIGH_PRIORITY_CLASS = $00000080;
 REALTIME_PRIORITY_CLASS = $00000100;

 function SetPriorityClass(hProcess: THandle; dwPriorityClass: DWORD): BOOL; external 'SetPriorityClass@kernel32';
 function GetCurrentProcess: THandle; external 'GetCurrentProcess@kernel32';

 procedure InitializeWizard();
 begin
 //Дальше установка приоритета
 SetPriorityClass(GetCurrentProcess, HIGH_PRIORITY_CLASS);
 end;


+
читать дальше »
Код:

[Components]
 Name: "priority"; Description: "{cm:Priority}"; Types: "full";
 Name: "priority\highpriority"; Description: "{cm:HighPriority}";
 Name: "priority\normalpriority"; Description: "{cm:NormalPriority}"; Types: "full";
 Name: "priority\lowpriority"; Description: "{cm:LowPriority}";

 [CustomMessages]
 rus.Priority=Установка приоритета мастера установки
 rus.HighPriority=Высокий приоритет (все ресурсы компьютера будут выделены мастеру установки)
 rus.NormalPriority=Обычный приоритет
 rus.LowPriority=Низкий приоритет (установка дольше, но ресурсы компьютера освобождаются для выполнения других задач)


+
Цитата:

У них приоритет идёт из самописной библиотеки. Его привязывают к компоненту, т.е;
Цитата:

if IsComponentSelected('твой компонент') then begin
SetPriorityClass(GetCurrentProcess, HIGH_PRIORITY_CLASS);
end;


insombia 04-06-2011 16:20 1688358

murlakatamenka как его привязать к скрипту от шепарда?

Krinkels 04-06-2011 20:16 1688455

Доброго времени суток друзья. Тут кто то просил помощи в получении ника в steam. Вот небольшая библиотечка для получения ника

ILIA_1992 04-06-2011 20:30 1688466

Цитата:

Цитата zero 414
ILIA_1992
чтобы убрать компоненты, нужно закомментировать строку #define Components »

можешь помочь,чем закоментировать???каким кодом???

ILIA_1992 04-06-2011 20:58 1688488

Цитата:

Цитата vovka1021
ILIA_1992, перед #define Components поставь ;
и будет тебе счастье! »

всё работает.Чтобы установщик распаковывал определённый формат ,например bin нужно добавить это Archives = '{src}\*.bin';
В скрипте нашёл это #define ArcLocation "{src}\bin\data.bin" я менял название с data.bin на bin'
он мне всё равно не распаковывает и выбивает ошибку.Что здесь не так???

murlakatamenka 04-06-2011 21:04 1688499

Цитата:

Цитата insombia
как его привязать к скрипту от шепарда? »

написал, что мне известно об этом. имхо не особо нужно, не стоит заморачиваться.

Цитата:

Цитата vovka1021
подскажите как в секции [Tasks] прописать "не создавать папку в меню пуск" ??? »

Код:

[Setup]
AllowNoIcons=true

также есть комментарий строки - // (двойной слэш)
блоковый комментарий
(* тут комментарий
и тут тоже
*)

serhio 04-06-2011 21:35 1688516

vovka1021,
Цитата:

Цитата vovka1021
Расположение архивов FreeArc архив в одной папке с .EXE »

Извеняюсь за тупость, например D:\GAMES\Маджонг Артефакт. Я правильно понял? :dont-know

Кстати ни кто не знает как вставить сюда прогрес бар? Этот код для 7z.
[code]
procedure MyAfterInstall();
var
ResultCode: Integer;
begin
begin
Exec(ExpandConstant('{app}\data.exe'), '-e -aoa -y', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
end
end;

4liver 04-06-2011 21:44 1688521

serhio, Да ты правильно понял)

serhio 04-06-2011 21:55 1688529

Вложений: 1
4liver, спасибо. Что с этим можно сделать?

4liver 04-06-2011 22:01 1688536

serhio, дай скрипт и функцию какую хочешь воткнуть я те помогу...

serhio 04-06-2011 22:18 1688550

Вложений: 1
Вот.

ILIA_1992 04-06-2011 23:57 1688580

Помогите решить проблему с распаковкой мой скрипт http://rghost.ru/9316501

Проблема в том,что установщик не хочет распаковывать файлы bin
помогите решить проблему

lmiol 05-06-2011 07:50 1688626

просидев немного над
примером Лександера

[CustomMessages]
HeaderLabelPage=Выберите тип вашего аккаунта
MyRadioCaption_1=Standart
MyRadioCaption_2=Premium / Pro
PageTextHeader=На этой странице Вы можете выбрать тип вашего аккаунта, который вы используете в игре.
MyText_1=Будут установлены файлы которые доступны для игроков без подписки.
MyText_2=Будут установлены файлы которые доступны для игроков с Premium/Pro подпиской.

[сode]
var
MyNewPage: TWizardPage;
Rect: TRect;
HIcon: LongInt;
AIconFileName: String;
MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

procedure GetInstTypePage();
begin
MyNewPage := CreateCustomPage(wpWelcome,
ExpandConstant('{cm:HeaderLabelPage}'), '');



with TNewStaticText.Create(WizardForm) do
begin
Width := WizardForm.InnerNotebook.Width;
Height := ScaleY(26);
WordWrap := True;
Caption := ExpandConstant('{cm:PageTextHeader}');
Parent := MyNewPage.Surface;
end;

MyRadioBtn_1 := TNewRadioButton.Create(WizardForm);
with MyRadioBtn_1 do
begin
Top := ScaleY(50);
Width := ScaleX(150);
Caption := ExpandConstant('{cm:MyRadioCaption_1}');
Checked := True;
Parent := MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do
begin
Left := ScaleX(16);
Top := ScaleY(68);
Width := WizardForm.InnerNotebook.Width - ScaleX(60);
Height := ScaleY(26);
WordWrap := True;
Caption := ExpandConstant('{cm:MyText_1}');
Parent := MyNewPage.Surface;
end;

MyRadioBtn_2 := TNewRadioButton.Create(WizardForm);
with MyRadioBtn_2 do
begin
Top := ScaleY(120);
Width := ScaleX(150);
Caption := ExpandConstant('{cm:MyRadioCaption_2}');
Parent := MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do
begin
Left := ScaleX(16);
Top := ScaleY(138);
Width := WizardForm.InnerNotebook.Width - ScaleX(60);
Height := ScaleY(26);
WordWrap := True;
Caption := ExpandConstant('{cm:MyText_2}');
Parent := MyNewPage.Surface;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID <= wpSelectDir) and (PageID = wpReady) and (MyRadioBtn_2.Checked) then
Result := True;
end;

понял что вопрос ставил немного некорректно,
Можно ли сделать чтобы при выбраном "MyRadioBtn_2.Checked" в списке компонентов для выбора Premium вывести еще один дополнительный компонент? так как указано на скриншоте

4liver 05-06-2011 08:01 1688630

ILIA_1992, Держи

insombia 05-06-2011 16:22 1688817

ILIA_1992 Archives = '{#ArcLocation}'; У тебя там не указано что распаковывать это в freeark.iss и в скрипте шепард укажи в
;#define FreeArc
#ifdef FreeArc
#define ArcLocation "{src}\bin\data.bin"
#endif росположение файла например "D:/NFS.arc" если я правельно тебя понял

insombia 05-06-2011 18:34 1688874

ILIA_1992
Распаковка фриарк

читать дальше »
[CustomMessages]
rus.ArcBreak=Установка прервана!
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcBroken=Возможно, архив <%1> повреждён или недостаточно места на диске назначения.
rus.ArcFail=Распаковка не завершена!
rus.ArcTitle=Распаковка FreeArc-архивов...
rus.StatusInfo=файлов: %1%2, %3%% выполнено, осталось ждать %4
rus.ArcInfo=Архив %1 из %2, объём %3 из %5, %4%% обработано
rus.ArcFinish=Распаковано архивов: %1, получено файлов: %2 [%3]
rus.taskbar=%1%%, жди %2
rus.ending=завершение
rus.hour=часов
rus.min=мин
rus.sec=сек

[_ISToolPreCompile]
#sub ShowErr
#pragma error Str(void)
#endsub
#define Break(any S = "Empty") void = S, ShowErr
#ifndef Archives
#define Archives ""
#endif
#define LastLine
#define Current AddBackslash(GetEnv("TEMP")) + GetDateTimeString('dd/mm-hh:nn', '-', '-') +'.iss'
#sub GetLastLine
#expr SaveToFile(Current)
#for {faAnyFile = FileOpen(Current); !FileEof(faAnyFile); LastLine = FileRead(faAnyFile)} NULL
#expr FileClose(faAnyFile)
#endsub
#define TrimEx(str S = "", str T = " ") \
Pos(T,S) == 1 ? S = Copy(S,2,Len(S)) : S, Copy(S,Len(S)) == T ? S = Copy(S,1,Len(S)-1) : S, Pos(T,S) == 1 || Copy(S,Len(S)) == T ? TrimEx(S,T) : S
#define SkipText(str S = "", str T = ";", int F = 1) \
Local[0] = Pos(T, S), Local[0] > 0 ? (F == 0 ? Copy(S, Local[0]) : (F < 0 ? Copy(S,,Local[0] -1) : Copy(S, Local[0] + Len(T)))) : S
#define Find2Cut(str S, str B, str E = ";") \
S = LowerCase(S), B = LowerCase(B), \
(Local[0] = Pos(B, S)) > 0 ? (Local[1] = Copy(S, Local[0]+Len(B)), (Local[0] = Pos(E, Local[1])) > 0 ? (Copy(Local[1],, Local[0]-1)) : Local[1]) : ""
#define SourceToProgress() GetLastLine, \
Local[0] = Find2Cut(LastLine,"UnArc(",")"), Local[0] == "" ? Local[0] = Find2Cut(LastLine,"UnZip(",")") : void, Local[0] != "" && Pos("dontcopy", Find2Cut(LastLine,"Flags:")) == 0 ? Local[5] = "?" : void, \
Local[1] = TrimEx(TrimEx(SkipText(Local[0],"',",-1)),"'"), Local[2] = TrimEx(TrimEx(SkipText(Local[0],"',")),"'"), Local[1] == "" ? Local[1] = TrimEx(Find2Cut(LastLine,"Source:")) : void, Local[2] == "" ? Local[2] = TrimEx(Find2Cut(LastLine,"DestDir:")) : void, \
Local[3] = TrimEx(Find2Cut(LastLine,"Components:")), Local[3] == "" ? void : (Local[3] = "<"+ Local[3], void), Local[4] = TrimEx(Find2Cut(LastLine,"Tasks:")), Local[4] == "" ? void : (Local[4] = ">"+ Local[4], void), \
Local[1] == "" ? Break('Previous line must be in [Files] section') : (Local[0] = Local[1] +"/"+ Local[2] + Local[3] + Local[4] + Local[5]), TrimEx(Archives) == "" ? Archives = Local[0] : (Archives = Archives +"|"+ Local[0]), void
#define isFalse(any S) (S = LowerCase(Str(S))) == "no" || S == "false" || S == "off" ? "true" : "false"

[Files]
Source: {src}\*.arc; DestDir: {app}; Flags: external dontcopy
{#SourceToProgress}

//************************************************ [Начало - FreeArc] ***************************************************//

function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: PAnsiChar; cbMultiByte: integer; lpWideCharStr: PAnsiChar; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: PAnsiChar; cchWideChar: integer; lpMultiByteStr: PAnsiChar; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMessage; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMessage): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMessage): Longint; external 'DispatchMessageA@user32.dll stdcall';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';
function GetKeyState(nVirtKey: Integer): ShortInt; external 'GetKeyState@user32 stdcall delayload';
function GetCurrentThreadID: LongWord; external 'GetCurrentThreadId@kernel32 stdcall delayload';
function MulDiv(Number, Numerator, Denominator: Integer): Integer; external 'MulDiv@kernel32 stdcall delayload';

function CallNextWNDPROC(idHook: LongWord; Code: Integer; wParam: Word; lParam: TCWPSTRUCT): LongWord; external 'CallNextHookEx@user32 stdcall delayload';
function SetWindowsHookEx(idHook: LongWord; callback: LongWord; hMod: LongWord; dwThreadID: HWND): LongWord; external 'SetWindowsHookExW@user32 stdcall delayload';
function UnhookWindowsHookEx(idHook: LongWord): LongWord; external 'UnhookWindowsHookEx@user32 stdcall delayload';
function WrapCWPSTRUCTProc(callback:TCWPSTRUCTProc; paramcount:integer): longword; external 'wrapcallback@files:innocallback.dll';
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';

procedure AppProcessMessage;
var
Msg: TMessage;
begin
if not PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then Exit;
TranslateMessage(Msg); DispatchMessage(Msg);
end;

Function FreeArcCmd(callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer;
Begin
CancelCode:= 0; AppProcessMessage;
try
Result:= FreeArcExtract(callback, cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10); // Pass the specified arguments to 'unarc.dll'
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63;
end;
End;

Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

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;

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String;
Begin
if not noMB then Result:= NumToStr(Int(Bytes)) +' Mb' else
if Bytes < 1024 then if Bytes = 0 then Result:= '0' else Result:= NumToStr(Int(Bytes)) +' Bt' else
if Bytes/1024 < 1024 then Result:= NumToStr(round((Bytes/1024)*10)/10) +' Kb' else
If Bytes/oneMB < 1024 then Result:= NumToStr(round(Bytes/oneMB*100)/100) +' Mb' else
If Bytes/oneMB/1000 < 1024 then Result:= NumToStr(round(Bytes/oneMB/1024*1000)/1000) +' Gb' else
Result:= NumToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Tb';
End;

Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310;
Repeat k:= Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
End;

Function CreateLabel(Parent: TWinControl; AutoSize, WordWrap, Transparent: Boolean; FontName: String; FontStyle: TFontStyles; FontColor: TColor; Left, Top, Width, Height: Integer; Prefs: TObject): TLabel;
Begin
Result:=TLabel.Create(Parent); Result.parent:= Parent;
if Prefs <> Nil then begin
Top:= TWinControl(Prefs).Top; Left:= TWinControl(Prefs).Left; Width:= TWinControl(Prefs).Width; Height:= TWinControl(Prefs).Height;
end;
if Top > 0 then result.Top:=Top; if Left > 0 then result.Left:= Left; if Width > 0 then result.Width:= Width; if Height > 0 then result.Height:= Height;
if FontName <> '' then result.Font.Name:= FontName; if FontColor > 0 then result.Font.Color:= FontColor; if FontStyle <> [] then result.Font.Style:= FontStyle;
result.AutoSize:= AutoSize; result.WordWrap:= WordWrap; result.Transparent:=Transparent; result.ShowHint:= true;
End;

Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 then
Result:= IntToStr(Ticks/60000) +m+' '+ IntToStr(Ticks/1000 - Ticks/1000/60*60) +s
else Result:= Format('%.1n', [Abs(Ticks/1000)]) +s
End;

Function ExpandENV(string: String): String; var n: UINT; Begin
if Pos('{',string) * Pos('}',string) = 0 then Result:= String else Result:= ExpandConstant(String); n:= Pos('%',result); if n = 0 then Exit;
Delete(result, n,1); Result:= Copy(Result,1, n-1) + ExpandConstant('{%'+Copy(Result, n, Pos('%',result) -n) +'}') + Copy(Result, Pos('%',result) +1, Length(result))
End;

Function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;
Function LoWord(lw: LongWord): LongWord; Begin Result:= lw shr 16; End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

function OemToAnsiStr(strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength(Result, Length(strSource));
nRet:= OemToChar(strSource, Result);
end;

function AnsiToUtf8(strSource: string): string;
var
nRet, nRet2: integer; WideCharBuf, MultiByteBuf: AnsiString;
begin
SetLength(WideCharBuf, Length(strSource) * 2);
SetLength(MultiByteBuf, Length(strSource) * 2);
nRet:= MultiByteToWideChar(CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf));
nRet2:= WideCharToMultiByte(CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);
if nRet * nRet2 = 0 then Result:= strSource else Result:= MultiByteBuf;
end;

Procedure UpdateStatus(Flags: Integer);
var
Remaining: Integer; i, t, s: string;
Begin
if Flags and $1 > 0 then FreezeTimer:= Flags and $2 = 0;
if (Flags and $4 > 0) or (Status.size <> baseMb+lastMb) then LastTimerEvent:= 0;
if FreezeTimer or (GetTickCount - LastTimerEvent <= Period) then Exit else LastTimerEvent:= GetTickCount;
Status.size := baseMb+lastMb; // извлечено на текущий момент
if totalUncompressedSize > 0 then with WizardForm.ProgressGauge do begin
Position:= round(Max * Status.size/totalUncompressedSize)
end;
with WizardForm.ProgressGauge do begin
#ifndef precomp
if position > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position)) else
#endif
Remaining:= 0;
t:= cm('ending'); i:= t;
if Remaining > 0 then begin
t:= FmtMessage(cm('taskbar'), [IntToStr(Status.perc/10), TicksToTime(Remaining, 'h', 'm', 's', false)])
i:= TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)
end;
end;
SetTaskBarTitle(t);
if Status.size > 0 then
s:= ' ['+ ByteOrTB(Status.size*oneMB, true) +']';
StatusInfo.Caption:= FmtMessage(cm('StatusInfo'), [IntToStr(Status.count +ord(Status.count < 0)), s, Format('%.1n', [Abs(Status.perc/10)]), i]);

if (Status.stage = cm('ArcTitle')) and (GetArrayLength(Arcs) > 0) then begin
ExtractFile.Caption:= FmtMessage(cm('ArcInfo'), [IntToStr(ArcInd+1), IntToStr(GetArrayLength(Arcs)), ByteOrTB(Arcs[ArcInd].Size, true), Format('%.0n', [Status.mb/(Arcs[ArcInd].Size/oneMB)*100]), ByteOrTB(Status.allsize, true)])
ProgressBar.Position:= round(ProgressBar.Max * Status.mb/trunc(Arcs[ArcInd].Size/oneMB))
end;
End;

Procedure MyTimerProc(h, msg, idevent, dwTime: Longword);
Begin
if WizardForm.CurPageID = wpInstalling then UpdateStatus(0);
End;

Procedure OnWndHook(Code: Integer; wParam: Word; lParam: TCWPSTRUCT);
Begin
if (Code = HC_ACTION) and (LoWord(lParam.msg) = WM_PAINT) then begin
if (Status.name <> WizardForm.FileNameLabel.Caption) and (WizardForm.FileNameLabel.Caption <> '') then begin
FileNameLabel.Caption:= WizardForm.FileNameLabel.Caption;
Status.name:= WizardForm.FileNameLabel.Caption;
Case Status.stage of
SetupMessage(msgStatusExtractFiles):
Status.count:= Status.count +1;
End;
end;
if (Status.stage <> WizardForm.StatusLabel.Caption) and (WizardForm.StatusLabel.Caption <> '') then begin
StatusLabel.Caption:= WizardForm.StatusLabel.Caption;
Status.stage:= WizardForm.StatusLabel.Caption;
if Status.stage = SetupMessage(msgStatusRollback) then begin
WizardForm.StatusLabel.Hide; WizardForm.FileNameLabel.Hide; StatusInfo.Hide; ExtractFile.Hide; ProgressBar.Hide;
end;
end;
with WizardForm.ProgressGauge do begin
n:= (Max - Min)/1000
if n > 0 then Status.perc:= (Position-Min)/n;
end;
UpdateStatus(0);
end;
CallNextWNDPROC(WndHookID, Code, wParam, lParam)
End;

function FreeArcCallback(what: PAnsiChar; Mb, int2: Integer; str: PAnsiChar): Integer;
begin
case string(what) of
'origsize': origsize:= Mb;
'total_files': Null;
'filename': begin
WizardForm.FileNameLabel.Caption:= OemToAnsiStr(str);
FileNameLabel.Caption:= OemToAnsiStr(str);
Status.count:= Status.count + 1;
end;
'read':
Status.mb:= Mb;
'write':
lastMb:= Mb;
end;
if WizardForm.CurPageID = wpInstalling then UpdateStatus(0);
if (GetKeyState(VK_ESCAPE) < 0) and not CancelDuringInstall then
WizardForm.Close;
AppProcessMessage;
Result:= CancelCode;
end;

Function ArcDecode(Line: string): array of TArc;
var tmp, cut: array of String; n, i: integer;
Begin
SetArrayLength(result,0); if Line <> '' then tmp:= StringToArray(Line,'|') else Exit;
for n:= 0 to GetArrayLength(tmp) - 1 do begin
if tmp[n][Length(tmp[n])] = '?' then Continue;
SetArrayLength(result, GetArrayLength(result) +1); i:= GetArrayLength(result) -1;
cut:= StringToArray(tmp[n],'>')
if GetArrayLength(cut) > 1 then result[i].task:= cut[1];
cut:= StringToArray(cut[0],'<')
if GetArrayLength(cut) > 1 then result[i].comp:= cut[1];
cut:= StringToArray(cut[0],'/')
if GetArrayLength(cut) > 1 then result[i].Dest:= cut[1] else result[i].Dest:= '{app}';
if (ExtractFileDrive(ExpandENV(cut[0])) = '') and (ExpandENV(cut[0]) = cut[0]) then
result[i].Path:= '{src}\'+ cut[0] else result[i].Path:= cut[0];
result[i].Dest:= ExpandENV(result[i].Dest); result[i].Path:= ExpandENV(result[i].Path);
end;
End;

function AddArcs(files, target: string): Integer;
var FSR: TFindRec; i: integer;
Begin
Result:= 0; if FindFirst(ExpandENV(files), FSR) then
try
repeat

if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;

i:= GetArrayLength(Arcs); SetArrayLength(Arcs, i +1);
Arcs[i].Dest:= target;
Arcs[i].Path:= ExtractFilePath(ExpandENV(files)) + FSR.Name;
Arcs[i].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Status.allsize:= Status.allsize + Arcs[i].Size;
Arcs[i].allMb:= FreeArcCmd(WrapFreeArcCallback(@FreeArcCallback,4),'l','--',AnsiToUtf8(Arcs[i].Path),'','','','','','','');
if Arcs[i].allMb >= 0 then begin
Arcs[i].allMb:= origsize; result:= result + Arcs[i].allMb;
end;
until not FindNext(FSR);
finally
FindClose(FSR);
end;
End;

function UnPackArchive(Source, Destination: string; allMb, Mode: Integer): Integer;
var
callback: longword;
Begin

WizardForm.CancelButton.Enabled:= not CancelDuringInstall;
callback:= WrapFreeArcCallback(@FreeArcCallback,4);
Result:= FreeArcCmd(callback,'x','-o+','-dp'+AnsiToUtf8(Destination),'--',AnsiToUtf8(Source),'','','','',''); // код ошибки

if Result = 0 then Exit;
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
WizardForm.StatusLabel.Caption:= msgError;
WizardForm.FileNameLabel.Caption:= ExtractFileName(Source);
GetSpaceOnDisk(ExtractFileDrive(Destination), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < allMb then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Source)]);
-127: msgError:= cm('ArcBreak');
-63: msgError:= cm('ArcFail');
end;
Log(msgError);
End;


function UnPack(Archives: string): Integer;
begin
Records:= ArcDecode(Archives); SetArrayLength(Arcs,0); Status.allsize:= 0;
for n:= 0 to GetArrayLength(Records) -1 do
if (not IsTaskSelected(Records[n].task) and (Records[n].task <>'')) and (not IsComponentSelected(Records[n].comp) and (Records[n].comp <>'')) then Continue
else totalUncompressedSize:= totalUncompressedSize + AddArcs(Records[n].Path, Records[n].Dest);

WizardForm.StatusLabel.Caption:= cm('ArcTitle');
ExtractFile.Show; ProgressBar.Show;
baseMb:= 0; lastMb:= 0; Status.mb:= 0;
Status.count:= 0;
UpdateStatus(7);
for ArcInd:= 0 to GetArrayLength(Arcs) -1 do begin
Result:= UnPackArchive(Arcs[ArcInd].Path, Arcs[ArcInd].Dest, Arcs[ArcInd].allMb, 0);
if Result <> 0 then Break;
baseMb:= baseMb + lastMb; lastMb:= 0; Status.mb:= 0;

if (Pos(AnsiLowercase(ExpandConstant('{app}')), AnsiLowercase(Arcs[ArcInd].Path)) > 0) or (Pos(AnsiLowercase(ExpandConstant('{tmp}')), AnsiLowercase(Arcs[ArcInd].Path)) > 0) then
DeleteFile(Arcs[ArcInd].Path);
end;
if Result = 0 then WizardForm.StatusLabel.Caption:= FmtMessage(cm('ArcFinish'), [IntToStr(GetArrayLength(Arcs)), IntToStr(Status.count), ByteOrTB(Status.size*oneMB, true)]);
StatusInfo.Hide; ExtractFile.Hide; ProgressBar.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
StartInstall:= GetTickCount
WndHookID:= SetWindowsHookEx(WH_CALLWNDPROC, WrapCWPSTRUCTProc(@OnWndHook, 3), 0, GetCurrentThreadID);
TimerID:= SetTimer(0, 0, 500 , WrapTimerProc(@MyTimerProc, 4));
if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1;
end;
if CurStep = ssPostInstall then
begin
StartInstall:= GetTickCount
UnPackError:= UnPack('{#Archives}')
if UnPackError <> 0 then begin
if not {#isFalse(SetupSetting("Uninstallable"))} then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);
WizardForm.caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
SetTaskBarTitle(SetupMessage(msgErrorTitle))
end else
SetTaskBarTitle(SetupMessage(msgSetupAppTitle));
end;
end;

Procedure ShowErrorMessage(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin
FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;

procedure WizardClose(Sender: TObject; var Action: TCloseAction);
Begin
Action:= caNone;
if Status.stage = cm('ArcTitle') then begin
UpdateStatus(1);
if MsgBox(SetupMessage(msgExitSetupMessage), mbInformation, MB_YESNO) = IDYES then
CancelCode:= -127;
UpdateStatus(7);
end else
MainForm.Close;
End;

Procedure CreateArchivesInfoElements();
Begin
StatusLabel:= CreateLabel(WizardForm.InstallingPage,false,false,true,'',[],0,0,0,0,0, WizardForm.StatusLabel);
FileNameLabel:= CreateLabel(WizardForm.InstallingPage,false,false,true,'',[],0,0,0,0,0, WizardForm.FileNameLabel);
WizardForm.StatusLabel.Top:= WizardForm.ProgressGauge.Top; WizardForm.FileNameLabel.Top:= WizardForm.ProgressGauge.Top;
with WizardForm.ProgressGauge do begin
StatusInfo:= CreateLabel(WizardForm.InstallingPage, false, true, true, '', [], 0, 0, Top + ScaleY(32), Width, 0, Nil);
ProgressBar := TNewProgressBar.Create(WizardForm);
ProgressBar.SetBounds(Left, StatusInfo.Top + StatusInfo.Height + ScaleY(16), Width, Height);
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.max := 65536;
ProgressBar.Hide;
ExtractFile:= CreateLabel(WizardForm.InstallingPage, false, true, true, '', [], 0, 0, ProgressBar.Top + ScaleY(32), Width, 0, Nil);
end;
WizardForm.OnClose:= @WizardClose
End;

Procedure DeInitializeSetup;
Begin
KillTimer(0, TimerID)
UnhookWindowsHookEx(WndHookID)
End;

//************************************************ [Конец - FreeArc] ***************************************************//

ILIA_1992 05-06-2011 18:52 1688879

Цитата:

Цитата insombia
ILIA_1992 Archives = '{#ArcLocation}'; У тебя там не указано что распаковывать это в freeark.iss и в скрипте шепард укажи в
;#define FreeArc
#ifdef FreeArc
#define ArcLocation "{src}\bin\data.bin"
#endif росположение файла например "D:/NFS.arc" если я правельно тебя понял »


мне уже исправили это.

Можешь помочь решить проблему с реестром,тоесть как и где можно найти нужный реестр

И как убрать запрос о вставке второго диска

вот скриншот http://saveimg.ru/pictures/05-06-11/...c90086152e.jpg

я отметил красным там третяя полоска , как её убрать???

insombia 05-06-2011 20:26 1688914

ILIA_1992 реестр найти легко напримет
на win7

Пуск-поиск-regedit-HKEY Local Machine-Software-Ищиш там создателя игры например Ubisoft игра splinter cell
нажми файл экспорт выбери имя твоего файла.Затем зайди в ISTool реестр и перенеси тот сохраненный файл реестра и всё готово в самом низу твоего скрипта будет [Registry]
Насчет стрелки если я правельно понял то стрелка для распаковки архивов а насчет запроса диска то вот

DiskSpanning=true
DiskSliceSize=2000000000
SlicesPerDisk=2

Gnom_aka_Lexander 05-06-2011 20:26 1688915

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

insombia 05-06-2011 20:48 1688922

Лександер Подскажи хоть ты мне как сделать чтобы после установки устанавлевался директ который обновляеться инетом?у меня ошибку во время его уст кидает

ILIA_1992 05-06-2011 20:57 1688928

Цитата:

Цитата insombia
ILIA_1992 реестр найти легко напримет
на win7
Пуск-поиск-regedit-HKEY Local Machine-Software-Ищиш там создателя игры например Ubisoft игра splinter cell
нажми файл экспорт выбери имя твоего файла.Затем зайди в ISTool реестр и перенеси тот сохраненный файл реестра и всё готово в самом низу твоего скрипта будет [Registry]
Насчет стрелки если я правельно понял то стрелка для распаковки архивов а насчет запроса диска то вот
DiskSpanning=true
DiskSliceSize=2000000000
SlicesPerDisk=2 »

Я так и зашёл в реестр, нашёл папку альфа протокол но там был только один реест по умолчанию и всё ! этот фальик нужно добавить и всё :?

insombia 05-06-2011 21:10 1688930

ILIA_1992 Да

lmiol 05-06-2011 22:34 1688966

Цитата:

lmiol, Могу предложить вариант с задачами, а не компонентами, тогда твой вопрос решается легким движением руки - создаеш два компонента - стандарт и премиум, а то, что было в компонентах - делаеш задачами, наборы задач вешаеш на компоненты. Просто задачи создаются на странице задач, не раньше, а вот компоненты, видимо, сразу, поэтому стандартными средствами на них не повлиять никак.
Лександер, cпасибо, а можно наглядный пример?

Gnom_aka_Lexander 05-06-2011 23:19 1688987

lmiol, Както так:

читать дальше »
[Setup]
AppName=Quake Live
AppVerName="Quake Live"
AppPublisher=Mio Dark Project
CreateAppDir=no
AlwaysShowComponentsList=false

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

[Types]
Name: "St"; Description: "Standart";
Name: "Pr"; Description: "Premium / Pro";

[Components]
Name: Standart; Description: Standart; Types: St; Flags: exclusive;
Name: Premium; Description: "Premium / Pro"; Types: Pr; Flags: exclusive;

[Tasks]
Name: browser2; Description: "Портативный Firefox под Quake Live Premium"; GroupDescription: "Quake Live Premium"; Components: Premium;
Name: browser; Description: "Портативный Firefox под Quake Live"; GroupDescription: "Quake Live"; Components: Standart;
Name: "plug"; Description: "Плагин Quake Live";
Name: "manual"; Description: "Руководство и Награды";
Name: "anti"; Description: "Античит PunkBuster";

Name: "desktopicon"; Description: "Создать ярлык на Рабочем Столе"; GroupDescription: "{cm:AdditionalIcons}"

[code]
procedure InitializeWizard();
begin
with WizardForm.SelectComponentsLabel do
begin
Caption := 'Выберите тип установки';
end;
end;

pirat486 06-06-2011 07:59 1689101

Как сделать чтоб было как на скринах? Я новичек поэтому как то так:



R.i.m.s.k.y. 06-06-2011 08:24 1689108

в simplified Chinese Windows 7 x64 не выводятся надписи лицензии



можно ли эти надписи самому назначать?

Gnom_aka_Lexander 06-06-2011 08:49 1689121

Цитата:

Цитата R.i.m.s.k.y.
simplified Chinese Windows 7 x64 »

- это чего такое? просто не понятно :)
И в каком месте не выводятся надписи?
Теперь понятно - у меня просто скрин не загружается почемуто.
По умолчанию - Tahoma используется, возможно его просто нет в китайской ОС

R.i.m.s.k.y. 06-06-2011 09:00 1689125

Цитата:

Цитата Лександер
- это чего такое? просто не понятно »

венда китайская, дистр скачал кетаес
не выводящиеся надписи на скрине красным обведены
должны быть стандартные строчки "согласен с лицензией / не согласен" и значок копирайта ©
значок копирайта © не проблема сменить на (С), а вот что делать с пустыми строчками?

вопрос на засыпку - какой шрифт использует инно по-умолчанию?

R.i.m.s.k.y. 06-06-2011 09:52 1689152

Neutron, я б тебе ответил но не знаю как опрашивать девайсы

R.i.m.s.k.y. 06-06-2011 12:03 1689219

c кетайсами еще вот такая трабла



пароль пользуется для защиты дистра от потрошения инноапом и вводится еще в InitializeWizard как WizardForm.PasswordEdit.Text = '...'

AN9ROS 06-06-2011 13:27 1689266

Извините! Как сделать оформление к примеру как у Механиков??

Gnom_aka_Lexander 06-06-2011 14:15 1689294

R.i.m.s.k.y., Забей на китайскую винду, и жизнь наладится:) либо нужно кропотливо искать, что именно мешает жить.
AN9ROS, что именно тебя интересует?

R.i.m.s.k.y. 06-06-2011 14:28 1689299

Цитата:

Цитата Лександер
Забей на китайскую винду, и жизнь наладится »

хорошее решение, универсальное, но не годится

Dark_Delphin 06-06-2011 14:39 1689304

Как сделать что-бы сначала роспаковувались просто файлы, а потом *.arc архив?

Вот скрипт.
читать дальше »
#define GameName "Crysis Warhead"
#define NeedSize "10000000000"

#define precomp038
#define ExeName "Crysis2Launcher.exe"
#define ExeDir "bin32\"


[Setup]
AppName={#GameName}
AppVerName={#GameName}
DefaultDirName={pf}\{#GameName}
DefaultGroupName={#GameName}
OutputDir=.
OutputBaseFilename=Setup
SolidCompression=true
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif
WizardImageFile=img.bmp
WizardSmallImageFile=shapka.bmp
#ifdef Components
SetupIconFile=iconset.ico
Compression=lzma2/ultra64
InternalCompressLevel=ultra64

[Types]
Name: "full"; Description: "Full installation"; Flags: iscustom


#endif

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
; лого (нижнє)
Source: "logo2.bmp"; DestDir: "{app}"; Attribs: hidden system;
; Іконка папки при виборі папки установки
Source: "DirBitmap.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef precomp038
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\RTconsole.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif










[Run]
Filename: "{src}\Redist\dxwebsetup.exe"; StatusMsg: "Обновление DirectX..."; Flags: waituntilterminated
Filename: "{src}\Redist\vcredist_x86_2005_sp1.exe"; Parameters: "/q"; StatusMsg: "Установка Microsoft Visual C++ 2005 SP1 Redist..."; Flags: runhidden waituntilterminated ;







[Icons]
Name: {group}\{#GameName}; Filename: {app}\{#ExeDir}{#ExeName}; WorkingDir: {app}\{#ExeDir}; Comment: {#GameName};
Name: {group}\Удалить игру; Filename: {app}\Uninstall\unins000; WorkingDir: {app}\Uninstall\; Comment: Удалить игру;
; Іконка на роб. стіл
Name: "{commondesktop}\{#GameName}"; Filename: "{app}\{#ExeDir}{#ExeName}"; WorkingDir: "{app}\{#ExeDir}"; Comment: "{#GameName}"; Tasks: desktopicon;


[CustomMessages]
russian.ExtractedFile=Распаковывается файл:
russian.CancelButton=Отменить распаковку
russian.Error=Ошибка распаковки!

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

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

[code]
var
LabelPct,LabelCurrFileName: TLabel;
ISDoneProgressBar: TNewProgressBar;
MyCancelButton: TButton;
OveralPct,Cancel:integer;
CallBack:longword;
MyError:boolean;
FinishedLabel: TLabel;
Text: TNewStaticText;
LogoImage: TBitmapImage;


type
TCallback = function (Pct: integer;CurrentFile:string): longword;
TMessage = record hWnd: HWND; msg, wParam: Word; lParam: LongWord; Time: TFileTime; pt: TPoint; end;

function PeekMessage(var lpMsg: TMessage; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMessage): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMessage): Longint; external 'DispatchMessageA@user32.dll stdcall';

function WrapMyCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:innocallback.dll stdcall';

function ISArcExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password, CfgFile, WorkPath: AnsiString):BOOL; external 'ISArcExtract@files:ISDone.dll stdcall';
function IS7ZipExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password: AnsiString):BOOL; external 'IS7zipExtract@files:ISDone.dll stdcall';

function ISPrecompExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISPrecompExtract@files:ISDone.dll stdcall';
function ISSRepExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile, IdxFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISSrepExtract@files:ISDone.dll stdcall';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):BOOL; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall';
function StartRecord(RecordFileName:AnsiString; AllComponents:longword):BOOL; external 'StartRecord@files:ISDone.dll stdcall';
function CheckPoint(CurComponent:Integer):BOOL; external 'CheckPoint@files:ISDone.dll stdcall';
function StopRecord:BOOL; external 'StopRecord@files:ISDone.dll stdcall';

function ProgressCallback(Pct: integer; CurrentFile:AnsiString): longword;
var Msg: TMessage;
begin
if Pct<=ISDoneProgressBar.Max then
ISDoneProgressBar.Position := Pct;
LabelPct.Caption := IntToStr(Pct div 10)+'.'+chr(48 + Pct mod 10)+'%';
LabelCurrFileName.Caption :=ExpandConstant('{cm:ExtractedFile} ')+CurrentFile;
while PeekMessage(Msg, 0, 0, 0, 1) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
Result := Cancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then Cancel:=1;
end;

procedure InitializeWizard();
begin
// розпаковка темп. іконки папки
ExtractTemporaryFile('DirBitmap.bmp');
// розпаковка темп. лого (внизу)
ExtractTemporaryFile('logo2.bmp');
/////////////////// КОД для лого (внизу)
LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
// розміри
SetBounds(ScaleX(10), ScaleY(320), ScaleX(175), ScaleY(35));
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo2.bmp'));
Parent := WizardForm;
end;
//////////////// КІНЕЦЬ для лого (внизу)
//////////////// лого вверху
with WizardForm.WizardSmallBitmapImage do
begin
// розміри
SetBounds(ScaleX(0), ScaleY(2), ScaleX(497), ScaleY(56));
end;
///////////// іконка папки
with WizardForm.SelectDirBitmapImage do
begin
// розміри
SetBounds(ScaleX(0), ScaleY(0), ScaleX(42), ScaleY(42));
end;
///////////////////////////////////////////////////////
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap.bmp'));

///////////
WizardForm.MainPanel.Color := clGray;
WizardForm.WizardBitmapImage.Width := 497;
WizardForm.WizardBitmapImage2.Width := 497;
WizardForm.PageNameLabel.Width:=0;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.Font.Color:=clblack;
// background colour
WizardForm.Color:=clGray; // Цвет панелі та шо внизу
WizardForm.WelcomePage.Color:=clGray;
WizardForm.InnerPage.Color:=clGray; // цвет панели посеред инстала
WizardForm.SelectDirPage.Color:=clGray;
WizardForm.FinishedPage.Color:=clGray;
/////////////// перша сторінка
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;


with TLabel.Create(WizardForm) do begin
AutoSize:=WizardForm.WelcomeLabel1.AutoSize;
Left:=WizardForm.WelcomeLabel1.Left;
Top:=WizardForm.WelcomeLabel1.Top
Width:=WizardForm.WelcomeLabel1.Width
Height:=WizardForm.WelcomeLabel1.Height
WordWrap:=WizardForm.WelcomeLabel1.WordWrap;
Font.Name:=WizardForm.WelcomeLabel1.Font.Name;
Font.Size:=WizardForm.WelcomeLabel1.Font.Size;
Font.Color:=clblack; // text colour верхнє
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;
Top:=WizardForm.WelcomeLabel2.Top
Width:=WizardForm.WelcomeLabel2.Width
Height:=WizardForm.WelcomeLabel2.Height
WordWrap:=WizardForm.WelcomeLabel2.WordWrap;
Font.Name:=WizardForm.WelcomeLabel2.Font.Name;
Font.Size:=WizardForm.WelcomeLabel2.Font.Size;
Font.Color:=clblack; // text colour нижнє
Font.Style:=WizardForm.WelcomeLabel2.Font.Style;
Caption:=WizardForm.WelcomeLabel2.Caption;
Parent:=WizardForm.WelcomeLabel2.Parent
Transparent:=True
end;
/////////////////////////
///////// фініш
WizardForm.FinishedHeadingLabel.Hide;


with TLabel.Create(WizardForm) do begin
AutoSize:=WizardForm.FinishedHeadingLabel.AutoSize;
Left:=WizardForm.FinishedHeadingLabel.Left;
Top:=WizardForm.FinishedHeadingLabel.Top
Width:=WizardForm.FinishedHeadingLabel.Width
Height:=WizardForm.FinishedHeadingLabel.Height
WordWrap:=WizardForm.FinishedHeadingLabel.WordWrap;
Font.Name:=WizardForm.FinishedHeadingLabel.Font.Name;
Font.Size:=WizardForm.FinishedHeadingLabel.Font.Size;
Font.Color:=clblack; // text colour в конце инсталлятора
Font.Style:=WizardForm.FinishedHeadingLabel.Font.Style;
Caption:=WizardForm.FinishedHeadingLabel.Caption;
Parent:=WizardForm.FinishedHeadingLabel.Parent
Transparent:=True
end;

FinishedLabel:= TLabel.Create(WizardForm)
WizardForm.FinishedLabel.Hide;
with TLabel.Create(WizardForm) do begin
Font.Name:=WizardForm.FinishedLabel.Font.Name;
Font.Size:=WizardForm.FinishedLabel.Font.Size;
Font.Color:=clgreen; // text colour
Font.Style:=WizardForm.FinishedLabel.Font.Style;
Caption:=WizardForm.FinishedLabel.Caption;
Parent:=WizardForm.FinishedLabel.Parent
Transparent:=True
end;





/////////////////////////////////////////////
ISDoneProgressBar := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar do begin
Left := ScaleX(0);
Top := ScaleY(40);
Width := ScaleX(417);
Max := 1000;
Height := WizardForm.ProgressGauge.Height;
Parent := WizardForm.InstallingPage;
end;
LabelPct := TLabel.Create(WizardForm);
with LabelPct do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := WizardForm.ProgressGauge.Width;
Top := WizardForm.ProgressGauge.Top + ScaleY(40);
Alignment := taCenter;
Caption := '';
end;
LabelCurrFileName := TLabel.Create(WizardForm);
with LabelCurrFileName do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := WizardForm.ProgressGauge.Width;
Left := ScaleX(0);
Top := WizardForm.ProgressGauge.Top + ScaleY(25);
Caption := '';
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and MyError then
begin
/////////
with TLabel.Create(WizardForm) do begin
WizardForm.FinishedLabel.Hide;
AutoSize:=WizardForm.FinishedHeadingLabel.AutoSize;
Left:=WizardForm.FinishedLabel.Left;
Top:=WizardForm.FinishedLabel.Top
Width:=WizardForm.FinishedLabel.Width
Height:=WizardForm.FinishedLabel.Height
WordWrap:=WizardForm.FinishedLabel.WordWrap;
Font.Name:=WizardForm.FinishedLabel.Font.Name;
Font.Size:=WizardForm.FinishedLabel.Font.Size;

//
WizardForm.Caption:= ExpandConstant('{cm:Error}');
WizardForm.FinishedLabel.Font.Color:= clyellow;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted);

Font.Color:=clwhite;
//
Font.Style:=WizardForm.FinishedLabel.Font.Style;
Caption:=WizardForm.FinishedLabel.Caption;
Parent:=WizardForm.FinishedLabel.Parent
Transparent:=True
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var ChComp, TmpValue:longword;
n:integer;
begin
if CurStep = ssInstall then begin //Если необходимо, можно переделать на ssPostInstall
WizardForm.ProgressGauge.Hide;
WizardForm.CancelButton.Visible:=false;
MyCancelButton:=TButton.Create(WizardForm);
with MyCancelButton do begin
Parent:=WizardForm;
Width:=ScaleX(135);
Caption:=ExpandConstant('{cm:CancelButton}');
Left:=ScaleX(360);
Top:=WizardForm.cancelbutton.top;
OnClick:=@CancelButtonOnClick;
end;
CallBack:=WrapMyCallback(@ProgressCallback,2);
Cancel:=0;
OveralPct:=0;
















// Распаковка всех необходимых файлов в папку {tmp}. Это необходимо для того, чтобы
//выполнять установку в момент ssInstall, и секция [Run] выполнялась после установки.
#ifdef records
ExtractTemporaryFile('records.inf');
#endif

#ifdef precomp038
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('RTconsole.exe');
ExtractTemporaryFile('precomp038.exe');
ExtractTemporaryFile('zlib1.dll');
#endif


// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
ChComp:=0;


StartRecord(ExpandConstant('{src}\records.inf'),ChComp);
repeat
MyError:=true;

if not ISArcExtract ( 0, OveralPct, 0, ExpandConstant('{src}\muzk.arc'), ExpandConstant('{app}'), false,CallBack, '', '', '') then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\muzk.srep'), ExpandConstant('{app}\muzk.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\muzk.pcf'), ExpandConstant('{app}\muzk.7z'), true, CallBack ) then break;
if not IS7ZipExtract ( 0, OveralPct, 0, ExpandConstant('{app}\muzk.7z'), ExpandConstant('{app}'), true, CallBack, '' ) then break;

MyError:=false;
until true;
StopRecord;

MyCancelButton.Visible:=false;
WizardForm.CancelButton.Visible:=true;
end;
if (CurStep=ssPostInstall) and MyError then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);
end;


Заранее спасибо.

Habetdin 06-06-2011 14:51 1689309

Цитата:

Цитата R.i.m.s.k.y.
пароль пользуется для защиты дистра от потрошения инноапом »

Можно скомпиллить Inno от Restools, его и без пароля не может анпакер распотрошить... Ну, если анпакер не от Restools :biggrin:

R.i.m.s.k.y. 06-06-2011 15:53 1689357

это решает проблему с паролем, а первую - http://forum.oszone.net/post-1689108.html#post1689108 как решить?

Gnom_aka_Lexander 06-06-2011 16:46 1689407

R.i.m.s.k.y., Проверь, есть-ли в системе шрифт Tahoma, если нет - установи, а так вот, управление подписями к этим радиокнопкам:
читать дальше »
[code]
procedure InitializeWizard();
begin
with WizardForm.LicenseNotAcceptedRadio do
begin
Caption := 'Я &не принимаю условия соглашения';
Font.Color := clBlack;
Font.Name := 'Times New Roman';
ParentFont := False;
end;

with WizardForm.LicenseAcceptedRadio do
begin
Caption := 'Я &принимаю условия соглашения';
Font.Color := clBlack;
Font.Name := 'Times New Roman';
ParentFont := False;
end;
end;

El Sanchez 06-06-2011 16:48 1689409

Цитата:

Цитата R.i.m.s.k.y.
а первую - http://forum.oszone.net/post-1689108.html#post1689108 как решить? »

R.i.m.s.k.y.,
Код:

//вариант №1
[Messages]
LicenseAccepted=Я не прочитал, не читаю никогда, так что дальше
LicenseNotAccepted=А оно мне надо?

//вариант №2
[code]
procedure InitializeWizard();
begin
  WizardForm.LicenseAcceptedRadio.Caption := 'Я не прочитал, не читаю никогда, так что дальше';
  WizardForm.LicenseNotAcceptedRadio.Caption := 'А оно мне надо?';
end;


R.i.m.s.k.y. 06-06-2011 17:04 1689423

Цитата:

Цитата El Sanchez
[Messages] LicenseAccepted=Я не прочитал, не читаю никогда, так что дальше LicenseNotAccepted=А оно мне надо? »

как это привязать к разным языковым версиям инсталлера?

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

прокатит?
[Messages]
english.LicenseAccepted=fuck everybody :)
russian.LicenseAccepted=Я не прочитал, не читаю никогда, так что дальше

El Sanchez 06-06-2011 17:19 1689430

Цитата:

Цитата R.i.m.s.k.y.
как это привязать к разным языковым версиям инсталлера? »

R.i.m.s.k.y., в папке Languages нет english.isl, он в корне как default.isl, т.е. должно быть так:
Код:

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

[Messages]
russian.LicenseAccepted=да
russian.LicenseNotAccepted=нет
english.LicenseAccepted=yes
english.LicenseNotAccepted=no


R.i.m.s.k.y. 06-06-2011 17:20 1689432

меня интересовало сработает ли
Цитата:

Цитата El Sanchez
[Messages]
russian.LicenseAccepted=да
russian.LicenseNotAccepted=нет
english.LicenseAccepted=yes
english.LicenseNotAccepted=no »

спасибо!

insombia 06-06-2011 17:21 1689434

Как сделать в закосе под механиков сделать такую вещь чтобы картинка на втором скриншоте была такая же как и на первом
http://pic.4m.net.ua/images/28562272744611263253.jpg

http://pic.4m.net.ua/images/49300345166464583532.jpg

Gnom_aka_Lexander 06-06-2011 17:36 1689447

El Sanchez, в папке Languages есть english.isl :)
R.i.m.s.k.y., а почему не должно cработать? ;)

El Sanchez 06-06-2011 18:27 1689479


Цитата:

Цитата Лександер
El Sanchez, в папке Languages есть english.isl »

Лександер, угу, будет, если его туда специально положить :) Ни в одном из 2-х оригинальных инсталляторах Inno Setup не прописана установка English.isl в папку Languages, только Default.isl (он же аглицкий) в корень. Чего ему делать в папке со сторонними локализациями? У меня этого файла нет, хотя может я что-то упускаю из виду.

ILIA_1992 06-06-2011 19:07 1689506

Цитата:

Цитата ILIA_1992
#ifdef FreeArc
#define ArcLocation "{src}\bin\data.bin"
#endif росположение файла например "D:/NFS.arc" если я правельно тебя понял »
мне уже исправили это.
Можешь помочь решить проблему с реестром,тоесть как и где можно найти нужный реестр
И как убрать запрос о вставке второго диска
вот скриншот http://saveimg.ru/pictures/05-06-11/...c90086152e.jpg
я отметил красным там третяя полоска , как её убрать??? »

Можещь скачать скрипт и исправить http://rghost.ru/9424551.

Я вставил код как ты сказал но ничего не вышло.

R.i.m.s.k.y. 06-06-2011 19:19 1689512

в шапке есть Ultimate Test Black.iss
он компилится на анси-инно, но не компилится на юникод-инно
в частности он почему-то ругается на отсутствие ";" в конце строчки, когда анси-инно по барабану

и не переваривает строчку

var DeviceName : string
RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName)

когда на анси-инно все ровно

вопрос - как сделать хорошо чтобы получить юникод-версию Ultimate Test Black?
инно - Inno Ultra от Лександер

vovka1021 06-06-2011 19:21 1689513

как убрать со странице готовности "папка в меню пуск", вернее чтобы она реагировала на "не создавать папку в меню пуск"
когда выбираешь "не создавать папку в меню пуск" срабатывает нормально, но на готовности так и висит "папка в меню пуск"

или подскажите пример.

спасибо!

LinkOFF 06-06-2011 20:16 1689540

Подскажите пожалуйста как убрать вот это

Там должна быть надпись Время установки:Тестовый прогон.
Мне не надо возращать надпись мне надо убрать полосу

Gnom_aka_Lexander 06-06-2011 20:34 1689545

LinkOFF, Найди LabelTime3 и удали его, а так-же все, что с ним связано.

Prodif 06-06-2011 20:43 1689547

Подскажите нужно помимо общей директории добавить тройку в: windows\system32\
такая строчка в скрипте будет работать ? Source: C:\MyFolder\777.dll; DestDir: {sys} или нужно иначе указать директорию
вероятно для каждой из dll поотдельности

Gnom_aka_Lexander 06-06-2011 21:01 1689554

Цитата:

Цитата Prodif
такая строчка в скрипте будет работать ? Source: C:\MyFolder\777.dll; DestDir: {sys} »

Именно так это и делается.

ILIA_1992 06-06-2011 21:57 1689597

Как это исправить???


insombia 06-06-2011 22:56 1689630

Как поменять "Вас приветствует мастер установки Crysis 2 на Вас приветствует релиз группа" ....?

Dark_Delphin 07-06-2011 00:05 1689656

insombia, в папке Инно сетуп/languages Russian.isl открой блокнотом и там смотри.

Что надо поправить в скрипте что-бы сначала распаковывались файлы, а потом сам *.arc арихив?

читать дальше »
#define GameName "Crysis Warhead"
#define NeedSize "10000000000"

#define precomp038
#define ExeName "Crysis2Launcher.exe"
#define ExeDir "bin32\"


[Setup]
AppName={#GameName}
AppVerName={#GameName}
DefaultDirName={pf}\{#GameName}
DefaultGroupName={#GameName}
OutputDir=.
OutputBaseFilename=Setup
SolidCompression=true
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif
WizardImageFile=img.bmp
WizardSmallImageFile=shapka.bmp
#ifdef Components
SetupIconFile=iconset.ico
Compression=lzma2/ultra64
InternalCompressLevel=ultra64

[Types]
Name: "full"; Description: "Full installation"; Flags: iscustom


#endif

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
; лого (нижнє)
Source: "logo2.bmp"; DestDir: "{app}"; Attribs: hidden system;
; Іконка папки при виборі папки установки
Source: "DirBitmap.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef precomp038
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\RTconsole.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif










[Run]
Filename: "{src}\Redist\dxwebsetup.exe"; StatusMsg: "Обновление DirectX..."; Flags: waituntilterminated
Filename: "{src}\Redist\vcredist_x86_2005_sp1.exe"; Parameters: "/q"; StatusMsg: "Установка Microsoft Visual C++ 2005 SP1 Redist..."; Flags: runhidden waituntilterminated ;







[Icons]
Name: {group}\{#GameName}; Filename: {app}\{#ExeDir}{#ExeName}; WorkingDir: {app}\{#ExeDir}; Comment: {#GameName};
Name: {group}\Удалить игру; Filename: {app}\Uninstall\unins000; WorkingDir: {app}\Uninstall\; Comment: Удалить игру;
; Іконка на роб. стіл
Name: "{commondesktop}\{#GameName}"; Filename: "{app}\{#ExeDir}{#ExeName}"; WorkingDir: "{app}\{#ExeDir}"; Comment: "{#GameName}"; Tasks: desktopicon;


[CustomMessages]
russian.ExtractedFile=Распаковывается файл:
russian.CancelButton=Отменить распаковку
russian.Error=Ошибка распаковки!

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

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

[code]
var
LabelPct,LabelCurrFileName: TLabel;
ISDoneProgressBar: TNewProgressBar;
MyCancelButton: TButton;
OveralPct,Cancel:integer;
CallBack:longword;
MyError:boolean;
FinishedLabel: TLabel;
Text: TNewStaticText;
LogoImage: TBitmapImage;


type
TCallback = function (Pct: integer;CurrentFile:string): longword;
TMessage = record hWnd: HWND; msg, wParam: Word; lParam: LongWord; Time: TFileTime; pt: TPoint; end;

function PeekMessage(var lpMsg: TMessage; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMessage): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMessage): Longint; external 'DispatchMessageA@user32.dll stdcall';

function WrapMyCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:innocallback.dll stdcall';

function ISArcExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password, CfgFile, WorkPath: AnsiString):BOOL; external 'ISArcExtract@files:ISDone.dll stdcall';
function IS7ZipExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password: AnsiString):BOOL; external 'IS7zipExtract@files:ISDone.dll stdcall';

function ISPrecompExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISPrecompExtract@files:ISDone.dll stdcall';
function ISSRepExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile, IdxFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISSrepExtract@files:ISDone.dll stdcall';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):BOOL; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall';
function StartRecord(RecordFileName:AnsiString; AllComponents:longword):BOOL; external 'StartRecord@files:ISDone.dll stdcall';
function CheckPoint(CurComponent:Integer):BOOL; external 'CheckPoint@files:ISDone.dll stdcall';
function StopRecord:BOOL; external 'StopRecord@files:ISDone.dll stdcall';

function ProgressCallback(Pct: integer; CurrentFile:AnsiString): longword;
var Msg: TMessage;
begin
if Pct<=ISDoneProgressBar.Max then
ISDoneProgressBar.Position := Pct;
LabelPct.Caption := IntToStr(Pct div 10)+'.'+chr(48 + Pct mod 10)+'%';
LabelCurrFileName.Caption :=ExpandConstant('{cm:ExtractedFile} ')+CurrentFile;
while PeekMessage(Msg, 0, 0, 0, 1) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
Result := Cancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then Cancel:=1;
end;

procedure InitializeWizard();
begin
// розпаковка темп. іконки папки
ExtractTemporaryFile('DirBitmap.bmp');
// розпаковка темп. лого (внизу)
ExtractTemporaryFile('logo2.bmp');
/////////////////// КОД для лого (внизу)
LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
// розміри
SetBounds(ScaleX(10), ScaleY(320), ScaleX(175), ScaleY(35));
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo2.bmp'));
Parent := WizardForm;
end;
//////////////// КІНЕЦЬ для лого (внизу)
//////////////// лого вверху
with WizardForm.WizardSmallBitmapImage do
begin
// розміри
SetBounds(ScaleX(0), ScaleY(2), ScaleX(497), ScaleY(56));
end;
///////////// іконка папки
with WizardForm.SelectDirBitmapImage do
begin
// розміри
SetBounds(ScaleX(0), ScaleY(0), ScaleX(42), ScaleY(42));
end;
///////////////////////////////////////////////////////
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap.bmp'));

///////////
WizardForm.MainPanel.Color := clGray;
WizardForm.WizardBitmapImage.Width := 497;
WizardForm.WizardBitmapImage2.Width := 497;
WizardForm.PageNameLabel.Width:=0;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.Font.Color:=clblack;
// background colour
WizardForm.Color:=clGray; // Цвет панелі та шо внизу
WizardForm.WelcomePage.Color:=clGray;
WizardForm.InnerPage.Color:=clGray; // цвет панели посеред инстала
WizardForm.SelectDirPage.Color:=clGray;
WizardForm.FinishedPage.Color:=clGray;
/////////////// перша сторінка
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;


with TLabel.Create(WizardForm) do begin
AutoSize:=WizardForm.WelcomeLabel1.AutoSize;
Left:=WizardForm.WelcomeLabel1.Left;
Top:=WizardForm.WelcomeLabel1.Top
Width:=WizardForm.WelcomeLabel1.Width
Height:=WizardForm.WelcomeLabel1.Height
WordWrap:=WizardForm.WelcomeLabel1.WordWrap;
Font.Name:=WizardForm.WelcomeLabel1.Font.Name;
Font.Size:=WizardForm.WelcomeLabel1.Font.Size;
Font.Color:=clblack; // text colour верхнє
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;
Top:=WizardForm.WelcomeLabel2.Top
Width:=WizardForm.WelcomeLabel2.Width
Height:=WizardForm.WelcomeLabel2.Height
WordWrap:=WizardForm.WelcomeLabel2.WordWrap;
Font.Name:=WizardForm.WelcomeLabel2.Font.Name;
Font.Size:=WizardForm.WelcomeLabel2.Font.Size;
Font.Color:=clblack; // text colour нижнє
Font.Style:=WizardForm.WelcomeLabel2.Font.Style;
Caption:=WizardForm.WelcomeLabel2.Caption;
Parent:=WizardForm.WelcomeLabel2.Parent
Transparent:=True
end;
/////////////////////////
///////// фініш
WizardForm.FinishedHeadingLabel.Hide;


with TLabel.Create(WizardForm) do begin
AutoSize:=WizardForm.FinishedHeadingLabel.AutoSize;
Left:=WizardForm.FinishedHeadingLabel.Left;
Top:=WizardForm.FinishedHeadingLabel.Top
Width:=WizardForm.FinishedHeadingLabel.Width
Height:=WizardForm.FinishedHeadingLabel.Height
WordWrap:=WizardForm.FinishedHeadingLabel.WordWrap;
Font.Name:=WizardForm.FinishedHeadingLabel.Font.Name;
Font.Size:=WizardForm.FinishedHeadingLabel.Font.Size;
Font.Color:=clblack; // text colour в конце инсталлятора
Font.Style:=WizardForm.FinishedHeadingLabel.Font.Style;
Caption:=WizardForm.FinishedHeadingLabel.Caption;
Parent:=WizardForm.FinishedHeadingLabel.Parent
Transparent:=True
end;

FinishedLabel:= TLabel.Create(WizardForm)
WizardForm.FinishedLabel.Hide;
with TLabel.Create(WizardForm) do begin
Font.Name:=WizardForm.FinishedLabel.Font.Name;
Font.Size:=WizardForm.FinishedLabel.Font.Size;
Font.Color:=clgreen; // text colour
Font.Style:=WizardForm.FinishedLabel.Font.Style;
Caption:=WizardForm.FinishedLabel.Caption;
Parent:=WizardForm.FinishedLabel.Parent
Transparent:=True
end;





/////////////////////////////////////////////
ISDoneProgressBar := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar do begin
Left := ScaleX(0);
Top := ScaleY(40);
Width := ScaleX(417);
Max := 1000;
Height := WizardForm.ProgressGauge.Height;
Parent := WizardForm.InstallingPage;
end;
LabelPct := TLabel.Create(WizardForm);
with LabelPct do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := WizardForm.ProgressGauge.Width;
Top := WizardForm.ProgressGauge.Top + ScaleY(40);
Alignment := taCenter;
Caption := '';
end;
LabelCurrFileName := TLabel.Create(WizardForm);
with LabelCurrFileName do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := WizardForm.ProgressGauge.Width;
Left := ScaleX(0);
Top := WizardForm.ProgressGauge.Top + ScaleY(25);
Caption := '';
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and MyError then
begin
/////////
with TLabel.Create(WizardForm) do begin
WizardForm.FinishedLabel.Hide;
AutoSize:=WizardForm.FinishedHeadingLabel.AutoSize;
Left:=WizardForm.FinishedLabel.Left;
Top:=WizardForm.FinishedLabel.Top
Width:=WizardForm.FinishedLabel.Width
Height:=WizardForm.FinishedLabel.Height
WordWrap:=WizardForm.FinishedLabel.WordWrap;
Font.Name:=WizardForm.FinishedLabel.Font.Name;
Font.Size:=WizardForm.FinishedLabel.Font.Size;

//
WizardForm.Caption:= ExpandConstant('{cm:Error}');
WizardForm.FinishedLabel.Font.Color:= clyellow;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted);

Font.Color:=clwhite;
//
Font.Style:=WizardForm.FinishedLabel.Font.Style;
Caption:=WizardForm.FinishedLabel.Caption;
Parent:=WizardForm.FinishedLabel.Parent
Transparent:=True
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var ChComp, TmpValue:longword;
n:integer;
begin
if CurStep = ssInstall then begin //Если необходимо, можно переделать на ssPostInstall
WizardForm.ProgressGauge.Hide;
WizardForm.CancelButton.Visible:=false;
MyCancelButton:=TButton.Create(WizardForm);
with MyCancelButton do begin
Parent:=WizardForm;
Width:=ScaleX(135);
Caption:=ExpandConstant('{cm:CancelButton}');
Left:=ScaleX(360);
Top:=WizardForm.cancelbutton.top;
OnClick:=@CancelButtonOnClick;
end;
CallBack:=WrapMyCallback(@ProgressCallback,2);
Cancel:=0;
OveralPct:=0;
















// Распаковка всех необходимых файлов в папку {tmp}. Это необходимо для того, чтобы
//выполнять установку в момент ssInstall, и секция [Run] выполнялась после установки.
#ifdef records
ExtractTemporaryFile('records.inf');
#endif

#ifdef precomp038
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('RTconsole.exe');
ExtractTemporaryFile('precomp038.exe');
ExtractTemporaryFile('zlib1.dll');
#endif


// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
ChComp:=0;


StartRecord(ExpandConstant('{src}\records.inf'),ChComp);
repeat
MyError:=true;

if not ISArcExtract ( 0, OveralPct, 0, ExpandConstant('{src}\muzk.arc'), ExpandConstant('{app}'), false,CallBack, '', '', '') then break;
if not ISSRepExtract ( 0, OveralPct, 0, ExpandConstant('{app}\muzk.srep'), ExpandConstant('{app}\muzk.pcf'), '', true, CallBack ) then break;
if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\muzk.pcf'), ExpandConstant('{app}\muzk.7z'), true, CallBack ) then break;
if not IS7ZipExtract ( 0, OveralPct, 0, ExpandConstant('{app}\muzk.7z'), ExpandConstant('{app}'), true, CallBack, '' ) then break;

MyError:=false;
until true;
StopRecord;

MyCancelButton.Visible:=false;
WizardForm.CancelButton.Visible:=true;
end;
if (CurStep=ssPostInstall) and MyError then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);
end;

R.i.m.s.k.y. 07-06-2011 08:22 1689745

напоминаю про свой вопрос
Цитата:

Цитата R.i.m.s.k.y.
в шапке есть Ultimate Test Black.iss
он компилится на анси-инно, но не компилится на юникод-инно
в частности он почему-то ругается на отсутствие ";" в конце строчки, когда анси-инно по барабану
и не переваривает строчку
var DeviceName : string
RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName)
когда на анси-инно все ровно
вопрос - как сделать хорошо чтобы получить юникод-версию Ultimate Test Black?
инно - Inno Ultra от Лександер »

или переформулирую вопрос: в дистре необходимо узнавать модель карты строчкой, как это можно сделать в unicode inno?

maks_mei 07-06-2011 12:13 1689859

Здраствуйте!я скачал Need for Speed™ Undercover.iss v 2.2 - пример скрипта я создаю компилятор все создаеться,но когда захожу в приложение(EXE) вылазиет вот это:
Run time error (at 66:1252):
Внутренная ошибка:ExtractTemporaryFile :the file "AutorunMusic.mp3" was not found

Цитата:

Цитата maks_mei
Цитировать »

как исправить эту ошибку?
Зарание спасибо...

Gnom_aka_Lexander 07-06-2011 13:38 1689919

maks_mei, положить в папку АвторанФайлс файл AutorunMusic.mp3. а в папку ИнсталлФайлс нужно положить Music.mp3 - эта ошибка вылезет когда в авторане нажмеш кнопку Установить.

R.i.m.s.k.y. 07-06-2011 14:39 1689959

Цитата:

Цитата Neutron
1. При запуске инсталлятора сначала, выдавалось такое окно "Для продолжения установки, убедитесь в том что устройство не подключено! Для продолжения нажмите ОК". »

Код:

Function InitializeSetup: Boolean;
begin
...
if MsgBox('Для продолжения установки, убедитесь в том что устройство не подключено! Для продолжения нажмите ОК', mbError, MB_YESNO) = idYes then result := true else result := false;
...
end;

Цитата:

Цитата Neutron
2. При удалении сначала, выдавалось такое окно "Для продолжения деинсталляции, отключите устроиство! Для продолжения нажмите ОК". »

Код:

function InitializeUninstall(): Boolean;
begin
...
if MsgBox('Для продолжения деинсталляции, отключите устроиство! Для продолжения нажмите ОК', mbError, MB_YESNO) = idYes then result := true else result := false;
...
end;


insombia 07-06-2011 14:46 1689963

Что используют каталисты чтобы во время установки в деспечере задач показывалсась задача arc.dll и установка шла пошагово по половине прогресс бага на каждый архив

R.i.m.s.k.y. 07-06-2011 15:58 1690015

Цитата:

Цитата Neutron
А насчёт третьего конечно жаль , очень полезная весчь была бы, ну да ладно, мож когда нибудь найдётся ответ! Самые главные на первые два вопроса нужны были решения! »

надо было конкретнее задавать вопросы
если найдешь консольную утилиту у которой выхлопом результат наличия железки - сделаем
пошукай на http://www.nirsoft.net/, там много консольной мелочевки

старшие камрады! обратите на меня внимание! а то краунмейдеры сидят без дистра
пост http://forum.oszone.net/post-1689745.html#post1689745
точки с запятой в юникод-скрипте я расставил, дело не в них а в
RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', String)
в анси прокатывает, в юникоде - нет
а эта строчка и возвращает название видухи

insombia 07-06-2011 17:20 1690090

BeveledLabel=
Как сделать чтобы он был в правом углу инсталятора а не левом?

R.i.m.s.k.y. 07-06-2011 17:22 1690092

Цитата:

Цитата insombia
Как сделать чтобы он был в правом углу инсталятора а не левом? »

пробелами добить :)

Gnom_aka_Lexander 07-06-2011 18:23 1690143

Цитата:

Цитата R.i.m.s.k.y.
Как сделать чтобы он был в правом углу инсталятора а не левом? »
пробелами добить »

Ну зачем-же так жестоко :)
читать дальше »
procedure InitializeWizard();
begin
with WizardForm.BeveledLabel do
begin
Left := ScaleX(352);
Width := ScaleX(145);
end;
end;

insombia 07-06-2011 18:55 1690170

ЛександерДля моего скрипта и жестокость подойдет,ведь уже такие строки как procedure InitializeWizard(); уже есть

R.i.m.s.k.y. 07-06-2011 19:22 1690179

Цитата:

Цитата insombia
уже такие строки как procedure InitializeWizard(); уже есть »

тебе надо просто в подInitializeWizard процедуру дописать
with WizardForm.BeveledLabel do
begin
Left := ScaleX(352);
Width := ScaleX(145);
end;

ILIA_1992 07-06-2011 19:38 1690190

Помогите исправить




скрипт http://rghost.ru/9424551

insombia 07-06-2011 20:02 1690200

ILIA_1992 ;#define FreeArc
#ifdef FreeArc
#define ArcLocation "{src}\*.bin"
#endif

Укажы там где выделено где находится фриарк файл

nik1967 07-06-2011 20:40 1690221

ILIA_1992, написано же: это не архив фриарка, или архив повреждён. Значит, какие выводы? Либо битый архив, либо архив, созданный не во фриарке. Ещё может быть(хотя может и нет), что ты пытаешься распаковать запароленный архив.
Цитата:

ISDone(а точнее Unarc.dll), поддерживает распаковку запароленных архивов, но на сильных алгоритмах шифрования она сбоит и архив не извлекает. Ну вообще-то не совсем так, но все равно зашифрованные архивы она не извлекает.

ILIA_1992 07-06-2011 21:03 1690236

Цитата:

Цитата nik1967
ILIA_1992, написано же: это не архив фриарка, или архив повреждён. Значит, какие выводы? Либо битый архив, либо архив, созданный не во фриарке. Ещё может быть(хотя может и нет), что ты пытаешься распаковать запароленный архив.
Цитата:
ISDone(а точнее Unarc.dll), поддерживает распаковку запароленных архивов, но на сильных алгоритмах шифрования она сбоит и архив не извлекает. Ну вообще-то не совсем так, но все равно зашифрованные »

а может эта ошибка из за того ,что архив весит 9 гигов???

nik1967 07-06-2011 21:40 1690251

ILIA_1992, попробуй спросить здесь.

insombia 07-06-2011 22:22 1690277

ILIA_1992 Если 9 гб то можно разбить его пополам тоисть файлы игры по отдельности паковать чтобы припустим они по 4 50 гб занимали но это врятли из-за этого просто у таких как механики то так и делаеться(наверное)

insombia 07-06-2011 22:38 1690286

vovka1021 DisableReadyPage=true и не парся насчет той фигни

vovka1021 07-06-2011 22:39 1690288

AllowNoIcons=true пробовал не канает.




просто в других же работает, а в этот не могу засунуть.

охото добить этот скрипт, а убрать это самый легкий способ!

insombia, DisableReadyPage=true это же просто убирает страницу готовности.

знающие люди помогите!!!


http://rghost.ru/9833951

insombia 07-06-2011 22:42 1690289

DisableReadyPage не работает???

vovka1021 кинь свой скрипт(желательно залей на rghost

vovka1021 ну так уберёт и не будеш парится

insombia 07-06-2011 22:58 1690298

[Messages]
rus.NoProgramGroupCheck2=Не создавать папку в меню «Пуск»

У тебя на другом скриншоте не показано что оно будет создавать в пуске папку так что оно по идее пашет

как в [LangOptions] сделать чтобы во всём инсталяторе был какой то шрифт?

vovka1021 07-06-2011 23:12 1690308

insombia, пашет то оно пашет, просто не реагирует в готовности на создавать или нет. так надпись и стоит

tiestos 08-06-2011 12:57 1690589

что надо изменить в скрипте чтобы сначала ишла роспаковка просто файлов запакованых Inno Setup'ом, а потом самых архивов
вот скрипт
Код:

#define GameName "Crysis Warhead"
#define NeedSize "10000000000"

#define precomp038
#define ExeName "Crysis2Launcher.exe"
#define ExeDir "bin32\"


[Setup]
AppName={#GameName}
AppVerName={#GameName}
DefaultDirName={pf}\{#GameName}
DefaultGroupName={#GameName}
OutputDir=.
OutputBaseFilename=Setup
SolidCompression=true
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif
WizardImageFile=img.bmp
WizardSmallImageFile=shapka.bmp
#ifdef Components
SetupIconFile=iconset.ico
Compression=lzma2/ultra64
InternalCompressLevel=ultra64

[Types]
Name: "full"; Description: "Full installation"; Flags: iscustom


#endif

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]

Source: "C:\Users\ntrx\Desktop\1\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

Source: "logo2.bmp"; DestDir: "{app}"; Attribs: hidden system;

Source: "DirBitmap.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef precomp038
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\RTconsole.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
[Run]
 Filename: "{src}\Redist\dxwebsetup.exe"; StatusMsg: "Обновление DirectX...";  Flags: waituntilterminated
 Filename: "{src}\Redist\vcredist_x86_2005_sp1.exe"; Parameters: "/q"; StatusMsg: "Установка Microsoft Visual C++ 2005 SP1 Redist..."; Flags: runhidden waituntilterminated ;
[Icons]
Name: {group}\{#GameName}; Filename: {app}\{#ExeDir}{#ExeName}; WorkingDir: {app}\{#ExeDir}; Comment: {#GameName};
Name: {group}\Удалить игру; Filename: {app}\Uninstall\unins000; WorkingDir: {app}\Uninstall\; Comment: Удалить игру;

Name: "{commondesktop}\{#GameName}"; Filename: "{app}\{#ExeDir}{#ExeName}"; WorkingDir: "{app}\{#ExeDir}"; Comment: "{#GameName}"; Tasks: desktopicon;


[CustomMessages]
russian.ExtractedFile=Распаковывается файл:
russian.CancelButton=Отменить распаковку
russian.Error=Ошибка распаковки!

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

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

[code]
  var
    LabelPct,LabelCurrFileName: TLabel;
    ISDoneProgressBar: TNewProgressBar;
    MyCancelButton: TButton;
    OveralPct,Cancel:integer;
    CallBack:longword;
    MyError:boolean;
    FinishedLabel: TLabel;
    Text: TNewStaticText;
    LogoImage: TBitmapImage;
   
   
  type
    TCallback = function (Pct: integer;CurrentFile:string): longword;
    TMessage = record hWnd: HWND; msg, wParam: Word; lParam: LongWord; Time: TFileTime; pt: TPoint; end;

  function PeekMessage(var lpMsg: TMessage; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
  function TranslateMessage(const lpMsg: TMessage): BOOL; external 'TranslateMessage@user32.dll stdcall';
  function DispatchMessage(const lpMsg: TMessage): Longint; external 'DispatchMessageA@user32.dll stdcall';

  function WrapMyCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:innocallback.dll stdcall';

  function ISArcExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password, CfgFile, WorkPath: AnsiString):BOOL; external 'ISArcExtract@files:ISDone.dll stdcall';
  function IS7ZipExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password: AnsiString):BOOL; external 'IS7zipExtract@files:ISDone.dll stdcall';

  function ISPrecompExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISPrecompExtract@files:ISDone.dll stdcall';
  function ISSRepExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile, IdxFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISSrepExtract@files:ISDone.dll stdcall';
  function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):BOOL; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall';
  function StartRecord(RecordFileName:AnsiString; AllComponents:longword):BOOL; external 'StartRecord@files:ISDone.dll stdcall';
  function CheckPoint(CurComponent:Integer):BOOL; external 'CheckPoint@files:ISDone.dll stdcall';
  function StopRecord:BOOL; external 'StopRecord@files:ISDone.dll stdcall';

  function ProgressCallback(Pct: integer; CurrentFile:AnsiString): longword;
  var  Msg: TMessage;
  begin
    if Pct<=ISDoneProgressBar.Max then
        ISDoneProgressBar.Position := Pct;
    LabelPct.Caption := IntToStr(Pct div 10)+'.'+chr(48 + Pct mod 10)+'%';
    LabelCurrFileName.Caption :=ExpandConstant('{cm:ExtractedFile} ')+CurrentFile;
    while PeekMessage(Msg, 0, 0, 0, 1) do begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
    end;
    Result := Cancel;
  end;

  procedure CancelButtonOnClick(Sender: TObject);
  begin
    if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then Cancel:=1;
  end;

  procedure InitializeWizard();
  begin

  ExtractTemporaryFile('DirBitmap.bmp');

  ExtractTemporaryFile('logo2.bmp');

  LogoImage := TBitmapImage.Create(WizardForm);
  with LogoImage do
  begin

    SetBounds(ScaleX(10), ScaleY(320), ScaleX(175), ScaleY(35));
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo2.bmp'));
    Parent := WizardForm;
  end;

    with WizardForm.WizardSmallBitmapImage do
  begin

    SetBounds(ScaleX(0), ScaleY(2), ScaleX(497), ScaleY(56));
  end;

      with WizardForm.SelectDirBitmapImage do
  begin

    SetBounds(ScaleX(0), ScaleY(0), ScaleX(42), ScaleY(42));
  end;

        WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap.bmp'));


    WizardForm.MainPanel.Color := clGray;
    WizardForm.WizardBitmapImage.Width := 497;
    WizardForm.WizardBitmapImage2.Width := 497;
    WizardForm.PageNameLabel.Width:=0;
    WizardForm.PageDescriptionLabel.Hide;
    WizardForm.Font.Color:=clblack;
 
    WizardForm.Color:=clGray;
    WizardForm.WelcomePage.Color:=clGray;
    WizardForm.InnerPage.Color:=clGray; 
    WizardForm.SelectDirPage.Color:=clGray;
    WizardForm.FinishedPage.Color:=clGray;

    WizardForm.WelcomeLabel1.Hide;
    WizardForm.WelcomeLabel2.Hide;


  with TLabel.Create(WizardForm) do begin
      AutoSize:=WizardForm.WelcomeLabel1.AutoSize;
      Left:=WizardForm.WelcomeLabel1.Left;
      Top:=WizardForm.WelcomeLabel1.Top
      Width:=WizardForm.WelcomeLabel1.Width
      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;
      Top:=WizardForm.WelcomeLabel2.Top
      Width:=WizardForm.WelcomeLabel2.Width
      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;
                   

    WizardForm.FinishedHeadingLabel.Hide;


      with TLabel.Create(WizardForm) do begin
      AutoSize:=WizardForm.FinishedHeadingLabel.AutoSize;
      Left:=WizardForm.FinishedHeadingLabel.Left;
      Top:=WizardForm.FinishedHeadingLabel.Top
      Width:=WizardForm.FinishedHeadingLabel.Width
      Height:=WizardForm.FinishedHeadingLabel.Height
    WordWrap:=WizardForm.FinishedHeadingLabel.WordWrap;
      Font.Name:=WizardForm.FinishedHeadingLabel.Font.Name;
      Font.Size:=WizardForm.FinishedHeadingLabel.Font.Size;
      Font.Color:=clblack;     
      Font.Style:=WizardForm.FinishedHeadingLabel.Font.Style;
      Caption:=WizardForm.FinishedHeadingLabel.Caption;
      Parent:=WizardForm.FinishedHeadingLabel.Parent
      Transparent:=True
    end;
   
    FinishedLabel:= TLabel.Create(WizardForm)
      WizardForm.FinishedLabel.Hide;
    with TLabel.Create(WizardForm) do begin
      Font.Name:=WizardForm.FinishedLabel.Font.Name;
      Font.Size:=WizardForm.FinishedLabel.Font.Size;
      Font.Color:=clgreen; 
      Font.Style:=WizardForm.FinishedLabel.Font.Style;
      Caption:=WizardForm.FinishedLabel.Caption;
      Parent:=WizardForm.FinishedLabel.Parent
      Transparent:=True
    end;


   



    ISDoneProgressBar := TNewProgressBar.Create(WizardForm);
    with ISDoneProgressBar do begin
        Left      := ScaleX(0);
        Top      := ScaleY(40);
        Width    := ScaleX(417);
        Max      := 1000;
        Height    := WizardForm.ProgressGauge.Height;
        Parent    := WizardForm.InstallingPage;
    end;

    LabelPct := TLabel.Create(WizardForm);
    with LabelPct do begin
      Parent    := WizardForm.InstallingPage;
      AutoSize  := False;
 
      Width    := WizardForm.ProgressGauge.Width;
   
      Top      := WizardForm.ProgressGauge.Top + ScaleY(50);
 
      Font.Size := 10;   

      Font.Color := clSilver;
      Alignment := taCenter;
      Caption  := '';
    end;
 
    LabelCurrFileName := TLabel.Create(WizardForm);
    with LabelCurrFileName do begin
        Parent    := WizardForm.InstallingPage;
        AutoSize  := False;
        Width    := WizardForm.ProgressGauge.Width;
        Left      := ScaleX(0);
        Top      :=  WizardForm.ProgressGauge.Top + ScaleY(25);
        Caption  := '';
    end;
  end;


  Procedure CurPageChanged(CurPageID: Integer);
  Begin
    if (CurPageID = wpFinished) and MyError then
    begin
 
    with TLabel.Create(WizardForm) do begin
    WizardForm.FinishedLabel.Hide;
      AutoSize:=WizardForm.FinishedHeadingLabel.AutoSize;
      Left:=WizardForm.FinishedLabel.Left;
      Top:=WizardForm.FinishedLabel.Top
      Width:=WizardForm.FinishedLabel.Width
      Height:=WizardForm.FinishedLabel.Height
      WordWrap:=WizardForm.FinishedLabel.WordWrap;
      Font.Name:=WizardForm.FinishedLabel.Font.Name;
      Font.Size:=WizardForm.FinishedLabel.Font.Size;

 
        WizardForm.Caption:= ExpandConstant('{cm:Error}');
        WizardForm.FinishedLabel.Font.Color:= clyellow;
        WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted);

        Font.Color:=clwhite;

      Font.Style:=WizardForm.FinishedLabel.Font.Style;
      Caption:=WizardForm.FinishedLabel.Caption;
      Parent:=WizardForm.FinishedLabel.Parent
      Transparent:=True
      end;
    end;
  end;

  procedure CurStepChanged(CurStep: TSetupStep);
  var ChComp, TmpValue:longword;
      n:integer;
  begin
    if CurStep = ssInstall then begin 
        WizardForm.ProgressGauge.Hide;
        WizardForm.CancelButton.Visible:=false;
        MyCancelButton:=TButton.Create(WizardForm);
        with MyCancelButton do begin
          Parent:=WizardForm;
          Width:=ScaleX(135);
          Caption:=ExpandConstant('{cm:CancelButton}');
          Left:=ScaleX(360);
          Top:=WizardForm.cancelbutton.top;
          OnClick:=@CancelButtonOnClick;
        end;
        CallBack:=WrapMyCallback(@ProgressCallback,2);
        Cancel:=0;
        OveralPct:=0;
       

       
       
       
       
       
       
       



       
       
       


  #ifdef records
        ExtractTemporaryFile('records.inf');
  #endif

  #ifdef precomp038
        ExtractTemporaryFile('packjpg_dll.dll');
        ExtractTemporaryFile('RTconsole.exe');
        ExtractTemporaryFile('precomp038.exe');
        ExtractTemporaryFile('zlib1.dll');
  #endif


 
        ChComp:=0;


        StartRecord(ExpandConstant('{src}\records.inf'),ChComp);
        repeat
          MyError:=true;
          CallBack:=WrapMyCallback(@ProgressCallback,2);
          OveralPct:=0;
    ISArcExtract ( 0, OveralPct, 30, ExpandConstant('{src}\muzk.arc'),  ExpandConstant('{app}'),false,CallBack, '', '', '')
  ISSRepExtract ( 0, OveralPct, 20, ExpandConstant('{app}\muzk.srep'), ExpandConstant('{app}\muzk.pcf'), '', true, CallBack)
  ISPrecompExtract( 0, OveralPct, 30, ExpandConstant('{app}\muzk.pcf'), ExpandConstant('{app}\muzk.7z'),true, CallBack)
  IS7ZipExtract  ( 0, OveralPct, 20, ExpandConstant('{app}\muzk.7z'), ExpandConstant('{app}'),true, CallBack, '')
          MyError:=false;
        until true;
        StopRecord;

        MyCancelButton.Visible:=false;
        WizardForm.CancelButton.Visible:=true;
    end;
    if (CurStep=ssPostInstall) and MyError then
        Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);
  end;


insombia 08-06-2011 17:13 1690834

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

El Sanchez 08-06-2011 17:30 1690859

Цитата:

Цитата R.i.m.s.k.y.
старшие камрады! обратите на меня внимание! а то краунмейдеры сидят без дистра
пост http://forum.oszone.net/post-1689745.html#post1689745
точки с запятой в юникод-скрипте я расставил, дело не в них а в
RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', String)
в анси прокатывает, в юникоде - нет
а эта строчка и возвращает название видухи »

R.i.m.s.k.y., как обычно через WMI:
Код:

[code]
function GetVideoControllerName(): String;
var
  objSWbemLocator, objSWbemServices: Variant;
begin
  try
    objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  except
    ShowExceptionMessage;
    Exit;
  end;
  objSWbemServices := objSWbemLocator.ConnectServer();
  objSWbemServices.Security_.ImpersonationLevel := 3;
  try
    Result := objSWbemServices.ExecQuery('SELECT Name FROM Win32_VideoController WHERE Availability=3').Item('Win32_VideoController="VideoController1"').Properties_.Item('Name').Value;
  except
  end;
end;

procedure InitializeWizard();
begin
  MsgBox(GetVideoControllerName(), mbInformation, MB_OK);
end;

Цитата:

Цитата insombia
BeveledLabel=
Как сделать чтобы он был в правом углу инсталятора а не левом? »

Цитата:

Цитата R.i.m.s.k.y.
with WizardForm.BeveledLabel do
begin
Left := ScaleX(352);
Width := ScaleX(145);
end; »

insombia, R.i.m.s.k.y., жестко задавать координаты плохо. А вдруг я размер формы поменяю? :) Тогда уж так:
Код:

[Messages]
BeveledLabel=sometext

procedure InitializeWizard();
begin
  with WizardForm.BeveledLabel do Left := WizardForm.Width - Width;
end;


Vamp1re 08-06-2011 17:42 1690872

Как создать кликабельную кнопку на странице выбора директории установки? Мне нужно чтоб она открывала HUD сообщение с проверкой системных требований. И возможно ли ето? :)

nik1967 09-06-2011 14:21 1691430

Vamp1re, возможно, почему бы и нет? Скачай скрипт от sjwrec - в нём есть эта фича. Только чур, разбирайся сам!

insombia 09-06-2011 14:28 1691432

кто может мне обьеденить скрипт http://rghost.ru/10060311 с этим http://www.datafilehost.com/download-0dfe2a07.html очень нужно

insombia 09-06-2011 15:22 1691456



Как сделать такой инсталл?

LinkOFF 09-06-2011 21:38 1691682

insombia, http://rghost.ru/10131931 вот попробуй я из iswin7 удалил секцию [Setup] если не будет работать попробуй еще удалить секцию procedure DeinitializeSetup();

LinkOFF 09-06-2011 21:57 1691695

Как сделать установку на 2 диска в ISDone

insombia 09-06-2011 22:32 1691731

LinkOFF InitializeWizard есть и там и там не пашет вобщем жаль

LinkOFF ты знаеш как сдлеать установку чтобы была как у механиков типа чтобы прогресс бар через некоторое время прыгал на середину установки

zero 414 10-06-2011 12:02 1692006

хочу сделать так, чтобы можно было записать игру на 1xdvd9 или на 2xdvd5, что мне нужно тут изменить? если записывать на 2xdvd5, то файл video.bin должен быть на втором диске

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\build.bin'), ExpandConstant('{app}\build'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\game-1.bin'), ExpandConstant('{app}\build\pc\cache'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\game-2.bin'), ExpandConstant('{app}\build\pc\cache'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\game-3.bin'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\video.bin'), ExpandConstant('{app}\build\pc\cache'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ShowChangeDiskWindow('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'video.bin' ) then break;

Gnom_aka_Lexander 10-06-2011 18:54 1692256

zero 414,
читать дальше »
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\build.bin'), ExpandConstant('{app}\build'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\game-1.bin'), ExpandConstant('{app}\build\pc\cache'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\game-2.bin'), ExpandConstant('{app}\build\pc\cache'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\game-3.bin'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ShowChangeDiskWindow('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}') if not ISArcExtract ( 0, 0, ExpandConstant('{src}\video.bin'), ExpandConstant('{app}\build\pc\cache'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
,'video.bin' ) then break;
нужно сперва делать запрос второго диска, а потом уже распаковывать архив с него.
Специально для LinkOFF, ткни на читать далее... в этом посте.

LinkOFF 10-06-2011 19:30 1692265

insombia, я сам хотел бы узнать

LinkOFF 10-06-2011 20:05 1692283

Цитата:

Цитата Лександер
нужно сперва делать запрос второго диска, а потом уже распаковывать архив с него. »

А как поставить запрос диска

LinkOFF 10-06-2011 20:55 1692309

Помогите мне я не могу поставить запрос 2 диска в скрипте isdone у меня сразу запрашивает диск при нажатие кнопки установит а мне нужно чтоб сначало установился первый а потом второй диск

insombia 10-06-2011 21:28 1692319

Как склепать скрипты где есть строки procedure InitializeWizard(); в один?

LinkOFF 10-06-2011 21:42 1692328

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

Gnom_aka_Lexander 10-06-2011 21:55 1692335

insombia, очень просто это делается. просто переименовываеш свои процедуры, а в конце скрипта собираеш их вместе. так со всеми процедурами можно делать.
Код:

procedure InitializeWizard1()
....
procedure InitializeWizard2()
...
procedure InitializeWizard();
begin
InitializeWizard1()
InitializeWizard2()
end;


insombia 10-06-2011 22:28 1692353

Лександер Блинннн спасибо

insombia 10-06-2011 22:56 1692371

Лександер procedure CurPageChanged(CurPageID: Integer); тоже так же само?

ILIA_1992 11-06-2011 00:05 1692407

помогите исправить это
Скрытый текст

Чёрную полоску

murlakatamenka 11-06-2011 01:18 1692446

Цитата:

Цитата insombia
procedure CurPageChanged(CurPageID: Integer); тоже так же само? »

insombia, да, и с CurPageChanged, и с DeinitializeWizard так тоже можно
по этому принципу работает Inno Setup Script Joiner - может быть полезной эта маленькая утилитка для объединения скриптов

Цитата:

Цитата Neutron
1) Подскажите, как сделать такое?
Скрины

что-то похожее есть у злого деда (z10yded - репакер с русторки)

также это похоже на установку дров от NVIDIA
возможно, эта информация поможет найти скрипт

ILIA_1992 11-06-2011 11:57 1692552

как исправить в конце распаковки это
Дирекст и вкредит не могут установиться пишет неверно задано имя папки.Как это исправить

Gnom_aka_Lexander 11-06-2011 12:08 1692557

ILIA_1992, По указанному тобой пути нет файла для выполнения. Положи его туда, либо удали это задание.

insombia 11-06-2011 12:32 1692574

Лександер CurPageChanged как сделать с ним такое же как и с InitializeWizard?

ILIA_1992 11-06-2011 13:28 1692612

Лександер,
так если удалить то вообще не будет софт ставиться

insombia 11-06-2011 13:34 1692620

ILIA_1992
[Tasks]
Name: icon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}
Name: soft; Description: {cm:soft}
Name: soft\dx; Description: {cm:dx}
Name: soft\vc; Description: {cm:vc}

[Run]
Filename: {win}\regedit.exe; Parameters: /s {tmp}\ва.reg; StatusMsg: "Вносим изменения в реестр ..."; Flags: waituntilterminated runasoriginaluser
Filename: D:\Duke Nukem Forever (repack)\Redist\DirectX\DXSETUP.exe; Parameters: /silent; StatusMsg: {cm:dx1}; Tasks: soft\dx
Filename: D:\Duke Nukem Forever (repack)\Redist\vcredist_x86.exe; Parameters: /q; StatusMsg: {cm:vc1}; Tasks: soft\vc

это пример

insombia 11-06-2011 14:02 1692630

кто может помочь в чем проблема когда игра установилась то после закрытия инсталятора вылазит ошибка http://pic.4m.net.ua/images/31230954494101212670.jpg

http://rghost.ru/10354311

Gnom_aka_Lexander 11-06-2011 15:06 1692658

insombia, зачем DeInitializeSetup переименовал в DeInitializeSetup2 ? потому и ошибка.
ILIA_1992,
Цитата:

Цитата ILIA_1992
так если удалить то вообще не будет софт ставиться »

так укажи правильно путь к софту, и не будет ошибки. А то взяли моду - я так написал, значит так тому и быть, а почему ошибка - можно на форуме спросить, а потом еще и поспорить - "ну я-же написал!"

insombia 11-06-2011 16:49 1692706

как сделать то что выделено? http://i23.fastpic.ru/big/2011/0611/...80b93b97af.jpg хотя бы чтобы ярлыки создать

Gnom_aka_Lexander 11-06-2011 18:55 1692752

insombia, Слегка доработанный пример от Виктора доброва из шапки.
читать дальше »
[Setup]
AppName=My Program
AppVerName=My Program ver.1.5
DefaultDirName={pf}\My Program
DisableDirPage=yes
ShowTasksTreeLines=true
AlwaysShowDirOnReadyPage=true
AlwaysShowGroupOnReadyPage=true

[Tasks]
Name: desktopicon; Description: Create a &desktop icon; GroupDescription: Additional icons:
Name: desktopicon\common; Description: For all users; GroupDescription: Additional icons:; Flags: exclusive
Name: desktopicon\user; Description: For the current user only; GroupDescription: Additional icons:; Flags: exclusive unchecked
Name: quicklaunchicon; Description: Create a &Quick Launch icon; GroupDescription: Additional icons:; Flags: unchecked
Name: associate; Description: &Associate files; GroupDescription: Other tasks:; Flags: unchecked

[code]
var
FreeMB, TotalMB: Cardinal;
NeedSize: Integer;
NeedSpaceLabel, FreeSpaceLabel: TLabel;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;

begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);

if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + IntToStr(FreeMB)+ ' MB';

if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False
else
WizardForm.NextButton.Enabled := True;
end;

procedure InitializeWizard();
begin
WizardForm.SelectTasksLabel.Hide;
WizardForm.DiskSpaceLabel.Hide;
WizardForm.SelectDirBitmapImage.Parent := WizardForm.SelectTasksPage;
WizardForm.DiskSpaceLabel.Parent := WizardForm.SelectTasksPage;
WizardForm.DirBrowseButton.Parent := WizardForm.SelectTasksPage;
WizardForm.DirEdit.Parent := WizardForm.SelectTasksPage;
WizardForm.SelectDirBrowseLabel.Parent := WizardForm.SelectTasksPage;
WizardForm.SelectDirLabel.Parent := WizardForm.SelectTasksPage;
WizardForm.TasksList.Top := ScaleY(109);
WizardForm.TasksList.Height := ScaleY(85);

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectTasksPage;
Left := ScaleX(0);
Top := ScaleY(200);
Width := ScaleX(209);
Height := ScaleY(13);
Caption := WizardForm.DiskSpaceLabel.Caption;
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectTasksPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;
Лейбелы, если не нужны, можно не создавать, основное - перенос выбора папки установки на страницу задач, и подгон размеров таск-листа под изменившееся наполнение страницы. Теоретически - можно наоборот, если нет привязки задач к компонентам - перенести таск-лист на страницу выбора папки.
читать дальше »
[code]
procedure InitializeWizard();
begin
with WizardForm.TasksList do
begin
Top := ScaleY(109);
Height := ScaleY(88);
Parent := WizardForm.SelectDirPage;
end;
end;

insombia 11-06-2011 19:01 1692757

Лександер ошибка в закосе под механиков уже есть одна строчка которую удалять нельзя но то что показывает свободное место не очень главное главное чтобы ярлыки создавать можно было как там

insombia 11-06-2011 20:42 1692799

procedure InitializeWizard();
begin
with WizardForm.TasksList do
begin
Top := ScaleY(109);
Height := ScaleY(88);
Parent := WizardForm.SelectDirPage;
end;
end;

Лександер не пашет

Gnom_aka_Lexander 11-06-2011 21:30 1692823

insombia, абсолютно все, что я советую, я предварительно проверяю! создай хоть одну задачу, потом утверждай, что не пашет.

insombia 11-06-2011 22:09 1692833

Лександер всё пашет я просто забыл редактировать но только выбор папки установки на дополнительные задачи поменялись местами

Лександер не подскажеш что используют каталисты или механики что архивы распаковываються не в прогресс баре а системно в диспечере есть задача arc.dll и через некоторе время прогресс баг перемещаеться почти до середины?

nik1967 11-06-2011 22:22 1692842

Цитата:

Цитата insombia
Лександер не подскажеш что используют каталисты »

Отвечу я. Мы используем isexec.dll разработки Vo1t'а. Но в данное время мы переходим на плавный прогрессбар. Пардон за оффтоп. :off:

insombia 11-06-2011 22:24 1692844

nik1967 cпасибо а вы используите ISWin7?

nik1967 11-06-2011 22:27 1692850

insombia, нет, мы используем более продвинутый вариант iswin7logo.dll, опять же разработки Vo1t'а.

insombia 11-06-2011 22:32 1692855

nik1967 а они есть в нете? мне бы хотябы чтобы распаковка шла как например у вас а то обычная неприкольная

nik1967 11-06-2011 22:48 1692865

insombia, нет, и давай заканчивать оффтоп.

insombia 11-06-2011 23:15 1692877

кто знает скрипт для arc.dll?

nik1967 11-06-2011 23:24 1692880

insombia,

insombia 12-06-2011 10:18 1693004

Neutron но не знают люди зачем то всё время спрашивать?

insombia 12-06-2011 11:26 1693031

Neutron понятно а чем тебе понравился тот инстал?

serhio 12-06-2011 13:14 1693089

;#define FreeArc
#ifdef FreeArc
#define ArcLocation "{src}\*.bin"
#endif
подскажите,внешний arc станет bin'ом что-ли? Или надо на arc исправить мне?

Gnom_aka_Lexander 12-06-2011 13:38 1693094

serhio, исправляеш расширение архива на bin, или любое другое, но не забываеш указывать это расширение в скрипте, там где ты выделил.
только для использования именно FreeArc нужно раскоментировать строчку #define FreeArc.

serhio 12-06-2011 14:39 1693126

Лександер, спасибо, все вышло!

tiestos 12-06-2011 16:25 1693211

как в этом скрипте чтобы вконце на финиш странице не было белого фона

Код:

#define GameName "Crysis Warhead"
#define NeedSize "10000000000"

#define precomp038
#define ExeName "Crysis2Launcher.exe"
#define ExeDir "bin32\"


[Setup]
SetupIconFile=iconset.ico
AppName={#GameName}
AppVerName={#GameName}
DefaultDirName={pf}\{#GameName}
DefaultGroupName={#GameName}
OutputDir=.
OutputBaseFilename=Setup
SolidCompression=true
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif
WizardImageFile=img.bmp
WizardSmallImageFile=shapka.bmp
#ifdef Components
 
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
PrivilegesRequired=lowest
[Types]
Name: "full"; Description: "Full installation"; Flags: iscustom
#endif

[Run]
Filename: {src}\Redist\dxwebsetup.exe; Description: DirectX 9.0c; WorkingDir: "{src}\redist"; Parameters: /silent; StatusMsg: Установка DirectX 9.0c...; Flags: runascurrentuser nowait postinstall skipifsilent unchecked; 
Filename: {src}\Redist\vcredist_x86_2005_sp1.exe; Description: Microsoft Visual C++ Redistibutable 2005...; Parameters: /silent; StatusMsg: Microsoft Visual C++ Redistibutable 2005...; Flags: nowait postinstall skipifsilent unchecked;
 
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]

Source: "C:\Users\Admin\Desktop\1\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "logo2.bmp"; DestDir: "{app}"; Attribs: hidden system;
Source: "DirBitmap.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef precomp038
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\RTconsole.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
[Icons]
Name: {group}\{#GameName}; Filename: {app}\{#ExeDir}{#ExeName}; WorkingDir: {app}\{#ExeDir}; Comment: {#GameName};
Name: {group}\Удалить игру; Filename: {app}\Uninstall\unins000; WorkingDir: {app}\Uninstall\; Comment: Удалить игру;

[CustomMessages]
russian.ExtractedFile=Распаковывается файл:
russian.CancelButton=Отменить распаковку
russian.Error=Ошибка распаковки!
russian.Soft=Установить дополнительное ПО

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

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

[ Code]
  var
    LabelPct,LabelCurrFileName: TLabel;
    ISDoneProgressBar: TNewProgressBar;
    MyCancelButton: TButton;
    OveralPct,Cancel:integer;
    CallBack:longword;
    MyError:boolean;
    FinishedLabel: TLabel;
    Text: TNewStaticText;
    LogoImage: TBitmapImage;





  type
    TCallback = function (Pct: integer;CurrentFile:string): longword;
    TMessage = record hWnd: HWND; msg, wParam: Word; lParam: LongWord; Time: TFileTime; pt: TPoint; end;

  function PeekMessage(var lpMsg: TMessage; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
  function TranslateMessage(const lpMsg: TMessage): BOOL; external 'TranslateMessage@user32.dll stdcall';
  function DispatchMessage(const lpMsg: TMessage): Longint; external 'DispatchMessageA@user32.dll stdcall';

  function WrapMyCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:innocallback.dll stdcall';

  function ISArcExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password, CfgFile, WorkPath: AnsiString):BOOL; external 'ISArcExtract@files:ISDone.dll stdcall';
  function IS7ZipExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password: AnsiString):BOOL; external 'IS7zipExtract@files:ISDone.dll stdcall';

  function ISPrecompExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISPrecompExtract@files:ISDone.dll stdcall';
  function ISSRepExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile, IdxFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISSrepExtract@files:ISDone.dll stdcall';
  function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):BOOL; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall';
  function StartRecord(RecordFileName:AnsiString; AllComponents:longword):BOOL; external 'StartRecord@files:ISDone.dll stdcall';
  function CheckPoint(CurComponent:Integer):BOOL; external 'CheckPoint@files:ISDone.dll stdcall';
  function StopRecord:BOOL; external 'StopRecord@files:ISDone.dll stdcall';

  function ProgressCallback(Pct: integer; CurrentFile:AnsiString): longword;
  var  Msg: TMessage;
  begin
    if Pct<=ISDoneProgressBar.Max then
        ISDoneProgressBar.Position := Pct;
    LabelPct.Caption := IntToStr(Pct div 10)+'.'+chr(48 + Pct mod 10)+'%';
    LabelCurrFileName.Caption :=ExpandConstant('{cm:ExtractedFile} ')+CurrentFile;
    while PeekMessage(Msg, 0, 0, 0, 1) do begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
    end;
    Result := Cancel;
  end;

  procedure CancelButtonOnClick(Sender: TObject);
  begin
    if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then Cancel:=1;
  end;

  procedure InitializeWizard();
  begin
  ExtractTemporaryFile('DirBitmap.bmp');
  ExtractTemporaryFile('logo2.bmp');
  LogoImage := TBitmapImage.Create(WizardForm);
  with LogoImage do
  begin
    SetBounds(ScaleX(10), ScaleY(320), ScaleX(175), ScaleY(35));
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo2.bmp'));
    Parent := WizardForm;
  end;
    with WizardForm.WizardSmallBitmapImage do
  begin
    SetBounds(ScaleX(0), ScaleY(2), ScaleX(497), ScaleY(56));
  end;
      with WizardForm.SelectDirBitmapImage do
  begin
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(42), ScaleY(42));
  end;
        WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap.bmp'));

    WizardForm.MainPanel.Color := clGray;
    WizardForm.WizardBitmapImage.Width := 497;
    WizardForm.WizardBitmapImage2.Width := 497;
    WizardForm.PageNameLabel.Width:=0;
    WizardForm.PageDescriptionLabel.Hide;
    WizardForm.Font.Color:=clblack;
    WizardForm.Color:=clGray;
    WizardForm.WelcomePage.Color:=clGray;
    WizardForm.InnerPage.Color:=clGray;
    WizardForm.SelectDirPage.Color:=clGray;
    WizardForm.WelcomeLabel1.Hide;
    WizardForm.WelcomeLabel2.Hide;


  with TLabel.Create(WizardForm) do begin
      AutoSize:=WizardForm.WelcomeLabel1.AutoSize;
      Left:=WizardForm.WelcomeLabel1.Left;
      Top:=WizardForm.WelcomeLabel1.Top
      Width:=WizardForm.WelcomeLabel1.Width
      Height:=WizardForm.WelcomeLabel1.Height
      WordWrap:=WizardForm.WelcomeLabel1.WordWrap;
      Font.Name:=WizardForm.WelcomeLabel1.Font.Name;
      Font.Size:=WizardForm.WelcomeLabel1.Font.Size;
      Font.Color:=clblack;  // text colour верхнє
      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;
      Top:=WizardForm.WelcomeLabel2.Top
      Width:=WizardForm.WelcomeLabel2.Width
      Height:=WizardForm.WelcomeLabel2.Height
      WordWrap:=WizardForm.WelcomeLabel2.WordWrap;
      Font.Name:=WizardForm.WelcomeLabel2.Font.Name;
      Font.Size:=WizardForm.WelcomeLabel2.Font.Size;
      Font.Color:=clblack; // text colour    нижнє
      Font.Style:=WizardForm.WelcomeLabel2.Font.Style;
      Caption:=WizardForm.WelcomeLabel2.Caption;
      Parent:=WizardForm.WelcomeLabel2.Parent
      Transparent:=True
    end;
      FinishedLabel:= TLabel.Create(WizardForm);
      WizardForm.FinishedLabel.Hide;
with FinishedLabel do begin
  Font.Size:=9;
  Font.Color:=clSilver;
  Font.Style:=[fsBold];
  Parent:=WizardForm;
  Transparent:=True;
end;
   
   
   
    WizardForm.FinishedHeadingLabel.Hide;
 


      with TLabel.Create(WizardForm) do begin
      AutoSize:=WizardForm.FinishedHeadingLabel.AutoSize;
      Left:=WizardForm.FinishedHeadingLabel.Left;
      Top:=WizardForm.FinishedHeadingLabel.Top
      Width:=WizardForm.FinishedHeadingLabel.Width
      Height:=WizardForm.FinishedHeadingLabel.Height
    WordWrap:=WizardForm.FinishedHeadingLabel.WordWrap;
      Font.Name:=WizardForm.FinishedHeadingLabel.Font.Name;
      Font.Size:=WizardForm.FinishedHeadingLabel.Font.Size;
      Font.Color:=clblack;      // text colour  в конце инсталлятора
      Font.Style:=WizardForm.FinishedHeadingLabel.Font.Style;
      Caption:=WizardForm.FinishedHeadingLabel.Caption;
      Parent:=WizardForm.FinishedHeadingLabel.Parent
      Transparent:=True
    end;
   
    FinishedLabel:= TLabel.Create(WizardForm)
    WizardForm.FinishedLabel.Hide;
    with TLabel.Create(WizardForm) do begin
    WordWrap:=WizardForm.FinishedLabel.WordWrap;
      Font.Name:=WizardForm.FinishedLabel.Font.Name;
      Font.Size:=WizardForm.FinishedLabel.Font.Size;
    Font.Color:=clgreen;  // text colour
      Font.Style:=WizardForm.FinishedLabel.Font.Style;
      Caption:=WizardForm.FinishedLabel.Caption;
    Parent:=WizardForm.FinishedLabel.Parent
      Transparent:=True
    end;


   


    ISDoneProgressBar := TNewProgressBar.Create(WizardForm);
    with ISDoneProgressBar do begin
        Left      := ScaleX(0);
        Top      := ScaleY(40);
        Width    := ScaleX(417);
        Max      := 1000;
        Height    := WizardForm.ProgressGauge.Height;
        Parent    := WizardForm.InstallingPage;
    end;
    LabelPct := TLabel.Create(WizardForm);
    with LabelPct do begin
      Parent    := WizardForm.InstallingPage;
      AutoSize  := False;
      Width    := WizardForm.ProgressGauge.Width;
      Top      := WizardForm.ProgressGauge.Top + ScaleY(50);
      Font.Size := 10;   
      Font.Color := clSilver;
      Alignment := taCenter;
      Caption  := '';
    end;
    LabelCurrFileName := TLabel.Create(WizardForm);
    with LabelCurrFileName do begin
        Parent    := WizardForm.InstallingPage;
        AutoSize  := False;
        Width    := WizardForm.ProgressGauge.Width;
        Left      := ScaleX(0);
        Top      :=  WizardForm.ProgressGauge.Top + ScaleY(25);
        Caption  := '';
    end;
  end;
  Procedure CurPageChanged(CurPageID: Integer);
  Begin
    if (CurPageID = wpFinished) and MyError then
    begin
    with TLabel.Create(WizardForm) do begin
    WizardForm.FinishedLabel.Hide;
      AutoSize:=WizardForm.FinishedHeadingLabel.AutoSize;
      Left:=WizardForm.FinishedLabel.Left;
      Top:=WizardForm.FinishedLabel.Top
      Width:=WizardForm.FinishedLabel.Width
      Height:=WizardForm.FinishedLabel.Height
      WordWrap:=WizardForm.FinishedLabel.WordWrap;
      Font.Name:=WizardForm.FinishedLabel.Font.Name;
      Font.Size:=WizardForm.FinishedLabel.Font.Size;
     
        WizardForm.Caption:= ExpandConstant('{cm:Error}');
        WizardForm.FinishedLabel.Font.Color:= clyellow;
        WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted);

        Font.Color:=clwhite;
      Font.Style:=WizardForm.FinishedLabel.Font.Style;
      Caption:=WizardForm.FinishedLabel.Caption;
      Parent:=WizardForm.FinishedLabel.Parent
      Transparent:=True
      end;
    end;
  end;
   



  procedure CurStepChanged(CurStep: TSetupStep);
  var ChComp, TmpValue:longword;
      n:integer;
  begin
    if CurStep = ssPostInstall then begin
        WizardForm.ProgressGauge.Hide;
        WizardForm.CancelButton.Visible:=false;
        MyCancelButton:=TButton.Create(WizardForm);
        with MyCancelButton do begin
          Parent:=WizardForm;
          Width:=ScaleX(135);
          Caption:=ExpandConstant('{cm:CancelButton}');
          Left:=ScaleX(360);
          Top:=WizardForm.cancelbutton.top;
          OnClick:=@CancelButtonOnClick;
        end;
        CallBack:=WrapMyCallback(@ProgressCallback,2);
        Cancel:=0;
        OveralPct:=0;
  #ifdef records
        ExtractTemporaryFile('records.inf');
  #endif

  #ifdef precomp038
        ExtractTemporaryFile('packjpg_dll.dll');
        ExtractTemporaryFile('RTconsole.exe');
        ExtractTemporaryFile('precomp038.exe');
        ExtractTemporaryFile('zlib1.dll');
  #endif
        ChComp:=0;

         
        StartRecord(ExpandConstant('{src}\records.inf'),ChComp);
        repeat
          MyError:=true;
          CallBack:=WrapMyCallback(@ProgressCallback,2);
          OveralPct:=0;
    ISArcExtract ( 0, OveralPct, 25, ExpandConstant('{src}\muzk.arc'),  ExpandConstant('{app}'),false,CallBack, '', '', '')
  ISSRepExtract ( 0, OveralPct, 25, ExpandConstant('{app}\muzk.srep'), ExpandConstant('{app}\muzk.pcf'), '', true, CallBack)
  ISPrecompExtract( 0, OveralPct, 25, ExpandConstant('{app}\muzk.pcf'), ExpandConstant('{app}\muzk.7z'),true, CallBack)
  IS7ZipExtract  ( 0, OveralPct, 25, ExpandConstant('{app}\muzk.7z'), ExpandConstant('{app}'),true, CallBack, '')
          MyError:=false;
        until true;
        StopRecord;

        MyCancelButton.Visible:=false;
        WizardForm.CancelButton.Visible:=true;
    end;
    if (CurStep=ssPostInstall) and MyError then
        Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);
  end;


Gnom_aka_Lexander 12-06-2011 17:09 1693237

Вложений: 1
tiestos, Можно так так попробовать:
читать дальше »

[Files]
Source: "BGImage.bmp"; Flags: dontcopy solidbreak

[code]
var
BGImgFile: String;

procedure InitializeWizard();
begin
with WizardForm.RunList do
begin
ExtractTemporaryFile('BGImage.bmp');
BGImgFile := ExpandConstant('{tmp}\BGImage.bmp');
LoadBGBmpFromFile(BGImgFile, WizardForm.RunList.Left, WizardForm.RunList.Top);
end;
end;
BGImage.bmp - картинка, которую показываеш на финишной странице.
Теоретически класс объекта WizardForm.RunList подходит для procedure LoadBGBmpFromFile(FileName: String; OffsetX, OffsetY: Integer); прикрепил твой скрипт во вложении.
Чуть не забыл, LoadBGBmpFromFile работает только на расширенной версии компилятора.

insombia 12-06-2011 18:38 1693264

http://rghost.ru/10512071 кто может мне обеденить скрипт с isdon'ом?

Lubitel Softa 12-06-2011 19:16 1693273

tiestos, ИМХО, картинка не подходит к CRYSIS Warhead. Это во второй части действия происходят в городе а в Warhead должно быть как-то так:


No4noylis 12-06-2011 21:03 1693302

Пожалуйста помогите, как убрать кнопку отключения музыки инсталятора со страници приветствия?????

И как в скине написать вот такое http://s2.ipicture.ru/uploads/20110612/QWirhlhR.png . Я не могу разобраться с IS Skin Builder! Помогите Плиз!!!1

insombia 12-06-2011 21:59 1693333

No4noylis то лого


читать дальше »
[Files]
Source: Button.bmp; Flags: dontcopy

[code]
procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
ShellExec('', 'http://www.forum.ru-board.com', '' , '', SW_SHOW, ewNoWait, ResCode)
end;

procedure InitializeWizard();
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin
ExtractTemporaryFile('Button.bmp')

BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=20
Top:=325
Width:=132
Height:=27
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
Parent:=BtnPanel
end
end;

No4noylis 12-06-2011 22:06 1693336

Спасибо большое!!! А по поводу удаления кнопки на страничке приветствия????

insombia 12-06-2011 22:15 1693343

Спасибо большое!!! нажми Полезное сообщение А по поводу удаления кнопки я не знаю скрипт нужно вылаживать там тебе помогут

No4noylis 12-06-2011 22:21 1693347

Вот скрипт на проигрывание музыки: (Повторюсь, нужно убрать кнопку отключения со странички приветствия)

[Files]
Source: "BASS.dll"; DestDir: "{tmp}"; Flags: dontcopy noencryption
Source: "sound.mp3"; DestDir: "{tmp}"; Flags: dontcopy noencryption nocompression
Source: "MusicButton.bmp"; DestDir: "{tmp}"; Flags: dontcopy

Код:

const
  BASS_ACTIVE_STOPPED = 0;
  BASS_ACTIVE_PLAYING = 1;
  BASS_ACTIVE_STALLED = 2;
  BASS_ACTIVE_PAUSED = 3;
  BASS_SAMPLE_LOOP = 4;

var
  mp3Handle: HWND;
  mp3Name: String;
  PlayButton, PauseButton, StopButton: TPanel;
  PlayImage, PauseImage, StopImage: TBitmapImage;
  PlayLabel, PauseLabel, StopLabel: TLabel;
  MouseLabel: Tlabel;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
  external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD;
  external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
  external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
  external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelIsActive(handle: DWORD): Integer;
  external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';

function BASS_ChannelPause(handle: DWORD): Boolean;
  external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
  external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Pause(): Boolean;
  external 'BASS_Pause@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
  external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure PlayMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  PlayImage.Left := -96
end;

procedure PlayMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  PlayImage.Left := 0
end;

procedure PlayMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if PlayImage.Left <> -96 then PlayImage.Left := -192
end;

procedure PauseMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  PauseImage.Left := -128
end;

procedure PauseMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  PauseImage.Left := -32
end;

procedure PauseMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if PauseImage.Left <> -128 then PauseImage.Left := -224
end;

procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  PlayImage.Left := 0
  PauseImage.Left := -32
end;

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('sound.mp3');
  mp3Name := ExpandConstant('{tmp}\sound.mp3');
  BASS_Init(-1, 44100, 0, 0, 0);
  mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
  BASS_Start();
  BASS_ChannelPlay(mp3Handle, False);
  Result := True;
end;

procedure PlayButtonOnClick(Sender: TObject);
begin
  case BASS_ChannelIsActive(mp3Handle) of
    BASS_ACTIVE_PAUSED:
      begin
        BASS_ChannelPlay(mp3Handle, False);
        PlayButton.Hide
        PauseButton.Show
      end;
    BASS_ACTIVE_STOPPED:
      begin
        BASS_Init(-1, 44100, 0, 0, 0);
        mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
        BASS_Start();
        BASS_ChannelPlay(mp3Handle, False);
        PlayButton.Hide
        PauseButton.Show
      end;
  end;
end;

procedure PauseButtonOnClick(Sender: TObject);
begin
  BASS_ChannelPause(mp3Handle);
  PauseButton.Hide
  PlayButton.Show
end;

procedure StopButtonOnClick(Sender: TObject);
begin
  BASS_Stop();
  BASS_Free();
  PauseButton.Hide
  PlayButton.Show
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('MusicButton.bmp')
 
  MouseLabel := TLabel.Create(WizardForm)
    MouseLabel.Width := WizardForm.Width
    MouseLabel.Height := WizardForm.Height
    MouseLabel.Autosize := False
    MouseLabel.Transparent := True
    MouseLabel.OnMouseMove := @MouseMove
    MouseLabel.Parent := WizardForm

  PlayButton := TPanel.Create(WizardForm)
    PlayButton.Left := 460
    PlayButton.Top := 65
    PlayButton.Width := 32
    PlayButton.Height := 33
    PlayButton.Cursor := crHand
    PlayButton.ShowHint := True
    PlayButton.Hint := 'Воспроизведение музыки'
    PlayButton.OnClick := @PlayButtonOnClick
    PlayButton.Parent := WizardForm

  PlayImage := TBitmapImage.Create(WizardForm)
    PlayImage.Left := 0
    PlayImage.Top := 0
    PlayImage.Width := 288
    PlayImage.Height := 33
    PlayImage.Enabled := False
    PlayImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
    PlayImage.Parent := PlayButton
//
    PlayImage.ReplaceColor:=$E2E2E2
    PlayImage.ReplaceWithColor:=clBtnFace


  PlayLabel := TLabel.Create(WizardForm)
    PlayLabel.Width := PlayButton.Width
    PlayLabel.Height := PlayButton.Height
    PlayLabel.Autosize := False
    PlayLabel.Transparent := True
    PlayLabel.OnClick := @PlayButtonOnClick
    PlayLabel.OnMouseDown := @PlayMouseDown
    PlayLabel.OnMouseUp := @PlayMouseUp
    PlayLabel.OnMouseMove := @PlayMouseMove
    PlayLabel.Parent := PlayButton

  PauseButton := TPanel.Create(WizardForm)
    PauseButton.Left := 460
    PauseButton.Top := 65
    PauseButton.Width := 32
    PauseButton.Height := 33
    PauseButton.Cursor := crHand
    PauseButton.ShowHint := True
    PauseButton.Hint := 'Приостановить музыку'
    PauseButton.OnClick := @PauseButtonOnClick
    PauseButton.Parent := WizardForm

  PauseImage := TBitmapImage.Create(WizardForm)
    PauseImage.Left := -32
    PauseImage.Top := 0
    PauseImage.Width := 288
    PauseImage.Height := 33
    PauseImage.Enabled := False
    PauseImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
    PauseImage.Parent := PauseButton
//
    PauseImage.ReplaceColor:=$E2E2E2
    PauseImage.ReplaceWithColor:=clBtnFace

  PauseLabel := TLabel.Create(WizardForm)
    PauseLabel.Width := PauseButton.Width
    PauseLabel.Height := PauseButton.Height
    PauseLabel.Autosize := False
    PauseLabel.Transparent := True
    PauseLabel.OnClick := @PauseButtonOnClick
    PauseLabel.OnMouseDown := @PauseMouseDown
    PauseLabel.OnMouseUp := @PauseMouseUp
    PauseLabel.OnMouseMove := @PauseMouseMove
    PauseLabel.Parent := PauseButton
end;

procedure DeinitializeSetup();
begin
  BASS_Stop();
  BASS_Free();
end;


insombia 12-06-2011 22:35 1693354

как растянуть первую и последнюю картинку на всё окно?

tiestos 12-06-2011 23:26 1693375

Всем доброго вечера!

Что нужно добавить в скрипт, что-бы отображались *.PNG изображения?

Вот скрипт:
Код:

#define GameName "Crysis Warhead"
#define NeedSize "10000000000"
#define precomp038
#define ExeName "Crysis2Launcher.exe"
#define ExeDir "bin32\"

[Setup]
; ³êîíêà ³íñòàëà
SetupIconFile=iconset.ico
AppName={#GameName}
AppVerName={#GameName}
DefaultDirName={pf}\{#GameName}
DefaultGroupName={#GameName}
OutputDir=.
;  íàçâà ôàéëà ³íñòàëÿòîðà
OutputBaseFilename=Setup
SolidCompression=true
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif
; ôîí
WizardImageFile=img.bmp
; øàïêà
WizardSmallImageFile=shapka.bmp

Compression=lzma2/ultra64
InternalCompressLevel=ultra64



[Types]
Name: "full"; Description: "Full installation"; Flags: iscustom

[Components]
Name: "text"; Description: "ßçûê ñóáòèòðîâ"; Types: full; Flags: fixed
Name: "text\rus"; Description: "Ðóññêèé"; Flags: exclusive; ExtraDiskSpaceRequired:    60000000
Name: "text\eng"; Description: "Àíãëèéñêèé"; Flags: exclusive; ExtraDiskSpaceRequired: 58000000




[Run]
Filename: {src}\Redist\dxwebsetup.exe; Description: DirectX 9.0c; WorkingDir: "{src}\redist"; Parameters: /q; StatusMsg: Óñòàíîâêà DirectX 9.0c...; Flags: runascurrentuser nowait postinstall skipifsilent;
Filename: {src}\Redist\vcredist_x86_2005_sp1.exe; Description: Microsoft Visual C++ Redistibutable 2005...; Parameters: /q; StatusMsg: Microsoft Visual C++ Redistibutable 2005...; Flags: nowait postinstall skipifsilent ;
Filename: {src}\Redist\XLive\xLiveRedist.exe; Description: xLive; StatusMsg: "Óñòàíîâêà XLive...";  Flags: runhidden waituntilterminated postinstall;

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: botva2.dll; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;
Source: ISWin7.dll; DestDir: {tmp}; Flags: dontcopy
Source: "img.bmp"; DestDir: "{app}"; Attribs: hidden system;
; çàì³íèòü
Source: "C:\Users\ntrx\Desktop\1\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "logo2.png"; DestDir: "{app}"; Attribs: hidden system;
Source: "DirBitmap.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef precomp038
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\RTconsole.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif

[Icons]
Name: {group}\{#GameName}; Filename: {app}\{#ExeDir}{#ExeName}; WorkingDir: {app}\{#ExeDir}; Comment: {#GameName};
Name: {group}\Óäàëèòü èãðó; Filename: {app}\Uninstall\unins000; WorkingDir: {app}\Uninstall\; Comment: Óäàëèòü èãðó;
; ²êîíêà íà ðîá. ñò³ë
Name: "{commondesktop}\{#GameName}"; Filename: "{app}\{#ExeDir}{#ExeName}"; WorkingDir: "{app}\{#ExeDir}"; Comment: "{#GameName}"; Tasks: desktopicon;

[CustomMessages]
russian.ExtractedFile=Ðàñïàêîâûâàåòñÿ ôàéë:
russian.CancelButton=Îòìåíèòü ðàñïàêîâêó
russian.Error=Îøèáêà ðàñïàêîâêè!
russian.Soft=Óñòàíîâèòü äîïîëíèòåëüíîå ÏÎ

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

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

[ Code]
var
    LabelPct,LabelCurrFileName: TLabel;
    ISDoneProgressBar: TNewProgressBar;
    MyCancelButton: TButton;
    OveralPct,Cancel:integer;
    CallBack:longword;
    MyError:boolean;
    FinishedLabel: TLabel;
    Text: TNewStaticText;
    LogoImage: TBitmapImage;
    // WizardImg: String;


    const
  BTN_MAX_PATH = 1024; //íå èçìåíÿòü !!!

  BtnClickEventID      = 1;
  BtnMouseEnterEventID = 2;
  BtnMouseLeaveEventID = 3;
  BtnMouseMoveEventID  = 4;
  BtnMouseDownEventID  = 5;
  BtnMouseUpEventID    = 6;

  balLeft    = 0;  //âûðàâíèâàíèå òåêñòà ïî ëåâîìó êðàþ
  balCenter  = 1;  //ãîðèçîíòàëüíîå âûðàâíèâàíèå òåêñòà ïî öåíòðó
  balRight  = 2;  //âûðàâíèâàíèå òåêñòà ïî ïðàâîìó êðàþ
  balVCenter = 4;  //âåðòèêàëüíîå âûðàâíèâàíèå òåêñòà ïî öåíòðó

type
  #ifndef UNICODE
  AnsiChar = Char;
  #endif

  TBtnEventProc = procedure(h:HWND);

  TTextBuf      = array [0..BTN_MAX_PATH-1] of AnsiChar; //íå ìåíÿòü ðàçìåðíîñòü ìàññèâà !!!

  type
    TCallback = function (Pct: integer;CurrentFile:string): longword;
    TMessage = record hWnd: HWND; msg, wParam: Word; lParam: LongWord; Time: TFileTime; pt: TPoint; end;

  function PeekMessage(var lpMsg: TMessage; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
  function TranslateMessage(const lpMsg: TMessage): BOOL; external 'TranslateMessage@user32.dll stdcall';
  function DispatchMessage(const lpMsg: TMessage): Longint; external 'DispatchMessageA@user32.dll stdcall';

  function WrapMyCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:innocallback.dll stdcall';

  function ISArcExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password, CfgFile, WorkPath: AnsiString):BOOL; external 'ISArcExtract@files:ISDone.dll stdcall';
  function IS7ZipExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password: AnsiString):BOOL; external 'IS7zipExtract@files:ISDone.dll stdcall';

  function ISPrecompExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISPrecompExtract@files:ISDone.dll stdcall';
  function ISSRepExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile, IdxFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISSrepExtract@files:ISDone.dll stdcall';
  function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):BOOL; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall';
  function StartRecord(RecordFileName:AnsiString; AllComponents:longword):BOOL; external 'StartRecord@files:ISDone.dll stdcall';
  function CheckPoint(CurComponent:Integer):BOOL; external 'CheckPoint@files:ISDone.dll stdcall';
  function StopRecord:BOOL; external 'StopRecord@files:ISDone.dll stdcall';

  //// iamges support
 
      function WrapBtnCallback(Callback: TBtnEventProc; ParamCount: Integer): Longword; external 'wrapcallback@{tmp}\innocallback.dll stdcall delayload';
function ImgLoad(Wnd :HWND; FileName :PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetVisiblePart(img:Longint; NewLeft, NewTop, NewWidth, NewHeight : integer); external 'ImgSetVisiblePart@{tmp}\botva2.dll stdcall delayload';
procedure ImgGetVisiblePart(img:Longint; var Left, Top, Width, Height : integer); external 'ImgGetVisiblePart@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetPosition(img :Longint; NewLeft, NewTop, NewWidth, NewHeight :integer); external 'ImgSetPosition@{tmp}\botva2.dll stdcall delayload';
procedure ImgGetPosition(img:Longint; var Left, Top, Width, Height:integer); external 'ImgGetPosition@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetVisibility(img :Longint; Visible :boolean); external 'ImgSetVisibility@{tmp}\botva2.dll stdcall delayload';
function ImgGetVisibility(img:Longint):boolean; external 'ImgGetVisibility@{tmp}\botva2.dll stdcall delayload';
procedure ImgRelease(img :Longint); external 'ImgRelease@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';
function BtnCreate(hParent :HWND; Left, Top, Width, Height :integer; FileName :PAnsiChar; ShadowWidth :integer; IsCheckBtn :boolean) :HWND; external 'BtnCreate@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetText(h :HWND; Text :PAnsiChar); external 'BtnSetText@{tmp}\botva2.dll stdcall delayload';
function BtnGetText_(h:HWND; var Text:TTextBuf):integer; external 'BtnGetText@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetTextAlignment(h :HWND; HorIndent, VertIndent :integer; Alignment :DWORD); external 'BtnSetTextAlignment@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetFont(h :HWND; Font :Cardinal); external 'BtnSetFont@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetFontColor(h :HWND; NormalFontColor, FocusedFontColor, PressedFontColor, DisabledFontColor :Cardinal); external 'BtnSetFontColor@{tmp}\botva2.dll stdcall delayload';
function BtnGetVisibility(h :HWND) :boolean; external 'BtnGetVisibility@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetVisibility(h :HWND; Value :boolean); external 'BtnSetVisibility@{tmp}\botva2.dll stdcall delayload';
function BtnGetEnabled(h :HWND) :boolean; external 'BtnGetEnabled@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetEnabled(h :HWND; Value :boolean); external 'BtnSetEnabled@{tmp}\botva2.dll stdcall delayload';
function BtnGetChecked(h :HWND) :boolean; external 'BtnGetChecked@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetChecked(h :HWND; Value :boolean); external 'BtnSetChecked@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetEvent(h :HWND; EventID :integer; Event :Longword); external 'BtnSetEvent@{tmp}\botva2.dll stdcall delayload';
procedure BtnGetPosition(h:HWND; var Left, Top, Width, Height: integer);  external 'BtnGetPosition@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetPosition(h:HWND; NewLeft, NewTop, NewWidth, NewHeight: integer);  external 'BtnSetPosition@{tmp}\botva2.dll stdcall delayload';
procedure BtnRefresh(h :HWND); external 'BtnRefresh@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetCursor(h:HWND; hCur:Cardinal); external 'BtnSetCursor@{tmp}\botva2.dll stdcall delayload';
function GetSysCursorHandle(id:integer):Cardinal; external 'GetSysCursorHandle@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdown; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';
procedure CreateFormFromImage(h:HWND; FileName:PAnsiChar); external 'CreateFormFromImage@{tmp}\botva2.dll stdcall delayload';
function CreateBitmapRgn(DC: LongWord; Bitmap: HBITMAP; TransClr: DWORD; dX:integer; dY:integer): LongWord; external 'CreateBitmapRgn@{tmp}\botva2.dll stdcall delayload';
procedure SetMinimizeAnimation(Value: Boolean); external 'SetMinimizeAnimation@{tmp}\botva2.dll stdcall delayload';
function GetMinimizeAnimation: Boolean; external 'GetMinimizeAnimation@{tmp}\botva2.dll stdcall delayload';

  function ArrayOfAnsiCharToAnsiString(a:TTextBuf):AnsiString;
var
  i:integer;
begin
  i:=0;
  Result:='';
  while a[i]<>#0 do begin
    Result:=Result+a[i];
    i:=i+1;
  end;
end;

function BtnGetText(hBtn:HWND):AnsiString;
var
  buf:TTextBuf;
begin
  BtnGetText_(hBtn,buf);
  Result:=ArrayOfAnsiCharToAnsiString(buf); //ìåäëåííî ðàáîòàåò, êàê ïî äðóãîìó ñäåëàòü õç
end;

  ////

  function win7_init(Handle:HWND; Left, Top, Right, Bottom : Integer): Boolean;
external 'win7_init@files:ISWin7.dll stdcall';

procedure win7_free;
external 'win7_free@files:ISWin7.dll stdcall';

  function ProgressCallback(Pct: integer; CurrentFile:AnsiString): longword;
  var  Msg: TMessage;
  begin
    if Pct<=ISDoneProgressBar.Max then
        ISDoneProgressBar.Position := Pct;
    LabelPct.Caption := IntToStr(Pct div 10)+'.'+chr(48 + Pct mod 10)+'%';
    LabelCurrFileName.Caption :=ExpandConstant('{cm:ExtractedFile} ')+CurrentFile;
    while PeekMessage(Msg, 0, 0, 0, 1) do begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
    end;
    Result := Cancel;
  end;

  procedure CancelButtonOnClick(Sender: TObject);
  begin
    if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then Cancel:=1;
  end;

  procedure InitializeWizard();
  begin

    // Äëÿ áîëåå êðàñèâîãî îòîáðàæåíèÿ óìåíüøàåì íèæíþþ ãðàíèöó
  WizardForm.Bevel.Height := 1;
  // Èíèöèàëèçèðóåì áèáëèîòåêó
  if win7_init(WizardForm.Handle, 0, 0, 0, 47) then
  begin
    WizardForm.Caption := 'Âêëþ÷åíî';
  end
  else
  begin
    WizardForm.Caption := 'Âûêëþ÷åíî';
  end;

  ExtractTemporaryFile('DirBitmap.bmp');
  ExtractTemporaryFile('logo2.png');
    LogoImage := TBitmapImage.Create(WizardForm);
  with LogoImage do
  begin
    SetBounds(ScaleX(10), ScaleY(320), ScaleX(175), ScaleY(35));
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo2.png'));
 // Img:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\logo2.png'),ScaleX(0), ScaleY(0),ScaleX(175),ScaleY(35),True,True);
    Parent := WizardForm;
  end;
    with WizardForm.WizardSmallBitmapImage do
  begin
    SetBounds(ScaleX(0), ScaleY(2), ScaleX(497), ScaleY(56));
  end;
      with WizardForm.SelectDirBitmapImage do
  begin
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(42), ScaleY(42));
  end;
        WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap.bmp'));

    WizardForm.MainPanel.Color := clGray;
    WizardForm.WizardBitmapImage.Width := 497;
    WizardForm.WizardBitmapImage2.Width := 497;
    WizardForm.PageNameLabel.Width:=0;
    WizardForm.PageDescriptionLabel.Hide;
    WizardForm.Font.Color:=clblack;
  //  WizardForm.Color:=clGray; // Öâåò ïàíåë³ òà øî âíèçó
    WizardForm.WelcomePage.Color:=clGray;
    WizardForm.InnerPage.Color:=clGray;  // öâåò ïàíåëè ïîñåðåä èíñòàëà
    WizardForm.SelectDirPage.Color:=clGray;
    WizardForm.WelcomeLabel1.Hide;
    WizardForm.WelcomeLabel2.Hide;


  with TLabel.Create(WizardForm) do begin
      AutoSize:=WizardForm.WelcomeLabel1.AutoSize;
      Left:=WizardForm.WelcomeLabel1.Left;
      Top:=WizardForm.WelcomeLabel1.Top
      Width:=WizardForm.WelcomeLabel1.Width
      Height:=WizardForm.WelcomeLabel1.Height
      WordWrap:=WizardForm.WelcomeLabel1.WordWrap;
      Font.Name:=WizardForm.WelcomeLabel1.Font.Name;
      Font.Size:=WizardForm.WelcomeLabel1.Font.Size;
      Font.Color:=clblack;  // text colour âåðõíº
      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;
      Top:=WizardForm.WelcomeLabel2.Top
      Width:=WizardForm.WelcomeLabel2.Width
      Height:=WizardForm.WelcomeLabel2.Height
      WordWrap:=WizardForm.WelcomeLabel2.WordWrap;
      Font.Name:=WizardForm.WelcomeLabel2.Font.Name;
      Font.Size:=WizardForm.WelcomeLabel2.Font.Size;
      Font.Color:=clblack; // text colour    íèæíº
      Font.Style:=WizardForm.WelcomeLabel2.Font.Style;
      Caption:=WizardForm.WelcomeLabel2.Caption;
      Parent:=WizardForm.WelcomeLabel2.Parent
      Transparent:=True
    end;
      FinishedLabel:= TLabel.Create(WizardForm);
      WizardForm.FinishedLabel.Hide;
       
       
  with WizardForm.RunList do
  begin
    Left := ScaleX(264);
    // (3 - 241) + (2 - ?) + (1 - ?)-;
    Top := ScaleY(241);
    Width := ScaleX(237);
    Height := ScaleY(91);
    Color := clgray;
    Font.Color := clWhite;
    ParentColor := False;
  end;
 
  //

  with WizardForm do
  begin
 // Color:=clWindow;

  end;
//



 //
 
with FinishedLabel do begin
  Font.Size:=9;
  Font.Color:=clSilver;
  Font.Style:=[fsBold];
  Parent:=WizardForm;
  Transparent:=True;
end;



    WizardForm.FinishedHeadingLabel.Hide;



      with TLabel.Create(WizardForm) do begin
      AutoSize:=WizardForm.FinishedHeadingLabel.AutoSize;
      Left:=WizardForm.FinishedHeadingLabel.Left;
      Top:=WizardForm.FinishedHeadingLabel.Top
      Width:=WizardForm.FinishedHeadingLabel.Width
      Height:=WizardForm.FinishedHeadingLabel.Height
    WordWrap:=WizardForm.FinishedHeadingLabel.WordWrap;
      Font.Name:=WizardForm.FinishedHeadingLabel.Font.Name;
      Font.Size:=WizardForm.FinishedHeadingLabel.Font.Size;
      Font.Color:=clblack;      // text colour  â êîíöå èíñòàëëÿòîðà
      Font.Style:=WizardForm.FinishedHeadingLabel.Font.Style;
      Caption:=WizardForm.FinishedHeadingLabel.Caption;
      Parent:=WizardForm.FinishedHeadingLabel.Parent;
      Transparent:=True;
    end;

    FinishedLabel:= TLabel.Create(WizardForm)
    WizardForm.FinishedLabel.Hide;
    with TLabel.Create(WizardForm) do begin
    WordWrap:=WizardForm.FinishedLabel.WordWrap;
      Font.Name:=WizardForm.FinishedLabel.Font.Name;
      Font.Size:=WizardForm.FinishedLabel.Font.Size;
    Font.Color:=clgreen;  // text colour
      Font.Style:=WizardForm.FinishedLabel.Font.Style;
      Caption:=WizardForm.FinishedLabel.Caption;
    Parent:=WizardForm.FinishedLabel.Parent;
      Transparent:=True;
    end;





    ISDoneProgressBar := TNewProgressBar.Create(WizardForm);
    with ISDoneProgressBar do begin
        Left      := ScaleX(0);
        Top      := ScaleY(40);
        Width    := ScaleX(417);
        Max      := 1000;
        Height    := WizardForm.ProgressGauge.Height;
        Parent    := WizardForm.InstallingPage;
    end;
    LabelPct := TLabel.Create(WizardForm);
    with LabelPct do begin
      Parent    := WizardForm.InstallingPage;
      AutoSize  := False;
      Width    := WizardForm.ProgressGauge.Width;
      Top      := WizardForm.ProgressGauge.Top + ScaleY(50);
      Font.Size := 10;
      Font.Color := clSilver;
      Alignment := taCenter;
      Caption  := '';
    end;
    LabelCurrFileName := TLabel.Create(WizardForm);
    with LabelCurrFileName do begin
        Parent    := WizardForm.InstallingPage;
        AutoSize  := False;
        Width    := WizardForm.ProgressGauge.Width;
        Left      := ScaleX(0);
        Top      :=  WizardForm.ProgressGauge.Top + ScaleY(25);
        Caption  := '';
    end;
  end;
 
  procedure DeinitializeSetup();
begin
  // Îòêëþ÷àåì áèáëèîòåêó
  win7_free;
end;

  Procedure CurPageChanged(CurPageID: Integer);
  Begin
 
    if (CurPageID = wpFinished) and MyError then
    begin
    with TLabel.Create(WizardForm) do begin
    WizardForm.FinishedLabel.Hide;
      AutoSize:=WizardForm.FinishedHeadingLabel.AutoSize;
      Left:=WizardForm.FinishedLabel.Left;
      Top:=WizardForm.FinishedLabel.Top
      Width:=WizardForm.FinishedLabel.Width
      Height:=WizardForm.FinishedLabel.Height
      WordWrap:=WizardForm.FinishedLabel.WordWrap;
      Font.Name:=WizardForm.FinishedLabel.Font.Name;
      Font.Size:=WizardForm.FinishedLabel.Font.Size;

        WizardForm.Caption:= ExpandConstant('{cm:Error}');
        WizardForm.FinishedLabel.Font.Color:= clyellow;
        WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted);

        Font.Color:=clwhite;
      Font.Style:=WizardForm.FinishedLabel.Font.Style;
      Caption:=WizardForm.FinishedLabel.Caption;
      Parent:=WizardForm.FinishedLabel.Parent
      Transparent:=True
      end;
    end;
  end;




  procedure CurStepChanged(CurStep: TSetupStep);
  var ChComp, TmpValue:longword;
      n:integer;
  begin
    if CurStep = ssPostInstall then begin
        WizardForm.ProgressGauge.Hide;
        WizardForm.CancelButton.Visible:=false;
        MyCancelButton:=TButton.Create(WizardForm);
        with MyCancelButton do begin
          Parent:=WizardForm;
          Width:=ScaleX(135);
          Caption:=ExpandConstant('{cm:CancelButton}');
          Left:=ScaleX(360);
          Top:=WizardForm.cancelbutton.top;
          OnClick:=@CancelButtonOnClick;
        end;
        CallBack:=WrapMyCallback(@ProgressCallback,2);
        Cancel:=0;
        OveralPct:=0;
  #ifdef records
        ExtractTemporaryFile('records.inf');
  #endif

  #ifdef precomp038
        ExtractTemporaryFile('packjpg_dll.dll');
        ExtractTemporaryFile('RTconsole.exe');
        ExtractTemporaryFile('precomp038.exe');
        ExtractTemporaryFile('zlib1.dll');
  #endif
        ChComp:=0;


        StartRecord(ExpandConstant('{src}\records.inf'),ChComp);
        repeat
          MyError:=true;
          CallBack:=WrapMyCallback(@ProgressCallback,2);
          OveralPct:=0;
  ISArcExtract ( 0, OveralPct, 25, ExpandConstant('{src}\muzk.arc'),  ExpandConstant('{app}'),false,CallBack, '', '', '')
  ISSRepExtract ( 0, OveralPct, 25, ExpandConstant('{app}\muzk.srep'), ExpandConstant('{app}\muzk.pcf'), '', true, CallBack)
  ISPrecompExtract( 0, OveralPct, 25, ExpandConstant('{app}\muzk.pcf'), ExpandConstant('{app}\muzk.7z'),true, CallBack)
  IS7ZipExtract  ( 0, OveralPct, 25, ExpandConstant('{app}\muzk.7z'), ExpandConstant('{app}'),true, CallBack, '')
          MyError:=false;
        until true;
        StopRecord;

        MyCancelButton.Visible:=false;
        WizardForm.CancelButton.Visible:=true;
    end;
    if (CurStep=ssPostInstall) and MyError then
        Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);
  end;


R.i.m.s.k.y. 13-06-2011 10:10 1693485

Цитата:

Цитата Neutron
Кстати рядом с инсталлятором лежит файл Notes.ini, »

лотус нотус чтоли переделываешь?

insombia 13-06-2011 12:54 1693546

Как вместо слова выбор компонентов сделать выбор приоритета?

serhio 13-06-2011 14:12 1693576

Всем привет! Подскажите пожалуйсто как исправить расширение архива на bin?

serhio 13-06-2011 14:39 1693594

Neutron,Разобрался. В самой винде расширение папок снял, и просто переименовал. :)

LinkOFF 13-06-2011 16:34 1693657

как добавить свой прогресс-бар?

murlakatamenka 13-06-2011 17:10 1693678

Цитата:

Цитата serhio
расширение папок »

у папок нету расширений, есть у файлов
LinkOFF, у ISDone есть свой второй прогрессбар, если что:
Код:

#define SecondProgressBar
добавить на InstallingPage можно так например
Код:

[Коде]
var
  NewProgressBar1: TNewProgressBar;

procedure InitializeWizard();
begin
  { NewProgressBar1 }
  NewProgressBar1 := TNewProgressBar.Create(WizardForm);
  with NewProgressBar1 do
  begin
    Parent := WizardForm.InstallingPage;
    Left := ScaleX(0);
    Top := ScaleY(88);
    Width := ScaleX(417);
    Height := ScaleY(25);
  end;
end;

ну и надо привязать изменение NewProgressBar1.Position к чему-нибудь, чтобы прогрессбар работал :)

No4noylis 13-06-2011 18:17 1693713

на мой вопрос никто не ответит????????? :cry:

serhio 13-06-2011 18:28 1693720

Вложений: 1
murlakatamenka,
Цитата:

Цитата murlakatamenka
Цитата serhio: расширение папок »
у папок нету расширений, есть у файлов »

На рисунке, что я имел ввиду. А еще проще сразу в FreeArc'е не arc а bin ставить.

LinkOFF 13-06-2011 19:41 1693757

Нет мне надо добавить свою полосу в прогресс-бар.у меня сейчас синяя а мне надо зеленую

Gnom_aka_Lexander 13-06-2011 19:46 1693760

Цитата:

Цитата No4noylis
на мой вопрос никто не ответит????????? »

В конце скрипта добавь:
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
PauseButton.Show;
  case CurPageID of
    wpWelcome: begin
PauseButton.Hide;
    end;
  end;
end;

Цитата:

Цитата LinkOFF
Нет мне надо добавить свою полосу в прогресс-бар.у меня сейчас синяя а мне надо зеленую »

Подключай скин, в скине крась хоть серо-буро-козявчатым. Кстати, по умолчанию цвет прогрессбара именно зеленый, значит скин уже подключен, раз у тебя синяя.

murlakatamenka 13-06-2011 19:54 1693764

что-то я не пойму ...
Цитата:

Цитата LinkOFF
как добавить свой прогресс-бар? »

я написал, как добавить свой прогрессбар
Цитата:

Цитата LinkOFF
Нет мне надо добавить свою полосу в прогресс-бар.у меня сейчас синяя а мне надо зеленую »

какую ещё полосу, цвет прогрессбара надо поменять ? можно поконкретнее
в родном прогрессбаре поменять цвет нельзя. в добавленном тоже. если только через ISSkin.dll, о чём Лександер написал

LinkOFF 13-06-2011 19:55 1693765

Лександер, У меня подключен скин tiger.Там синяя полоса.Я не знаю как красить

LinkOFF 13-06-2011 20:12 1693770

Я знаю что можно через скрипт добавить свою полосу прогресс-бара.Но не знаю как

Gnom_aka_Lexander 13-06-2011 20:18 1693772

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

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

LinkOFF 13-06-2011 20:22 1693774

Лександер, а ты не поскажешь как мне цвет изменить а то я не умею

у меня вот-такой прогресс-бар
мне зеленый нужен

No4noylis 13-06-2011 20:47 1693787

http://rghost.ru/10696401 Вот скрипт на проигрывание музыки!!!

Gnom_aka_Lexander 13-06-2011 21:13 1693805

LinkOFF, открываеш скин, потом не закрывая его идеш в мои докумены, далее по этому пути: \Skin Builder Projects\Tiger\Black - находиш элемент, которй хочеш изменить, и перекрашиваеш его любым графическим редактором, сохраняеш. Потом в СкинБилдере файл-экспорт-экспорт в cjstyles файл, сохраняеш, используеш.

No4noylis, и чего тебе не нравится? кнопки отключения музыки нет на странице приветсятвия, чего еще нужно?

insombia 13-06-2011 21:32 1693824

No4noylis уже розобрался

nik1967 13-06-2011 21:33 1693828

Цитата:

Цитата murlakatamenka
в родном прогрессбаре поменять цвет нельзя. »

Ну почему же, например:
Код:

[_Code]
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, clBlack);
end;

Или вот с этим побаловаться:
Код:

TNewProgressBarState = (npbsNormal, npbsError, npbsPaused);

LinkOFF 13-06-2011 21:36 1693832

Лександер, Че-то я там не нашел справки там только про добавление скина в инсталятор а про изменение ничего нету

LinkOFF, Все я понял.Спасибо большое

nik1967 13-06-2011 21:43 1693838

LinkOFF, Grey&Black.cjstyles с зелёным прогрессбаром.

insombia 13-06-2011 21:44 1693839

как растянуть первую и последнюю картинку на всё окно?

No4noylis 13-06-2011 21:49 1693841

Цитата:

Цитата Лександер
No4noylis, и чего тебе не нравится? кнопки отключения музыки нет на странице приветсятвия, чего еще нужно? »

меня попросили выложить этот скрипт!!! :) А за помощь большое спасибо!!!

nik1967 13-06-2011 21:52 1693842

insombia, посмотри у Лександер'а подпись. Перейди по этой ссылке, зайди на готовые решения - "Вставка изображения на первую и последнюю станицу" - опа!

insombia 13-06-2011 21:52 1693844

No4noylis cылку можно было бы и в личку кинуть :)

LinkOFF 13-06-2011 21:57 1693847

Цитата:

Цитата nik1967
LinkOFF, Grey&Black.cjstyles с зелёным прогрессбаром. »

Да я уже себе сделал.Но все равно спасибо.А ты из механиков чтоль(Просто интересно)

И не подскажешь как мне на 2 диска установку сделать в скрипте ISDone

nik1967 13-06-2011 22:03 1693851

Цитата:

Цитата LinkOFF
А ты из механиков чтоль(Просто интересно) »


Gnom_aka_Lexander 13-06-2011 22:04 1693853

LinkOFF, Он из каталистов, а про разбиение в исдоне - я тебе уже отвечал, да и в справки очень подробно и понятно все описано.

insombia 13-06-2011 22:06 1693855

nik1967 пробЫвал но если взять только на 1 и последней то на остальных не будет видно текста :unsure:

nik1967 13-06-2011 22:12 1693859

insombia, скачай мой старый инсталл Need For Speed Hot Porsuit v1.5, и посмотри. Правда есть но, там ISDone 0.5final, до 0.6 не обновлял - ленюсь.

tiestos 13-06-2011 22:32 1693875

Как исправить это?


LinkOFF 13-06-2011 22:37 1693877

tiestos, Поставь другое расширение на картинку

LinkOFF 13-06-2011 23:09 1693900

nik1967, так ты мне поможешь с разбитием на 2 диска?

insombia 13-06-2011 23:14 1693902

tiestos поменяй на logo.bmp в любом редакторе

nik1967 13-06-2011 23:14 1693903

LinkOFF, если честно, то ещё ни разу не делал репаки на 2 диска - стараюсь на один запихнуть. Так, что, извини - не помогу.

LinkOFF 13-06-2011 23:17 1693906

nik1967, а можешь помочь с проверкой места на диске?
И какой программой ты пользуешься для добавления прозрачности в картинки(ну или вообще редактирования)Если можно

tiestos 14-06-2011 02:24 1693971

мне нада именно в png или gif

insombia 14-06-2011 16:56 1694329

tiestos а inno setup'у нужно именно bmp

tiestos 14-06-2011 17:23 1694340

я видел некоторые делают и в jpg\png\gif

LinkOFF 14-06-2011 17:28 1694343

tiestos, просто скачай прогу FomatFactory - http://www.formatoz.com/
Я ей сам пользуюсь очень часто

tiestos 14-06-2011 17:30 1694348

мне png или gif нада из-за прозрачности в них, а не из-за того что я не можу переконвертировать

insombia 14-06-2011 17:34 1694352

tiestos в png переделай там где у тебя ошибку выдаёт и всё

LinkOFF 14-06-2011 18:00 1694362

Люди а кто знает как в картинках прозрачность делать?

tiestos 14-06-2011 21:52 1694483

вот я и спрашиваю как переделать, ибо что gif что png одинаковые ошибки выдаёт

murlakatamenka 15-06-2011 02:02 1694620

Цитата:

Цитата LinkOFF
Люди а кто знает как в картинках прозрачность делать? »

фотошопом (инструменты волшебный ластик, фоновый ластик)

Gnom_aka_Lexander 15-06-2011 12:24 1694801

Концепт нового инсталла для innoultra :) Вставка изображений на все 14 страниц инсталлятора :) Деинсталлятор еще не делал, чуть позже добавлю.
Основная фишка - под себя меняем только секции файлов, компонентов, задач, реестра, и т.п., в коде менять ничего не нужно :)

Скачать.

STRAYKER 15-06-2011 15:31 1694889

У меня вопросик:
Мне нада чтобы пароль в инсталяторе был не один а их много

insombia 15-06-2011 19:10 1694997

Подскажите как сильно можно сжать игру фриарком?Мне нужно сжать игру Bulletstorm хотябы чтобы занимала 4 гб, на ПК она у меня весит 6 50 гб а у механиков установка занимает 2 70 гб как так можно сжимать?

Gnom_aka_Lexander 15-06-2011 19:24 1695009

insombia, Спроси здесь. Твой вопрос никаким боком не относится к теме.
Цитата:

Цитата Serega
Внимание! Данная тема предназначена только для обсуждения написания скриптов ! »

Вторая версия концепта, сделан деинсталлятор, вся настройка скрипта вынесена в секцию [Setup] :)
Есть небольшие косяки, но это уже в выходные доделаю до финала.

Скачать.

valyok666 16-06-2011 10:49 1695394

доброго времени суток)у меня установщик мне надо сделать так чтобы в ярлыке появлялись прописи можно ли прописать это в сетупе???типо от hl.exe будет создаваться ярлык с прописью в объект С\Programm Files\CS1.6\hl.exe -game cstrike -non-steam можно ли так сделать отпишитесь кто знает))

murlakatamenka 16-06-2011 15:18 1695606

valyok666, примерно так
Код:

[Icons]
Name: "{commondesktop}\Counter-Strike"; Filename: "{app}\hl.exe"; Parameters: "-game cstrike -non-steam";

цитата из help
Цитата:

Parameters
Optional command line parameters for the shortcut, which can include constants.

Цитата:

Example:
Parameters: "/play filename.mid"

возможно ещё надо будет сменить иконку у ярлыка на иконку от КС
тогда надо будет добавить в конец строки следующий код
Цитата:

IconFilename: "{app}\cstrike\cstrike.ico";

murlakatamenka 16-06-2011 18:33 1695787

Neutron
вот тут есть кое-что похожее, попросил автора рипа поделиться скриптом, который он переделывал (в том случае, если он переделывал, а не писал весь скрипт сам). насколько я знаю, очень многое для таких вещей делается через ботву.

insombia 16-06-2011 21:46 1695926

Neutron то спроси у того кто создавал репак

Gnom_aka_Lexander 16-06-2011 21:55 1695938

Цитата:

Цитата Neutron
Похож! И где можно найти такой похожий скрипт? Гугл молчит вообще! »

Тот скрипт один товариш по имени репачек переделал из скрипта Андеркавер от Юршата.
Скачать

insombia 16-06-2011 22:14 1695956

Вот лиж бы по флудить вот именно ты же всё время флудил

insombia 16-06-2011 23:25 1696007

как сделать как сдесь чтобы текст был написан в рамке? http://img88.imageshack.us/img88/2982/piczv.jpg

valyok666 16-06-2011 23:37 1696011

Цитата:

Цитата murlakatamenka
[Icons] Name: "{commondesktop}\Counter-Strike"; Filename: "{app}\hl.exe"; Parameters: "-game cstrike -non-steam"; »

нет чет не получилось это(в ярлыке на рабочем столе в объекте ничего нет ((

murlakatamenka 17-06-2011 00:10 1696025

Цитата:

Цитата valyok666
Цитата murlakatamenka: [Icons] Name: "{commondesktop}\Counter-Strike"; Filename: "{app}\hl.exe"; Parameters: "-game cstrike -non-steam"; »
нет чет не получилось это(в ярлыке на рабочем столе в объекте ничего нет (( »

как же не получилось ? я проверял
вот скрипт, созданный полностью в мастере + добавлено Parameters для ярлыка
читать дальше »
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
AppId={{E1583694-32C8-460D-A305-E673985FE70B}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Parameters: "-game cstrike -non-steam";

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: nowait postinstall skipifsilent



т.е. создаётся ярлык с нужными параметрами. если что-то не получается, приводите скрипт, поможем :)
---------------------------------------------
Цитата:

Цитата insombia
как сделать как сдесь чтобы текст был написан в рамке? http://img88.imageshack.us/img88/2982/piczv.jpg »

на картинку накладывается слой в фотошопе (насколько я знаю, делается чёрный прямоугольник со скруглёнными краями и потом увеличивается его прозрачность)
а в самом инно проще всего создать 1 свой лэйбл с текстом белого цвета
для переноса на следующую строку можно писать так
Код:

MyWelcomeLabel.Caption:='Привет'+CHR(13)+'Как дела ?';
получится
Цитата:

Привет
Как дела?
наверное можно ещё по-другому переносить, но я не знаю как, сам выгуглил когда-то, решил поделиться найденной инфой :)
а ещё проще созадть его (свой лэйбл) в расширенном компиляторе и там его отредактировать как надо (позиция, цвет шрифта и сам шрифт, caption ...)
--------------------------------------------
это пишу не я - вот

valyok666 17-06-2011 16:56 1696507

Цитата:

Цитата murlakatamenka
ак же не получилось ? я проверял
вот скрипт, созданный полностью в мастере + добавлено Parameters для ярлыка
читать дальше » »

я делаю в расширенной версии)тема tiger и установка идёт в нижнем правом углу экрана)я посмотрю сегодня потом отпишусь)

valyok666 17-06-2011 18:31 1696564

всё получилось просто во время объединения 2 скриптов еще одна такая же строка была!вот и не вносило туда)спасибо))
и за значок тож спс

insombia 17-06-2011 19:46 1696604

А можно ли в инсталятор вставить мини-игру пока игра устанавлеваеться?

R.i.m.s.k.y. 17-06-2011 20:07 1696609

insombia можно, вставляй! :lol: :biggrin:

insombia 17-06-2011 22:03 1696663

R.i.m.s.k.y. не вижу ничего смешного на сайте каталистов нашел репак в котором во время установки можно в мини игру играть которая вшита в инсталятор

Gnom_aka_Lexander 17-06-2011 22:08 1696667

insombia, Качай, изучай. Это флеш-игры, вставлены этой библиотекой. пример в архиве есть, разберешся, думаю.
Только сперва подумай - нет-ли причин, по которым от этой фишки быстро отказались?

insombia 17-06-2011 22:57 1696694

Как сделать чтобы isSlideShow был именно как у каталистов в инсталяторе?

R.i.m.s.k.y. 17-06-2011 23:06 1696699

Цитата:

Цитата insombia
не вижу ничего смешного на сайте каталистов нашел репак в котором во время установки можно в мини игру играть которая вшита в инсталятор »

извини, не хотел обидеть, но идея показалась мне сумасбродной, ведь когда игра/прога ставится достаточно долго человек обычно занимается чем-то другим

insombia 17-06-2011 23:09 1696702

R.i.m.s.k.y. та я не обиделся :) просто мне идея одного человека понравилась та и можно расслабиться пока игра ставиться

Gnom_aka_Lexander 18-06-2011 11:06 1696877

insombia, еще раз.
Цитата:

Цитата Лександер
Только сперва подумай - нет-ли причин, по которым от этой фишки быстро отказались? »

Я это не просто так написал. Идея оказалась неудачной, хоть и привлекательной. Когда идет тяжелая распаковка, и приэтом запущена сложная флешанимация - каковой является миниигра, комп может повиснуть насмерть. Плюс у этой длл-ки проблемы с выгрузкой из памяти, а автор сказал, что дальше развивать этот проект не будет, как бесперспективный.
Вот совершенно стороннее мнение:
читать дальше »
1.выгрузка не происходит. идет запрос не тех функций
2. нужен установленный флеш плеер адобе
3. при нажатие 2мя кликами идет разворот данного видео
4 и т.д есть еще пару косяков

LinkOFF 18-06-2011 17:53 1697089

А как мне сделать чтоб установка шла в нижнем правом углу экрана?
И как мне вернуть надписи вот здесь
Пропали надписи после присоеденения скрипта isdone.Как вернуть

insombia 18-06-2011 18:21 1697109

LinkOFF
механиковская установка
читать дальше »
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard();
begin
//Выносим кнопку "Отмена" на передний план
WizardForm.CancelButton.BringToFront;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling then
begin
WizardForm.BorderStyle:=bsDialog;
WizardForm.MainPanel.Visible:=False;
WizardForm.Width:=ScaleX(320);
WizardForm.Height:=ScaleY(127);
WizardForm.InnerNotebook.Left:=ScaleX(7);
WizardForm.InnerNotebook.Top:=ScaleY(7);
WizardForm.InnerNotebook.Width:=ScaleX(300);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(17);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(37);
WizardForm.ProgressGauge.Left:=ScaleX(0);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(122);
WizardForm.CancelButton.Top:=ScaleY(70);
WizardForm.Left:=GetSystemMetrics(16)-ScaleX(315);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(105);
WizardForm.Bevel.hide;
WizardForm.Bevel1.hide;
end;
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;{Размер окна по горизонтали}
WizardForm.Height:=392;{Размер окна по вертикали}
WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
end
end;

leshcat 18-06-2011 18:28 1697113

Добрый день,

А скажите пожалуйста, можно ли сделать так, чтобы перед началом показа окна инсталлятора Плавно появлялась картинка а потом так же плавно исчезала?

Если да, то, пожалуйста, приведите пример скрипта, если это возможно.

insombia 18-06-2011 19:48 1697155

leshcat

[Files]
Source: "C:\Users\Urban\Desktop\WizardImage.bmp"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

[code]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard;
begin
ExtractTemporaryFile('WizardImage.bmp');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\WizardImage.bmp',1000,3000,1000,0,255,F alse,$FFFFFF,10);
end;

leshcat 18-06-2011 20:45 1697187

Большое спасибо!

Работает, не только с bmp, но и с другими форматами (проверил на jpg, png). А есть информация за что отвечает каждый параметр?

insombia 18-06-2011 21:15 1697206

leshcat инфы нету я дал тебе код с inno setup gamescript generator

rang3r 18-06-2011 21:26 1697208

Привет,
Думаю тема уже поднималась, но мне не удалось найти примеров, проблема следующая,
Код:

DefaultDirName={reg:HKCU\Software\JetBrains\IntelliJ IDEA\93.94,|C:\Default}\plugins
Я пытаюсь сделать установочник для плагина к IDE, так вот мне надо определить ее местоположение, думаю это делать через реестр, нашел ключ прописал его , остался следующий момент,
как видно самая нижняя нода в пути "93.94" , это версия самой IDE, а она может быть у всех разной, можно ли как то разрулить этот момент через regexp ? Я попробовал вместо номера варсии поставить *, скомпилировал , запустил, на одной машине (Win7) это сработало, а на другой (WinXP) нет, подскажите как можно решить эту проблему ?

Gnom_aka_Lexander 18-06-2011 21:32 1697213

rang3r, держи, взял путь из меню проводника "Открыть с помощью..." этот ключ не зависит от весии.
читать дальше »
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={code:GetPath|{pf}\MyApp}\plugins

[code]
function GetPath(S: String): String;
var Path: String;
begin
RegQueryStringValue(HKCR, 'IntelliJIdeaProjectFile\shell\open\command', '', Path);
if Path <> '' then begin
StringChange(Path, '"%1"', '');
while Pos('"', Path) > 0 do StringChange(Path, '"', '');
Path:= ExtractFilePath(Path);
end;
If Path = '' then Path:= S;
Result:= Path;
end;

leshcat 18-06-2011 22:07 1697242

insombia

Ага. Тогда сам отвечу на свой вопрос:
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\WizardImage.bmp',X,Y,Z,0,255,Bool,$FFFF FF,10);
X = время появления
Y = время показа
Z = время затухания
0 = минимальная прозрачность
255 = максимальная прозрачность
Bool = видимо "Вырезать (считать прозрачным) цвет"
Остальное непонятно.

leshcat 18-06-2011 22:36 1697261

Еще вопрос:

Возможно сделать так, чтобы прогресс инсталляции был примерно такого рода?

Тоесть маленькое, простое,% и время, можно без кнопок отмены или закрытия (вес файлов не так велик).

rang3r 18-06-2011 22:38 1697263

Лександер
Спасибо огромное, на Win7 все без проблем заработало, на WinXP добавил только 1 строчку
Код:

StringChange(Path, '\bin', '');
Еще раз спасибо.

murlakatamenka 19-06-2011 00:37 1697327

Цитата:

А есть информация за что отвечает каждый параметр?
есть
Цитата:

ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\WizardImage.bmp',1000,3000,1000,0,255,F alse,$FFFFFF,10);
по порядку:
хэндл (дескриптор) окошка мастера, путь к картинке, время появления, время показа, время исчезновения, минимальная прозрачность, максимальная прозрачность, считать прозрачным цвет, считающийся прозрачным цвет, хз

leshcat 19-06-2011 01:25 1697352

murlakatamenka
:) Спасибо. А что насчет этого?

murlakatamenka 19-06-2011 02:03 1697364

leshcat, а опишите подробнее процесс инсталляции
как я понял, запускается setup.exe и всё устанавливается в таком вот окошке без взаимодействия с пользователем. или так выглядит сам процесс установки после выбора папки установки и ... ?

leshcat 19-06-2011 03:43 1697376

murlakatamenka

Схема такова:

1.Появляется картинка перед инсталлятором.
2.Начинается полноэкранное слайдшоу (которое идет вплоть до конца, тоесть нажатия кнопки exit) и нормальный вид инсталлятора дает выбирать что нужно, куда ставить итп.
3.Когда все выбрано, начинается "инсталляция". Вот тут то и должно появлятся вместо "грузного" стандартного вида это будущее маленькое, как описано в посте 1955 и приятное на вид окно, которое показывает % и прошедшее время инсталла(опционально).
4. Появляется Конечное меню инсталлятора в Нормальном виде, чтобы отметить 3-4 чекбокса и все.
5. При выходе еще разок в быстром темпе проиграются все слайды(все еще под вопросом).

:) вот как-то так.

insombia 19-06-2011 12:12 1697463

как сделать чтобы здесь http://pic.4m.net.ua/images/22349666621408822799.jpg можно было выбрать только один компонент и вместо галочки кружочок был?

leshcat то что-то подобное на 7-zip если хочеш вот код на него

читать дальше »
procedure CurStepChanged(CurStep: TSetupStep);
var
res:Integer;
app, arc, dest:string;
begin
If CurStep=ssPostInstall
then
begin
app:=ExpandConstant('{src}')+'\7za.exe';
arc:=ExpandConstant('{src}')+'\ARC.7z';
dest:=ExpandConstant('{app}');
Exec(app, 'x "'+ arc + '" -y -o"'+ dest + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);
end;
end;

Gnom_aka_Lexander 19-06-2011 13:11 1697487

insombia, в справку загляни. в частности - флаг эксклюзив.

leshcat 19-06-2011 16:03 1697561

insombia

Вы меня не так поняли :)

valyok666 19-06-2011 17:01 1697588

здрасте)нужна помощь нужно сделать вместо дополнительные параметры "Установка моделей Steam" и модели брались из папки как в установке доп ПО как это прописать?

ещё один вопрос)кто нить знает файл в который надо прописать чтоб в меню сверху были???очень нужно помогите плиз

*чтобы сервера были в меню сверху

insombia 19-06-2011 17:36 1697614

leshcat не вы а ты :) то я пример тебе привел там тоже будет такая же установка какая тебя интересует

Gnom_aka_Lexander 19-06-2011 19:48 1697689

Последняя версия скрипта для вставки изображений. Сделал принципиально по другому, в целях улучшения унификации и повышения гибкости настройки. Скачать. Компилируем main.iss.

Особенности:
Управление полностью из секции [Setup], фоновое изображение и текстуры кнопок - там-же. Отсутствие какого-либо из файлов не повлечет за собой ошибки.
Инсталл полностью дефолтный - секцию [code] править не нужно.
В обработке участвуют только необходимые куски кода, исходя из данных, указанных в секции [Setup]

Внимание - в этой версии, модуль не зависит от расположения и измененного размера элементов а также от изменения Окна инсталла. Единственное условие - размер используемого изображения должен точно соответствовать параметрам WizardForm.ClientWidth и WizardForm.ClientHeight для нормального скинирования чекбокслистов.
Внимание - если у вас WizardForm.OuterNotebook.Hide; и WizardForm.InnerNotebook.Hide;, то можно сразу отказываться от применения данного модуля - он построен как раз на не сокрытии OuterNotebook и InnerNotebook
Огромное спасибо Shegorat, за помощ в паре непосильных для меня моментов :)

LinkOFF 19-06-2011 20:18 1697712

Здравствуйте. У меня после присоеденения скрипта isdone пропали надписи в верхней части инсталятора.Вот здесь


Помогите мне восстановить

Gnom_aka_Lexander 19-06-2011 20:26 1697719

LinkOFF, нужно смотреть твой скрипт - это раз. пропали надписи не изза исдоне - это два. Готов на пару тысяч баксов поспорить. Ищи строчки
Код:

    WizardForm.PageDescriptionLabel.Visible := False;
    WizardForm.PageNameLabel.Visible := False;

либо
Код:

    WizardForm.PageDescriptionLabel.Hide;
    WizardForm.PageNameLabel.Hide;

Это и есть эти надписи. Если найдеш подобные строчки - то удали их, и надписи появятся. Но тебе результат не понравится. :)

LinkOFF 19-06-2011 20:50 1697728

Вот скрипт http://rghost.ru/11606701
Те строчки я не нашел.Лександер, если тебе не трудно не мог бы ты посмотреть сто со скриптом

Gnom_aka_Lexander 19-06-2011 20:55 1697729

LinkOFF,
Код:

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
..........................

закоментируй строчки
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
В этом куске. Просто нужно понимать, что
with WizardForm do
begin
PageNameLabel.Hide; равняется WizardForm.PageNameLabel.Hide;

LinkOFF 19-06-2011 21:05 1697732

Лександер, Я закоментировал строчки но уменя получилось вот что
Нету прозрачности у надписи

Sotonisto 19-06-2011 21:35 1697761

LinkOFF, попробуй взять скрипт шапки с этого инсталла.

Fallout New Vegas

LinkOFF 19-06-2011 21:52 1697771

Sotonisto, да только я не могу туда логотип вставить.Не поможешь?

leshcat 19-06-2011 22:52 1697811

insombia

Код, который вы привели, не имеет никакого отношения к виду окна о котором я говорил :(

valyok666 19-06-2011 23:00 1697816

объясните как подключать модули ?самый простейший пример плз

Sotonisto 19-06-2011 23:47 1697847

LinkOFF, ну вот примерно так (не знаю как у тебя раньше было, но я решил сделать лого кликабельным) :)
СКАЧАТЬ

Diman19 20-06-2011 02:28 1697902

Всем привет! Подскажите пожалуйста:Если при установке программы будет выбор компонентов,такие как языки,плагины,патчи(компоненты будут выбиратся чекбоксами и радио кнопками)как лучше паковать саму программу?Указать целую папку с программой,или скинуть все файлы в общую папку и прописывать каждый файл в код и папку куда копировать данный файл при установке?И если указать целую папку,что нужно добавить при прописывании путей к дополнительным компонентов?Если чекбокс снят то компонент не устанавливается,если выбран то компонент устанавливается.Помогите пожалуйста советом.

Спасибо!

insombia 20-06-2011 11:04 1698033

valyok666 #include "FreeArc.iss" в самом верху прописуй чуть выше чем строка setup

Sotonisto 20-06-2011 11:13 1698036

Diman19, а чем тебя стандартный пример не устраивает?
читать дальше »
Код:

[Files]
Source: "D:\Программа\языки\английский\*"; DestDir: {app}; Components: lng/en; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Программа\языки\русский\*"; DestDir: {app}; Components: lng/ru; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Программа\патч\*"; DestDir: {app}; Components: patch; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\Программа\плагины\*"; DestDir: {app}; Components: plug; Flags: ignoreversion recursesubdirs createallsubdirs

[Types]
Name: all; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: lng; Description: Язык программы; Flags: fixed; Types: custom
Name: lng/en; Description: Английский; Flags: exclusive
Name: lng/ru; Description: Русский; Flags: exclusive
Name: patch; Description: Установить патчи; Types: custom all
Name: plug; Description: Установить плагины; Types: custom all


insombia 20-06-2011 14:04 1698156

как сделать чтобы установочный файл был вместо bin-arc ?

LinkOFF 20-06-2011 14:54 1698189

insombia, переименуй расширение программой 7-Zip

Sotonisto,
Цитата:

Цитата Sotonisto
LinkOFF, ну вот примерно так (не знаю как у тебя раньше было, но я решил сделать лого кликабельным) »

У меня две страницы пропали с доп. компонентами и с задачами.Но все равно огромное спасибо!

Sotonisto, можешь мне isdone присоеденить а то у меня CurPageChanged ругается
вот http://rghost.ru/11703661

insombia 20-06-2011 15:28 1698214

LinkOFF покажи скрин где ругается

No4noylis 20-06-2011 15:53 1698224

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

LinkOFF 20-06-2011 16:00 1698227

insombia, http://i23.fastpic.ru/big/2011/0620/...279edeb1bc.jpg

No4noylis,
[Tasks]
Name: additional; Description: "Дополнительное ПО";(Не обязательно)
Name: additional\dx; Description: "Обновить DirectX "; Flags: unchecked

[Run]
Filename: {src}\Redist\DirectX\DXSETUP.exe; Tasks: additional\dx; Parameters: /silent; StatusMsg: Установка DirectX

No4noylis 20-06-2011 16:13 1698236

LinkOFF спасибо большое, но я так уже делал, все одно и тоже, доходит до установки directx, инсталлятор зависает секунд на 40 и потом переходит на следующую страницу!!! помоги, плиз!!((((((

R.i.m.s.k.y. 20-06-2011 16:22 1698241

блин как же народ обленился, ведь такие простые вопросы в шапке - в примерах скриптов, примерах инсталлеров игр, народ ленится даже тупо скачать и посмотреть! ведь в шапке даже учебник переведенный лежит! :read:

а сердобольные камрады это рас***во поощряют!

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

ну ведь какое-то самообразование должно быть?

тот же дирекс спрашивают каждые 2-3 страницы

insombia 20-06-2011 17:11 1698276

LinkOFF http://rghost.ru/11721671

No4noylis так и надо ведь установка direct'a идет в тихом режиме вот тебе и кажеться что инсталятор завис

serhio 20-06-2011 18:21 1698318

Вложений: 1
Добрый день всем! Ребят подскажите кто в курсе что писать в батнике.
См. картинку.

R.i.m.s.k.y. 20-06-2011 18:37 1698330

Цитата:

Цитата serhio
Добрый день всем! Ребят подскажите кто в курсе что писать в батнике. »

а что он должен сделать?

serhio 20-06-2011 18:44 1698332

R.i.m.s.k.y., насколько я знаю, то сжать какой либо фаил!

R.i.m.s.k.y. 20-06-2011 18:47 1698333

Цитата:

Цитата serhio
насколько я знаю, то сжать какой либо фаил »

каким архиватором? где лежат файлы и сам архиватор? нельзя ли этот файл просмотреть и содержимое сюда положить?

serhio 20-06-2011 19:01 1698346

Цитата:

Цитата R.i.m.s.k.y.
каким архиватором? где лежат файлы и сам архиватор? нельзя ли этот файл просмотреть и содержимое сюда положить? »

FreeArc архив. Файл(ы) кладутся в папку rep. Rep типо srep'а, вот только что в батнике прописывать незнаю.

R.i.m.s.k.y. 20-06-2011 19:07 1698351

freearc я тоже не знаю

leshcat 20-06-2011 19:26 1698365

Помогите пожалуйста объединить код.

Первая часть из гейм скриптора.
читать дальше »

Код:

[Setup]
SourceDir=.
OutputDir=Setup
AppName=FEAR2
AppVerName=FEAR2
AppVersion=FEAR2
DefaultDirName={pf}\FEAR2
DefaultGroupName=FEAR2
AllowNoIcons=yes
OutputBaseFilename=setup
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=lzma/normal
DiskSpanning=yes
DiskSliceSize=2100000000
SlicesPerDisk=1

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

[Files]
Source: "C:\Users\admin\Desktop\Project2\parts\Slides\slide1.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "C:\Users\admin\Desktop\Project2\parts\Slides\slide2.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "C:\Users\admin\Desktop\Project2\parts\Slides\slide3.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "C:\Users\admin\Desktop\Project2\parts\Branding_map.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

Source: "C:\Games\FEAR2\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Icons]
Name: "{group}\{cm:UninstallProgram,FEAR2}"; Filename: "{uninstallexe}"

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

[_Code]
const
  Indent=25;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boolean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
procedure ssAddImage(FileName:PChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard;
begin
  ExtractTemporaryFile('FEAR.jpg');
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\FEAR.jpg',1000,3000,1000,0,255,False,$FFFFFF,10);
  ssInitialize(GetWindowLong(MainForm.Handle,-8),10,False,1,$FF000000);
  ExtractTemporaryFile('FEAR.jpg');
  ssSetBkgImage(ExpandConstant('{tmp}')+'\FEAR.jpg');
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep=ssInstall then begin
    ExtractTemporaryFile('slide1.jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\slide1.jpg');
    ExtractTemporaryFile('slide2.jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\slide2.jpg');
    ExtractTemporaryFile('slide3.jpg');
    ssAddImage(ExpandConstant('{tmp}')+'\slide3.jpg');
    ssStartShow;
  end;
  if CurStep=ssPostInstall then ssStopShow;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpInstalling then begin
    WizardForm.MainPanel.Visible:=False;
    WizardForm.Bevel1.Visible:=False;
    WizardForm.Width:=ScaleX(395);
    WizardForm.Height:=ScaleY(142);
    WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent);
    WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent);
    WizardForm.InnerNotebook.Left:=ScaleX(10);
    WizardForm.InnerNotebook.Top:=ScaleY(10);
    WizardForm.InnerNotebook.Width:=ScaleX(370);
    WizardForm.StatusLabel.Left:=ScaleX(0);
    WizardForm.StatusLabel.Top:=ScaleY(0);
    WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.FileNameLabel.Left:=ScaleX(0);
    WizardForm.FileNameLabel.Top:=ScaleY(20);
    WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.ProgressGauge.Top:=ScaleY(40);
    WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
    WizardForm.CancelButton.Left:=ScaleX(154);
    WizardForm.CancelButton.Top:=ScaleY(80);
  end;
  if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then begin
    if WizardForm.Width<>502 then begin
      WizardForm.Visible:=False;
      WizardForm.Width:=ScaleX(502);
      WizardForm.Height:=ScaleY(392);
      WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2;
      WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2;
      WizardForm.MainPanel.Visible:=True;
      WizardForm.Bevel1.Visible:=True;
      WizardForm.InnerNotebook.Left:=ScaleX(40);
      WizardForm.InnerNotebook.Top:=ScaleY(72);
      WizardForm.InnerNotebook.Width:=ScaleX(417);
      WizardForm.Visible:=True;
    end;
  end;
end;

procedure DeinitializeSetup;
begin
  ssDeInitialize;
end;


Вторая часть взята из архива скриптов.

Отображает проценты и байты прогрессбара:
читать дальше »

Код:

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

[Files]
Source: Files\*; DestDir: {app}; AfterInstall: Progress()

[_Code]
var
  ProgressLabel, SizeLabel: TLabel;

procedure Progress();
var
  size: integer;

begin
  with WizardForm.ProgressGauge do
    ProgressLabel.Caption:= IntToStr((Position-Min)/((Max - Min)/100)) + '%';
        FileSize(ExpandConstant(CurrentFileName), size);
        SizeLabel.Caption:= IntToStr(size) + ' bytes';
end;

procedure InitializeWizard();
begin
  ProgressLabel := TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
      ProgressLabel.Top := Top + Height + ScaleY(8);
      ProgressLabel.Left:= Left + Width/2 - ScaleX(8);
      ProgressLabel.AutoSize := True;
      ProgressLabel.Parent := WizardForm.InstallingPage;
    end;

  SizeLabel := TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
      SizeLabel.Top := Top + Height + ScaleY(8);
      SizeLabel.Left:= Left;
      SizeLabel.AutoSize := True;
      SizeLabel.Parent := WizardForm.InstallingPage;
    end;
end;


Так вот, было бы здорово получить у гейм прогрессбара % и время.

Dark_Delphin 20-06-2011 20:57 1698441

Всем добрый день!
Я вот разделил игру на два диска:
Код:

DiskSpanning=true
SlicesPerDisk=2
DiskSliceSize=2100000000

И когда я запускаю Setup.exe , то сразу же требует второй диск.
Как это исправить?

Gnom_aka_Lexander 20-06-2011 21:10 1698452

ntrx, SlicesPerDisk - количество частей на диск, а не количество дисков. Инно не может разбить на какоето количество дисков, потому, что только господь бог ведает, какой объем получится у тебя после компиляции. что еще ты сделал, кроме добавления строчек? как записал на диск получившиеся бин-файлы?

insombia 20-06-2011 22:11 1698499

leshcat смотри это делать легко я сам недавно узнал вобщем

читать дальше »
[code]
const
Indent=25;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
procedure ssAddImage(FileName:PChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure InitializeWizard1();
begin
ExtractTemporaryFile('FEAR.jpg');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\FEAR.jpg',1000,3000,1000,0,255,False,$F FFFFF,10);
ssInitialize(GetWindowLong(MainForm.Handle,-8),10,False,1,$FF000000);
ExtractTemporaryFile('FEAR.jpg');
ssSetBkgImage(ExpandConstant('{tmp}')+'\FEAR.jpg');
end;

procedure CurPageChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then begin
ExtractTemporaryFile('slide1.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\slide1.jpg');
ExtractTemporaryFile('slide2.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\slide2.jpg');
ExtractTemporaryFile('slide3.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\slide3.jpg');
ssStartShow;
end;
if CurStep=ssPostInstall then ssStopShow;
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
if CurPageID=wpInstalling then begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent);
WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end;
if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then begin
if WizardForm.Width<>502 then begin
WizardForm.Visible:=False;
WizardForm.Width:=ScaleX(502);
WizardForm.Height:=ScaleY(392);
WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2;
WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2;
WizardForm.MainPanel.Visible:=True;
WizardForm.Bevel1.Visible:=True;
WizardForm.InnerNotebook.Left:=ScaleX(40);
WizardForm.InnerNotebook.Top:=ScaleY(72);
WizardForm.InnerNotebook.Width:=ScaleX(417);
WizardForm.Visible:=True;
end;
end;
end;

procedure DeinitializeSetup;
begin
ssDeInitialize;
end;
////////////////////////////////////////////////////////
var
ProgressLabel, SizeLabel: TLabel;

procedure Progress();
var
size: integer;

begin
with WizardForm.ProgressGauge do
ProgressLabel.Caption:= IntToStr((Position-Min)/((Max - Min)/100)) + '%';
FileSize(ExpandConstant(CurrentFileName), size);
SizeLabel.Caption:= IntToStr(size) + ' bytes';
end;

procedure InitializeWizard2();
begin
ProgressLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top := Top + Height + ScaleY(8);
ProgressLabel.Left:= Left + Width/2 - ScaleX(8);
ProgressLabel.AutoSize := True;
ProgressLabel.Parent := WizardForm.InstallingPage;
end;

SizeLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
SizeLabel.Top := Top + Height + ScaleY(8);
SizeLabel.Left:= Left;
SizeLabel.AutoSize := True;
SizeLabel.Parent := WizardForm.InstallingPage;
end;
end;
///////////////////////////////////////////////////
procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
CurPageChanged1(CurPageID);
end;

Gnom_aka_Lexander 21-06-2011 00:30 1698569

Neutron, собственно, даже этот список не обязателен, просто любую процедуру(абсолютно любую) можно неоднократно дублировать, главное давать им разные названия и под самой нижней собрать их все в одной с оригинальным названием, каковая и отработает, учтя все остальные, которые будт в ней указаны. функции дублировать нельзя.

nik1967 21-06-2011 09:21 1698650

Цитата:

Цитата R.i.m.s.k.y.
ведь в шапке даже учебник переведенный лежит! »

Эээ... Блин, даже в 4 глаза не вижу :cool: Тыкни мне, пожалуйста!

R.i.m.s.k.y. 21-06-2011 09:39 1698659

в шапке "Русская справка" http://sabbathblacklab.narod.ru/rus2/is5hlp.rar
открываешь и читаешь по порядку

вот еще
Инструкция по Inno Setup - Инструкция по Inno Setup в формате PDF для начинающих от sjwrec. http://ifolder.ru/20364329

nik1967 21-06-2011 10:03 1698672

R.i.m.s.k.y., а, это всё есть. Я то думал
Цитата:

Цитата nik1967
учебник »

настоящий.

R.i.m.s.k.y. 21-06-2011 10:25 1698686

Цитата:

Цитата nik1967
а, это всё есть. »

мне и это не понадобилось, самодуром допер до простых вещей

nik1967 21-06-2011 11:30 1698730

Цитата:

Цитата R.i.m.s.k.y.
мне и это не понадобилось, самодуром допер до простых вещей »

Ага, аналогично. Но хелп тоже здорово помогает. Пардон за :off: Заканчиваем флуд :flood:

El Sanchez 21-06-2011 13:33 1698831

Цитата:

Цитата Neutron
Доброго времени суток!
1) Подскажите, как сделать такое?
Скрин »

Neutron, только инсталлер. Требует китайского компилятора. Деинсталлятор мне банально лень рисовать :).
Скрипт

Код:

;5.4.2
#ifndef IS_ENHANCED
    #error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif

#define AppName "Test"
#define AppVerName "Test"


[Setup]
AppName={#AppName}
AppVerName={#AppVerName}
DefaultDirName={pf}\{#AppName}
DefaultGroupName={#AppName}
OutputBaseFilename=test
Compression=lzma
LicenseFile={app}\test.txt
InfoBeforeFile={app}\test.txt
InfoAfterFile={app}\test.txt
AllowNoIcons=yes
AlwaysRestart=yes
BitmapResource=bgnd:embedded\background.bmp|bar:embedded\bar.bmp|pic1:embedded\pic-1.bmp|pic2:embedded\pic-2.bmp|pic3:embedded\pic-3.bmp|pic4:embedded\pic-4.bmp

[Files]
Source: {app}\test.txt; DestDir: {app}

[Icons]
Name: {group}\Test; Filename: {app}\test.txt

[Components]
Name: a; Description: a; Types: test custom
Name: b; Description: b; Types: custom

[Types]
Name: custom; Description: custom; Flags: iscustom
Name: test; Description: test

[Tasks]
Name: test; Description: test; GroupDescription: test

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

[code]
var
    x, y, y1: Integer;
    i: Byte;

procedure InitializeWizard();
begin
    with WizardForm do
    begin
        PageNameLabel.Hide;
        PageDescriptionLabel.Hide;
        WizardBitmapImage.Hide;
        WizardBitmapImage2.Hide;
        WizardSmallBitmapImage.Hide;
        MainPanel.Hide;
        Bevel1.Hide;
        WelcomePage.Hide;
        LicenseLabel1.Hide;
        LicenseAcceptedRadio.Hide;
        LicenseNotAcceptedRadio.Hide;

        ClientHeight := ScaleY(480);
        ClientWidth := ScaleX(640);

        //WizardBitmapImage
        with TBitmapImage.Create(WizardForm) do
        begin
            Parent := WizardForm;
            Bitmap.LoadFromResourceName(HInstance, '_IS_BGND');
            Align := alClient;
            SendToBack;
        end;

        //WizardSmallBitmapImage
        with TBitmapImage.Create(WizardForm) do
        begin
            Parent := WizardForm;
            Bitmap.LoadFromResourceName(HInstance, '_IS_BAR');
            Width := Bitmap.Width;
            Height := Bitmap.Height;
            Name := 'Bar';
        end;

        //PageNameLabel
        with TLabel.Create(WizardForm) do
        begin
            Parent := WizardForm;
            Font.Size := TBitmapImage(WizardForm.FindComponent('Bar')).Height div 2 - TBitmapImage(WizardForm.FindComponent('Bar')).Height div 20;
            Font.Name := 'Arial';
            Font.Color := clWhite;
            Left := TBitmapImage(WizardForm.FindComponent('Bar')).Width div 30;
            Top := (TBitmapImage(WizardForm.FindComponent('Bar')).Height - Height) div 2;
            Transparent := True;
            Caption := ExpandConstant('{#AppVerName}');
        end;

        //Buttons
        NextButton.Left := ClientWidth - NextButton.Width - NextButton.Width div 4;
        NextButton.Top := ClientHeight - NextButton.Height - NextButton.Height div 4;
        BackButton.Left := NextButton.Left - NextButton.Width - NextButton.Width div 8;
        BackButton.Top := NextButton.Top;
        CancelButton.Left := BackButton.Left - BackButton.Width - BackButton.Width div 8;
        CancelButton.Top := NextButton.Top;

        //Bevel
        with TBevel.Create(WizardForm) do
        begin
            Parent := WizardForm;
            SetBounds(Bevel1.Left, TBitmapImage(WizardForm.FindComponent('Bar')).Height, WizardForm.ClientWidth, Bevel1.Height);
            Shape := bsFrame;
            Style := Bevel1.Style;
        end;
        Bevel.Top := NextButton.Top - NextButton.Height div 4;
        Bevel.Width := ClientWidth;
        Bevel.Shape := bsFrame;
        BeveledLabel.Top := Bevel.Top - BeveledLabel.Height div 2;

        //Notebook
        x := InnerNotebook.Width;
        y := InnerNotebook.Height - ClientHeight + Bevel.Top;
        y1 := Bevel.Top - TBitmapImage(WizardForm.FindComponent('Bar')).Height - TBitmapImage(WizardForm.FindComponent('Bar')).Height div 4;
        InnerPage.Color := clWhite;
        InnerNotebook.ScaleBy(x - x div 15, x);

        //Pics
        with TBitmapImage.Create(WizardForm) do
        begin
            Parent := WizardForm;
            Bitmap.LoadFromResourceName(HInstance, '_IS_PIC1');
            SetBounds(WizardForm.ClientWidth div 3, TBitmapImage(WizardForm.FindComponent('Bar')).Height + TBitmapImage(WizardForm.FindComponent('Bar')).Height div 6, x, Bitmap.Height);
            Name := 'Bmp';
        end;

        //ListBox
        for i := 1 to 14 do
        begin
            with TLabel.Create(WizardForm) do
            begin
                Parent := WizardForm;
                AutoSize := False;
                WordWrap := True;
                Height := 26;
                Left := WizardForm.ClientWidth div 50;
                Top := (i-1)*((Bevel.Top - Bevel1.Top - WizardForm.ClientHeight div 25)/13) + Bevel1.Top + WizardForm.ClientHeight div 75;
                Width := WizardForm.ClientWidth div 3 - WizardForm.ClientWidth div 25;
                case i of
                    1: Caption := 'Добро пожаловать!';
                    2: Caption := SetupMessage(msgWizardLicense);
                    3: Caption := SetupMessage(msgWizardPassword);
                    4: Caption := SetupMessage(msgWizardInfoBefore)
                    5: Caption := SetupMessage(msgWizardUserInfo)
                    6: Caption := SetupMessage(msgWizardSelectDir)
                    7: Caption := SetupMessage(msgWizardSelectComponents)
                    8: Caption := SetupMessage(msgWizardSelectProgramGroup)
                    9: Caption := SetupMessage(msgWizardSelectTasks)
                    10: Caption := SetupMessage(msgWizardReady)
                    11: Caption := SetupMessage(msgWizardPreparing)
                    12: Caption := SetupMessage(msgWizardUninstalling)
                    13: Caption := SetupMessage(msgWizardInfoAfter)
                    14: Caption := 'Окончание';
                end;
                Transparent := True;
                Font.Color := clWhite;
                Name := '_Label_' + IntToStr(i);
            end;
        end;

        //Other
        WelcomeLabel1.Left := x div 40;
        WelcomeLabel1.Width := x - 2*WelcomeLabel1.Left;
        WelcomeLabel2.Left := x div 40;
        WelcomeLabel2.Width := x - 2*WelcomeLabel2.Left;
        LicenseAcceptedRadio.Checked := True;
        LicenseMemo.Align := alClient;
        FinishedHeadingLabel.Left := x div 40;
        FinishedHeadingLabel.Width := x - FinishedHeadingLabel.Left;
        FinishedLabel.Left := x div 40;
        FinishedLabel.Width := x - FinishedLabel.Left;
        ComponentsList.Color := clWhite;
        TasksList.Color := clWhite;
        ReadyMemo.Color := clWhite;
        RunList.Left := x div 40;
        RunList.Width := x - RunList.Left;
        YesRadio.Left := x div 40;
        NoRadio.Left := x div 40;
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
    i: Byte;
begin
    if CurPageID = wpLicense then
    with WizardForm do
    begin
        OuterNotebook.SetBounds(ClientWidth div 3, TBitmapImage(WizardForm.FindComponent('Bar')).Height + TBitmapImage(WizardForm.FindComponent('Bar')).Height div 6, x, y1);
        InnerNotebook.Align := alClient;
        NextButton.Caption := 'Согласен';
    end;
    //
    if CurPageID <> wpLicense then
    with WizardForm do
    begin
        OuterNotebook.SetBounds(WizardForm.ClientWidth div 3, WizardForm.ClientHeight div 2, x, y);
        InnerNotebook.Align := alNone;
    end;
    //
    if CurPageID mod 4 = 0 then
        TBitmapImage(WizardForm.FindComponent('Bmp')).Bitmap.LoadFromResourceName(HInstance, '_IS_PIC4')
    else
        TBitmapImage(WizardForm.FindComponent('Bmp')).Bitmap.LoadFromResourceName(HInstance, '_IS_PIC' + IntToStr(CurPageID mod 4));
    //
    for i := wpWelcome to wpFinished do
    begin
        if i = CurPageID then
        begin
            TLabel(WizardForm.FindComponent('_Label_' + IntToStr(CurPageID))).Font.Style := [fsBold];
            TLabel(WizardForm.FindComponent('_Label_' + IntToStr(CurPageID))).Font.Color := clBlack;
        end
            else
        begin
            TLabel(WizardForm.FindComponent('_Label_' + IntToStr(i))).Font.Style := [];
            TLabel(WizardForm.FindComponent('_Label_' + IntToStr(i))).Font.Color := clWhite;
        end;
    end;
    //
    with WizardForm do
    begin
        OuterNotebook.ActivePage.Color := clWhite;
        InnerNotebook.SetBounds(x div 30, y div 20, x - x div 15, y - y div 10);
        InnerNotebook.ActivePage.Color := clWhite;
        InfoBeforeMemo.Height := InnerNotebook.Height - InnerNotebook.Height div 8;
        DiskSpaceLabel.Top := InnerNotebook.Height - InnerNotebook.Height div 10;
        ComponentsList.Height := InnerNotebook.Height div 2;
        ComponentsDiskSpaceLabel.Top := InnerNotebook.Height - InnerNotebook.Height div 10;
        NoIconsCheck.Top := InnerNotebook.Height - InnerNotebook.Height div 10;
        TasksList.Height := InnerNotebook.Height - InnerNotebook.Height div 5;
        ReadyMemo.Height := InnerNotebook.Height - InnerNotebook.Height div 5;
        InfoAfterMemo.Height := InnerNotebook.Height - InnerNotebook.Height div 8;
    end;
end;



2all, как определить сколько страниц инсталлятора будет показано? Пробовал по-всякому, самый простой вариант - считать страницы по свойству Visible - не подходит, врет это свойство. Временно решил через препроцессор, обрабатывая текст скрипта на предмет директив, отключающих страницы, но считать нужно и кастомные страницы.

leshcat 21-06-2011 15:00 1698901

insombia

К сожалению error:

Compile Error!
Line: 164
Error: Column 11:
Duplicate identifier 'CURPAGECHANGED'

Neutron

Пасиб :)

valyok666 21-06-2011 16:06 1698956

доброго времени суток)нужно замутить такую тему)в дополнительные задачи Установка стим моделей в папку куда была установлена кс)чекбокс сделан а вот как прописать что бы устанавливало туда куда пользователь установил кс не знаю)или можно распаковку sfx архива но как прописать путь?

insombia 21-06-2011 16:13 1698961

А можно замутить прогрессбар типа так как льёться вода?Чтобы по капелькам прогрессбар шел?

R.i.m.s.k.y. 21-06-2011 16:26 1698976

Цитата:

Цитата valyok666
доброго времени суток)нужно замутить такую тему)в дополнительные задачи Установка стим моделей в папку куда была установлена кс)чекбокс сделан а вот как прописать что бы устанавливало туда куда пользователь установил кс не знаю)или можно распаковку sfx архива но как прописать путь? »

у тебя с клавиатурой что-то,залипает шифт и 0?

Цитата:

Цитата insombia
А можно замутить прогрессбар типа так как льёться вода?Чтобы по капелькам прогрессбар шел? »

можно, вымучивай :)
а зачем такие сложности то?

insombia 21-06-2011 16:49 1698985

R.i.m.s.k.y. для разнообразия

R.i.m.s.k.y. 21-06-2011 16:52 1698988

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

insombia 21-06-2011 17:14 1699004

R.i.m.s.k.y. ну попробую только где его искать хз

leshcat 21-06-2011 17:18 1699006

Neutron

Спасибо, работает. :yes:

insombia

И тебе спасибо за помощь.

No4noylis 21-06-2011 19:47 1699091

Подскажите как сделать чтоб установка directx, была после распаковки FreeArc??????

insombia 21-06-2011 20:06 1699104

No4noylis это кажись нужно использовать isdone для этого точно не знаю

Gnom_aka_Lexander 21-06-2011 21:24 1699145

Цитата:

Цитата insombia
ну попробую только где его искать хз »

Сейчас я для анимации использую вот это дело: ссылка. качай, изучай.

No4noylis, а как ты распаковываеш FreeArc?

insombia 21-06-2011 21:25 1699146

как изменить цвет слова Вас приветствует....?

No4noylis 21-06-2011 21:31 1699150

Через unarc.dll. Скрипт нужен?

insombia 21-06-2011 21:38 1699152

No4noylis да скачай закос под механиков он там используеться

Gnom_aka_Lexander 21-06-2011 21:43 1699158

Цитата:

Цитата insombia
как изменить цвет слова Вас приветствует....? »

Так:
читать дальше »
procedure InitializeWizard();
begin
with WizardForm.WelcomeLabel1 do
begin
Font.Color := clYellow;
end;
end;

Цитата:

Цитата No4noylis
Через unarc.dll. Скрипт нужен? »

да.

No4noylis 21-06-2011 21:49 1699162

Вот скрипт!!!!

Код:

[Setup]
AppName=Моя программа
AppVerName=Моя программа 1.5
AppPublisher=Моя компания, Inc.
AppPublisherURL=http://www.my-site.ru/
AppSupportURL=http://www.my-site.ru/
AppUpdatesURL=http://www.my-site.ru/
DefaultDirName={pf}\Моя программа
DefaultGroupName=Моя программа
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
ChangesEnvironment=yes

[Languages]
Name: rus; MessagesFile: compiler:Default.isl

[CustomMessages]
rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy

Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; ОТМЕТЬТЕ: Не используйте "Флажки: Проигнорировать версию" на любых общедоступных системных файлах

[Icons]
Name: "{group}\Моя программа"; Filename: "{app}\MyProg.exe"
Name: "{commondesktop}\Моя программа"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon

[Run]
Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,Моя программа}"; Flags: nowait postinstall skipifsilent

[_Code]
const
    Archives = '{src}\FreeArc.arc';

    PM_REMOVE = 1;
    CP_ACP = 0; CP_UTF8 = 65001;
    oneMb = 1048576;

type
#ifdef UNICODE  ;
    #define A "W"
#else
    #define A "A"  ;
    PAnsiChar = PChar;  // Required for Inno Setup 5.3.0 and higher.
#endif
#if Ver < 84018176
    AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above
#endif

    TMyMsg = record
        hwnd: HWND;
        message: UINT;
        wParam: Longint;
        lParam: Longint;
        time: DWORD;
        pt: TPoint;
    end;

    TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
    TArc = record Path: string; OrigSize: Integer; Size: Extended; end;

var
    ExtractFile: TLabel;
    lblExtractFileName: TLabel;
    btnCancelUnpacking: TButton;
    CancelCode, n, UnPackError, StartInstall: Integer;
    Arcs: array of TArc;
    msgError: string;
    lastMb: Integer;
    baseMb: Integer;
    totalUncompressedSize: Integer;            // total uncompressed size of archive data in mb
    LastTimerEvent: DWORD;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';

procedure AppProcessMessage;
var
    Msg: TMyMsg;
begin
    while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
    end;
end;

// Ia?aaia ?enea a no?ieo n oi?iinou? 3 ciaea (%.3n) n ie?oaeaieai a?iaiie ?anoe, anee iia anou
Function NumToStr(Float: Extended): String;
Begin
    Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
    while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
        SetLength(Result, Length(Result)-1);
End;

function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
    Result:= Lo;
    if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
    for Hi:= Hi-1 Downto 0 do
        Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

// Converts OEM encoded string into ANSI
// I?aia?acoao OEM no?ieo a ANSI eiae?iaeo
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
    nRet : longint;
begin
    SetLength( Result, Length( strSource ) );
    nRet:= OemToChar( strSource, Result );
end;

// Converts ANSI encoded string into UTF-8
// I?aia?acoao no?ieo ec ANSI a UTF-8 eiae?iaeo
function AnsiToUtf8( strSource: string ): string;
var
    nRet : integer;
    WideCharBuf: string;
    MultiByteBuf: string;
begin
    strSource:= strSource + chr(0);
    SetLength( WideCharBuf, Length( strSource ) * 2 );
    SetLength( MultiByteBuf, Length( strSource ) * 2 );

    nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
    nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

    Result:= MultiByteBuf;
end;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
    if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
        CancelCode:= -127;
end;

var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
    if string(what)='origsize'    then origsize := Mb else
    if string(what)='compsize'    then                else
    if string(what)='total_files' then                else
    Result:= CancelCode;
end;

// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
    callback: longword;
Begin
    callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4);  //FreeArcInfoCallback has 4 arguments
    CancelCode:= 0;
    AppProcessMessage;
    try
        // Pass the specified arguments to 'unarc.dll'
        Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
        if CancelCode < 0 then Result:= CancelCode;
        if Result >= 0 then Result:= origsize;
    except
        Result:= -63;  //    ArcFail
    end;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
    FSR: TFindRec;
Begin
    Result:= 0;
    if FindFirst(ExpandConstant(dir), FSR) then begin
        try
            repeat
                // Skip everything but the folders
                if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
                n:= GetArrayLength(Arcs);
                // Expand the folder list
                SetArrayLength(Arcs, n +1);
                Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
                Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
                Result:= Result + Arcs[n].Size;
                Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
                totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
            until not FindNext(FSR);
        finally
            FindClose(FSR);
        end;
    end;
End;

// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
    h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;

// Converts milliseconds to human-readable time
// Eiiaa?oe?oao ieeenaeoiau a ?aeiaaei-?eoaaiia ecia?a?aiea a?aiaie
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
    if detail                              {hh:mm:ss format} then
        Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
    else if Ticks/3600 >= 1000              {more than hour}  then
        Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
    else if Ticks/60 >= 1000                {1..60 minutes}  then
        Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
  else Result:= IntToStr(Ticks/1000) +s    {less than one minute}
End;

// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
    percents, Remaining: Integer;
    s: String;
begin
    if GetTickCount - LastTimerEvent > 1000 then begin
        // This code will be executed once each 1000 ms (yoio eia aoaao auiieiyouny ?ac a 1000 ieeeenaeoia)
        //  ....
        // End of code executed by timer
        LastTimerEvent := LastTimerEvent+1000;
    end;

    if string(what)='filename' then begin
        // Update FileName label
        lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
    end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
        // Assign to Mb *total* amount of data extracted to the moment from all archives
        lastMb := Mb;
        Mb := baseMb+Mb;

        // Update progress bar
        WizardForm.ProgressGauge.Position:= Mb;

        // Show how much megabytes/archives were processed up to the moment
        percents:= (Mb*1000) div totalUncompressedSize;
        s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
        if GetArrayLength(Arcs)>1 then
            s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
        ExtractFile.Caption := s

        // Calculate and show current percents
        percents:= (Mb*1000) div totalUncompressedSize;
        s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
        if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
        if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
            s:= s + '.  '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
            SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
        end;
        WizardForm.FileNameLabel.Caption := s
    end;
    AppProcessMessage;
    Result:= CancelCode;
end;

// Extracts all found archives
function UnPack(Archives: string): Integer;
var
    totalCompressedSize: Extended;
    callback: longword;
    FreeMB, TotalMB: Cardinal;
begin
    // Display 'Extracting FreeArc archive'
    lblExtractFileName.Caption:= '';
    lblExtractFileName.Show;
    ExtractFile.caption:= cm('ArcTitle');
    ExtractFile.Show;
    // Show the 'Cancel unpacking' button and set it as default button
    btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
    btnCancelUnpacking.Show;
    WizardForm.ActiveControl:= btnCancelUnpacking;
    WizardForm.ProgressGauge.Position:= 0;
    // Get the size of all archives
    totalUncompressedSize := 0;
    totalCompressedSize := FindArcs(Archives);
    WizardForm.ProgressGauge.Max:= totalUncompressedSize;
    // Other initializations
    callback:= WrapFreeArcCallback(@FreeArcCallback,4);  //FreeArcCallback has 4 arguments
    StartInstall:= GetTickCount;    {a?aiy ia?aea ?aniaeiaee}
    LastTimerEvent:= GetTickCount;
    baseMb:= 0

    for n:= 0 to GetArrayLength(Arcs) -1 do
    begin
        lastMb := 0
        CancelCode:= 0;
        AppProcessMessage;
        try
            // Pass the specified arguments to 'unarc.dll'
            Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
            if CancelCode < 0 then Result:= CancelCode;
        except
            Result:= -63;  //    ArcFail
        end;
        baseMb:= baseMb+lastMb

        // Error occured
        if Result <> 0 then
        begin
            msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
            GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
            case Result of
                -1: if FreeMB < 32 {Ia ia aenea} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
                    else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
                -127:  msgError:= cm('ArcBreak');    //Cancel button
                -63:    msgError:= cm('ArcFail');
            end;
//          MsgBox(msgError, mbInformation, MB_OK);    //niiauaiea iieacuaaaony ia no?aieoa caaa?oaiey
            Log(msgError);
            Break;    //i?a?aaou oeee ?aniaeiaee
        end;
    end;
    // Hide labels and button
    WizardForm.FileNameLabel.Caption:= '';
    lblExtractFileName.Hide;
    ExtractFile.Hide;
    btnCancelUnpacking.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
    if CurStep = ssPostInstall then
    begin
        UnPackError:= UnPack(Archives)
        if UnPackError = 0 then
            SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
        else
        begin
            // Error occured, uninstall it then
            Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);    //ioeao onoaiiaee ec-ca ioeaee unarc.dll
            SetTaskBarTitle(SetupMessage(msgErrorTitle))
            WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
        end;
    end;
end;

//    noaiaa?oiue niinia ioeaoa (ia io?ia CurPageChanged), ii a?oeau ?aniaeiauaa?ony ai ecaea?aiey oaeeia einoaeeyoi?a
//    if CurStep = ssInstall then
//      if UnPack(Archives) <> 0 then Abort;

Procedure CurPageChanged(CurPageID: Integer);
Begin
    if (CurPageID = wpFinished) and (UnPackError <> 0) then
    begin // Extraction was unsuccessful (?aniaeiauee aa?ioe ioeaeo)
        // Show error message
        WizardForm.FinishedLabel.Font.Color:= $0000C0;    // red (e?aniue)
        WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
        WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
    end;
End;

procedure InitializeWizard();
begin
    with WizardForm.ProgressGauge do
    begin
        // Create a label to show current FileName being extracted
        lblExtractFileName:= TLabel.Create(WizardForm);
        lblExtractFileName.parent:=WizardForm.InstallingPage;
        lblExtractFileName.autosize:=false;
        lblExtractFileName.Width:= Width;
        lblExtractFileName.top:=Top + ScaleY(35);
        lblExtractFileName.Caption:= '';
        lblExtractFileName.Hide;

        // Create a label to show percentage
        ExtractFile:= TLabel.Create(WizardForm);
        ExtractFile.parent:=WizardForm.InstallingPage;
        ExtractFile.autosize:=false;
        ExtractFile.Width:= Width;
        ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
        ExtractFile.caption:= '';
        ExtractFile.Hide;
    end;

    // Create a 'Cancel unpacking' button and hide it for now.
    btnCancelUnpacking:=TButton.create(WizardForm);
    btnCancelUnpacking.Parent:= WizardForm;
    btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
    btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
    btnCancelUnpacking.Hide;
end;

Заранее спасибо!!!)))))

Gnom_aka_Lexander 21-06-2011 21:55 1699164

No4noylis, if CurStep = ssPostInstall then ... ssPostInstall замени на ssInstall и добявь задачу на установку директикса. Секция RUN выполняется как раз на этапе ssPostInstall.

insombia 21-06-2011 22:01 1699166

Лександер не поменялся странно :(

insombia 21-06-2011 22:32 1699187

как сделать как тут типа настройка и так далее? http://i23.fastpic.ru/big/2011/0621/...eff4c3776e.jpg

valyok666 21-06-2011 22:49 1699199

R.i.m.s.k.y., нет я просто так пишу.а что насчёт вопроса?

rang3r 21-06-2011 23:34 1699221

Всем привет, ребята подскажите как можно настроить положение файликов для деинсталяции? Можно ли их запихнуть в папку с контентом ?

ILIA_1992 22-06-2011 00:52 1699255

Сжал игру саботаж оригинал 6,7 гб ,сжал фриарком в 3,5гб.Чем можно сжатые файлы сжать,чтобы можно былоб сжать из 3,5 в 2,0
Посоветуйте прогу эффективную

murlakatamenka 22-06-2011 01:24 1699266

Цитата:

Цитата rang3r
Всем привет, ребята подскажите как можно настроить положение файликов для деинсталяции? Можно ли их запихнуть в папку с контентом ? »

Цитата:

[Setup]: UninstallFilesDir
Default value:
{app}

Description:
Specifies the directory where the "unins*.*" files for the uninstaller are stored.

Note: You should not assign a different value here on a new version of an application, or else Setup won't find the uninstall logs from the previous versions and therefore won't be able to append to them.

Цитата:

Example:
UninstallFilesDir={app}\uninst

перевод надо или и так понятно ? :)

murlakatamenka 22-06-2011 02:22 1699279

Neutron, insombia, вот кое-что - http://rghost.ru/11910681

Gnom_aka_Lexander 22-06-2011 11:20 1699449

Neutron, insombia, А вот более законченная версия того-же скрипта. Общий смысл понятен, изображения я там переделал более оптимально и так, не помню уж чего, по мелочи много. :)

leshcat 22-06-2011 13:18 1699537

Скажите, в инно есть предустановленная функция:

InfoBeforeFile=info\test.rtf

Можно ли сделать так, чтобы можно было показать еще один ридми-файл после него?

Gnom_aka_Lexander 22-06-2011 13:59 1699573

leshcat, можно
читать дальше »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: Readme.rtf;Flags: dontcopy solidbreak noencryption ignoreversion;
[code]
var
ISCustomPage1: TWizardPage;
RichEditViewer1: TRichEditViewer;
S: String;


procedure InitializeWizard();
begin
ExtracttemporaryFile('Readme.rtf')
LoadStringFromFile(ExpandConstant('{tmp}\Readme.rtf'),S);
{ Creates custom wizard page }
ISCustomPage1 := CreateCustomPage(wpInfoBefore, 'Ñòðàíèöà èíôîðìàöèè 2', 'Ïîæàëóéñòà. îçíàêîìüòåñü ñ èíôîðìàöèåé');

{ ISCustomPage1 }
with ISCustomPage1.Surface do
begin
Name := 'ISCustomPage1';
end;

{ RichEditViewer1 }
RichEditViewer1 := TRichEditViewer.Create(WizardForm);
with RichEditViewer1 do
begin
Name := 'RichEditViewer1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(417);
Height := ScaleY(233);
RTFText :=S;
end;
end;

ILIA_1992 22-06-2011 14:39 1699598

у кого-нибудь есть такой скрипт???

http://fastpic.ru/view/23/2011/0622/...918b6.jpg.html

оч нужен

Gnom_aka_Lexander 22-06-2011 15:05 1699610

ILIA_1992, это Need for Speed™ Undercover.iss v 2.2 из шапки этой темы с вырезанной статус-панелью

leshcat 22-06-2011 18:25 1699749

Лександер

Спасибо, работает! :)

insombia 22-06-2011 20:33 1699800

Лександер ты как всегда помогаешь когда это нужно

xXDx 22-06-2011 21:02 1699823

Здравствуйте, помогите пожалуйста, почему на кнопки не ложится картинка в этом скрипте
читать дальше »
[Setup]
AppId={{75562D30-F354-430A-96DA-A3FF701EB069}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
WizardImageFile=111.bmp

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked;

[Files]
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

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


[code]
const
ButtonWidth = 80; //Указываем размер кнопок
ButtonHeight = 23;

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

var
pnl: TPanel;
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
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
end;

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

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm) //Рисунок который ложится на кнопку
Image.Width:=160 //Обязательно прописать оригинальный размер рисунка
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm) //Текст кнопок
Labl.Left:=23 //Указываем положение текста
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite //Цвет текста
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure InitializeWizard();
begin
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:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
WizardForm.ClientWidth:=690
WizardForm.Bevel.Hide
WizardForm.Bevel1.Hide
end;

procedure WelcomePage;
begin
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
SetBounds(WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
Caption:= WizardForm.WelcomeLabel1.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.WelcomeLabel1.Font.Style;
Name:= WizardForm.WelcomeLabel1.Font.Name;
Size:= WizardForm.WelcomeLabel1.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
Caption:= WizardForm.WelcomeLabel2.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.WelcomeLabel2.Font.Style;
Name:= WizardForm.WelcomeLabel2.Font.Name;
Size:= WizardForm.WelcomeLabel2.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
with WizardForm do
begin
with DirEdit do
begin
Left:= 40;
Top:= 137;
Parent:= pnl;
end;
with DirBrowseButton do
begin
Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
Top:= WizardForm.DirEdit.Top - 1;
Parent:= pnl;
end;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirLabel.AutoSize;
SetBounds(WizardForm.SelectDirBitmapImage.Left + 50,WizardForm.SelectDirBitmapImage.Top + 10,
WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
WordWrap:= WizardForm.SelectDirLabel.WordWrap;
Caption:= WizardForm.SelectDirLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.SelectDirLabel.Font.Style;
Name:= WizardForm.SelectDirLabel.Font.Name;
Size:= WizardForm.SelectDirLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
Caption:= WizardForm.DiskSpaceLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.DiskSpaceLabel.Font.Style;
Name:= WizardForm.DiskSpaceLabel.Font.Name;
Size:= WizardForm.DiskSpaceLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
ready_str: string;
begin
ready_str:= WizardForm.ReadyMemo.Text;
with TLabel.Create(pnl) do
begin
SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Caption:= ready_str;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TBevel.Create(WizardForm) do
begin
SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.ReadyLabel.AutoSize;
SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
WordWrap:= WizardForm.ReadyLabel.WordWrap;
Caption:= WizardForm.ReadyLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
with WizardForm.ProgressGauge do
begin
Left:= 40;
Top:= 115;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FilenameLabel.AutoSize;
SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
WordWrap:= WizardForm.FilenameLabel.WordWrap;
Caption:= WizardForm.FilenameLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.FilenameLabel.Font.Style;
Name:= WizardForm.FilenameLabel.Font.Name;
Size:= WizardForm.FilenameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.StatusLabel.AutoSize;
SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
WordWrap:= WizardForm.StatusLabel.WordWrap;
Caption:= WizardForm.StatusLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.StatusLabel.Font.Style;
Name:= WizardForm.StatusLabel.Font.Name;
Size:= WizardForm.StatusLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
CheckBox: array of TNewCheckBox;

procedure CheckBoxClick(Sender: TObject);
begin
if TNewCheckBox(Sender).Checked then
WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;

procedure LabelClick(Sender: TObject);
begin
if CheckBox[TLabel(Sender).Tag].Checked then
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
CheckBox[TLabel(Sender).Tag].Checked:= False;
end
else
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= True;
CheckBox[TLabel(Sender).Tag].Checked:= True;
end;
end;

procedure HideRunList(Control: TWinControl);
var
i, t: Integer;
str: string;
begin
if WizardForm.RunList.Items.Count > 0 then
begin
WizardForm.RunList.Hide;
SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
for i:= 0 to WizardForm.RunList.Items.Count-1 do
begin
CheckBox[i]:= TNewCheckBox.Create(Control);
with CheckBox[i] do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
Tag:= i;
Checked:= WizardForm.RunList.Checked[i];
Caption:= WizardForm.RunList.Items.Strings[i];
OnClick:= @CheckBoxClick;
Color:= clWhite;
Parent:= Control;
end;
str:= WizardForm.RunList.Items.Strings[i];
with TLabel.Create(WizardForm) do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
WizardForm.RunList.Width,14);
Caption:= str;
Tag:= i;
OnClick:= @LabelClick;
Transparent:= True;
Parent:= Control;
end;
t:= t + 20;
end;
end;
end;

procedure FinishedPage;
begin
HideRunList(pnl);
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.FinishedHeadingLabel.Font.Style;
Name:= WizardForm.FinishedHeadingLabel.Font.Name;
Size:= WizardForm.FinishedHeadingLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedLabel.AutoSize;
SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
WordWrap:= WizardForm.FinishedLabel.WordWrap;
Caption:= WizardForm.FinishedLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.FinishedLabel.Font.Style;
Name:= WizardForm.FinishedLabel.Font.Name;
Size:= WizardForm.FinishedLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin

pnl:= TPanel.Create(WizardForm);
with pnl do
begin
Align:= alClient;
Parent:= WizardForm;
end;
with WizardForm do
begin
with WizardBitmapImage do
begin
Align:= alClient;
Stretch:= True;
Parent:= pnl;
end;
NextButton.Parent:= pnl;
CancelButton.Parent:= pnl;
BackButton.Parent:= pnl;
Bevel.Parent:= pnl;
pnl.Repaint;
end;

if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
begin
WizardForm.Bevel1.Parent:= pnl;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageNameLabel.AutoSize;
SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
Caption:= WizardForm.PageNameLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.PageNameLabel.Font.Style;
Name:= WizardForm.PageNameLabel.Font.Name;
Size:= WizardForm.PageNameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
Caption:= WizardForm.PageDescriptionLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.PageDescriptionLabel.Font.Style;
Name:= WizardForm.PageDescriptionLabel.Font.Name;
Size:= WizardForm.PageDescriptionLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
end;
if CurPageID = wpWelcome then WelcomePage;
if CurPageID = wpSelectDir then SelectDirPage;
if CurPageID = wpReady then ReadyPage;
if CurPageID = wpInstalling then InstallingPage;
if CurPageID = wpFinished then FinishedPage;
end;

ILIA_1992 22-06-2011 22:34 1699884

Цитата:

Цитата Лександер
ILIA_1992, это Need for Speed™ Undercover.iss v 2.2 из шапки этой темы с вырезанной статус-панелью »

а у теюя слуяайно не завалялся скрипт.У меня есть скрипт,но он недоделан.Не распаковывает bin файлы и не получается убрать язык русский и английский

xXDx 23-06-2011 09:47 1700064

ILIA_1992,
Вот здесь скачать его можно же

ILIA_1992 23-06-2011 12:29 1700184

Цитата:

Цитата xXDx
Вот здесь скачать его можно же »

я его скачал,при распаковке процент распаковки доходит до 41% и падает вниз.Помогите исправить

Gnom_aka_Lexander 23-06-2011 14:13 1700259

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

xXDx 23-06-2011 18:13 1700379

Лександер,
А в моем вопросе мне не поможете? :)

insombia 23-06-2011 18:19 1700385

xXDx вот

читать дальше »
Source: button2.bmp; DestDir: {tmp}; Flags: dontcopy

const
ButtonWidth = 80;
ButtonHeight = 23;

var
WizardLabel: TLabel;
ButtonPanel: array of TPanel;
ButtonImage: array of TBitmapImage;
ButtonLabel: array of TLabel;
UsedButtons: array of TButton;
ButtonsCount: Integer;

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 InitializeWizard();
begin
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)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButtons()
end;

Gnom_aka_Lexander 23-06-2011 18:21 1700387

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

xXDx 23-06-2011 19:08 1700412

insombia,
Нет не получилось, тогда подскажите скрипт, чтоб белой обводки вокруг кнопок не было. Ниже скриншот

murlakatamenka 23-06-2011 23:09 1700549

xXDx, чтобы не было обводки попробуйте добавить WizardForm.NextButton.Refresh(); и WizardForm.BackButton.Refresh();
мне в своё время это помогло (делал для кнопок на стекле от iswin7.dll)
куда это добавить ?.. пожалуй ребята подскажут, я думаю, можно так
Код:

[_Code]
procedure CurStepChanged (CurStepID: Integer);
begin
WizardForm.NextButton.Refresh();
WizardForm.BackButton.Refresh();
end


xXDx 23-06-2011 23:28 1700556

murlakatamenka,
вот что пишет Invalid prototype for 'CurStepChanged'

valyok666 24-06-2011 01:30 1700601

[code]
procedure CurStepChanged1(CurStepID: Integer);
begin
WizardForm.NextButton.Refresh();
WizardForm.BackButton.Refresh();
end;
попробуй так

TRMK 24-06-2011 14:08 1700859

Доброго времени суток всем!

Уважаемые форумчане, не смог разобраться сам в нескольких вопросах, прошу помочь или ткнуть носом, если уже есть ответ.

1. Можно ли сделать инсталлятор с ограниченным количеством установок? И после этого выдавалось сообщение в самом начале установки: "Вы исчерпали лимит установок, скачайте новую версию".

2. Так же интересует скрипт на работоспособность инсталлятора на ограниченное кол-во времени, например 2 недели. И тоже выдавалось сообщение: "Срок действия установщика истек, скачайте новую версию"

3. Подскажите, как сделать следующее - есть 4 варианта одной программы. Необходимо, в начале установки задать вопрос и варианты ответа ( Нужна ли Вам поддержка определенной программы? - "ДА", "НЕТ") и далее переход на следующую страницу с учетом ответа. Т. е. если человек ответил "ДА" он переходит на один вариант страницы и продолжает установку выбирая дополнительные функции, если ответил "НЕТ", то переходит на другую страницу с другими вариантами дополнительных функций.

4. Как вообще можно сделать, чтобы на одной странице установщика, был только один вариант выбора какой-либо из предлагаемых дополнительных функций. При нажатии на кнопку далее, следующая страница и следующий вариант.

Надеюсь на поддержку с Вашей стороны. )

xXDx 24-06-2011 15:18 1700891

valyok666,
не работает может у меня со скриптом что то не то,
читать дальше »
[Setup]
AppId={{75562D30-F354-430A-96DA-A3FF701EB069}
AppName=Shank
AppVerName=Shank 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
WizardImageFile=1.bmp

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked;



[Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[CustomMessages]
rus.Icons=Создать ярлык на рабочем столе
rus.Group=Создать ярлыки в меню "Пуск"
rus.FreeSpace=Доступно места на диске:
rus.NeedSpace=Требуется места на диске:

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


[code]
const
ButtonWidth = 80; //Указываем размер кнопок
ButtonHeight = 40;


var
pnl: TPanel;
Icons, Group: TCheckBox;
lblIcons, lblGroup, Label10, Label11: TLabel;
FreeMB, TotalMB: Cardinal;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID =wpLicense)or(PageID =wpInfoBefore)or(PageID =wpUserInfo)or(PageID =wpSelectComponents)or(PageID =wpSelectProgramGroup)or(PageID =wpSelectTasks) then
Result:= True;
end;

function CreateIcons: Boolean;
begin
Result:=Icons.Checked;
end;

function GroupIcons: Boolean;
begin
Result:=Group.Checked;
end;

procedure IconsOnClick(Sender: TObject);
begin
if Icons.Checked = False then
Icons.Checked:= True else
Icons.Checked:= False;
end;


procedure StartMenuIconOnClick(Sender: TObject);
begin
if Group.Checked = False then
Group.Checked:= True else
Group.Checked:= False;
end;

procedure GroupOnClickIcon(Sender: TObject);
begin
if Group.Checked = False then
begin
wizardform.GroupEdit.enabled:= false;
wizardform.GroupBrowseButton.enabled:= false;
end
else
begin
wizardform.GroupEdit.enabled:= true;
wizardform.GroupBrowseButton.enabled:= true;
end;
end;

procedure InitializeWizard();
begin
WizardForm.WelcomeLabel1.Left:=40
WizardForm.WelcomeLabel1.Top:=180
WizardForm.WelcomeLabel1.Width:=610
WizardForm.WelcomeLabel2.Left:=40
WizardForm.WelcomeLabel2.Top:=220
WizardForm.WelcomeLabel2.Width:=610

WizardForm.FinishedHeadingLabel.Left:=40
WizardForm.FinishedHeadingLabel.Top:=180
WizardForm.FinishedHeadingLabel.Width:=610
WizardForm.FinishedLabel.Left:=40
WizardForm.FinishedLabel.Top:=220
WizardForm.FinishedLabel.Width:=610

WizardForm.PageDescriptionLabel.Hide
WizardForm.PageNameLabel.Hide

WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight
WizardForm.BackButton.Top:=400
WizardForm.BackButton.Left:=ScaleX(20);

WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight
WizardForm.NextButton.Top:=400
WizardForm.NextButton.Left:=ScaleX(520);

WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight
WizardForm.CancelButton.Top:=400
WizardForm.CancelButton.Left:=ScaleX(430);

WizardForm.DirBrowseButton.Left:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=23

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=23

WizardForm.ClientWidth:=690
WizardForm.ClientHeight:=450
WizardForm.Bevel.Hide
WizardForm.Bevel1.Hide

end;



procedure WelcomePage;
begin
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
SetBounds (WizardForm.WelcomeLabel1.Left,WizardForm.WelcomeLabel1.Top,
WizardForm.WelcomeLabel1.Width,WizardForm.WelcomeLabel1.Height);
WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
Caption:= WizardForm.WelcomeLabel1.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.WelcomeLabel1.Font.Style;
Name:= WizardForm.WelcomeLabel1.Font.Name;
Size:= WizardForm.WelcomeLabel1.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
SetBounds(WizardForm.WelcomeLabel2.Left,WizardForm.WelcomeLabel2.Top,
WizardForm.WelcomeLabel2.Width,WizardForm.WelcomeLabel2.Height);
WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
Caption:= WizardForm.WelcomeLabel2.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.WelcomeLabel2.Font.Style;
Name:= WizardForm.WelcomeLabel2.Font.Name;
Size:= WizardForm.WelcomeLabel2.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
with WizardForm do
begin
with DirEdit do
begin
Width:= 500
Left:= 40;
Top:= 250;
Parent:= pnl;
end;
with DirBrowseButton do
begin
Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
Top:= WizardForm.DirEdit.Top - 1;
Parent:= pnl;
end;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
Caption:= WizardForm.DiskSpaceLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.DiskSpaceLabel.Font.Style;
Name:= WizardForm.DiskSpaceLabel.Font.Name;
Size:= WizardForm.DiskSpaceLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
ready_str: string;
begin
ready_str:= WizardForm.ReadyMemo.Text;
with TLabel.Create(pnl) do
begin
SetBounds(45,130,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
Caption:= ready_str;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.ReadyLabel.Font.Style;
Name:= WizardForm.ReadyLabel.Font.Name;
Size:= WizardForm.ReadyLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;


pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
with WizardForm.ProgressGauge do
begin
Width:=610
Left:= 40;
Top:= 250;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FilenameLabel.AutoSize;
SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
WordWrap:= WizardForm.FilenameLabel.WordWrap;
Caption:= WizardForm.FilenameLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.FilenameLabel.Font.Style;
Name:= WizardForm.FilenameLabel.Font.Name;
Size:= WizardForm.FilenameLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.StatusLabel.AutoSize;
SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
WordWrap:= WizardForm.StatusLabel.WordWrap;
Caption:= WizardForm.StatusLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.StatusLabel.Font.Style;
Name:= WizardForm.StatusLabel.Font.Name;
Size:= WizardForm.StatusLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
CheckBox: array of TNewCheckBox;

procedure CheckBoxClick(Sender: TObject);
begin
if TNewCheckBox(Sender).Checked then
WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;

procedure LabelClick(Sender: TObject);
begin
if CheckBox[TLabel(Sender).Tag].Checked then
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
CheckBox[TLabel(Sender).Tag].Checked:= False;
end
else
begin
WizardForm.RunList.Checked[TLabel(Sender).Tag]:= True;
CheckBox[TLabel(Sender).Tag].Checked:= True;
end;
end;

procedure HideRunList(Control: TWinControl);
var
i, t: Integer;
str: string;
begin
if WizardForm.RunList.Items.Count > 0 then
begin
WizardForm.RunList.Hide;
SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
for i:= 0 to WizardForm.RunList.Items.Count-1 do
begin
CheckBox[i]:= TNewCheckBox.Create(Control);
with CheckBox[i] do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+2),ScaleY(WizardForm.RunList.Top+2+t),14,14);
Tag:= i;
Checked:= WizardForm.RunList.Checked[i];
Caption:= WizardForm.RunList.Items.Strings[i];
OnClick:= @CheckBoxClick;
Color:= clWhite;
Parent:= Control;
end;
str:= WizardForm.RunList.Items.Strings[i];
with TLabel.Create(WizardForm) do
begin
SetBounds(ScaleX(WizardForm.RunList.Left+20),ScaleY(WizardForm.RunList.Top+2+t),
WizardForm.RunList.Width,14);
Caption:= str;
Tag:= i;
OnClick:= @LabelClick;
Transparent:= True;
Parent:= Control;
end;
t:= t + 20;
end;
end;
end;

procedure FinishedPage;
begin
HideRunList(pnl);
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
SetBounds(WizardForm.FinishedHeadingLabel.Left,WizardForm.FinishedHeadingLabel.Top,
WizardForm.FinishedHeadingLabel.Width,WizardForm.FinishedHeadingLabel.Height);
WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
Caption:= WizardForm.FinishedHeadingLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.FinishedHeadingLabel.Font.Style;
Name:= WizardForm.FinishedHeadingLabel.Font.Name;
Size:= WizardForm.FinishedHeadingLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin
AutoSize:= WizardForm.FinishedLabel.AutoSize;
SetBounds(WizardForm.FinishedLabel.Left,WizardForm.FinishedLabel.Top,
WizardForm.FinishedLabel.Width,WizardForm.FinishedLabel.Height);
WordWrap:= WizardForm.FinishedLabel.WordWrap;
Caption:= WizardForm.FinishedLabel.Caption;
with Font do
begin
Color:= clWhite;
Style:= WizardForm.FinishedLabel.Font.Style;
Name:= WizardForm.FinishedLabel.Font.Name;
Size:= WizardForm.FinishedLabel.Font.Size;
end;
Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurStepChanged1(CurStepID: Integer);
begin
WizardForm.NextButton.Refresh();
WizardForm.BackButton.Refresh();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
pnl:= TPanel.Create(WizardForm);
with pnl do
begin
Align:= alClient;
Parent:= WizardForm;
end;
with WizardForm do
begin
with WizardBitmapImage do
begin
Align:= alClient;
Stretch:= True;
Parent:= pnl;
end;
NextButton.Parent:= pnl;
CancelButton.Parent:= pnl;
BackButton.Parent:= pnl;
Bevel.Parent:= pnl;
pnl.Repaint;
end;

if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
begin
WizardForm.Bevel1.Parent:= pnl;
with TLabel.Create(pnl) do
begin
Transparent:= True;
Parent:= pnl;
end;
with TLabel.Create(pnl) do
begin

Transparent:= True;
Parent:= pnl;
end;
pnl.Repaint;
end;
if CurPageID = wpWelcome then WelcomePage;
if CurPageID = wpSelectDir then SelectDirPage;
if CurPageID = wpReady then ReadyPage;
if CurPageID = wpInstalling then InstallingPage;
if CurPageID = wpFinished then FinishedPage;
end;

murlakatamenka 24-06-2011 16:52 1700941

xXDx, сори, я описАлся (
Код:

[_Code]
procedure CurPageChanged (CurPageID: Integer);
begin
WizardForm.NextButton.Refresh();
WizardForm.BackButton.Refresh();
end


valyok666 24-06-2011 17:08 1700949

у меня созрел вопрос)у меня расширенная версия когда создаю скрипт у меня в инстле токо русский и английский а остальные он просто не видеьт хотя оние есть в скрипте в чём может быть проблема???

valyok666 24-06-2011 19:04 1700997

как добавить разрешение установки на 64 bitные системы???
ArchitecturesInstallIn64BitMode=x64
видел такую тему но не робит

xXDx 24-06-2011 23:09 1701085

murlakatamenka,
блин, тоже не помогает, может вы мой скрипт посмотрите и скажите, что в нем не так

Rain_ramon 24-06-2011 23:29 1701093

Нужно написать сложный скрипт в inno, хорошая оплата.
Контакты:
skype: rain_rhcp
PS: Уже не актуально.

Gnom_aka_Lexander 25-06-2011 21:04 1701524

xXDx, я посмотрел, все у тебя нормально, и если отключать часть, которая отвечает за вставку изображений, то кнопки заскинируются. Дело в том, что в качестве родителя указан у тебя визардформ, а он там полностью скрыт под панелями, для вставки изображений. тоесть тебе, для нормального скинирования кнопок нужно менять родителя скинов на каждой странице. В общем ты подвиг меня доработать свой скрипт, и включить в него скинирование кнопок :)
Третья версия скрипта для вставки изображений на все 13 страниц инсталлятора + замена стандартных дирбитмап и групбитмап + скинирование кнопок. Скачать.
Четвертая версия - поддержка юникод и модуль скинирования кнопок от Шегората на 4 положения, с небольшой доработкой.
скачать.

xXDx 25-06-2011 21:17 1701529

Лександер,
Спасибо тебе большое, добрый человек :)

No4noylis 26-06-2011 17:16 1701836

Помогите плиз!!!!! Делал инсталл с распаковкой архивов FreeArc. Когда доходит до создания записей реестра, выдает такую ошибку: 'D:\Dark Sector' is not a valid integer value.

R.i.m.s.k.y. 26-06-2011 17:57 1701856

ну так прочитай что пишется - ты в реестр в целочисленной переменной integer value пытаешься пропихнуть строчку D:\Dark Sector

No4noylis 26-06-2011 18:01 1701857

И что нужно сделать чтоб все работало???

R.i.m.s.k.y. 26-06-2011 18:06 1701864

*лицопальма*
писать строковую переменную в реестр строчкой

No4noylis 26-06-2011 18:07 1701865

КАК это сделать??? Что нужно в скрипт добавить???

R.i.m.s.k.y. 26-06-2011 18:16 1701872

предположу самое страшное - почитать справку :read:
а вообще после воскресного пЫва мои телепатические способности резко снижаются :)

ёпт, найди в своем скрипте "D:\Dark Sector" и поменяй integer на string
90% это поможет

ARS_23 27-06-2011 10:40 1702200

всем привет
кто-нибудь знает, как можно сделать 3d инсталлятор?
какую дополнительную библиотеку надо использовать?
или может у кого есть пример скрипта?
заранее спс

insombia 27-06-2011 11:29 1702221

кто-нибудь знает, как можно сделать 3d инсталлятор? R.G.Recoding

Edison007 27-06-2011 14:22 1702299

ARS_23
Я знаю))) надо использовать Surface.dll

insombia 27-06-2011 14:25 1702301

Edison007 где его скачать или найти скрипт к нему?

ARS_23 27-06-2011 14:27 1702302

Edison007,
ну спасибо за ответ)
а где его взять и что писать в скрипт все равно неизвестно

leshcat 28-06-2011 10:38 1702810

Интересно,

А Инно умеет устанавливать драйверы?

insombia 28-06-2011 10:52 1702818

leshcat ну да если указать правильные файлы драйвера

leshcat 28-06-2011 11:34 1702852

тоесть возможно принудительное обновление видео-драйвера после установки игры?

insombia 28-06-2011 11:56 1702878

leshcat нет в секцию files нужно указывать все файлы которые относятся к драйверу и драйвер создаёт папки ещё в некоторых папках в винде

leshcat 28-06-2011 12:34 1702913

А есть какой-нибудь пример скрипта инсталлятора драйвера? В паках такого нет.

Rikill 28-06-2011 20:14 1703198

Доброго времени суток, есть ли у кого-нибудь скрипты для версии от Restools чтобы оценить все возможности. Шапку читал :)
Лександер, спасибо, но думал что ещё что-нибудь есть интересное
Цитата:

Цитата Лександер
Внимательно: Абсолютно все примеры идут в архивах. читать и искать ты так и не научился. »

да я ж говорою всё это смотрел и тестил, я спросил есть ли что-нибудь ещё?!

Gnom_aka_Lexander 28-06-2011 20:27 1703208

Rikill, Терь сюда флудить пришел? Примеры всех возможностей расширенной версии идут в архивах с расширенной версией.
Одно радует, здесь модерация строже, чем на руборде и нафлудить целую тему в одно лицо всякими глупостями тебе просто не дадут.
Внимательно: Абсолютно все примеры идут в архивах. читать и искать ты так и не научился.

insombia 28-06-2011 21:06 1703225

Подскажите скрипт для 3-Д инсталятора кто знает

Edison007 28-06-2011 21:09 1703227

insombia
Его нет в открытом доступе! И никто тебе его не даст!

No4noylis 28-06-2011 21:13 1703231

Можно ли както дабавить свой шрифт в весь текст инсталлятора????????7

insombia 28-06-2011 21:19 1703234

Edison007 жаль

Gnom_aka_Lexander 28-06-2011 21:21 1703236

No4noylis, Можно.

читать дальше »
Код:

#define Font "Zombie.ttf"
#define FontName "DS Zombie Cyr"

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

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

[Files]
Source: {#Font}; Flags: dontcopy;

[_Code]
var
  IsCustomFontInstalled: boolean;
  FontName: string;

function AddFontResource(FileName: PAnsiChar): Integer; external 'AddFontResourceA@gdi32.dll stdcall';
function RemoveFontResource(FileName: PAnsiChar): BOOL; external 'RemoveFontResourceA@gdi32.dll stdcall';

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('{#Font}');
  IsCustomFontInstalled:=AddFontResource(ExpandConstant('{tmp}')+'\{#Font}')>0;
  if IsCustomFontInstalled then SendMessage(HWND_BROADCAST,$1D,0,0);
  if FontExists('{#FontName}') then FontName:='{#FontName}' else FontName:='Arial';
  Result:= True;
end;

Procedure InitializeWizard();
begin
  WizardForm.Font.Name:= FontName;
end;

procedure DeInitializeSetup();
begin
  WizardForm.Free;
  if IsCustomFontInstalled then
  if RemoveFontResource(PAnsiChar(ExpandConstant('{tmp}')+'\{#Font}')) then SendMessage(HWND_BROADCAST,$1D,0,0);
end;


Положить рядом со скриптом файл шрифта Zombie.ttf, либо любой другой, но тогда поправить в скрипте - #define Font "Zombie.ttf" - файл шрифта, #define FontName "DS Zombie Cyr" имя шрифта

No4noylis 29-06-2011 11:21 1703509

1) А как изменить размер инсталлятора????
2) И удалять страници из инсталлятора???? (Если не трудно, напишите ID всех его страниц) И соответственно как потом переименовать кнопку далее в установить????

R.i.m.s.k.y. 29-06-2011 12:07 1703545

Цитата:

Цитата No4noylis
А как изменить размер инсталлятора »

Код:

[Setup]
DiskSpanning=yes
SlicesPerDisk=3
DiskSliceSize=1566000000

Цитата:

Цитата No4noylis
И удалять страници из инсталлятора »

пропускать можно
Код:

*[*Code]
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end;
end;

//CurPage может принимать значения
//wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished

все находится в справке и шапке за 5 минут

Rikill 29-06-2011 14:01 1703589

No4noylis, а так же можно удалять страницы так:
Код:

[setup]
DisableDirPage=true
DisableFinishedPage=true
DisableProgramGroupPage=true
DisableReadyMemo=true
DisableReadyPage=true
DisableStartupPrompt=true
DisableWelcomePage=true


No4noylis 29-06-2011 14:30 1703614

Цитата:

Цитата R.i.m.s.k.y.
А как изменить размер инсталлятора »
Код:
[Setup]
DiskSpanning=yes
SlicesPerDisk=3
DiskSliceSize=1566000000 »

Спасибо, но я имел ввиду размер окна инсталлятора??? :)

Rikill 29-06-2011 14:42 1703623

No4noylis, выражайся точнее
Код:

procedure InitializeWizard();
  with WizardForm do begin
    Width:=ScaleX(559);
    Height:=ScaleY(404); 
    Position:=poScreenCenter;
  end;

пробуй

R.i.m.s.k.y. 29-06-2011 14:43 1703625

Цитата:

Цитата No4noylis
Спасибо, но я имел ввиду размер окна инсталлятора »

это сложно, вытянешь или окно и остальные элементы останутся на месте или закроются, руками надо каждый элемент сдвигать
поставь расширенный инно (в шапках все есть), в нем есть inno form designer, можно мышко сдвигать и рисовать, попробуй

No4noylis 29-06-2011 14:55 1703629

Цитата:

Цитата R.i.m.s.k.y.
это сложно, вытянешь или окно и остальные элементы останутся на месте или закроются, руками надо каждый элемент сдвигать
поставь расширенный инно (в шапках все есть), в нем есть inno form designer, можно мышко сдвигать и рисовать, попробуй »

Я уже устанавливал inno form designer, у меня возник такой вопрос: можно ли из inno setup как нибудь достать *.isf файл чтоб отредактировать его???

insombia 29-06-2011 15:02 1703637

У кого то есть нормальная ссылка на Inno Setup Form Designer 2.0.8?А то здесь ссылка битая

R.i.m.s.k.y. 29-06-2011 15:04 1703639

Цитата:

Цитата insombia
У кого то есть нормальная ссылка на Inno Setup Form Designer 2.0.8?А то здесь ссылка битая »

на руборде в соответствующей теме поищи
а вообще Лександер допилил свой инно ультра, можно им пользоваться, там все в одном флаконе

valyok666 29-06-2011 15:40 1703658

доброго времени суток)легче ли делать скрипт модулями?????

R.i.m.s.k.y. 29-06-2011 15:57 1703664

Цитата:

Цитата valyok666
доброго времени суток)легче ли делать скрипт модулями »

с точки зрения моей банальной эрудиции - таки да, если модуль не для одного дистра

Savage-i 29-06-2011 16:06 1703669

Добрый вечер всем
Обыскался по всему интернету и по форумам
Собственно вопрос. Есть инсталляшки сделанные в версии 5.3.10. Так вот ни одним распаковщиком взять его нельзя
Перепробовал разные вариации. Версия 0.36 тоже не берет - пишет неподдерживаемый тип
Может у него чего правят уже в самом экзешнике, что потом он не распаковывается
Подскажите, как и чем можно победить, распаковать

R.i.m.s.k.y. 29-06-2011 16:18 1703676

Цитата:

Цитата Savage-i
Добрый вечер всем
Обыскался по всему интернету и по форумам
Собственно вопрос. Есть инсталляшки сделанные в версии 5.3.10. Так вот ни одним распаковщиком взять его нельзя
Перепробовал разные вариации. Подскажите, как и чем можно победить, распаковать »

наверное стоит чуток подождать пока инноанпакер научится его распаковывать

No4noylis 29-06-2011 16:20 1703678

на мой вопрос не ответят???

Savage-i 29-06-2011 16:28 1703684

R.i.m.s.k.y., я так понял, что анпакер эту версию вообще не может распаковать?
Хотя на сайте написано
Цитата:

0.32 (2010.06.14)
Added support for IS versions 5.3.10 (both ANSI and Unicode).
А каким-нибудь обходным средством из него можно вытянуть скрипт?

R.i.m.s.k.y. 29-06-2011 16:46 1703690

Цитата:

Цитата No4noylis
как нибудь достать *.isf файл чтоб отредактировать его??? »

что за isf файл? не видел таких
Цитата:

Цитата Savage-i
А каким-нибудь обходным средством из него можно вытянуть скрипт? »

не все инно дистры можно распотрошить, не разворачиваются запароленные дистры и дистры, компиленные неInnoSetup

Rikill 29-06-2011 16:51 1703692

Как можно зашифровать скрипт с файлами чтобы анпакер не брал их?


спасибо не заметил.
upd
при компилировании вылезает следующая ошибка internal error an attempt was made to access wizardform before it has been created с жалобой на строчку
WizardForm.PasswordEdit.Text:= 'Вот и нет пароля';

R.i.m.s.k.y. 29-06-2011 16:52 1703694

Цитата:

Цитата Rikill
Как можно зашифровать скрипт с файлами чтобы анпакер не брал их »

я же выше написал, верный способ - запаролить
пример есть в шапке - Сборник вопросов и рядом в коллекции

No4noylis 29-06-2011 18:13 1703732

Как сделать прозрачным фон текста???

Rikill 29-06-2011 18:45 1703760

No4noylis, читай форумы, гугли в конце концов, короче:
TNewStaticText не имеет свойство прозрачности , а статик текст во всём инсталляторе используется (по дефолту) , но есть альтернатива
Код:

procedure initializewizard();
var
label: TLabel;
begin
  Label := TLabel.Create(WizardForm);
  with Label do begin
    AutoSize:=False; //авторазмер
    SetBounds(ScaleX(100), ScaleY(219), ScaleX(200), ScaleY(17)); //размеры
    OnClick:= @LabelClick; //что делает текст при нажатии, если не нужно удалить
    Cursor:= CrHand; //курсор при наведении, если не нужно удалить
    Transparent:=True; //а вот и главное, прозрачность
    Font.Name:= 'Comic Sans MS' //шрифт если не нужно удалить
    Font.Size:= 8;//размер текста если не нужно удалить
    Font.Color:=$00FFFF; //цвет текста если не нужно удалить
    Font.Style:=[fsItalic]; //стиль текста italic это курсив fsbold это жирный и тд. если не нужно удалить
    Caption := 'наш текст';
    Parent := WizardForm; //где находится
  end;
end;


R.i.m.s.k.y. 29-06-2011 20:31 1703827

Цитата:

Цитата Rikill
при компилировании вылезает следующая ошибка internal error an attempt was made to access wizardform before it has been created с жалобой на строчку
WizardForm.PasswordEdit.Text:= 'Вот и нет пароля'; »

инно честно тебе написал 0 форма не создана
скорее всего ты WizardForm.PasswordEdit.Text:= делаешь в initializeseup, а надо в initializewizard

Rikill 29-06-2011 21:27 1703856

R.i.m.s.k.y., брал прямиком из архива со справкой, странно :)

R.i.m.s.k.y. 29-06-2011 21:36 1703861

Rikill, покаж скрипт

Rikill 29-06-2011 21:40 1703863

http://rghost.ru/12892541

R.i.m.s.k.y. 29-06-2011 22:40 1703898

Rikill,
лишняя CheckPassword потому что
Код:

If Setup finds the CheckPassword event function in the Pascal script, it automatically displays the Password page and calls CheckPassword to check passwords. Return True to accept the password and False to reject it.
вот так надо + в CurPageChanged добавить 2 строчки для нажатия кнопки Далее
Код:

;2. В процедуре InitializeSetup, заполняется массив символов, которые могут использоваться для пароля (а могут и не использоваться).
;3. В процедуре InitializeWizard, поле ввода пароля делается скрытым, что немного прорежает ряды школьников, пытающихся вскрыть ваш инсталлятор.
;4. Как заполняется поле ввода пароля, можно увидеть в процедуре CurPageChanged. Это, наверно, самый простой вариант, но и он не дает увидеть пароль в коде. Еще лучше, если использовать функции и циклы.
;5. Еще одна фишка, это использование в пароле функции с участием GetDateTimeString. При каждом клике на кнопку <Далее>, в переменную сохраняется время. В пароле используется разница между сохраненными и текущими секундами. Так как при нормальной инсталляции, это происходит автоматически и очень быстро, разница практически всегда равна нулю. А вот если проходить в пошаговом режиме (под отладчиком), разница будет не нулевая, и введенный пароль будет не верен. Откровенно говоря, это слабая защита (так как человека, знакомого с такими методами взлома, это не остановит), но все-таки притормозить может.
;6. И, наконец, сразу после проверки пароля, в функции CheckPassword страница PasswordPage ликвидируется.
;Все. Не стоит думать, что этот код нельзя вскрыть. Это только затруднит вскрытие для неподготовленного человека. Но в 99% случаев, этого достаточно.

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DisableProgramGroupPage=yes
Encryption=yes
Password=Inn0

[*Code]
var
str: string;
MyArray: array of Char;

function InitializeSetup(): Boolean;
begin
        MyArray:= ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0','!','@','#','$','%','^','&','*','(',')'];
        Result:= True;
end;

//function CheckPassword(Password: String): Boolean;
//begin
//        WizardForm.PasswordEdit.Text:= 'Вот и нет пароля';
//        WizardForm.PasswordPage.Free;
//Result:= True;
//end;

procedure InitializeWizard();
begin
//        WizardForm.PasswordEdit.Visible:= False;
        WizardForm.PasswordEdit.Text:= '';
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
        str:= GetDateTimeString('ss', #0, #0);
        Result:= True;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpPassword then
begin
        WizardForm.PasswordEdit.Text:= MyArray[8]+MyArray[39]+MyArray[39] +        IntToStr(StrToInt(str) - StrToInt(GetDateTimeString('ss', #0, #0)));
        SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
  SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
//        WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
end;


Rikill 29-06-2011 22:49 1703904

R.i.m.s.k.y., спасибо, надо значит обновить архив в шапке
Сейчас решил вскрыть свой инсталлятор unpacker'ом (Inno Setup Unpacker, расширенная версия) раньше открывался а теперь, когда я перешёл на restools версию инсталлятор не открывается, так-то! :)


немного не понимаю как русифицировать рестуловскую версию...

R.i.m.s.k.y. 29-06-2011 22:52 1703906

Цитата:

Цитата Rikill
R.i.m.s.k.y., спасибо, надо значит обновить архив в шапке »

пожалуйста!
жми полезное сообщение под постом, который помог

Rikill 29-06-2011 23:11 1703914

R.i.m.s.k.y., я жму, не надо попрошайничать ;)
как русифицировать restools? а также как поменять основной курсор в инсталляторе?

Habetdin 30-06-2011 01:40 1703964

Цитата:

Цитата Rikill
как русифицировать restools? »

Inno Setup Enhanced 5.4.0+ rus, распаковать в <Inno Setup>\ISLanguages

murlakatamenka 30-06-2011 03:18 1703979

Цитата:

Цитата Habetdin
Цитата Rikill:
как русифицировать restools? »
Inno Setup Enhanced 5.4.0+ rus, распаковать в <Inno Setup>\ISLanguages »

ну и выбрать русский язык не забыть потом :) (справа сверху, почти под кнопочкой закрытия окошка)

R.i.m.s.k.y. 30-06-2011 10:26 1704124

Цитата:

Цитата Neutron
Доброго времени суток!
Имеется исполняемый файл AppServices.exe который при установке помещается скажем в папку X:\Program Files\Programms\!
Такой вопрос как при установке засунуть его в службы и обозвать скажем My App Service ?
В службы это в те самые которые находятся в Панель управления - > Администрирование -> Службы, вот туда то его и надо засунуть чтобы управлять его запуском, именно этот файл управляется через службы, и ни как иначе!
И на всякий случай, сразу отвечу на встречный вопрос: А не проще ли поместить его в авто загрузку? Мой ответ: Нет не проще, пробЫвал уже, он не запускается, и работает только из служб и больше ни как!
И ещё вопрос на засыпку: Имеется скрипт для Авторана, при установленной программе появляется кнопка удалить, но есть одно но, имеются две одинаковые программы в которых AppID разный, так вот, можно ли сделать так, что бы к кнопке удалить была привязана и вторая программа, т.е что бы не две кнопки были а одна? »

экспортируй к примеру \\\Registry\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AppMgmt\ и посмотри на
DisplayName - имя отображаемое
Start - тип запуска
ImagePath - путь

Gnom_aka_Lexander 30-06-2011 14:12 1704291

Цитата:

Цитата No4noylis
И удалять страници из инсталлятора? »

Помимо прочего, в инно есть специальная функция, которая служит только для сокрытия ненужных страниц:
Код:

function ShouldSkipPage(PageID: Integer): Boolean;
 begin
 if PageID = wpPassword then Result:= True;
 end;

Допустимо перечисление оператором или:
Код:

function ShouldSkipPage(PageID: Integer): Boolean;
 begin
 if (PageID = wpPassword) or (PageID = wpInfoBefore) then Result:= True;
 end;

Все страницы скрыты не будут - страница перед установкой будет обязательно показана, если попытаться скрыть абсолютно все страницы, но в этой теме есть решение, полсотней страниц ранее.

R.i.m.s.k.y. 30-06-2011 14:15 1704294

Цитата:

Цитата Лександер
Все страницы скрыты не будут - страница перед установкой будет обязательно показана, если попытаться скрыть абсолютно все страницы, но в этой теме есть решение, полсотней страниц ранее. »

если нужно - могу сказать как скрыть все через 6 часов, скрипт с этой методой дома

Gnom_aka_Lexander 30-06-2011 14:38 1704320

R.i.m.s.k.y., пусть ищут, в конце концов - зачем поощрять лень человеческую, ответ уже был, достаточно в настройках темы выбрать версия для печати и поискать :)
К томуже, подсказка есть в твоем ответе по данному вопросы, парой страниц назад, нужно только мозгом пошевелить :)
Rikill, Просто у тебя не Рестулс версия. У расширенной версии папка ISLanguages обязательно есть - там уже лежат два языка - английский и китайский. Советовать поставить мою сборку -не буду, я заметил ,что легкие пути не для тебя :) А зря.
И на этом форуме можно самостоятельно удалять свои сообщения. У рестулс - не сборка, а альтернативная версия с ооочень расширенными возможностями. а у меня сборка, которая содержит, помимо инно, все актуальные инструменты, которые облегчают создание скриптов.
читать дальше »
Состав:

1. Inno_setup v5.4.2
2. Расширенная версия от Restools
3. Коллекция плагинов от Restools
4. InnoSetup Script Joiner
5. Inno setup Skin Builder 3.0.0.2 с русиком
6. InnoSetup Unpacker расширенная версия
7. InnoIDE Великолепная альтернатива IStool.
8. Собственно, сам IStool.
9. InnoScriptGenerator 1.0.3.1, переведенный на русский язык
10. Готовые модули взятые с форума Ру-Боард
11. Конвертер файлов реестра в скрипт Инно.

А удалить - нажимаеш - редактировать, потом расширенный режим и внимательно смотриш - сразу увидиш.

Rikill 30-06-2011 14:50 1704328

Профиль | Редактировать | E-mail | Отправить PM | Цитировать
и как удалить?

Лександер, чем твоя сборка отличается от рестулозовской или чем она лучше?
спасибо за разъяснения, но раз уж у меня рестулз, менять не буду :)


Как подружить инсталлятор с Windows 7? Например чтобы прогресс бар был на иконке, можно было останавливать музыку из эскиза инсталлятора, чтобы был виден эскиз инсталлятора а также из 3D Flip была иконка инсталла, что я имею ввиду можно посмотреть на картинке

45king 30-06-2011 15:20 1704360

а как соединить два скрипта через InnoSetup Script Joiner?

Rikill 30-06-2011 15:34 1704366

45king, лучше не надо, программа очень глупа, если не можете объединить почитайте мой урок
так хотя бы научитесь что-нибудь делать

R.i.m.s.k.y. 30-06-2011 15:39 1704372

Цитата:

Цитата 45king
а как соединить два скрипта через InnoSetup Script Joiner? »

во-первых не надо дублировать сообщения в личку и на форуме, многие подписаны на эту ветку, и если к примеру, я не отвечаю - значит я не знаю
во-вторых - если хочешь получать сообщения - почисти РМ!

отвечу здесь - джойнером не пользовался ни разу, всегда ручками склеивал

Цитата:

Цитата Rikill
Например чтобы прогресс бар был на иконке »

да он есть если руками не лезть в оформление, зеленая колбаса прогресса ползет и в инно и на значке в панели.

вот никогда не понимал оформление, прога должна быть утилитарной, полезной, функциональной, юзерфрендли
а народ рюшечки клеит

Rikill 30-06-2011 15:46 1704389

R.i.m.s.k.y., я в основном для себя делаю, про оригинальную колбасу знаю :D но как её в хорошее оформление засунуть...
юзерфрендли это инсталлятор на ms-dos...

Gnom_aka_Lexander 30-06-2011 16:16 1704424

Цитата:

Цитата 45king
а как соединить два скрипта через InnoSetup Script Joiner? »

Очень просто. В папке с программой есть примеры - она объединяет только секцию код, поэтому нужно вычистить скрипты, которые хочеш объединить, оставив только секцию код без заглавия( тоесть [code] - тоже удалить, потом допишеш). Потом выделяеш скрипты, которые нужно объединить и правой кнопкой в подменю выбираеш жойнед. Остальные секции легко объединяются вручную. При правильной подготовке скриптов, программа отрабатывает на 100% корректно.

No4noylis 30-06-2011 16:51 1704482

Я понимаю что такой вопрос уже задавался и более того, я находил ответ на него. Но моя проблема в том что я не могу сам разобраться что к чему. Не могли бы вы, уважаемые господа, ПОДРОБНО описать как создавать чекбоксы на установку DirectX, ярлыка на рабочем столе и т.д. (Что куда добавлять и главное как связываить этот код с файлами DirectX, ярлыка ну и т.д.)

R.i.m.s.k.y. 30-06-2011 17:05 1704496

давай ты сначала сам попробуешь разобраться
сделай скрипт мастером, покури его, он простой как моя жизнь
вот учебник от sjwrec http://narod.ru/disk/7844849001/Inno...anual.pdf.html

и потом будешь задавать предметные вопросы

вот пост с мануалами http://forum.ru-board.com/topic.cgi?...&limit=1&m=3#1

Rikill 30-06-2011 17:06 1704497

No4noylis, а при чём тут ярлык?
держи тут всё подробно и довольно красиво получилось

No4noylis 30-06-2011 17:20 1704510

Rikill, Спасибо огромное!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! :up

No4noylis 30-06-2011 18:55 1704573

Neutron, спасибо но вы меня не поняли, то что вы написали я давно умею делать!! Я имел виду чекбоксы на страничке Selectdir.Rikill, как раз ответил на мой вопрос, за что я ему благодарен!!!

Rikill 30-06-2011 19:09 1704581

No4noylis, ты не говорил что это на селект дир, значит я угадал :D правильно выражай свои мысли!

valyok666 30-06-2011 19:23 1704591

да ну joner соединяет но потом приходиться потом переставлять всё местами(легче модулями пользоваться ИМХО

R.i.m.s.k.y. 30-06-2011 22:10 1704700

Цитата:

Цитата Neutron
т.е получается достаточно экспортировать ветку реестра, поменять значения на свои и засунуть в скрипт? И всего то? »

и отрезать лишнее

45king 01-07-2011 02:41 1704849

как на задний фон картинку поставить чтобы текст был поверх картинки как тут
http://radikal.ru/F/i044.radikal.ru/...d854e.jpg.html

TRMK 01-07-2011 03:33 1704852

Господа, неужели никто так и не подскажет, возможен ли вариант, чтобы установщик можно было запустить всего несколько раз, а потом он выдавал сообщение, что он устал) и нужен другой? Ну или на крайний случай ограниченное время его службы, после чего он переставал бы работать или самоуничтожался. Если это нереально, просто скажите, что нет.

Gnom_aka_Lexander 01-07-2011 09:36 1704921

TRMK, Впринцыпе можно, - делать, например запись в реестр, которая быдет говорить, инсталлу, сколько раз он уже был запущен и по достижении определенного количества запусков запретить дальнейшие запуски. чуть позже накидаю пример. но смысл - кто поумнее, будут искать эту запись и тупо удалять эту запись. Лаборатории дрВеба и Касперского пользуются похожим способом.

TRMK 01-07-2011 13:55 1705084

Лександер, ок, жду. От тех кто поумнее и так не спастись.)

Rikill 01-07-2011 14:53 1705150

Лександер, почему тебе не отправить пм?
45king, делаешь текст прозрачным, я ранее об этом писал, потом расширяешь боковую картинку
Код:

procedure InitializeWizard();
 begin
 ExtractTemporaryFile('картинка.bmp'); //картинка
 WizardForm.WizardBitmapImage.Height:= ScaleX(260);// высота
 WizardForm.WizardBitmapImage.Width:= ScaleX(260); //ширина картинки
 end;


45king 01-07-2011 16:33 1705266

Rikill, я чет не нашел код текст прозрачным можишь показать где писал

Rikill 01-07-2011 16:46 1705277

Цитата:

Цитата Rikill
No4noylis, читай форумы, гугли в конце концов, короче:
TNewStaticText не имеет свойство прозрачности , а статик текст во всём инсталляторе используется (по дефолту) , но есть альтернатива
Код:
Код:

procedure initializewizard();
var
label: TLabel;
begin
 Label := TLabel.Create(WizardForm);
 with Label do begin
 AutoSize:=False; //авторазмер
 SetBounds(ScaleX(100), ScaleY(219), ScaleX(200), ScaleY(17)); //размеры
 OnClick:= @LabelClick; //что делает текст при нажатии, если не нужно удалить
 Cursor:= CrHand; //курсор при наведении, если не нужно удалить
 Transparent:=True; //а вот и главное, прозрачность
 Font.Name:= 'Comic Sans MS' //шрифт если не нужно удалить
 Font.Size:= 8;//размер текста если не нужно удалить
 Font.Color:=$00FFFF; //цвет текста если не нужно удалить
 Font.Style:=[fsItalic]; //стиль текста italic это курсив fsbold это жирный и тд. если не нужно удалить
 Caption := 'наш текст';
 Parent := WizardForm; //где находится
 end;
end;

»


Gnom_aka_Lexander 01-07-2011 18:03 1705320

Цитата:

Цитата Rikill
Лександер, почему тебе не отправить пм? »

Надоело уже думать за всех, отключил прием сообщений ото всех, кроме тех, кто есть в адресной книге.

TRMK, Пробуй:
читать дальше »
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!
; Версию указываеш здесь. проверку по дробной версии делать не стал - и так голова опухла уже.
#define VERSION 1
; Дает возможность ограничить количество запусков на одной машине
; на определенное количество раз. После чего можно запустить инсталл
; только либо следующей версии, либо предидущей.
; Количество запусков указать здесь:
#define COUNT 5

[Setup]
AppName=My Application
AppVersion={#VERSION}
OutputBaseFilename=MiProg
DefaultDirName={pf}\My Application

[code]
var ver,n,m: String;

function InitializeSetup(): Boolean;
begin
if not (RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsNum',n)
and RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsVer',ver))then begin
ver:='{#VERSION}';
RegWriteStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsNum', '1');
RegWriteStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsVer', ver);
Result:=True;
end;

if RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsVer',ver)then
if(StrToInt(ver)<>{#VERSION})then begin ver:='{#VERSION}';
RegWriteStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsNum', '1');
RegWriteStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsVer', ver);
Result:=True;
end;

if RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsNum',n) then begin
m :=IntToStr(StrToInt(n)+1);
RegWriteStringValue(HKLM, 'SOFTWARE\Company\ProgramName','InsNum', m);
if (StrToInt(n)>{#COUNT}) then if (StrToInt(ver)={#VERSION})then begin
MsgBox( 'Error', mbinformation, mb_ok );
Result:=False;
end else begin
if ((StrToInt(n)<{#COUNT})or(StrToInt(ver)<>{#VERSION}))then Result:=True;
end;
end;
end;
- количество запусков -5, после чего меняеш версию, и имееш еще пять запусков. Ветки реестра замаскируй как следует.
Еще один вариант от Шегората - проще и более оптимальный.

читать дальше »
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!
; Версию указываеш здесь. проверку по дробной версии делать не стал - и так голова опухла уже.
#define VERSION 1
; Дает возможность ограничить количество запусков на одной машине
; на определенное количество раз. После чего можно запустить инсталл
; только либо следующей ферсии, либо предидущей.
; Количество запусков указать здесь:
#define COUNT 5
[Setup]
AppName=My Application
AppVersion={#VERSION}
OutputBaseFilename=MiProg
DefaultDirName={pf}\My Application

[code]
var ver,n,m: String;

function InitializeSetup(): Boolean;
var regv, regn, regmod: Cardinal;
begin
if not RegQueryDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsVer', regv) then regv:=-1;
if not RegQueryDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsNum', regn) then regn:=-1;

if (regv={#Version})and(regn>={#Count}) then begin
MsgBox( 'Error', mbinformation, mb_ok );
Result:= False;
Exit;
end;

if (regv=-1)or(regv<>{#Version}) then RegWriteDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsVer', {#Version});
regmod:= regn+1;
if (regv<>{#Version})or(regn=-1) then regmod:=1; RegWriteDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsNum', regmod);
Result:= True;
end;

Shegorat 01-07-2011 22:09 1705409

TRMK
В дополнение к посту Лександер'а.
Добавил возможность удалить сетапник
читать дальше »
Код:

; Версию указываеш здесь. проверку по дробной версии делать не стал - и так голова опухла уже.
#define VERSION "1"
; Дает возможность ограничить количество запусков на одной машине
;  на определенное количество раз. После чего можно запустить инсталл
;  только либо следующей ферсии, либо предидущей.
;  Количество запусков указать здесь:
#define COUNT "5"
#define SelfDelete

[Setup]
AppName=My Application
AppVersion={#VERSION}
OutputBaseFilename=MiProg
DefaultDirName={pf}\My Application

[code]
function InitializeSetup(): Boolean;
var regv, regn, regmod: Cardinal; Res: Integer;
begin
  if not RegQueryDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsVer', regv) then
    regv:=-1;
  if not RegQueryDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsNum', regn) then
    regn:=-1;

  if (regv={#Version})and(regn>={#Count}) then begin
    Result:= False;
    MsgBox( 'Error', mbinformation, mb_ok);
    #ifdef SelfDelete
      SaveStringToFile(ExpandConstant('{userappdata}\sdel.bat'),
      '@echo off'+#10#13+
      ':trydel'+#10#13+
      'del "'+ExpandConstant('{srcexe}')+'"'+#10#13+
      'if exist "'+ExpandConstant('{srcexe}')+'" goto trydel'+#10#13+
      'del "'+ExpandConstant('{userappdata}\sdel.bat')+'"',
      False);
      Exec(ExpandConstant('{userappdata}\sdel.bat'), '', '', SW_HIDE, ewNoWait, Res);
    #endif
    Exit;
  end;

  if (regv=-1)or(regv<>{#Version}) then
    RegWriteDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsVer', {#Version});
  regmod:= regn+1;
  if (regv<>{#Version})or(regn=-1) then regmod:=1;
  RegWriteDWordValue(HKLM, 'SOFTWARE\Company\ProgramName', 'InsNum', regmod);
   
  Result:= True;
end;


TRMK 02-07-2011 02:00 1705532

Лександер и Shegorat, спасибо вам большое! Сегодня уже не смогу проверить, завтра только. Проверю, отблагодарю.)

No4noylis 02-07-2011 10:01 1705575

Пожалуйста подскажите как делать такую панель????? http://i057.radikal.ru/1107/6a/4ec1d548c6de.jpg

Rikill 02-07-2011 12:36 1705637

No4noylis, статус панель http://narod.ru/disk/7844367001/STS_v.1.0.rar.html

No4noylis 02-07-2011 13:57 1705672

Цитата:

Цитата Rikill
No4noylis, статус панель http://narod.ru/disk/7844367001/STS_v.1.0.rar.html »

Не пойму как это к инсталлу прикрутить, нельзя ли пример готового скрипта????? Плиз!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

45king 02-07-2011 14:30 1705692

народ помогите вот я запаковал нужные файлы в FreeArc у меня получилось так название файла .arc потом поставил в скрипт код этот и получаеться я рядом с инстралятором бросай этот файл который запаковал и он его распаковывает а как мне сделать чтобы скрип запаковал этот файл например вот так game-1.bin и потом распаковал?

TRMK 02-07-2011 19:47 1705787

Цитата:

Цитата Shegorat
TRMK
В дополнение к посту Лександер'а.
Добавил возможность удалить сетапник »

Все работает на ура! Спасибо большое!
Еще вопрос созрел: А можно сделать так, чтобы установщик уничтожался или не запускался не зависимо от того, сколько раз он на определенном компе устанавливался, чтобы его лимит установок был определенное кол-во раз и все, потом он не мог запускаться? Или это уже не решаемо?

Gnom_aka_Lexander 02-07-2011 20:15 1705804

Цитата:

Цитата TRMK
А можно сделать так, чтобы установщик уничтожался или не запускался не зависимо от того, сколько раз он на определенном компе устанавливался, чтобы его лимит установок был определенное кол-во раз и все, потом он не мог запускаться? Или это уже не решаемо? »

Я так понял, что ты хочеш ограничить количество установок самого инсталла, не зависимо от компьютера? Теоретически, я преимерно представляю ,как такое сделать. Вот с реализацией... Тут нужны настоящие знатоки программирования... Варианты - либо инсталл при каждой установке пачит сам себя, не знаю, насколько это возможно. Либо он несет в себе набор для компиляции и уничтожает сам себя при каждой установки, в процессе которой компилится новый инсталл, со счетчиком оставшихся запусков на один меньше. Но подозреваю, что это оооочень геморойно.

Shegorat 02-07-2011 20:34 1705814

Цитата:

Цитата Лександер
Я так понял, что ты хочеш ограничить количество установок самого инсталла, не зависимо от компьютера? Теоретически, я преимерно представляю ,как такое сделать. Вот с реализацией... Тут нужны настоящие знатоки программирования... Варианты - либо инсталл при каждой установке пачит сам себя, не знаю, насколько это возможно. Либо он несет в себе набор для компиляции и уничтожает сам себя при каждой установки, в процессе которой компилится новый инсталл, со счетчиком оставшихся запусков на один меньше. Но подозреваю, что это оооочень геморойно. »

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

Gnom_aka_Lexander 02-07-2011 20:43 1705819

Цитата:

Цитата Shegorat
это возможно там где он может перезаписать файл. »

Я знаю :) в любом случае, я не вижу других возможностей реализации отвязать количество запусков от определенной машины :)

No4noylis, Пример готового скрипта .

Serega 02-07-2011 21:38 1705843

Цитата:

Цитата Shegorat
Первое возможно только если инсталлятор находится на жд либо на флешке, т.е там где он может себя перезаписать »

В 99% процентов случаев, он будет на диске на котором он сможет себя перезаписать. Как проверить? Пытаемся создать обычный текстовый файл рядом с инсталлятором, если файл создался, то значит и удалить и перезаписать инсталлятор можно.
Цитата:

Цитата Shegorat
точнее добавить часть данных в конец собственного файла »

Можно конечно и так, но здесь есть одна штука, а именно, пользователь, который работает с файлами через Total Commander или другой файловый менеджер, увидит, что файл перезаписан...
Самый оптимальный вариант, это контролировать через реестр + плюс кинуть файл информации в разные папки Temp и при запуске инсталлятора проверять все варианты.
Цитата:

Цитата Лександер
я не вижу других возможностей реализации отвязать количество запусков от определенной машины »

Есть ещё один вариант :), это инсталлятор обращается на сервер своей проги, которую он устанавливает, при этом передавая все свои данные и спрашивает у него, при отрицательном ответе инсталлятор просто само удаляется...

TRMK 03-07-2011 05:03 1705927

Лександер, Shegorat и Serega раз не получится сделать самоудаление инсталла через определенное кол-во установок, то может можно привязать это к дате и времени? Допустим, он нормально функционирует, до 23.00 01.01.2012г., а потом выдает сообщение, например "Error" и самоудаляется бесследно (как в предыдущем примере, который предлагал Shegorat) .

Gnom_aka_Lexander 03-07-2011 07:34 1705932

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

Tco 03 03-07-2011 07:50 1705937

Цитата:

Цитата TRMK
Tо может можно привязать это к дате и времени? Допустим, он нормально функционирует, до 23.00 01.01.2012г., а потом выдает сообщение, например "Error". »

В шапке (Коллекция скриптов) как раз есть такой скрипт. Скрипт Dobrova, InstallTimeLimit .

45king 03-07-2011 14:18 1706078

а как в распаковшике вреарке изменить кнопку завершить

No4noylis 03-07-2011 15:38 1706114

Как добавить в инсталлятор *.png изображение????

frion 03-07-2011 19:37 1706189

Доброго времени суток!!! Ребята помогите подалуйста решить проблемку)Вот скрипт
читать дальше »

#define MyAppName "Assassin s Creed II"

[Setup]
SourceDir=.
OutputDir=Setup
AppName={#MyAppName}
AppVerName={#MyAppName}
AppVersion=Assassin's Creed II
AppPublisher=Ubisoft Inc.
AppCopyright=Ubisoft Inc.
DefaultDirName={pf}\Assassin's Creed II
DefaultGroupName=Assassin's Creed II
AllowNoIcons=yes
OutputBaseFilename=setup
WizardImageFile=C:\fon.bmp
WizardSmallImageFile=C:\small.bmp
SetupIconFile=D:\Мои Документы\RePack(и)\1.ico
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=none
SolidCompression=true
DiskSpanning=yes
DiskSliceSize=734003200
SlicesPerDisk=1
InternalCompressLevel=none
MergeDuplicateFiles=false

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

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}
Name: additional; Description: Дополнительное ПО
Name: additional\dx; Description: "Обновить DirectX "; Flags: unchecked

[Files]
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\1.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\10.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\11.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\12.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\13.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\14.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\15.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\16.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\17.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\18.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\2.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\3.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\4.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\5.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\6.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\7.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\8.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Slides\9.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: D:\Мои Документы\RePack(и)\Music\assassins creed.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak

Source: D:\Игры\Assassin's Creed II\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Icons]
Name: {group}\Assassin's Creed II; Filename: {app}\AssassinsCreedIIGame.exe; WorkingDir: {app}
Name: {userdesktop}\Assassin's Creed II; Filename: {app}\AssassinsCreedIIGame.exe; WorkingDir: {app}; Tasks: desktopicon
Name: {group}\{cm:UninstallProgram,Assassin's Creed II}; Filename: {uninstallexe}

[Run]
Filename: {src}\Redist\DirectX\DXSETUP.exe; Tasks: additional\dx; StatusMsg: Установка DirectX
Filename: {app}\Pack 1.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка файлов ...; Flags: runminimized runasoriginaluser
Filename: {app}\Pack 2.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка файлов ...; Flags: runminimized runasoriginaluser
Filename: {app}\Pack 3.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка файлов ...; Flags: runminimized runasoriginaluser
Filename: {app}\Pack 4.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка файлов ...; Flags: runminimized runasoriginaluser
Filename: {app}\Pack 5.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка файлов ...; Flags: runminimized runasoriginaluser
Filename: {app}\Pack 6.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка файлов ...; Flags: runminimized runasoriginaluser

Filename: cmd.exe; WorkingDir: {app}; Parameters: /C del /F /Q Pack 1.exe; Flags: runhidden runasoriginaluser
Filename: cmd.exe; WorkingDir: {app}; Parameters: /C del /F /Q Pack 2.exe; Flags: runhidden runasoriginaluser
Filename: cmd.exe; WorkingDir: {app}; Parameters: /C del /F /Q Pack 3.exe; Flags: runhidden runasoriginaluser
Filename: cmd.exe; WorkingDir: {app}; Parameters: /C del /F /Q Pack 4.exe; Flags: runhidden runasoriginaluser
Filename: cmd.exe; WorkingDir: {app}; Parameters: /C del /F /Q Pack 5.exe; Flags: runhidden runasoriginaluser
Filename: cmd.exe; WorkingDir: {app}; Parameters: /C del /F /Q Pack 6.exe; Flags: runhidden runasoriginaluser

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

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

const
Indent=25;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
procedure ssAddImage(FileName:PChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';
procedure ShowMP3Panel(hMainFrm:HWND;StartVolume:integer;DefMP3Dir,BASSDir,MLabel:PChar;IsShowMP3Info,IsBkgFrm Visible:boolean;ShowTimeMP3Info:integer;dBottom:integer);external 'ShowMP3Panel@files:isgsg.dll stdcall';
procedure KillMP3Panel;external 'KillMP3Panel@files:isgsg.dll stdcall';
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('assassins creed.mp3');
ExtractTemporaryFile('bass.dll');
ExtractTemporaryFile('steam.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\steam.cjstyles', '');
Result:=True;
end;

procedure InitializeWizard;
begin
ShowMP3Panel(WizardForm.Handle,80,ExpandConstant('{tmp}'),ExpandConstant('{tmp}'),'Assassins Creed II',True,True,7000,Indent);
ssInitialize(GetWindowLong(MainForm.Handle,-8),20,True,2,$FF000000);
ExtractTemporaryFile('1.jpg');
ssSetBkgImage(ExpandConstant('{tmp}')+'\1.jpg');
WizardForm.BeveledLabel.Enabled:=True;
PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left:= ScaleX(110);
Top:= ScaleY(10);
Width:= ScaleX(370);
Height:= ScaleY(14);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia';
Font.Color:= $fffff;
Font.Style:= [fsBold];
ShowAccelChar:= False;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left:= ScaleX(130);
Top:= ScaleY(25);
Width:= ScaleX(330);
Height:= ScaleY(30);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia';
Font.Color:= $ffffff;
Font.Style:= [fsItalic];
ShowAccelChar:= False;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;


////////////////////// begin WelcomePage //////////////////////

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do begin
AutoSize:=False;
SetBounds(ScaleX(-30), ScaleY(10), ScaleX(550), ScaleY(65));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 13;
Font.Color:=$ffffff;
Font.Style:=[fsBold];
Caption:= ExpandConstant('{cm:Welcome1}')+#13#10+('{#MyAppName}');
Parent:=WizardForm.WelcomePage;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do begin
AutoSize:=False;
SetBounds(ScaleX(25), ScaleY(270), ScaleX(450), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$ffffff;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Welcome2}');
Parent:=WizardForm.WelcomePage;
end;

////////////////////// end WelcomePage //////////////////////

////////////////////// begin FinishedPage //////////////////////

FinishedHeadingLabel:= TLabel.Create(WizardForm);
with FinishedHeadingLabel do begin
SetBounds(ScaleX(-30), ScaleY(10), ScaleX(550), ScaleY(65));
AutoSize:= false;
Alignment := taCenter;
Transparent:= true;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 13;
Font.Color:=$ffffff;
Font.Style := [fsBold];
Caption:= ExpandConstant('{cm:Finished1}');
Parent:=WizardForm.FinishedPage;
end;

FinishedLabel:=TLabel.Create(WizardForm);
with FinishedLabel do begin
AutoSize:=False;
SetBounds(ScaleX(25), ScaleY(160), ScaleX(450), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$ffffff;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Finished2}'+#13#10+'{cm:Finished3}');
Parent:=WizardForm.FinishedPage;
end;

////////////////////// end FinishedPage //////////////////////

with WizardForm do begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedLabel.Hide;
FinishedHeadingLabel.Hide;
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with WizardBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with WizardBitmapImage2 do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with MainPanel do begin
with WizardSmallBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= Mainpanel.Width;
Height:= MainPanel.Height;
end;
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then begin
ExtractTemporaryFile('1.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\1.jpg');
ExtractTemporaryFile('2.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\2.jpg');
ExtractTemporaryFile('3.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\3.jpg');
ExtractTemporaryFile('4.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\4.jpg');
ExtractTemporaryFile('5.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\5.jpg');
ExtractTemporaryFile('6.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\6.jpg');
ExtractTemporaryFile('7.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\7.jpg');
ExtractTemporaryFile('8.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\8.jpg');
ExtractTemporaryFile('9.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\9.jpg');
ExtractTemporaryFile('10.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\10.jpg');
ExtractTemporaryFile('11.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\11.jpg');
ExtractTemporaryFile('12.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\12.jpg');
ExtractTemporaryFile('13.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\13.jpg');
ExtractTemporaryFile('14.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\14.jpg');
ExtractTemporaryFile('15.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\15.jpg');
ExtractTemporaryFile('16.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\16.jpg');
ExtractTemporaryFile('17.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\17.jpg');
ExtractTemporaryFile('18.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\18.jpg');
ssStartShow;
end;
if CurStep=ssPostInstall then ssStopShow;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
if CurPageID=wpInstalling then begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent);
WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end;
if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then begin
if WizardForm.Width<>502 then begin
WizardForm.Visible:=False;
WizardForm.Width:=ScaleX(502);
WizardForm.Height:=ScaleY(392);
WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2;
WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2;
WizardForm.MainPanel.Visible:=True;
WizardForm.Bevel1.Visible:=True;
WizardForm.InnerNotebook.Left:=ScaleX(40);
WizardForm.InnerNotebook.Top:=ScaleY(72);
WizardForm.InnerNotebook.Width:=ScaleX(417);
WizardForm.Visible:=True;
end;
end;
end;

procedure DeinitializeSetup;
begin
KillMP3Panel;
ShowWindow(WizardForm.Handle,0);
UnloadSkin();
ssDeInitialize;
end;

так проблемка в том что после установки, сам установщик самораспаковывающиеся фриарк архивы не удаляет, не знаю как исправить)))
А можно ли все это в один прогресс бар запихнуть???? Если да то подскажите пожалуйста
Заранее спасибо)

VinTagE 03-07-2011 22:10 1706265

No4noylis, botva2 Тебе в помощь, там есть примеры вот и учись по ним =)
Скачать

frion, Если я правельно понял то можно эти архивы удалить так
читать дальше »
procedure CurStepChanged(CurStep: TSetupStep);
begin
{Удаления архивов из папки данной программы}
DeleteFile(ExpandConstant('{app}\Pack 1.exe'));
DeleteFile(ExpandConstant('{app}\Pack 2.exe'));
DeleteFile(ExpandConstant('{app}\Pack 3.exe'));
DeleteFile(ExpandConstant('{app}\Pack 4.exe'));
DeleteFile(ExpandConstant('{app}\Pack 5.exe'));
DeleteFile(ExpandConstant('{app}\Pack 6.exe'));
end;
З.Ы - Наклепал по памяти, но думаю должно помочь =)

No4noylis 03-07-2011 22:37 1706284

Цитата:

Цитата VinTagE
No4noylis, botva2 Тебе в помощь, там есть примеры вот и учись по ним
Скачать »

можешь загрузить на другой файлообенник, отсюда не скачиваеться(((((((

valyok666 03-07-2011 22:38 1706286

кому нужны кнопочки вот вам парочку)
кнопки

VinTagE 03-07-2011 22:39 1706290

Цитата:

Цитата No4noylis
можешь загрузить на другой файлообенник, отсюда не скачиваеться((((((( »

Вот скачивай

valyok666 03-07-2011 22:43 1706292

No4noylis,
чё не качается я только что качал оттуда)

valyok666 03-07-2011 23:00 1706304

у кого нить валяется скрипт mafia2??

valyok666 04-07-2011 12:53 1706582

кто нибудь знает что нибудь про 3Д скрипт???у меня сетуп есть но его не распаковать через unpacker((((

zero 414 04-07-2011 13:15 1706594

Цитата:

Цитата 45king
народ помогите вот я запаковал нужные файлы в FreeArc у меня получилось так название файла .arc потом поставил в скрипт код этот и получаеться я рядом с инстралятором бросай этот файл который запаковал и он его распаковывает а как мне сделать чтобы скрип запаковал этот файл например вот так game-1.bin и потом распаковал?

Когда в фриарке пакуешь, то вместо "назвение файла.arc" пиши game-1.bin

frion 04-07-2011 13:55 1706620

VinTagE, спасибо помогло!!

leshcat 04-07-2011 14:19 1706630

Подскажите пожалуйста,

Есть галочка до начала установки, на нее навешан presetup.bat файл. Можно ли сделать так, чтобы он выполнился до распаковки (главной инсталляции) да еще и без окна консоли?

R.i.m.s.k.y. 04-07-2011 15:36 1706676

leshcat примерно так
Код:

[Files]
Source: "presetup.bat"; Flags: dontcopy

*[*Code]
procedure InitializeWizard();
var ErrorCode: integer
begin
...
ExtractTemporaryFile('presetup.bat');
ShellExec('', ExpandConstant('{tmp}\presetup.bat'), '', '', SW_HIDE, ewNoWait, ErrorCode)
...
end;


R.i.m.s.k.y. 04-07-2011 16:16 1706705

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

leshcat 04-07-2011 16:26 1706716

R.i.m.s.k.y.,

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

R.i.m.s.k.y. 04-07-2011 16:36 1706722

leshcat примерно так
Код:

[Components]
Name: presetup; Description: запустить перед копированием файлов; Flags: disablenouninstallwarning

[Files]
Source: "presetup.bat"; Flags: dontcopy

*[*Code]
procedure InitializeWizard();
begin
...
ExtractTemporaryFile('presetup.bat');
...
end;

procedure CurStepChanged(CurStep: TSetupStep);
var ErrorCode: integer
begin
if CurStep=ssInstall then begin
if IsComponentSelected('presetup') then ShellExec('', ExpandConstant('{tmp}\presetup.bat'), '', '', SW_HIDE, ewNoWait, ErrorCode);
end;
end;

как домашнее задание можешь сделать тоже самое через BeforeInstall в секции Files :)

No4noylis 04-07-2011 18:03 1706781

Что значит ошибка "could not call proc"???

leshcat 04-07-2011 18:40 1706802

R.i.m.s.k.y.,

Спасибо, работает. Таким же методом хотел добавить екзешник. Но он должен идти с параметром.
Код:

ShellExec('', ExpandConstant('{tmp}\water.exe'), '', '', SW_SHOW, ewNoWait, ErrorCode);
Вопрос: где здесь добавить параметр? Сразу после water.exe, т.е.
Код:

ShellExec('', ExpandConstant('{tmp}\water.exe'), '-silent', '', SW_SHOW, ewNoWait, ErrorCode)
Где -silent - параметр?

Gnom_aka_Lexander 04-07-2011 19:08 1706818

Цитата:

Цитата No4noylis
Что значит ошибка "could not call proc"??? »

Обычно это означает, что чегото не хватает. Чаще всего - не распакованный файл, либо обращение к нему идет до того, как он распаковывается.

Цитата:

Цитата leshcat
Где -silent - параметр? »

Проверь, точно -silent? а то может \silent ?

На случай, если я не понял твоего вопроса:
function ShellExec(const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean;
- тоесть - (переводится, как глагол, что значит - хз, у табя стоят кавычки там),файл, параметр, рабочая папка(не обязательно), видимость консоли, ожидание завершения.
Но тебе нужна функция
function Exec(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;

R.i.m.s.k.y. 04-07-2011 19:13 1706823

Цитата:

Цитата leshcat
Вопрос: где здесь добавить параметр? Сразу после water.exe, т.е »

правильно, я бы еще перед и после -silent добавил пробел, чисто на всякий пожарный, следующие кавыки - это рабочая папка, пропиши ExpandConstant('{tmp}')
те строчка примет вид
Код:

ShellExec('', ExpandConstant('{tmp}\water.exe'), ' -silent ', ExpandConstant('{tmp}'), SW_SHOW, ewNoWait, ErrorCode)
экзешники правильно запускать Exec, через ShellExec можно запускать сайты, rtf и тп
Код:

Exec(ExpandConstant('{tmp}\water.exe'), '-silent ', ExpandConstant('{tmp}'), SW_SHOW,ewNoWait, ErrorCode)
ShellExec('open','http://www.svp-team.com','', '', SW_SHOW, ewNoWait, ErrorCode);

Цитата:

Цитата No4noylis
Что значит ошибка "could not call proc"??? »

инно не может вызвать процедуру/функцию. надо внимательно смотреть на вызов, передаваемые параметры, синтаксис

Цитата:

Цитата Лександер
Проверь, точно -silent? а то может \silent »

тогда уж /silent, а то \silent - каталог

ILIA_1992 04-07-2011 19:41 1706846

Дайте если у когонибудь есть такой скрипт http://www.fotohost.by/pic_b/11/06/2...3747d1e345.jpg
а то мне уже запарило исправлять ошибки в скрипте андеркувера/

Rikill 04-07-2011 20:06 1706866

ILIA_1992, хостинг с изображением не открывается, перезалейте пожалуйста.

ILIA_1992 04-07-2011 20:28 1706875

Rikill, http://www.saveimg.ru/pictures/04-07...dfb98214fc.jpg

leshcat 04-07-2011 20:43 1706881

R.i.m.s.k.y., Лександер,

Спасибо вам большое, все работает как часы.

Еще вопрос(наверное поднимался не раз):

Устанавливаются мои компоненты, бат и ехе, необходима перезагрузка. Так вот, как дальше продолжать установку после перегрузки автоматически?

R.i.m.s.k.y. 04-07-2011 20:54 1706889

Цитата:

Цитата leshcat
Устанавливаются мои компоненты, бат и ехе, необходима перезагрузка. Так вот, как дальше продолжать установку после перегрузки автоматически? »

в шапке в сборнике вопросов
Цитата:

Есть четыре разных инсталлятора программного обеспечения (установка сервера, его настройка, автоматический апгрейд, разворачивание базы). Каждая из этих составляющих требует перезагрузки компьютера. Как сделать, чтобы после перезагрузки инсталлятор продолжал инсталляцию с того момента, на котором ушел на перезагруз?

Создаешь 4 отдельных инсталлятора (от общего инсталлятора придется отказаться). Первый прописывает в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce запуск второго, второй - третьего, третий - четвертого.
А в реестр лучше писать только тогда, когда действительно надо. Например, когда закончен первый этап и осталось только перегрузить, вывести сообщение типа "Для завершения установки требуется перегрузка. Перегрузить сейчас?" и две кнопки ОК, Отмена. Вне зависимости от ответа пользователя, прописать ключ в реестр, но при ОК еще и дать команду на рестарт. Тогда не надо будет и удалять.
Цитата:

Как сделать, чтобы после установки программы, она не добавлялась в список "Установка и удаление"?

В секции [Setup] добавь строчку
Uninstallable=false
CreateUninstallRegKey=no

leshcat 04-07-2011 21:29 1706910

И там есть пример скрипта?

Rikill 04-07-2011 22:05 1706938

ILIA_1992, стыдно должно быть, сам переделывай, там элементарно

frion 05-07-2011 00:47 1707050

Доброго времени суток! Ребята если есть возможность дайте скрипт распаковки архива freearc (sfx) в секции code, как можно проще а то какие я только скрипты не пробовал у меня ничего не получалось :unsure:

Rikill 05-07-2011 02:22 1707085

Neutron, cейчас поздно, у меня каша в голове, но всё же, можно записывать данные в реестр и если ветка есть то удаляются приложения не зависимо от appid, но это так, почва для размышлений.

ARS_23 05-07-2011 04:46 1707097

frion,
вроде как то так
Source: Roma Surrectum 2.exe; DestDir: {app};
[RUN]
Filename: {app}\Roma Surrectum 2.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка данных, подождите пожалуйста...;

R.i.m.s.k.y. 05-07-2011 08:29 1707154

Цитата:

Цитата leshcat
И там есть пример скрипта? »

на последовательные установки? нет, я скопировал оттуда все
ничего сложного в этом нет, делаешь 2 дистра, во втором ставишь
Цитата:

Цитата R.i.m.s.k.y.
Uninstallable=false
CreateUninstallRegKey=no »

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

frion 05-07-2011 09:21 1707178

ARS_23, спасибо)

frion 05-07-2011 10:48 1707236

помогите пожалуйста соеденить эти два скрипта
читать дальше »

#define MyAppName "Assassins Creed - Brotherhood"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Assassins Creed - Brotherhood
AppVerName=Assassins Creed - Brotherhood
AppVersion=Assassins Creed - Brotherhood
AppPublisher=Ubisoft Inc.
AppCopyright=Ubisoft Inc.
DefaultDirName={pf}\Assassins Creed - Brotherhood
DefaultGroupName=Assassins Creed - Brotherhood
AllowNoIcons=yes
OutputBaseFilename=setup
WizardImageFile=C:\fon.bmp
WizardSmallImageFile=C:\small.bmp
SetupIconFile=D:\Мои Документы\RePack(и)\1.ico
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=none
DiskSpanning=yes
DiskSliceSize=734003200
SlicesPerDisk=1
InternalCompressLevel=none

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

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

[Files]
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\1.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\10.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\11.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\12.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\13.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\14.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\15.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\16.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\17.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\18.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\19.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\2.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\20.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\21.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\3.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\4.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\5.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\6.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\7.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\8.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\9.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Music\assassins creed.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

Source: D:\Games\Assassins Creed - Brotherhood\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Icons]
Name: {group}\Assassins Creed - Brotherhood; Filename: {app}\ACBSP.exe; WorkingDir: {app}
Name: {userdesktop}\Assassins Creed - Brotherhood; Filename: {app}\ACBSP.exe; WorkingDir: {app}; Tasks: desktopicon
Name: {group}\{cm:UninstallProgram,Assassins Creed - Brotherhood}; Filename: {uninstallexe}

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

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

const
Indent=25;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
procedure ssAddImage(FileName:PChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';
procedure ShowMP3Panel(hMainFrm:HWND;StartVolume:integer;DefMP3Dir,BASSDir,MLabel:PChar;IsShowMP3Info,IsBkgFrm Visible:boolean;ShowTimeMP3Info:integer;dBottom:integer);external 'ShowMP3Panel@files:isgsg.dll stdcall';
procedure KillMP3Panel;external 'KillMP3Panel@files:isgsg.dll stdcall';
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('assassins creed.mp3');
ExtractTemporaryFile('bass.dll');
ExtractTemporaryFile('steam.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\steam.cjstyles', '');
Result:=True;
end;

procedure InitializeWizard;
begin
ShowMP3Panel(WizardForm.Handle,80,ExpandConstant('{tmp}'),ExpandConstant('{tmp}'),'Assassins Creed',True,True,7000,Indent);
ssInitialize(GetWindowLong(MainForm.Handle,-8),25,True,2,$FF000000);
ExtractTemporaryFile('1.jpg');
ssSetBkgImage(ExpandConstant('{tmp}')+'\1.jpg');
WizardForm.BeveledLabel.Enabled:=True;
PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left:= ScaleX(110);
Top:= ScaleY(10);
Width:= ScaleX(370);
Height:= ScaleY(14);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia';
Font.Color:= $000000;
Font.Style:= [fsBold];
ShowAccelChar:= False;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left:= ScaleX(130);
Top:= ScaleY(25);
Width:= ScaleX(330);
Height:= ScaleY(30);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia';
Font.Color:= $000000;
Font.Style:= [fsItalic];
ShowAccelChar:= False;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;



////////////////////// begin WelcomePage //////////////////////

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do begin
AutoSize:=False;
SetBounds(ScaleX(-30), ScaleY(10), ScaleX(550), ScaleY(65));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 13;
Font.Color:=$000000;
Font.Style:=[fsBold];
Caption:= ExpandConstant('{cm:Welcome1}')+#13#10+('{#MyAppName}');
Parent:=WizardForm.WelcomePage;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do begin
AutoSize:=False;
SetBounds(ScaleX(25), ScaleY(270), ScaleX(450), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$ffffff;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Welcome2}');
Parent:=WizardForm.WelcomePage;
end;

////////////////////// end WelcomePage //////////////////////

////////////////////// begin FinishedPage //////////////////////

FinishedHeadingLabel:= TLabel.Create(WizardForm);
with FinishedHeadingLabel do begin
SetBounds(ScaleX(-30), ScaleY(10), ScaleX(550), ScaleY(65));
AutoSize:= false;
Alignment := taCenter;
Transparent:= true;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 13;
Font.Color:=$000000;
Font.Style := [fsBold];
Caption:= ExpandConstant('{cm:Finished1}');
Parent:=WizardForm.FinishedPage;
end;

FinishedLabel:=TLabel.Create(WizardForm);
with FinishedLabel do begin
AutoSize:=False;
SetBounds(ScaleX(25), ScaleY(160), ScaleX(450), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$000000;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Finished2}'+#13#10+'{cm:Finished3}');
Parent:=WizardForm.FinishedPage;
end;

////////////////////// end FinishedPage //////////////////////

with WizardForm do begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedLabel.Hide;
FinishedHeadingLabel.Hide;
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with WizardBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with WizardBitmapImage2 do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with MainPanel do begin
with WizardSmallBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= Mainpanel.Width;
Height:= MainPanel.Height;
end;
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then begin
ExtractTemporaryFile('1.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\1.jpg');
ExtractTemporaryFile('2.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\2.jpg');
ExtractTemporaryFile('3.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\3.jpg');
ExtractTemporaryFile('4.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\4.jpg');
ExtractTemporaryFile('5.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\5.jpg');
ExtractTemporaryFile('6.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\6.jpg');
ExtractTemporaryFile('7.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\7.jpg');
ExtractTemporaryFile('8.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\8.jpg');
ExtractTemporaryFile('9.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\9.jpg');
ExtractTemporaryFile('10.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\10.jpg');
ExtractTemporaryFile('11.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\11.jpg');
ExtractTemporaryFile('12.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\12.jpg');
ExtractTemporaryFile('13.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\13.jpg');
ExtractTemporaryFile('14.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\14.jpg');
ExtractTemporaryFile('15.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\15.jpg');
ExtractTemporaryFile('16.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\16.jpg');
ExtractTemporaryFile('17.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\17.jpg');
ExtractTemporaryFile('18.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\18.jpg');
ExtractTemporaryFile('19.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\19.jpg');
ExtractTemporaryFile('20.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\20.jpg');
ExtractTemporaryFile('21.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\21.jpg');
ssStartShow;
end;
if CurStep=ssPostInstall then ssStopShow;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
if CurPageID=wpInstalling then begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent);
WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end;
if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then begin
if WizardForm.Width<>502 then begin
WizardForm.Visible:=False;
WizardForm.Width:=ScaleX(502);
WizardForm.Height:=ScaleY(392);
WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2;
WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2;
WizardForm.MainPanel.Visible:=True;
WizardForm.Bevel1.Visible:=True;
WizardForm.InnerNotebook.Left:=ScaleX(40);
WizardForm.InnerNotebook.Top:=ScaleY(72);
WizardForm.InnerNotebook.Width:=ScaleX(417);
WizardForm.Visible:=True;
end;
end;
end;

procedure DeinitializeSetup;
begin
KillMP3Panel;
ShowWindow(WizardForm.Handle,0);
UnloadSkin();
ssDeInitialize;
end;


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

[Run]
Filename: {src}\Data.exe; WorkingDir: {src}; Parameters: "-y -o""{app}"""; StatusMsg: Установка русификации...; Flags: waituntilterminated

[code]
procedure CurStepChanged(CurStep: TSetupStep);
var
res:Integer;
app, arc, dest:string;
begin
If CurStep=ssPostInstall
then
begin
app:=ExpandConstant('{src}')+'\Data.exe';
dest:=ExpandConstant('{app}');
Exec(app, 'x "'+ arc + '" -y -o"'+ dest + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);
end;
end;

заранее спасибо)

Gnom_aka_Lexander 05-07-2011 11:02 1707248

Цитата:

Цитата Neutron
Извеняюсь, сразу не сообразил выложить, вот файлы со скриптом »

ID оба дай. там делов на две копейки.

frion, Держи:

читать дальше »
[Setup]
SourceDir=.
OutputDir=Setup
AppName=Assassins Creed - Brotherhood
AppVerName=Assassins Creed - Brotherhood
AppVersion=Assassins Creed - Brotherhood
AppPublisher=Ubisoft Inc.
AppCopyright=Ubisoft Inc.
DefaultDirName={pf}\Assassins Creed - Brotherhood
DefaultGroupName=Assassins Creed - Brotherhood
AllowNoIcons=yes
OutputBaseFilename=setup
WizardImageFile=C:\fon.bmp
WizardSmallImageFile=C:\small.bmp
SetupIconFile=D:\Мои Документы\RePack(и)\1.ico
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
Compression=none
DiskSpanning=yes
DiskSliceSize=734003200
SlicesPerDisk=1
InternalCompressLevel=none

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

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

[Files]
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\1.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\10.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\11.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\12.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\13.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\14.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\15.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\16.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\17.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\18.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\19.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\2.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\20.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\21.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\3.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\4.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\5.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\6.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\7.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\8.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Slides\9.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: D:\Мои Документы\RePack(и)\Music\assassins creed.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

Source: D:\Games\Assassins Creed - Brotherhood\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Icons]
Name: {group}\Assassins Creed - Brotherhood; Filename: {app}\ACBSP.exe; WorkingDir: {app}
Name: {userdesktop}\Assassins Creed - Brotherhood; Filename: {app}\ACBSP.exe; WorkingDir: {app}; Tasks: desktopicon
Name: {group}\{cm:UninstallProgram,Assassins Creed - Brotherhood}; Filename: {uninstallexe}

[Run]
Filename: {src}\Data.exe; WorkingDir: {src}; Parameters: "-y -o""{app}"""; StatusMsg: Установка русификации...; Flags: waituntilterminated

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

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

const
Indent=25;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
procedure ssAddImage(FileName:PChar); external 'ssAddImage@files:isgsg.dll stdcall delayload';
procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload';
procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';
procedure ShowMP3Panel(hMainFrm:HWND;StartVolume:integer;DefMP3Dir,BASSDir,MLabel:PChar;IsShowMP3Info,IsBkgFrm Visible:boolean;ShowTimeMP3Info:integer;dBottom:integer);external 'ShowMP3Panel@files:isgsg.dll stdcall';
procedure KillMP3Panel;external 'KillMP3Panel@files:isgsg.dll stdcall';
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('assassins creed.mp3');
ExtractTemporaryFile('bass.dll');
ExtractTemporaryFile('steam.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\steam.cjstyles', '');
Result:=True;
end;

procedure InitializeWizard;
begin
ShowMP3Panel(WizardForm.Handle,80,ExpandConstant('{tmp}'),ExpandConstant('{tmp}'),'Assassins Creed',True,True,7000,Indent);
ssInitialize(GetWindowLong(MainForm.Handle,-8),25,True,2,$FF000000);
ExtractTemporaryFile('1.jpg');
ssSetBkgImage(ExpandConstant('{tmp}')+'\1.jpg');
WizardForm.BeveledLabel.Enabled:=True;
PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left:= ScaleX(110);
Top:= ScaleY(10);
Width:= ScaleX(370);
Height:= ScaleY(14);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia';
Font.Color:= $000000;
Font.Style:= [fsBold];
ShowAccelChar:= False;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left:= ScaleX(130);
Top:= ScaleY(25);
Width:= ScaleX(330);
Height:= ScaleY(30);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia';
Font.Color:= $000000;
Font.Style:= [fsItalic];
ShowAccelChar:= False;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;



////////////////////// begin WelcomePage //////////////////////

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do begin
AutoSize:=False;
SetBounds(ScaleX(-30), ScaleY(10), ScaleX(550), ScaleY(65));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 13;
Font.Color:=$000000;
Font.Style:=[fsBold];
Caption:= ExpandConstant('{cm:Welcome1}')+#13#10+('{#MyAppName}');
Parent:=WizardForm.WelcomePage;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do begin
AutoSize:=False;
SetBounds(ScaleX(25), ScaleY(270), ScaleX(450), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$ffffff;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Welcome2}');
Parent:=WizardForm.WelcomePage;
end;

////////////////////// end WelcomePage //////////////////////

////////////////////// begin FinishedPage //////////////////////

FinishedHeadingLabel:= TLabel.Create(WizardForm);
with FinishedHeadingLabel do begin
SetBounds(ScaleX(-30), ScaleY(10), ScaleX(550), ScaleY(65));
AutoSize:= false;
Alignment := taCenter;
Transparent:= true;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 13;
Font.Color:=$000000;
Font.Style := [fsBold];
Caption:= ExpandConstant('{cm:Finished1}');
Parent:=WizardForm.FinishedPage;
end;

FinishedLabel:=TLabel.Create(WizardForm);
with FinishedLabel do begin
AutoSize:=False;
SetBounds(ScaleX(25), ScaleY(160), ScaleX(450), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$000000;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Finished2}'+#13#10+'{cm:Finished3}');
Parent:=WizardForm.FinishedPage;
end;

////////////////////// end FinishedPage //////////////////////

with WizardForm do begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedLabel.Hide;
FinishedHeadingLabel.Hide;
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with WizardBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with WizardBitmapImage2 do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with MainPanel do begin
with WizardSmallBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= Mainpanel.Width;
Height:= MainPanel.Height;
end;
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
res:Integer;
app, arc, dest:string;
begin
if CurStep=ssInstall then begin
ExtractTemporaryFile('1.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\1.jpg');
ExtractTemporaryFile('2.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\2.jpg');
ExtractTemporaryFile('3.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\3.jpg');
ExtractTemporaryFile('4.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\4.jpg');
ExtractTemporaryFile('5.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\5.jpg');
ExtractTemporaryFile('6.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\6.jpg');
ExtractTemporaryFile('7.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\7.jpg');
ExtractTemporaryFile('8.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\8.jpg');
ExtractTemporaryFile('9.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\9.jpg');
ExtractTemporaryFile('10.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\10.jpg');
ExtractTemporaryFile('11.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\11.jpg');
ExtractTemporaryFile('12.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\12.jpg');
ExtractTemporaryFile('13.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\13.jpg');
ExtractTemporaryFile('14.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\14.jpg');
ExtractTemporaryFile('15.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\15.jpg');
ExtractTemporaryFile('16.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\16.jpg');
ExtractTemporaryFile('17.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\17.jpg');
ExtractTemporaryFile('18.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\18.jpg');
ExtractTemporaryFile('19.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\19.jpg');
ExtractTemporaryFile('20.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\20.jpg');
ExtractTemporaryFile('21.jpg');
ssAddImage(ExpandConstant('{tmp}')+'\21.jpg');
ssStartShow;
end;
If CurStep=ssPostInstall then begin
ssStopShow;
app:=ExpandConstant('{src}')+'\Data.exe';
dest:=ExpandConstant('{app}');
Exec(app, 'x "'+ arc + '" -y -o"'+ dest + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
if CurPageID=wpInstalling then begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent);
WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end;
if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then begin
if WizardForm.Width<>502 then begin
WizardForm.Visible:=False;
WizardForm.Width:=ScaleX(502);
WizardForm.Height:=ScaleY(392);
WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2;
WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2;
WizardForm.MainPanel.Visible:=True;
WizardForm.Bevel1.Visible:=True;
WizardForm.InnerNotebook.Left:=ScaleX(40);
WizardForm.InnerNotebook.Top:=ScaleY(72);
WizardForm.InnerNotebook.Width:=ScaleX(417);
WizardForm.Visible:=True;
end;
end;
end;

procedure DeinitializeSetup;
begin
KillMP3Panel;
ShowWindow(WizardForm.Handle,0);
UnloadSkin();
ssDeInitialize;
end;

И не забывай кнопку - Полезное сообщение . Благодарность отельным постом никого не интересует и убивает желание помогать дальше.

Rikill 05-07-2011 12:06 1707314

Может мой урок в шапку закинуть? просто он реально помогает людям и не будет флуда насчёт "склейте скрипт".

v00sh 05-07-2011 12:11 1707320

Код:
[Run]
Filename: "{app}\pb\pbsetup.exe"; WorkingDir: "{app}\pb\"; Parameters: "/q --i-accept-the-pb-eula /ag cod4 --add-game-path='{app}' /u"; StatusMsg: "Обновление PunkBuster..."; Tasks: "pb";

При запуске файла pbsetup.exe с такими настройками выскакивает ошибка (игра устанавливалась в C:\Program Files\Activision\Call of Duty 4 - Modern Warfare):
http://s57.radikal.ru/i157/1107/19/17382e56ee5b.jpg

Каким образом нужно исправить код в секции "--add-game-path=", чтобы обновление происходило без ошибок (после = - путь до папки с игрой)?

Синтаксис:
http://s39.radikal.ru/i083/1107/79/c32a3f41e701.jpg

Gnom_aka_Lexander 05-07-2011 12:45 1707362

Самый быстрый браузер :) тестим :)
Чтобы не было вопросов, по поводу касательства к этой теме - написан на Inno Setup.

Rikill 05-07-2011 13:17 1707390

Лександер, это не твой браузер, он есть с примерами к рестулз

leshcat 05-07-2011 13:39 1707408

R.i.m.s.k.y.,

Ситуация такая:

Есть первый инсталл - setup1.exe. В нем есть чекбокс, что если он отмечен, то будет добавлено:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\setup2.exe

ПРИЧЕМ, setup2.exe должен быть рядом с setup1.exe

Setup1 после установки перезагружает систему, система запускает сетап2.

Setup2 после установки должен удалить ключ регистра.

Rikill 05-07-2011 13:44 1707412

leshcat, и в чём проблема?если я правильно понял то можно чтобы setup1 кидал setup2 в определённую папку, чтобы глупый юзер не удалил файл, а после запуска setup2 сетап 2 удалялся и удалял ключ реестра

Rikill 05-07-2011 14:14 1707429

Neutron, тогда надо делать деинсталлятор который удаляет 2 программы

leshcat 05-07-2011 14:29 1707438

Rikill,

Поясню.

Setup1.exe и setup2.exe - инсталляторы и выполняют разные задачи.

В Setup1.exe перед установкой есть галочка. Если она отмечена , то Setup1.exe в реестр RunOnce записывает местонахождение Setup2.exe (я хочу чтобы он был рядом с Setup1.exe). Когда Setup1.exe отрабатывает - он перезагружает систему.

А потом автоматом запускается Setup2.exe при загрузке системы.

Проблема в том, как получить путь до setup2.exe, ведь юзер их может скопать куда угодно. Из идей только та, что нужно, чтобы сетап1 сам нашел себя, а потом передал инфу в реестр, но я не знаю как это реализовать.

Gnom_aka_Lexander 05-07-2011 14:31 1707441

Цитата:

Цитата Neutron
Не получается на одну кнопку повесить! »

Неправильным путем пошел просто :)

читать дальше »
procedure UninstallButtonClick(Sender: TObject);
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{F367827A-CC84-4C46-98FD-4C484F136272}_is1','UninstallString', UninsPath) then
begin
UninsPath:=RemoveQuotes(UninsPath)
Exec(UninsPath,'','',SW_SHOWNORMAL,ewNoWait,ResultCode)
end
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{D9C84A33-61AA-4B8B-B44B-B04A0923592E}_is1','UninstallString', UninsPath1) then
begin
UninsPath1:=RemoveQuotes(UninsPath1)
Exec(UninsPath1,'','',SW_SHOWNORMAL,ewNoWait,ResultCode)
end
AutoRun.Close;
PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end;
Не забудь объявить UninsPath1 и по аналогии условие для создания кнопки удаления.
Чуть переделал, получился минибраузер для настройки роутера - актуально для владельцев роутеров - на запуске определяется наличие роутера и его ип(Спасибо Шегорату), и если он есть - сразу выводится веб-фейс настройки. Скачать.

R.i.m.s.k.y. 05-07-2011 15:36 1707490

Цитата:

Цитата leshcat
Проблема в том, как получить путь до setup2.exe »

системная переменная {src}
путь до Setup1.exe= ExpandConstant('{src}\Setup1.exe')

leshcat 05-07-2011 16:17 1707530

R.i.m.s.k.y.,
:) Точно.

Еще:

Как добавить коммент на чекбокс?

R.i.m.s.k.y. 05-07-2011 16:19 1707533

Цитата:

Цитата leshcat
Как добавить коммент на чекбокс »

смотря где, где тебе нужно?

leshcat 05-07-2011 16:35 1707549

R.i.m.s.k.y.,

можно снизу - он единственный
можно при наводке

R.i.m.s.k.y. 05-07-2011 16:42 1707560

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

leshcat 05-07-2011 16:45 1707561

R.i.m.s.k.y.,

можно снизу - он единственный
можно при наводке

R.i.m.s.k.y. 05-07-2011 16:52 1707563

смысл копировать ответ сверху? я не понял ни с первого ни со второго раза
скрин давай

Rikill 05-07-2011 16:53 1707564

R.i.m.s.k.y., можешь показать инсталлятор свой? просто интересно что там реализовано и почему большой код

R.i.m.s.k.y. 05-07-2011 16:58 1707569

Цитата:

Цитата Rikill
R.i.m.s.k.y., можешь показать инсталлятор свой »

это Rimpack на моем сайте, не могу - тайна сия велика есть ;)
довольно здоровая секция реестра - ставится хаали, ффд и тп
но секция код весит более 600 кбайт, определяется железо (видуха/проц), делается бэкап реестра, всякие проверки на компоненты, к примеру если не стоит ависинт но ты выбрал свп - ависинт тоже выберется, и тп. Много всякого за 2 года накопилось, и половину мне подсказали на этом форуме :)
весь скрипт римпака - на 950 кбайт, к нему идет отдельный модуль "Настройки римпака", общие части вынесены в него и он вызывается параметром комстроки, суммарно за мегабайт текста-кода :)
кодерим мелочь - всего 200кбайт

оформления в моих дистрах нету

в принципе я отвечаю на вопросы которые я знаю, а все что знаю реализовано в моих дистрах
на сайте даалеко не все, много дистров сделано по работе по мере надобности, но это за темой этого разговора

я же делал дистр для Smooth Video Project, опять же порезав римпак :) http://www.svp-team.com

El Sanchez 05-07-2011 17:02 1707574

Цитата:

Цитата v00sh
Каким образом нужно исправить код в секции "--add-game-path=", чтобы обновление происходило без ошибок (после = - путь до папки с игрой)? »

v00sh,
Код:

Parameters: "/q --i-accept-the-pb-eula /ag cod4 --add-game-path=""{app}"" /u"

Gnom_aka_Lexander 05-07-2011 17:46 1707609

Цитата:

Цитата Neutron
[ Code]
................
var
AutoRun: TSetupForm;
.........................................
AppPath,UninsPath: string; »

Сюда-же UninsPath1 : AppPath,UninsPath,UninsPath1: string;
Весь код:
читать дальше »
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
const
BM_CLICK = $00F5;

var
AutoRun: TSetupForm;
img1: TBitmapImage;
PlayButton, InstallButton, SupportButton, ReadmeButton, WebButton, ExitButton, UninstallButton: TButton;
AppPath,UninsPath,UninsPath1: string;
ResultCode: Integer;
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
SendMessage(WizardForm.NextButton.Handle, BM_CLICK, 0, 0);
end;

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

procedure PlayButtonClick(Sender: TObject);
var
exe: string;
begin
exe:='shift.exe';
if RegQueryStringValue(HKLM, 'SOFTWARE\Electronic Arts\Game','Install Dir', AppPath) then
begin
Exec(AddBackslash(AppPath) + Exe, '', ExtractFilePath(AddBackslash(AppPath) + Exe), SW_SHOWNORMAL,ewNoWait,ResultCode)
AutoRun.Close;
PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end
end;

procedure InstallButtonClick(Sender: TObject);
var
CurPageID: Integer;
begin
Exec(ExpandConstant('{src}\Setup.exe'),'','',SW_SHOW,ewNoWait,ResultCode)
AutoRun.Close;
PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end;

procedure SupportButtonClick(Sender: TObject);
begin
shellexec('open', ExpandConstant('{src}\Game.exe'), '', '',SW_SHOWNORMAL, ewnowait, ResultCode)
end;

procedure ReadmeButtonClick(Sender: TObject);
begin
ShellExec('open', ExpandConstant('{src}\readme.txt'),'','', SW_SHOW, ewNoWait, ResultCode)
end;

procedure WebButtonClick(Sender: TObject);
begin
shellexec('open', 'http://localhost', '', '',SW_SHOWNORMAL, ewnowait, ResultCode)
end;

procedure ExitButtonClick(Sender: TObject);
var
CurPageID: Integer;
begin
AutoRun.Close;
PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end;

//============================================ Код, собственно вставил сюда ===============================================
procedure UninstallButtonClick(Sender: TObject);
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{F367827A-CC84-4C46-98FD-4C484F136272}_is1','UninstallString', UninsPath) then
begin
UninsPath:=RemoveQuotes(UninsPath)
Exec(UninsPath,'','',SW_SHOWNORMAL,ewNoWait,ResultCode)
end
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{D9C84A33-61AA-4B8B-B44B-B04A0923592E}_is1','UninstallString', UninsPath1) then
begin
UninsPath1:=RemoveQuotes(UninsPath1)
Exec(UninsPath1,'','',SW_SHOWNORMAL,ewNoWait,ResultCode)
end
AutoRun.Close;
PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end;
//============================================ Код, собственно вставил сюда ===============================================
//end;

// Почти в самом низу скрипта, в конце добавил

procedure CreateAutoRun;
begin
//AutoRun
AutoRun := CreateCustomForm;
with AutoRun do begin
Left := 498;
Top := 75;
// Width := 495;
// Height := 340;
Width := 640;
Height := 480;
BorderIcons := [];
BorderStyle:=bsToolWindow //(bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin)
Color := clBtnFace;
Font.Color := clWindowText;
Font.Height := -11;
Font.Name := 'MS Sans Serif';
Font.Style := [];
Position := poScreenCenter;
Caption:='AutoRunName'
end;
//img1
img1 := TBitmapImage.Create(AutoRun);
ExtractTemporaryFile('1.bmp');
with img1 do begin
Parent := AutoRun;
Left := 0;
Stretch:= true;
Top := 0;
Width := Autorun.Width;
Height := Autorun.Height;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
end;
//PlayButton
PlayButton:= TButton.Create(AutoRun);
with PlayButton do begin
Parent := AutoRun;
Left := 470;
Top := 280;
Width := 150;
Height := 22;
Caption:= 'Play';
Cursor:= crHand;
// ModalResult:= mrOk;
OnClick := @PlayButtonClick;
if not RegQueryStringValue(HKLM, 'SOFTWARE\Game','Install Dir', AppPath) then
begin
PlayButton.Enabled := False;
end
end;
//InstallButton
InstallButton:= TButton.Create(AutoRun);
with InstallButton do begin
Parent:= AutoRun;
Left := 470;
Top := 250;
Width := 150;
Height := 22;
Caption:= 'Install';
Cursor:= crHand;
OnClick := @InstallButtonClick;
end;
//SupportButton
SupportButton:= TButton.Create(AutoRun);
with SupportButton do begin
Parent:= AutoRun;
Left := 470;
Top := 310;
Width := 150;
Height := 22;
Caption:= 'Support';
Cursor:= crHand;
OnClick := @SupportButtonClick;
end;
//ReadmeButton
ReadmeButton:= TButton.Create(AutoRun);
with ReadmeButton do begin
Parent:= AutoRun;
Left := 470;
Top := 340;
Width := 150;
Height := 22;
Caption:= 'Readme';
Cursor:= crHand;
OnClick := @ReadmeButtonClick;
end;
//WebButton
WebButton:= TButton.Create(AutoRun);
with WebButton do begin
Parent:= AutoRun;
Left := 470;
Top := 370;
Width := 150;
Height := 22;
Caption:= 'Web';
Cursor:= crHand;
OnClick := @WebButtonClick;
end;
//ExitButton
ExitButton:= TButton.Create(AutoRun);
with ExitButton do begin
Parent:= AutoRun;
Left := 470;
Top := 430;
Width := 150;
Height := 22;
Caption:= 'Exit';
Cursor:= crHand;
OnClick := @ExitButtonClick;
// ModalResult:= mrCancel;
end;
//UninstallButton
UninstallButton:= TButton.Create(AutoRun);
with UninstallButton do begin
Parent:= AutoRun;
Left := 470;
Top := 400;
Width := 150;
Height := 22;
Caption:= 'Uninstall';
Cursor:= crHand;
OnClick := @UninstallButtonClick;
end;

//===================================================Здесь в конце======================================================
if not (RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{F367827A-CC84-4C46-98FD-4C484F136272}_is1','UninstallString', UninsPath) or
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{D9C84A33-61AA-4B8B-B44B-B04A0923592E}_is1','UninstallString', UninsPath1)) then begin
InstallButton.Enabled:=true;
UninstallButton.Enabled:=false;
end else begin
InstallButton.Enabled:=false;
UninstallButton.Enabled:=true;
end;
//===================================================Здесь в конце======================================================


AutoRun.ShowModal;
end;

procedure InitializeWizard;
begin
CreateAutoRun;
end;


leshcat 05-07-2011 18:53 1707663

R.i.m.s.k.y.,


Вообщем над ним или под ним, или при наводке. :)

Krinkels 05-07-2011 18:57 1707666

Друзья, выкладываю длл для работы со Steam ником.
Что умеет:
1. Возвращает число ников в Steam
2. Если несколько ников то может вернуть ник под номером N
3. Если несколько ников то может вернуть путь к нику под номером N
4. Возвращает активный ник
5. В случае ошибки возвращает текст ошибки
Скачать

R.i.m.s.k.y. 05-07-2011 19:00 1707672

leshcat, ну так сразу бы и написал что в списке компонентов
ты компоненты не умеешь делать или тебе надо под списком дополнительный чекбокс? чекбокс в таком случае надо делать через код, а остальное есть в справке и примерах в шапке

leshcat 05-07-2011 19:22 1707693

R.i.m.s.k.y.,

Нет, не чекбокс, его делать я умею :)
А описание чекбокса дополнительно, типа если на него навести мышкой - даст короткую справку, или если выделишь - вывалится короткая справка снизу.

И еще: можно ли контролировать положение чекбокса(левее,ниже итп)?

R.i.m.s.k.y. 05-07-2011 19:27 1707698

leshcat, не, я такое не знаю

VinTagE 05-07-2011 19:38 1707705

Цитата:

Цитата leshcat
А описание чекбокса дополнительно, типа если на него навести мышкой - даст короткую справку, или если выделишь - вывалится короткая справка снизу. »

Вот держи =)

leshcat 05-07-2011 20:10 1707726

VinTagE,

Спасибо, работает. А главное информативно. :)

leshcat 05-07-2011 20:26 1707740

Еще вопрос:

Надо удалить определенную программу перед установкой моей.
Как этого достичь самым оптимальным образом?
Из моих идей - удостоверится, что она есть в реестре - вызвать деинсталлятор, но чтобы юзер сам видел официальный унинсталл, а не в тихую. Вот как его вызвать?

VinTagE 05-07-2011 20:34 1707748

Цитата:

Цитата leshcat
Еще вопрос:
Надо удалить определенную программу перед установкой моей.
Как этого достичь самым оптимальным образом?
Из моих идей - удостоверится, что она есть в реестре - вызвать деинсталлятор, но чтобы юзер сам видел официальный унинсталл, а не в тихую. Вот как его вызвать? »

Ну если я правельно понял то можно и так сделать
читать дальше »

[Setup]
AppName=My Program
AppVerName=My Program 1.2
CreateAppDir=false

[code]
function InitializeSetup(): Boolean;
var
UnStr: String;
ErrorCode, Mesages: Integer;
begin
Result := True;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'UninstallString', UnStr) then
begin
If UnStr <> '' then
begin
Mesages := MsgBox('My Program уже установлена на Ваш компьютер.'+#10#10+'Перед новой установкой следует удалить предыдущую версию. Удалить её?', mbInformation, MB_YESNOCANCEL);
case Mesages of
idYes:
begin
UnStr := RemoveQuotes(UnStr);
Exec(UnStr, '/silent', '', SW_Show, ewWaitUntilTerminated, ErrorCode);
Result := True;
end
idNo:
begin
Result := True;
end
idCancel:
begin
Result := False;
end;
end;
end;
end;
end;

R.i.m.s.k.y. 05-07-2011 20:36 1707749

верно, но только для дистров на инно
если прога на msi (microsft installer) - надо курить справку, там сложновато, вызов по ID
если на nsis - тоже по своему

в общем зависит от проги

leshcat 05-07-2011 20:42 1707755

R.i.m.s.k.y.,
инсталлер сделан на инно.

leshcat 05-07-2011 21:05 1707769

VinTagE,

Здорово, опробовал - как часы! Только надо еще перезагрузится.

Rikill 05-07-2011 21:13 1707774

Как сделать запрет на запуск нескольких экземпляров инсталлятора одновременно?

El Sanchez 05-07-2011 22:11 1707812

Цитата:

Цитата Rikill
Как сделать запрет на запуск нескольких экземпляров инсталлятора одновременно? »

Rikill, указать AppMutex в секции [Setup], потом в нужном месте вызывать функцию CreateMutex.

Rikill 05-07-2011 23:31 1707867

El Sanchez, можно поподробнее? уже весь гугл облазил, так и не нашёл ничего интересного.

valyok666 05-07-2011 23:47 1707878

Доброго времени суток)кто может дать ссылочку на последний работоспособный скрипт freeArca)заранее благодарен=)

Rikill 06-07-2011 00:35 1707904

valyok666, гугли, подробнее тут или тут

valyok666 06-07-2011 03:01 1707958

Rikill, спасиба)

Rikill 06-07-2011 03:26 1707961

valyok666, чтобы не флудить, мне конечно приятно каждое "спасибо" :up но администрация жёсткая, советую нажать "Полезное сообщение" и мне будет так же приятно, удачи :coffee:

mariolast 06-07-2011 08:51 1708012

Neutron,

[code]
#include "1.iss"
#include "2.iss"
...

El Sanchez 06-07-2011 10:16 1708051

Цитата:

Цитата Rikill
можно поподробнее? уже весь гугл облазил, так и не нашёл ничего интересного »

Rikill, можно. CheckForMutexes заменил на CreateMutex, а то я забыл, что не отрабатывает :).
Код:

[Setup]
AppMutex=MyProgramMutexUniqueName

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

P.S. Имя мьютекса регистрозависимо.

leshcat 06-07-2011 13:23 1708149

Как избавится от сообщения общего веса файлов?

VinTagE 06-07-2011 13:39 1708161

Цитата:

Цитата leshcat
Как избавится от сообщения общего веса файлов? »

Можно так:
WizardForm.ComponentsDiskSpaceLabel.Hide;

El Sanchez 06-07-2011 13:45 1708165

Цитата:

Цитата VinTagE
Можно так:
WizardForm.ComponentsDiskSpaceLabel.Hide; »

leshcat, или так:
Код:

[Messages]
ComponentsDiskSpaceMBLabel=


tiestos 06-07-2011 19:39 1708450

Как сделать чтобы в прозрачносте картинка была чёткой по краям как тут

у нас так, как исправить

Rikill 06-07-2011 20:13 1708466

есть специальная библиотека Fairy.dll поищи её в гугле

Dark_Delphin 06-07-2011 20:18 1708468

Rikill, Меня тоже интерисует этот вопрос.
А пример скрипта есть?

VinTagE 06-07-2011 20:28 1708469

Цитата:

Цитата ntrx
Меня тоже интерисует этот вопрос.
А пример скрипта есть? »

Есть вот примеры:
Скачать

Цитата:

Цитата tiestos
Как сделать чтобы в прозрачносте картинка была чёткой по краям как тут »

Вот держи пример с библиотекой Fairy.dll
Скачать

frion 06-07-2011 23:35 1708577

Цитата:

Цитата tiestos
Цитировать »

хотелось бы узнать как сделали этот фрагмент прозранчным (пост выше "fairy.dll" не понял ни фига)

Rikill 07-07-2011 00:01 1708586

frion, а чего непонятного? там всё расписано
Цитата:

Цитата frion
хотелось бы узнать как сделали этот фрагмент прозранчным »

если правильно понял то тебе надо ISWin 7 из шапки http://www.datafilehost.com/download-0dfe2a07.html

frion 07-07-2011 02:35 1708646

Ребята вот мой скрипт
читать дальше »

#define MyAppName "Game"
[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName={pf}\{#MyAppName}
WizardImageFile=C:\fon.bmp
WizardSmallImageFile=C:\small.bmp

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

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

[Files]

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

procedure InitializeWizard();
begin
PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left:= ScaleX(110);
Top:= ScaleY(10);
Width:= ScaleX(370);
Height:= ScaleY(14);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia';
Font.Color:= $000000;
Font.Style:= [fsBold];
ShowAccelChar:= False;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left:= ScaleX(130);
Top:= ScaleY(25);
Width:= ScaleX(330);
Height:= ScaleY(30);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia';
Font.Color:= $000000;
Font.Style:= [fsItalic];
ShowAccelChar:= False;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;



////////////////////// begin WelcomePage //////////////////////

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do begin
AutoSize:=False;
SetBounds(ScaleX(-30), ScaleY(10), ScaleX(550), ScaleY(65));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 13;
Font.Color:=$000000;
Font.Style:=[fsBold];
Caption:= ExpandConstant('{cm:Welcome1}')+#13#10+('{#MyAppName}');
Parent:=WizardForm.WelcomePage;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do begin
AutoSize:=False;
SetBounds(ScaleX(25), ScaleY(270), ScaleX(450), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$ffffff;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Welcome2}');
Parent:=WizardForm.WelcomePage;
end;

////////////////////// end WelcomePage //////////////////////

////////////////////// begin FinishedPage //////////////////////

FinishedHeadingLabel:= TLabel.Create(WizardForm);
with FinishedHeadingLabel do begin
SetBounds(ScaleX(-30), ScaleY(10), ScaleX(550), ScaleY(65));
AutoSize:= false;
Alignment := taCenter;
Transparent:= true;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 13;
Font.Color:=$000000;
Font.Style := [fsBold];
Caption:= ExpandConstant('{cm:Finished1}');
Parent:=WizardForm.FinishedPage;
end;

FinishedLabel:=TLabel.Create(WizardForm);
with FinishedLabel do begin
AutoSize:=False;
SetBounds(ScaleX(25), ScaleY(160), ScaleX(450), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$ffffff;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Finished2}'+#13#10+'{cm:Finished3}');
Parent:=WizardForm.FinishedPage;
end;

////////////////////// end FinishedPage //////////////////////

with WizardForm do begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
FinishedLabel.Hide;
FinishedHeadingLabel.Hide;
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with WizardBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with WizardBitmapImage2 do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with MainPanel do begin
with WizardSmallBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= Mainpanel.Width;
Height:= MainPanel.Height;
end;
end;
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
end;

у меня не получается таким же способом сделать картинку тока на все страницы, мне нужно чтобы картинка растягивалась именно так. Помогите плиз :search:

Rikill 07-07-2011 02:47 1708647

frion, какая картинка? приложи скрин, и на руборде и тут обсуждалось размещение картинок на всех страницах инсталлятора
http://www.forum.oszone.ru/post-1242285-250.html
вот даже что нарыл

Rikill 07-07-2011 11:49 1708799

Neutron, а если человек использовал активатор? перед активаторами даже проверка windows genius бессильна

Gnom_aka_Lexander 07-07-2011 12:03 1708817

Цитата:

Цитата frion
у меня не получается таким же способом сделать картинку тока на все страницы, мне нужно чтобы картинка растягивалась именно так. Помогите плиз »

Поискать лень, чтоли? я недавно делал скинирование абсолютно всех страниц инсталлятора + скинирование кнопок(отключаемо, если не нужно)+ скинирование дефолтнх чекбоксов.
Ссылка
Цитата:

Цитата Rikill
даже проверка windows genius »

Отнюдь. попробуй пройти проверку тут. подавляющее большинство активаторов слетает на ура.

Rikill 07-07-2011 12:45 1708848

Лександер, я на той странице всегда активаторы проверяю, не слетало ещё.

El Sanchez 07-07-2011 15:13 1708960

Цитата:

Цитата Neutron
как сделать так, чтобы инсталлятор, проверял, лицензионная ли Windows Vista, 7 или нет »

Neutron, думаю, нужно использовать свойство LicenseStatus класса SoftwareLicensingProduct как это реализовано в Software Licensing Management Tool. С объектами WMI Inno умеет работать.

Leka_651 07-07-2011 16:52 1709012

Добрый день!
подскажите как сделать, чтобы в зависимости от того что выбрано на первой странице инсталятора добавить или нет еще страницы с вводом параметров.
и еще вопрос: можно ли как-то посмотреть какие значения принимают переменные в процессе установки?

Rikill 07-07-2011 18:23 1709072

Neutron, у меня есть эти файлы :laugh:

GenYaro 07-07-2011 18:49 1709081

Подскажите, пожалуйста, как сделать чекбоксы на этой странице http://imageshack.us/photo/my-images/691/44918147.jpg/ такого же вида, как на этой: http://imageshack.us/photo/my-images/192/63577291.jpg/

Rikill 07-07-2011 19:28 1709095

Neutron, никак, только что погуглил

valyok666 08-07-2011 00:09 1709253

чёрный инсталл,текстуирование кнопок,Logo,растяжка WizardImage и SmallImage всё подъключается как модуль смотрим скрипт может кому нужен:)
test.arc

leshcat 08-07-2011 00:35 1709260

Помогите пожалуйста,

Проблема. При запуске:
if IsComponentSelected('notepad') then ShellExec('', ExpandConstant('{tmp}\notepad.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);

где в notepad.bat: notepad

выдает:
'notepad' is not recognized as an internal or external command,
operable program or batch file.

Думаю проблема в win7 x64. Есть способы обхода?

Rikill 08-07-2011 01:03 1709270

valyok666, допили его, сделай красивым, а то лажа какая-то. скрипт хорош для новичков так что сделай комментарии, многим будет полезно. если что, помогу

leshcat, возможно ошибка в самом батнике?

leshcat 08-07-2011 02:37 1709291

нет, в том-то и дело.. какая может быть ошибка в одном слове?

Gnom_aka_Lexander 08-07-2011 10:42 1709414

Цитата:

Цитата leshcat
где в notepad.bat: notepad
выдает:
'notepad' is not recognized as an internal or external command, »

%systemroot%\system32\notepad.exe в батнике пропиши, должно прокатить. Такое бывает, когда криворукие сборщики ОС очищают директорию PACH. приходится в батниках указывать полные пути.

valyok666 08-07-2011 12:14 1709476

Rikill,я сам новичок всего 3 недели=)ок доделаю картинки поставлю)

Rikill 08-07-2011 12:30 1709485

valyok666, а так же сделай комментарии чтобы новичкам было понятней

valyok666 08-07-2011 12:49 1709493

хорошо)

как изменить весь цвет текста на красный???просто не найду в справках

VinTagE 08-07-2011 13:00 1709507

valyok666,
Код:


procedure InitializeWizard();{Меняем шрифт и цвет текста всего инсталлятора}
begin
WizardForm.Font.Color:= clRed; //Цвет текста всего инсталлятора
WizardForm.Font.Name:= 'GEORGIA'; //Шрифт текста всего инсталлятора
end;


valyok666 08-07-2011 13:11 1709520

VinTagE, у меня не меняет токо на первый странице цвет в чём может быть проблема?

valyok666 08-07-2011 13:52 1709550

Всё исправил=)

leshcat 08-07-2011 13:57 1709554

Лександер,

Пробовал. Я вообще всячески пробовал. с ShellExec не дало результата.
Так что просто запустил через Exec. И все заработало. Вот я и не понял.. в ShellExec надо сами комманды прописывать что-ли.

valyok666 08-07-2011 14:04 1709558

как убрать?знаю что обсуждалось такое но не могу найти
скриншот

murlakatamenka 08-07-2011 17:27 1709708

Цитата:

Цитата valyok666
как убрать?знаю что обсуждалось такое но не могу найти
скриншот »

в примерной секции [Run] надо удалить
Код:

[Run]
//строчку ниже
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: nowait postinstall skipifsilent

или убрать флаг postinstall, отвечающий за создание этого чекбокса (правда в этом случае прога запуститься автоматом, без спроса пользователя)
давненько не заглядывал, много тут написали :)

valyok666 08-07-2011 17:59 1709731

не надо чтобы чёрного кватрада не было а текст ложился на картинку

Rikill 08-07-2011 18:09 1709738

valyok666, подожди я попробую пример сделать
винт меня опередил

valyok666 08-07-2011 19:20 1709777

Neutron, попробую потом отпишусь=)

vint56 08-07-2011 19:46 1709786

valyok666, Вот пример
читать дальше »
#define AppRunningFile "{app}\MyProg.exe"
;Путь к файлу, который запускается после установки

[Setup]
AppName=MyProg
AppVerName=MyProg
AppVersion=1.0
DefaultDirName={pf}\MyProg

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


[CustomMessages]
RUS.RunProgram=Запустить {#SetupSetting("AppName")}

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}

[code]
var
RunProgram: TCheckBox; //Чекбоксы
RunProgramLabel: TLabel; //Надписи на странице выбора места установки

PageID,ResultCode: Integer; //Запуск программы после установки

function Run: Boolean;
begin
Result:=RunProgram.Checked;
end;

procedure RunProgramOnClick(Sender: TObject);
begin
if RunProgram.Checked = False then
RunProgram.Checked:= True else
RunProgram.Checked:= False;
end;

procedure InitializeWizard();
begin
RunProgram:= TCheckBox.Create(WizardForm);
with RunProgram do
begin
Parent:= WizardForm.FinishedPage;
Left:= ScaleX(176);
Top:= ScaleY(200);
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 4;
Checked:= True;
end;

RunProgramLabel:= TLabel.Create(WizardForm);
with RunProgramLabel do
begin
Caption:=ExpandConstant('{cm:RunProgram}');
Left:= ScaleX(196);
Top:= ScaleY(200);
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Parent:= WizardForm.FinishedPage;
OnClick:= @RunProgramOnClick;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
PageID:=CurPageID;
if CurPageID=wpFinished then
end;

procedure DeinitializeSetup();
begin
if (PageID=wpFinished) and (RunProgram.Checked)
then Exec(ExpandConstant('{#AppRunningFile}'), '', '', SW_SHOWNORMAL, ewNoWait, ResultCode); //Запускает файл если на финишной странице выбран чекбокс
end;

valyok666 08-07-2011 23:52 1709879

добавил картинки.место на диске.установка доп.ПО
тест

буду рад если что-нибудь исправите=)люди учатся на ошибках)

Rikill 09-07-2011 00:08 1709900

valyok666, ошибка №1 запаковывай в зип или рар архив, неудобно распаковывать фриарком и не у всех он есть
http://i24.fastpic.ru/big/2011/0709/...566680893f.png
тут тоже указаны ошибки, ответ на одну из них уж точно обсуждался

valyok666 09-07-2011 00:45 1709925

Rikill, ты новый скачал?

сорри почему то старый архив щас новый залью)

вот
качай=)

murlakatamenka 09-07-2011 01:34 1709943

valyok666, так надо было его сдвинуть ... так бы и написал
Цитата:

Цитата valyok666
как убрать?знаю что обсуждалось такое но не могу найти
скриншот »

можно просто RunList сдвигать
Код:

[_Code]
procedure InitializeWizard();
begin
  with WizardForm.RunList do
  begin
    Left := ScaleX(256);
    Top := ScaleY(172);
  end;
end;


Rikill 09-07-2011 02:50 1709952

немного доработал

Johny777 09-07-2011 03:19 1709959

Уважаемые пользователи
у меня возникла проблема при создании скрипта
здесь показан пример скрипта для растяжения картинки внутри окна инсталятора http://www.forum.oszone.ru/post-1242285-250.html
спасибо
я им воспользовался, но столкнулся с проблемой
вот мой тестовый инсталятор, на котором я отрабатываю внешний вид окон

далее идёт окно выбора компонентов

но из не видно
дело в том, что в коде для растяжения картинки нет страницы для компонентов (а у меня их много)
и страницы для настройки директории меню "Пуск"

Автор скрипта просит дописать страницы по аналогии, но у меня не получилось

потому и прошу помочь
вот так выглядит уже рабочий скрипт, к которому и я хочу добавить это оформление
читать дальше »
; Ñêðèïò ñîçäàí ñ ïîìîùüþ
; IS GameScript Generator by South
; ñïåöèàëüíî äëÿ www.csmania.ru

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Valve
AppVerName=Valve(hl2/ep1/ep2/portal)
AppVersion=Valve
DefaultDirName={pf}\Valve
DefaultGroupName=Valve
AllowNoIcons=true
InfoBeforeFile=
OutputBaseFilename=setup
WizardImageFile=O:\hl2_setup\WizardImage.bmp
WizardSmallImageFile=O:\hl2_setup\WizardSmallImage.bmp
SetupIconFile=O:\hl2_setup\Ïðîåêò1.ico
WindowVisible=false
WindowShowCaption=false
WindowResizable=false
Compression=lzma2/Ultra
DiskSpanning=true
DiskSliceSize=960495616
SlicesPerDisk=1
InternalCompressLevel=Ultra

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

[Types]
Name: full; Description: полная установка
Name: custom; Description: выборочная установка; Flags: iscustom
Name: custom; Description: всё на русском; Flags: iscustom
Name: custom; Description: всё на английском; Flags: iscustom

[Components]
Name: g0; Description: source engine protocol version 15; Types: full custom; Flags: disablenouninstallwarning checkablealone fixed
Name: g0\c1; Description: half-life 2; Types: full; Flags: dontinheritcheck
Name: g0\c1\c2; Description: русская озвучка; Types: full; Flags: exclusive
Name: g0\c1\c2\c3; Description: дополнительная озвучка от Буки (опцилнально); Types: full; Flags: dontinheritcheck
Name: g0\c1\c4; Description: английская озвучка; Types: full; Flags: exclusive
Name: g0\c1\c5; Description: северное сияние (опционально); Types: full; Flags: dontinheritcheck
Name: g0\c6; Description: half-life 2 episode one; Types: full; Flags: dontinheritcheck
Name: g0\c6\c7; Description: русская озвучка; Types: full; Flags: exclusive
Name: g0\c6\c8; Description: английская озвучка; Types: full; Flags: exclusive
Name: g0\c9; Description: half-life 2 episode two; Types: full; Flags: dontinheritcheck
Name: g0\c9\c10; Description: русская озвучка; Types: full; Flags: exclusive
Name: g0\c9\c11; Description: английская озвучка; Types: full; Flags: exclusive
Name: g0\c12; Description: portal; Types: full; Flags: dontinheritcheck
Name: g0\c12\c13; Description: русская озвучка; Types: full; Flags: exclusive
Name: g0\c12\c14; Description: английская озвучка; Types: full; Flags: exclusive

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

[Files]
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: O:\hl2_setup\ôîíîâûé ðèñóíîê.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: O:\hl2_setup\Splash.jpg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

Source: O:\hl2_setup\1\hl2\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c1
Source: O:\hl2_setup\1\add\half-life 2 russian\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c1\c2
Source: O:\hl2_setup\1\add\half-life 2 buka russian\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c1\c2\c3
Source: O:\hl2_setup\1\add\half-life 2 english\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c1\c4
Source: O:\hl2_setup\1\add\aurora borealis particle effects(optional)\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c1\c5
Source: O:\hl2_setup\1\hl2_ep1\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c6
Source: O:\hl2_setup\1\add\half-life 2 episode one russian\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c6\c7
Source: O:\hl2_setup\1\add\half-life 2 episode one english\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c6\c8
Source: O:\hl2_setup\1\hl2_ep2\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c9
Source: O:\hl2_setup\1\add\half-life 2 episode two russian\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c9\c10
Source: O:\hl2_setup\1\add\half-life 2 episode two english\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c9\c11
Source: O:\hl2_setup\1\port\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c12
Source: O:\hl2_setup\1\add\portal russian\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c12\c13
Source: O:\hl2_setup\1\add\portal english\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension; Components: g0\c12\c14
Source: O:\hl2_setup\1\steamapps\episode 1 shared.gcf; DestDir: {app}\steamapps\; Components: g0\c9 g0\c6
Source: O:\hl2_setup\1\steamapps\episode one 2007 content.gcf; DestDir: {app}\steamapps\; Components: g0\c6
Source: O:\hl2_setup\1\steamapps\episode two content.gcf; DestDir: {app}\steamapps\; Components: g0\c9
Source: O:\hl2_setup\1\steamapps\episode two maps.gcf; DestDir: {app}\steamapps\; Components: g0\c9
Source: O:\hl2_setup\1\steamapps\episode two materials.gcf; DestDir: {app}\steamapps\; Components: g0\c9
Source: O:\hl2_setup\1\steamapps\episodic 2007 shared.gcf; DestDir: {app}\steamapps\; Components: g0\c9 g0\c6
Source: O:\hl2_setup\1\steamapps\half-life 2 2007 base content.gcf; DestDir: {app}\steamapps\; Components: g0\c1
Source: O:\hl2_setup\1\steamapps\half-life 2 content.gcf; DestDir: {app}\steamapps\; Components: g0\c1
Source: O:\hl2_setup\1\steamapps\half-life 2 episode one russian.gcf; DestDir: {app}\steamapps\; Components: g0\c9\c10 g0\c6\c7
Source: O:\hl2_setup\1\steamapps\half-life 2 episode one.gcf; DestDir: {app}\steamapps\; Components: g0\c6
Source: O:\hl2_setup\1\steamapps\half-life 2 game dialog.gcf; DestDir: {app}\steamapps\; Components: g0\c1
Source: O:\hl2_setup\1\steamapps\half-life 2_russian.gcf; DestDir: {app}\steamapps\; Components: g0\c9\c10 g0\c6\c7 g0\c1\c2
Source: O:\hl2_setup\1\steamapps\portal content.gcf; DestDir: {app}\steamapps\; Components: g0\c12
Source: O:\hl2_setup\1\steamapps\source 2007 binaries 2.gcf; DestDir: {app}\steamapps\; Components: g0\c12 g0\c9 g0\c6 g0\c1
Source: O:\hl2_setup\1\steamapps\source 2007 shared materials.gcf; DestDir: {app}\steamapps\; Components: g0\c12 g0\c9 g0\c6 g0\c1
Source: O:\hl2_setup\1\steamapps\source 2007 shared models.gcf; DestDir: {app}\steamapps\; Components: g0\c12 g0\c9 g0\c6 g0\c1
Source: O:\hl2_setup\1\steamapps\source 2007 shared sounds.gcf; DestDir: {app}\steamapps\; Components: g0\c12 g0\c9 g0\c6 g0\c1
Source: O:\hl2_setup\1\steamapps\source materials.gcf; DestDir: {app}\steamapps\; Components: g0\c12 g0\c9 g0\c6 g0\c1
Source: O:\hl2_setup\1\steamapps\source models.gcf; DestDir: {app}\steamapps\; Components: g0\c12 g0\c9 g0\c6 g0\c1
Source: O:\hl2_setup\1\steamapps\source sounds.gcf; DestDir: {app}\steamapps\; Components: g0\c12 g0\c9 g0\c6 g0\c1

[Icons]
Name: {group}\half-life 2; Filename: {app}\half-life 2\hl2.exe; WorkingDir: {app}; Parameters: -steam -game hl2 -appid 220; Components: g0\c1
Name: {userdesktop}\half-life 2; Filename: {app}\half-life 2\hl2.exe; WorkingDir: {app}; Tasks: desktopicon; Parameters: -steam -game hl2 -appid 220; Components: g0\c1
Name: {group}\half-life 2 episode one; Filename: {app}\half-life 2 episode one\hl2.exe; WorkingDir: {app}; Parameters: -steam -game episodic -appid 380; Components: g0\c6
Name: {userdesktop}\half-life 2 episode one; Filename: {app}\half-life 2 episode one\hl2.exe; WorkingDir: {app}; Tasks: desktopicon; Parameters: -steam -game episodic -appid 380; Components: g0\c6
Name: {group}\half-life 2 episode two; Filename: {app}\half-life 2 episode two\hl2.exe; WorkingDir: {app}; Parameters: -steam -game ep2 -appid 420; Components: g0\c9
Name: {userdesktop}\half-life 2 episode two; Filename: {app}\half-life 2 episode two\hl2.exe; WorkingDir: {app}; Tasks: desktopicon; Parameters: -steam -game ep2 -appid 420; Components: g0\c9
Name: {group}\portal; Filename: {app}\portal\hl2.exe; WorkingDir: {app}; Parameters: -steam -game portal -appid 400; IconFilename: {app}\portal\portal\portal.ico; Components: g0\c12
Name: {userdesktop}\portal; Filename: {app}\portal\hl2.exe; WorkingDir: {app}; Tasks: desktopicon; Parameters: -steam -game portal -appid 400; IconFilename: {app}\portal\portal\portal.ico; Components: g0\c12
Name: {group}\{cm:UninstallProgram,Valve}; Filename: {uninstallexe}

[Run]
Description: {cm:LaunchProgram, half-life 2}; Filename: {app}\half-life 2\hl2.exe; WorkingDir: {app}; Parameters: -steam -game hl2 -appid 220; Components: g0\c1; Flags: nowait postinstall unchecked skipifsilent
Description: {cm:LaunchProgram, half-life 2 episode one}; Filename: {app}\half-life 2 episode one\hl2.exe; WorkingDir: {app}; Parameters: -steam -game episodic -appid 380; Languages: ; Components: g0\c6; Flags: nowait postinstall unchecked skipifsilent
Description: {cm:LaunchProgram, half-life 2 episode two}; Filename: {app}\half-life 2 episode two\hl2.exe; WorkingDir: {app}; Parameters: -steam -game ep2 -appid 420; Components: g0\c9; Flags: nowait postinstall unchecked skipifsilent
Description: {cm:LaunchProgram, portal}; Filename: {app}\portal\hl2.exe; WorkingDir: {app}; Parameters: -steam -game portal -appid 400; Components: g0\c12; Flags: nowait postinstall unchecked skipifsilent

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

[Dirs]
Name: {app}\steamapps
[code]
const
dURL=2;

var
URLLabel,URLLabelShadow:TLabel;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

procedure URLLabelClick(Sender: TObject);
var
ErrorCode:integer;
begin
ShellExec('open','http://forum.csmania.ru/','','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
end;

procedure URLLabelMouseDown(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
URLLabel.Top:=URLLabel.Top+dURL;
URLLabel.Left:=URLLabel.Left+dURL;
URLLabel.Font.Style:=URLLabel.Font.Style+[fsUnderline];
URLLabel.Font.Color:=$50B5C4;
URLLabelShadow.Visible:=False;
end;

procedure URLLabelMouseUp(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
begin
URLLabel.Top:=URLLabel.Top-dURL;
URLLabel.Left:=URLLabel.Left-dURL;
URLLabel.Font.Style:=URLLabel.Font.Style-[fsUnderline];
URLLabel.Font.Color:=$708A7A;
URLLabelShadow.Visible:=True;
end;

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('steam.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\steam.cjstyles', '');
Result:=True;
end;

procedure InitializeWizard;
begin
URLLabelShadow:=TLabel.Create(WizardForm);
with URLLabelShadow do begin
Top:=ScaleY(331);
Left:=ScaleX(25);
Caption:='http://forum.csmania.ru/';
AutoSize:=True;
Parent:=WizardForm;
Transparent:=True;
Font.Color:=$041207;
Font.Size:=9;
Font.Style:=Font.Style+[fsBold];
end;
URLLabel:=TLabel.Create(WizardForm);
with URLLabel do begin
Top:=ScaleY(331)-dURL;
Left:=ScaleX(25)-dURL;
Caption:='http://forum.csmania.ru/';
AutoSize:=True;
Parent:=WizardForm;
Cursor:=crHand;
Transparent:=True;
Font.Color:=$708A7A;
Font.Size:=9;
Font.Style:=Font.Style+[fsBold];
BringToFront;
OnClick:=@URLLabelClick;
OnMouseDown:=@URLLabelMouseDown;
OnMouseUp:=@URLLabelMouseUp;
end;
ExtractTemporaryFile('Splash.jpg');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.jpg',1000,3000,1000,0,255,False, $FFFFFF,10);
ssInitialize(GetWindowLong(MainForm.Handle,-8),0,False,1,$FF000000);
ExtractTemporaryFile('ôîíîâûé ðèñóíîê.jpg');
ssSetBkgImage(ExpandConstant('{tmp}')+'\ôîíîâûé ðèñóíîê.jpg');
WizardForm.TypesCombo.ItemIndex:=0;
WizardForm.BeveledLabel.Enabled:=True;
end;

procedure DeinitializeSetup;
begin
ShowWindow(WizardForm.Handle,0);
UnloadSkin();
ssDeInitialize;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
i,j: integer;
s,c: string;
begin
Result := True;
if CurPageID = wpSelectDir then
begin
c := 'ÀÁÂÃÄŨÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäå¸æçèéêëìíîïðñòóôõö÷øùúûüýþÿ';
for i:=1 to length(WizardForm.DirEdit.text) do
for j:=1 to length(c) do
begin
if WizardForm.DirEdit.text[i] = c[j] then
begin
s := 'Â ïóòè óñòàíîâêè ïðèñóòñòâóþò ðóññêèå áóêâû, ÷òî íåäîïóñòèìî'#13#13'Ïîæàëóéñòà, ïîâòîðèòå ââîä.';
MsgBox(s, mbError, mb_Ok);
Result := False ;
exit;
end
else Result := True;
end;
end;
end;

Rikill 09-07-2011 03:39 1709965

valyok666 я всё же надеюсь что ты сам исправишь и заглянешь сюда в последний момент
читать дальше »

Код:

[Icons]
Name: "{group}\удаление {#myappname}"; Filename: "{uninstallexe}"; Comment: "Удалить {#myappname}";

[Run]
Filename: "{src}\Redist\dxwebsetup.exe"; WorkingDir: "{src}\Redist"; Parameters: "/q"; StatusMsg: "Установеп DirectX..."; Flags: waituntilterminated;  tasks: Tasks0\Tasks1


p.s. Neutron больше не путай, удачи

valyok666 10-07-2011 02:35 1710385

ISFreeArcExtract v.4.1 как подключить его как модуль?что вставить в главном скрипте???

Rikill 10-07-2011 04:01 1710403

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

No4noylis 10-07-2011 15:41 1710636

Люди помогите плиз!!!!!!! Совсем не могу разобраться с привязкой .PNG изображения в инсталлятор :search: Пожалуйста опишите, если можно поподробней, как привязывать .PNG изображения в инсталлятор????????

Edison007 10-07-2011 16:06 1710658

No4noylis
http://rghost.ru/14062641

No4noylis 10-07-2011 18:21 1710706

Edison007, а нельзя ли как нибудь сделать чтоб это картинка была сверху фоновых .bmp картинок????

Код:

with WizardForm do begin
  InnerNotebook.Hide;
  OuterNotebook.Hide;
  Bevel.Hide;
end;

Это приходится удалить чтоб был виден фон и все остальные кнопки, но как тогда сделать что .PNG картинка осталась видна?

Gnom_aka_Lexander 10-07-2011 19:34 1710736

Johny777, Я давно уже сделал пример для всех страниц. Неужели так сложно почитать форум прежде, чем задавать вопрос?. Скачать. Компилировать на расширенной версии. Взять ее можно здесь: Скачать. При установке компоненты оставить как есть.

Edison007 11-07-2011 00:10 1710856

No4noylis
Нужно задать Parent
Вот пример кода:
читать дальше »
[code]
var
Img:Longint;

function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
Result:=True;
end;

procedure InitializeWizard;
begin
ExtractTemporaryFile('mspaint.png');
Img:=ImgLoad(WizardForm.SelectDirPage.Handle,ExpandConstant('{tmp}\mspaint.png'),230,100,100,100,Tru e,True);
ImgApplyChanges(WizardForm.SelectDirPage.Handle);
end;

procedure DeinitializeSetup;
begin
gdipShutDown;
end;

Johny777 11-07-2011 00:51 1710868

Лександер
спасибо большое

через гугл искал, но ничего не нашёл
расширенная китайская есть
пользуюсь
очень доволен

ещё вопрос
моё приложение (как в скрипте в моём предыдущем сообщении) состоит из компонентов
например компонент 1 и 2
компонент 1 использует файлы А и Б
компонент 2 использует файлы А и С

допустим я установил компонент 1
потом решил "доустановить" компонент 2, но у меня уже есть общие файлы А
как сделать что бы он не переустанавливал то что уже установлено (тк объём большой), а установил только то чего не хватает??

потому что у меня он каждый раз переписывает

Neutron
спасибо

No4noylis 11-07-2011 09:20 1710970

Edison007, немогли бы вы указать где именно этот параметр. У меня все равно не видно PNG картинки: http://s2.ipicture.ru/uploads/20110711/Zd7UNSCe.jpg

valyok666 11-07-2011 10:25 1711011

Edison007, если я не ожибаюсь там требуется подключение ботвы да?

vint56 11-07-2011 13:43 1711164

No4noylis, пример
читать дальше »

[Setup]
AppName=DrawImage
AppVerName=DrawImage
DefaultDirName={pf}\ImageExample

[Files]
Source: InstallFiles\*; Flags: dontcopy

[code]
var
Img:Longint;

function ImgLoad(Wnd :HWND; FileName :PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdown; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';

function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
Result:=True;
end;

procedure InitializeWizard;
begin
ExtractTemporaryFile('mspaint.png');
Img:=ImgLoad(WizardForm.SelectDirPage.Handle,ExpandConstant('{tmp}\mspaint.png'),20,85,128,128,True, True);
ImgApplyChanges(WizardForm.SelectDirPage.Handle);
end;

procedure DeinitializeSetup;
begin
gdipShutDown;
end;

saddevil 11-07-2011 14:27 1711215

Помогите разобраться со следующей проблемой
Я создал инсталляционный пакет, работа которого заключается в следующем:
1) Распаковать файлы (еще один инсталляки файлы необходимые для его работы).
2) Запускает внутренний инсталляк.
3)По завершению работы внутреннего инсталляка удаляет все распакованные файлы.

Проблема возникает в том случае если внутренний инсталляк требует перезагрузки для продолжения своей работы.
Когда во внутреннем инсталляке я соглашаюсь на перезагрузку то внешний подвисает. Соответственно если компьютер ребутнуть насильно, то внутренний инсталляк заканчивает свою работу а внешний нет(т.е. файлы остаются не удаленными).

Возможно кто-то может подсказать каким образом можно сделать так чтобы перезагрузка осуществлялась нормально и после нее оба инсталляка нормально заканчивали свою работу.

No4noylis 11-07-2011 14:54 1711238

vint56, эти стороки пишет Duplicate identifier:
Код:

function ImgLoad(Wnd :HWND; FileName :PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdown; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';


Gnom_aka_Lexander 11-07-2011 15:04 1711253

No4noylis, значит удали их. Раз Duplicate , значит они у тебя уже гдето есть.

vint56 11-07-2011 15:10 1711256

No4noylis, ты выложи скрипт свой чтобы исправить

No4noylis 11-07-2011 15:14 1711261

vint56, Вот мой скрипт:
Код:

#include "botva2.iss"
#define MyAppName "My Program"
[Setup]
AppId={{1D0BAE20-BB22-4540-BBC7-E7531009F9BF}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableReadyPage=True

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

[CustomMessages]
russian.Welcome1=Вас приветствует Мастер установки игры
russian.Welcome2=Программа установит игру {#MyAppName} на Ваш компьютер.%n%nРекомендуется закрыть антивирусные пакеты, а также все прочие приложения перед тем, как продолжить.%n%nНажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти из программы установки.
russian.Space=Доступно места на диске:
russian.Space1=Требуется места на диске:
russian.Status=Пожалуйста, подождите, пока игра установится на Ваш компьютер.
russian.DescrLbl1=В какую папку Вы хотите установить {#MyAppName}?
russian.Language=Выберите язык игры
russian.StartMenuLbl=Нажмите «Установить», чтобы продолжить. Если Вы хотите выбрать другую папку, нажмите «Обзор».
russian.Finished1=Установка игры {#MyAppName} успешно завершена.
russian.Finished2=Игра {#MyAppName} была успешно установлена на Ваш компьютер. Для ее запуска выберите соответствующий ярлык в меню «Пуск» или ярлык на Рабочем столе.
russian.Finished3=Нажмите «Завершить», чтобы выйти из программы установки.
russian.DirectX=Обновить DirectX
russian.DirectXInstall=Идет обновление DirectX...
russian.Icons=Добавить ярлык на Рабочий стол
russian.Uninstall=Удалить {#MyAppName}

[Files]
Source: InstallFiles\*; Flags: dontcopy
Source: 1.bmp; DestDir: {tmp}

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

[_code]
var
IconsLabel, NoIconsLabel, GroupLabel,
SelectDirLabel, SelectDirBrowseLabel,
PageNameLabel1, PageNameLabel2, PageNameLabel3,
PageDescriptionLabel1, PageDescriptionLabel2, PageDescriptionLabel3,
StatusLabel, FilenameLabel, WelcomeLabel1, WelcomeLabel2,FinishedLabel, FinishedHeadingLabel,
SelectStartMenuFolderLabel, SelectStartMenuFolderBrowseLabel, ReadyLabel, NoIconsLabel: TLabel;
NoIconsCheck: TCheckBox;
BmpFile: TBitmapImage;

procedure CheckStartMenuOnClick(Sender: TObject);
begin
if WizardForm.NoIconsCheck.Checked then
begin
WizardForm.GroupEdit.Enabled := not (WizardForm.GroupEdit.Enabled);
WizardForm.GroupBrowseButton.Enabled := False;
end else
begin
WizardForm.GroupEdit.Enabled := True;
WizardForm.GroupEdit.Enabled := WizardForm.GroupEdit.Enabled;
WizardForm.GroupBrowseButton.Enabled := True;
end;
end;

procedure CheckNoIconsCheck(Sender: TObject);
begin
if (WizardForm.NoIconsCheck.Checked = False) then
WizardForm.NoIconsCheck.Checked := True
else
WizardForm.NoIconsCheck.Checked := False;
end;

procedure InitializeWizard1();
begin

ExtractTemporaryFile('1.bmp');


BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Top:= ScaleY(0);
BmpFile.Left:= ScaleX(0);
BmpFile.Width:= ScaleX(800);
BmpFile.Height:= ScaleY(500);
BmpFile.Stretch:= true;
BmpFile.Parent:= WizardForm.WelcomePage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Top:= ScaleY(0);
BmpFile.Left:= ScaleX(0);
BmpFile.Width:= ScaleX(800);
BmpFile.Height:= ScaleY(500);
BmpFile.Stretch:= true;
BmpFile.Parent:= WizardForm.SelectDirPage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Top:= ScaleY(0);
BmpFile.Left:= ScaleX(0);
BmpFile.Width:= ScaleX(800);
BmpFile.Height:= ScaleY(500);
BmpFile.Stretch:= true;
BmpFile.Parent:= WizardForm.SelectProgramGroupPage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Top:= ScaleY(0);
BmpFile.Left:= ScaleX(0);
BmpFile.Width:= ScaleX(800);
BmpFile.Height:= ScaleY(500);
BmpFile.Stretch:= true;
BmpFile.Parent:= WizardForm.InstallingPage;

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.Top:= ScaleY(0);
BmpFile.Left:= ScaleX(0);
BmpFile.Width:= ScaleX(800);
BmpFile.Height:= ScaleY(500);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.FinishedPage;

WizardForm.ClientWidth:=ScaleX(800);
WizardForm.ClientHeight:=ScaleY(600);
WizardForm.Font.Color:=$ffffff;
WizardForm.Center;

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
DiskSpaceLabel.Hide;
SelectDirBitmapImage.Hide;
SelectDirBrowseLabel.Hide;
SelectDirLabel.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
MainPanel.Hide;
FilenameLabel.Hide;
StatusLabel.Hide;
SelectStartMenuFolderLabel.Hide;
SelectStartMenuFolderBrowseLabel.Hide;
ReadyLabel.Hide;
end;

with WizardForm do
begin
InnerNotebook.Left := ScaleX(0);
InnerNotebook.Top := ScaleY(0);
InnerNotebook.Width := ScaleX(800);
InnerNotebook.Height := ScaleY(600);
OuterNotebook.Left := ScaleX(0);
OuterNotebook.Top := ScaleY(0);
OuterNotebook.Width := ScaleX(800);
OuterNotebook.Height := ScaleY(600);
end;

//Скрывем стандартные надписи, значки и чекбоксы=
with WizardForm do
begin
DirBrowseButton.Left:=DirBrowseButton.Left + ScaleX(40); //Местоположение кнопки "Обзор" от левого края, на странице выбора пути установки
DirBrowseButton.Top:=DirBrowseButton.Top + ScaleY(72); //Местоположение кнопки "Обзор" сверху, на странице выбора пути установки
DirEdit.Left:=DirEdit.Left + ScaleX(40); //Местоположение панели, где отображается путь от левого края, на странице выбора пути установки
DirEdit.Top:=DirEdit.Top + ScaleY(72); //Местоположение панели, где отображается путь сверху, на странице выбора пути установки
GroupBrowseButton.Left:=GroupBrowseButton.Left + ScaleX(40); //Местоположение кнопки "Обзор" от левого края, на странице создания ярлыков в Главном Меню
GroupBrowseButton.Top:=GroupBrowseButton.Top + ScaleY(72); //Местоположение кнопки "Обзор" сверху, на странице создания ярлыков в Главном Меню
GroupEdit.Left:=GroupEdit.Left + ScaleX(40); //Местоположение панели, где отображается путь от левого края, на странице создания ярлыков в Главном Меню
GroupEdit.Top:=GroupEdit.Top + ScaleX(72); //Местоположение панели, где отображается путь сверху, на странице создания ярлыков в Главном Меню
GroupEdit.Color:=ClBlack //Цвет панели, где отображается путь, на странице создания ярлыков в Главном Меню
NextButton.BringToFront; //Выносим на передний план кнопки=
BackButton.BringToFront; //Выносим на передний план кнопки=
CancelButton.BringToFront; //Выносим на передний план кнопки=
Font.Style:=[]; //Стиль шрифта, используемого в инсталляторе
Font.Name:='MS Sans Serif'; //Имя шрифта, используемого в инсталляторе
DirEdit.Color:=clBlack; //Цвет панели, где отображается путь, на странице выбора пути установки
Font.Color:=clWhite; //Цвет шрифта, используемого в инсталляторе
ProgressGauge.Top:=ScaleY(120); //Местоположение Прогресс-бара сверху
ProgressGauge.Left:=ScaleX(20); //Местоположение Прогресс-бара от левого края
ProgressGauge.Width:=ScaleX(457); //Ширина Прогресс-бара
ReadyMemo.Left:=ScaleX(40); //Местоположение сверху панели где отображаются данные выбранных компонентов, на странице готовности установки
ReadyMemo.Top:=WizardForm.ReadyMemo.Top + ScaleY(72) //Цвет шрифта в панели где отображаются данные выбранных компонентов, на странице готовности установки
ReadyMemo.Font.Color:=clBlack; //Стиль панели где отображаются данные выбранных компонентов, на странице готовности установки. Без скроллов - ssNone, с вертикальным скроллом - ssVertial, с горизонтальным скроллом - ssHorizontal, и со всеми скроллами - просто уберите эту строчку или ssBoth
ReadyMemo.ScrollBars:=ssVertical; //ssNone
NextButton.Left:=NextButton.Left + ScaleX(255);
NextButton.top:=NextButton.top + ScaleX(160);
BackButton.Left:=BackButton.Left + ScaleX(250);
BackButton.top:=BackButton.top + ScaleX(160);
CancelButton.Left:=CancelButton.Left + ScaleX(250);
CancelButton.top:=CancelButton.top + ScaleX(160);
DirBrowseButton.BringToFront;
DirBrowseButton.Left:=DirBrowseButton.Left + ScaleX(280);
GroupBrowseButton.Left:=GroupBrowseButton.Left + ScaleX(280);
GroupBrowseButton.BringToFront;

end;

////////////////////// WelcomePage //////////////////////

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
Left:= ScaleX(70);
Top:= ScaleY(180);
Width:= ScaleX(650);
Height:= ScaleY(65);
AutoSize:= false;
Alignment := taCenter;
Transparent:= true;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 16;
Font.Color:=ClWhite;
Font.Style := [fsBold];
Parent:= WizardForm.WelcomePage;
Caption:= ExpandConstant('{cm:Welcome1}')+#13+('{#MyAppName}');
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
Top:= ScaleY(270);
Left:= ScaleX(70);
Width:= ScaleX(650);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Font.Name:= 'Georgia';
Font.Size:= 11
Font.Style := [fsBold, fsItalic];
Font.Color:=ClWhite;
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= ExpandConstant('{cm:Welcome2}');
end;

////////////////////// WelcomePage //////////////////////

////////////////////// SelectDirPage //////////////////////

PageNameLabel1:= TLabel.Create(WizardForm);
with PageNameLabel1 do
begin
Left:= ScaleX(65);
Top:= ScaleY(185);
Width:= ScaleX(300);
Height:= ScaleY(30);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 13;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.SelectDirPage;
end;

PageDescriptionLabel1:= TLabel.Create(WizardForm);
with PageDescriptionLabel1 do
begin
Left:=ScaleX(95);
Top:= ScaleY(215);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm.SelectDirPage;
end;

SelectDirBrowseLabel:= TLabel.Create(WizardForm);
with SelectDirBrowseLabel do
begin
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
Left:= ScaleX(120);
Top:= ScaleY(250);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent:= True;
Parent:= WizardForm.SelectDirPage;
end;

with WizardForm do
begin
DirBrowseButton.Top:= ScaleY(305);

DirEdit.Left:= ScaleX(120);
DirEdit.Top:= ScaleY(305);
DirEdit.Width:= ScaleX(460);
DirEdit.Font.Size:= 9;
DirEdit.Font.Style:= [fsBold, fsItalic];
DirEdit.Font.Name:= 'Georgia'
end;

////////////////////// SelectDirPage //////////////////////

////////////////////// ProgrammGroupPage //////////////////////

PageNameLabel2:= TLabel.Create(WizardForm);
with PageNameLabel2 do
begin
Left:= ScaleX(65);
Top:= ScaleY(185);
Width:= ScaleX(350);
Height:= ScaleY(30);
AutoSize:= False;
Font.Name:= 'Georgia';
Font.Size:= 13;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.SelectProgramGroupPage;
end;

PageDescriptionLabel2:= TLabel.Create(WizardForm);
with PageDescriptionLabel2 do
begin
Left:=ScaleX(95);
Top:= ScaleY(215);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm.SelectProgramGroupPage;
end;

SelectStartMenuFolderBrowseLabel:=TLabel.Create(WizardForm)
with SelectStartMenuFolderBrowseLabel do
begin
Left:= ScaleX(120);
Top:= ScaleY(250);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia';
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
WordWrap:=True
Transparent:=True
Caption:=ExpandConstant('{cm:StartMenuLbl}')
Parent:=WizardForm.SelectProgramGroupPage
end;

WizardForm.NoIconsCheck.Show;
WizardForm.NoIconsCheck.Left := ScaleX(65);
WizardForm.NoIconsCheck.Top := ScaleY(440);
WizardForm.NoIconsCheck.Width := ScaleX(13);
WizardForm.NoIconsCheck.Height := ScaleY(13);
WizardForm.NoIconsCheck.OnClick := @CheckStartMenuOnClick;
WizardForm.NoIconsCheck.Parent := WizardForm.SelectProgramGroupPage;

NoIconsLabel:= TLabel.Create(WizardForm);
with NoIconsLabel do
begin
Caption:=WizardForm.NoIconsCheck.Caption
Left:= ScaleX(90);
Top:= ScaleY(440);
Width:= ScaleX(150);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.SelectProgramGroupPage
OnClick := @CheckNoIconsCheck;
end;

with WizardForm do
begin
GroupEdit.Left:= ScaleX(120);
GroupEdit.Top:= ScaleY(305);
GroupEdit.Width:= ScaleX(460);
GroupEdit.Font.Size:=9
GroupEdit.Font.Style:= [fsBold, fsItalic];
GroupEdit.Font.Name:= 'Georgia'

GroupBrowseButton.Top:= ScaleY(305);
end;

////////////////////// ProgrammGroupPage //////////////////////

////////////////////// InstallingPage //////////////////////

PageNameLabel3:= TLabel.Create(WizardForm);
with PageNameLabel3 do
begin
Left:= ScaleX(65);
Top:= ScaleY(185);
Width:= ScaleX(150);
Height:= ScaleY(20);
AutoSize:= False;
Font.Name:= 'Georgia';
Font.Size:= 13;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.InstallingPage;
end;

StatusLabel:= TLabel.Create(WizardForm);
with StatusLabel do
begin
Left:=ScaleX(95);
Top:= ScaleY(215);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
Font.Name:= 'Georgia';
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.InstallingPage;
Caption:= ExpandConstant('{cm:Status}')
end;

FilenameLabel:= TLabel.Create(WizardForm);
with FilenameLabel do
begin
Left:= ScaleX(65);
Top:= ScaleY(275);
Width:= ScaleX(625);
Height:= ScaleY(20);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.InstallingPage;
end;

with WizardForm do
begin
ProgressGauge.Top:=ScaleY(310);
ProgressGauge.Left:=ScaleX(100);
ProgressGauge.Width:=ScaleX(590);
end;

////////////////////// InstallingPage //////////////////////

////////////////////// FinishedPage //////////////////////

FinishedHeadingLabel:=TLabel.Create(WizardForm);
with FinishedHeadingLabel do
begin
Left:= ScaleX(70);
Top:= ScaleY(180);
Width:= ScaleX(650);
Height:= ScaleY(65)
AutoSize:= false;
Alignment := taCenter;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 16;
Font.Color:=ClWhite;
Font.Style := [fsBold];
Transparent:= true;
Parent:= WizardForm.FinishedPage;
Caption:= ExpandConstant('{cm:Finished1}');
end;

FinishedLabel:= TLabel.Create(WizardForm);
with FinishedLabel do
begin
Top:= ScaleY(270);
Left:= ScaleX(70);
Width:= ScaleX(650);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Font.Name:= 'Georgia'
Font.Size:= 11;
Font.Style := [fsBold, fsItalic];
Font.Color:=ClWhite;
Transparent:= true;
Parent:= WizardForm.FinishedPage;
Caption:= ExpandConstant('{cm:Finished2}')+#13#13+ExpandConstant('{cm:Finished3}');
end;
end;

////////////////////// FinishedPage //////////////////////

//////////////////////////////////////////////////////////////////
var
Img:Longint;

function ImgLoad(Wnd :HWND; FileName :PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdown; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';

function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
Result:=True;
end;

procedure InitializeWizard2;
begin
ExtractTemporaryFile('mspaint.png');
Img:=ImgLoad(WizardForm.SelectDirPage.Handle,ExpandConstant('{tmp}\mspaint.png'),230,100,100,100,True,True);
ImgApplyChanges(WizardForm.SelectDirPage.Handle);
end;

procedure DeinitializeSetup;
begin
gdipShutDown;
end;

////////////////////////////////////////////////////////////////////

procedure InitializeWizard;
begin
InitializeWizard1;
InitializeWizard2;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel1.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel1.Caption:= WizardForm.PageDescriptionLabel.Caption;
PageNameLabel2.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel2.Caption:= WizardForm.PageDescriptionLabel.Caption;
PageNameLabel3.Caption:= WizardForm.PageNameLabel.Caption;

if CurPageID=wpSelectProgramGroup then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Установить';
end;
end;


Gnom_aka_Lexander 11-07-2011 15:36 1711278

No4noylis,
Цитата:

Цитата No4noylis
#include "botva2.iss" »

#include "botva2.iss" - в нем все функции вызова, поэтом отдельно их писать и не нужно, отсюда и Duplicate identifier :) просто удали дублирующиеся функции, и все.

Edison007 11-07-2011 15:37 1711280

No4noylis
попробуй эту строку:
Img:=ImgLoad(WizardForm.SelectDirPage.Handle,ExpandConstant('{tmp}\mspaintу.png'),230,100,100,100,Tr ue,True);
заменить на эту
Img:=ImgLoad(WizardForm.SelectDirPage.Handle,ExpandConstant('{tmp}\mspaint.png'),230,100,100,100,Tru e,False);

No4noylis 11-07-2011 15:40 1711282

Edison007, спасибо огромнейшее!!!!!!!!!!! Сколько я намучился с этими .PNG!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

vint56 11-07-2011 16:31 1711310

No4noylis, вот пример только я его переделал из Need for Speed™ Undercover 1 вариант добавил картинку png
http://rghost.ru/14172391

No4noylis 11-07-2011 20:05 1711428

Помогите если кто знает в чем дело, плиз. Почему если для какого-либо компонента страницы указать Parent:= WizardForm; то он не отображается вообще, приходиться указывать страницу Parent:= WizardForm.SelectDirPage; Кто знает как сделать чтоб этот компонент отображался на всех страницах??????

leshcat 11-07-2011 20:05 1711429

Подскажите как убрать выделенный "размер"?

Код объявления такой:
Name: g0; Description: "Игра"; Types: full; Flags: fixed
Name: g0\c1; Description: "Русский"; Types: full; Flags: exclusive
Name: g0\c2; Description: "Английский"; Types:; Flags: exclusive
Name: g0\c3; Description: "Немецкий"; Types:; Flags: exclusive

Выделенный блок копирует на свое место "размер"любого из выбранного компонента.

Gnom_aka_Lexander 11-07-2011 20:33 1711442

Цитата:

Цитата No4noylis
Почему если для какого-либо компонента страницы указать Parent:= WizardForm; то он не отображается »

потому, что поверх WizardForm находится WizardForm.OuterNotebook, поверх которого уже идут страницы инсталлятора. WizardForm.OuterNotebook идет не до конца, WizardForm снизу, под бевелом остается свободным, если нужно можеш отобразить свой элемент там. либо скрыть WizardForm.OuterNotebook, но тогда у тебя останется голый WizardForm и придется полностью вручную заполнять страницы. А это ооочень много букв писать придется.

leshcat, В секцию [Setup] добавь строчку ShowComponentSizes=false

No4noylis 11-07-2011 21:45 1711495

Лександер, ну так а что прописать нужно чтоб компонент отображался (а точнее .Png панель), какой параметр нужно добавить или тут что написать WizardForm.???????.Handle??????????

Gnom_aka_Lexander 11-07-2011 21:56 1711506

No4noylis, Два варианта, как я уже писал - либо скрывать WizardForm.OuterNotebook и тогда указывать родителем WizardForm, либо создавать .Png панель на каждой странице.

Johny777 11-07-2011 22:09 1711514

уважаемые пользователи
реально ли сделать деинсталятор с выбором компонентов??

ilyhakz001 11-07-2011 22:56 1711538

подскажите, не могу правильно прописать распаковку, начинает распаковывать, процентов до 300 идет.

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

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISSRepExtract ( 0, 0, ExpandConstant('{app}\Data.bin'),ExpandConstant('{app}\Data.bin'), true) then break;
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\Data.bin'), ExpandConstant('{app}\Data.bin'), true, '') then break;
// äàëåå íàõîäÿòñÿ çàêîììåíòèðîâàíûå ïðèìåðû ðàçëè÷íûõ ôóíêöèé ðàñïàêîâêè (÷òîáû êàæäûé ðàç íå ëàçèòü â ñïðàâêó çà ïðèìåðàìè)
(*
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\arc.arc'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\Data.7z'), ExpandConstant('{app}\data1'), false, '') then break;
if not ISRarExtract ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
if not ISSRepExtract ( 0, 0, ExpandConstant('{app}\data1024_1024.srep'),ExpandConstant('{app}\data1024.arc'), true) then break;
if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\data.pcf'), ExpandConstant('{app}\data.7z'), true) then break;
if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\in.pcf'), ExpandConstant('{app}\*.diff'), ExpandConstant('{app}\out.dat'), false) then break;
if not ISPackZIP ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
if not ISExec ( 0, 0, 0, ExpandConstant('{tmp}\Arc.exe'), ExpandConstant('x -o+ "{src}\001.arc" "{arr}\"'), ExpandConstant('{tmp}'), '...') then break;
if not ShowChangeDiskWindow ('Ïîæàëóéñòà, âñòàâüòå âòîðîé äèñê è äîæäèòåñü åãî èíèöèàëèçàöèè.', ExpandConstant('{src}'),'CODMW_2.arc') then break;

Edison007 11-07-2011 23:38 1711563

Johny777
Да возможно, вот пару примеров: http://rghost.ru/14227021
ЗЫ если я правильно вас понял

leshcat 11-07-2011 23:46 1711565

Лександер,
Спасибо, работает :)

Еще вопрос:
Хочу, чтобы файлы были внешними, тоесть вне архива. Посему использую флаг external.

Source: Files\* ; DestDir: {app}; Flags: recursesubdirs createallsubdirs sortfilesbyextension external; AfterInstall: Progress()

Однако получаю:


По-моему, установщик ищет файл вместо всей папки. Как это исправить?

UP: lol, я забыл добавить {src} в начало пути :)

Johny777 12-07-2011 00:17 1711578

Edison007
спасибо

но как пришить его к моему скрипту
всё прописал, вылетает ошибка, в секции кода
пробовал оба примера
вот скрипт
http://rghost.net/14232021

leshcat 12-07-2011 01:02 1711596

Мне предложили сделать свои custom иформацию с помощью этого кода:

читать дальше »
ExtracttemporaryFile('Changelog.rtf')
LoadStringFromFile(ExpandConstant('{tmp}\Changelog.rtf'),S);
{ Creates custom wizard page }
ISCustomPage1 := CreateCustomPage(wpInfoBefore,'Изменения', 'Подробнее');

{ ISCustomPage1 }
with ISCustomPage1.Surface do
begin
Name := 'ISCustomPage1';
end;
{ RichEditViewer1 }
RichEditViewer1 := TRichEditViewer.Create(WizardForm);
with RichEditViewer1 do
begin
Name := 'RichEditViewer1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(417);
Height := ScaleY(233);
RTFText :=S;
end;

//;adv_readme_2
ExtracttemporaryFile('ReleaseNotes.rtf')
LoadStringFromFile(ExpandConstant('{tmp}\ReleaseNotes.rtf'),V);
{ Creates custom wizard page }
ISCustomPage2 := CreateCustomPage(wpInfoBefore,'Oб игре', 'Информация');
{ ISCustomPage2 }
with ISCustomPage2.Surface do
begin
Name := 'ISCustomPage2';
end;
{ RichEditViewer2 }
RichEditViewer2 := TRichEditViewer.Create(WizardForm);
with RichEditViewer2 do
begin
Name := 'RichEditViewer2';
Parent := ISCustomPage2.Surface;
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(417);
Height := ScaleY(233);
RTFText :=V;
end;


Он работает. Но есть два вопроса:
1. Текст можно менять (двигать\удалять) прямо в инсталляторе, чего естественно не хочется. Как запретить любое изменение, разрешив только просмотр?
2. Есть ли расширенная версия, где можно подключать что-нибудь посовершеннее, типа doc с 2003 офиса/ docx 2007?

Если есть решение ещё лучше, с нетерпением жду совета :)

No4noylis 12-07-2011 16:10 1711911

Народ подскажите, вобщем тут такое дело: Я скрываю FilenameLabel (т.е ставлю FilenameLabel.Hide; ), а потом заново создаю его на InstallingPage, так вот, что нужно написать в параметре Caption:= чтоб отображалось имя распаковываемого файла???

murlakatamenka 12-07-2011 16:52 1711932

Цитата:

Цитата No4noylis
Народ подскажите, вобщем тут такое дело: Я скрываю FilenameLabel (т.е ставлю FilenameLabel.Hide; ), а потом заново создаю его на InstallingPage, так вот, что нужно написать в параметре Caption:= чтоб отображалось имя распаковываемого файла??? »

так а зачем заново создавать его ?
можно просто показать
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then begin
WizardForm.FilenameLabel.Show;
end;
end;
//или так
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling then begin
WizardForm.FilenameLabel.Show;
end;
end;

Если что есть такая функция
Цитата:

Prototype:
function CurrentFileName: String;

Description:
Returns the destination name of the [Files] entry that is currently being processed. The returned name may include constants.

Do not attempt to call this function from outside a Check, BeforeInstall or AfterInstall event function belonging to a [Files] entry.

No4noylis 12-07-2011 17:12 1711947

Цитата:

Цитата murlakatamenka
так а зачем заново создавать его ? »

Я его создаю чтоб изменить размер шрифта, цвет, стиль, и самое главное указать его прозрачность (Transparent := True; ) Ну так что можно сделать???

Gnom_aka_Lexander 12-07-2011 21:43 1712083

No4noylis, Только через таймер, по другому не получится. Смотри мой пример, там это реализовано.

No4noylis 12-07-2011 22:02 1712106

Я вообще не пойму!!!!!!!!!!!!!!!!!!!!!!! Делаю инсталлятор, делаю отображение необходимого и доступного места на винте, так вот: скрипт компилируеться все хорошо, запускаеться инсталлятор, перехожу на SelectDir, там отображаеться только доступное место на винте, я нажимаю кнопочку назад, перехожу на Welcome, потом снова далее и перехожу на SelectDir и теперь отображаеться все как положено и доступное и необходимое место на винте :o !!!! Кто знает в чем дело???

Rikill 12-07-2011 22:08 1712112

No4noylis, а если свернуть-развернуть страничку selectdir тоже всё возвращается?

No4noylis 12-07-2011 22:11 1712114

Rikill, Да! Ну так можно что-то сделать???

Edison007 12-07-2011 22:58 1712155

No4noylis
Скрипт в "студию", экстрасенсы в отпуске...

leshcat 13-07-2011 10:31 1712330

Неужели нету никаких решений?

Gnom_aka_Lexander 13-07-2011 11:18 1712361

leshcat, Поставь рид-онли на ричэдит, и тогда текст нельзя будет редактировать.
читать дальше »
{ RichEditViewer1 }
RichEditViewer1 := TRichEditViewer.Create(WizardForm);
with RichEditViewer1 do
begin
Name := 'RichEditViewer1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(417);
Height := ScaleY(233);
ReadOnly := True;
RTFText :=S;
end;

Цитата:

Цитата leshcat
2. Есть ли расширенная версия, где можно подключать что-нибудь посовершеннее, типа doc с 2003 офиса/ docx 2007? »

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

No4noylis, Скрипт покажи, чего хоть непонятного?

No4noylis 13-07-2011 11:38 1712378

Лександер, Он у меня слишком большой, больше 30 000 символов и не отправляеться!!!! Может можно просто добавить в процедуру CurPageChanged какую нибудь команду, чтоб если CurPageID=wpSelectDir то страница обновлялась???

Gnom_aka_Lexander 13-07-2011 11:41 1712381

Цитата:

Цитата No4noylis
Может можно просто добавить в процедуру CurPageChanged какую нибудь команду, чтоб если CurPageID=wpSelectDir то страница обновлялась??? »

Именно это и нужно сделать. но я не знаю, как называется у тебя процедура, которая пересчитывает свободное место на диске, поэтому и нужен скрипт.
Цитата:

Цитата No4noylis
Он у меня слишком большой »

Дык, залей на обменник :)

No4noylis 13-07-2011 11:49 1712390

Лександер, держи http://rghost.ru/14381671

Gnom_aka_Lexander 13-07-2011 12:23 1712410

Цитата:

Цитата No4noylis
Лександер, держи http://rghost.ru/14381671 »

В твоем случае я бессилен. Нет, я нашел, конечно, что нужно добавить, но у тебя две процедуры GetNeedSpaceCaption, которые нельзя объединять. и они тупо конфликтуют между собой. А вообще, кто тебя учил ТАК писать скртпы? Очень похоже на ранние работы уважаемого товарища Rikill. Вообще непонятно, как можно настолько испоганить такой хороший скрипт?

Edison007 13-07-2011 12:32 1712413

No4noylis
Что за издевательство!?
Вообще все запущено :(
Можно сделать так:
вместо процедур: GetFreeSpaceCaption и GetNeedSpaceCaption
Пишем одну такую:
читать дальше »
procedure GetFreeSpaceCaption(Sender: TObject); /////Вычисление свободного места на диске
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ FloatToStr(round(FreeMB/1024*100)/100) + ' GB' else
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ IntToStr(FreeMB)+ ' MB';

if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ FloatToStr(round(NeedSize/1024*100)/100) + ' GB' else
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ IntToStr(NeedSize)+ ' MB';

if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;


а в CurPageChanged пишем так:
читать дальше »
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectProgramGroup then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Установить';
end;
begin
if CurPageID=wpSelectDir then
begin
GetFreeSpaceCaption(nil); //если Свободное место на диске < требуемого, то кнопка "Установить" на PageSelectDir неактивна
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
end;
end;
end;


согласен, что издевательство но переписывать кучу скрипта я не хочу...

ILIA_1992 13-07-2011 13:24 1712460

у меня в скрипте проблемка маленькая.

Снимаю галочки
не создавать ярлык,не устанавливать доп ПО а установщик всёравно в конце устанавливает ПО и ярлык создаёт.
ПОмогите исправить

Savage-i 13-07-2011 13:51 1712483

del

Rikill 13-07-2011 14:11 1712489

ILIA_1992, скрипт дай, телепатов нет

ILIA_1992 13-07-2011 14:28 1712499

Rikill, http://rghost.ru/14395401 у меня вообще нет task в скрипте
можешь убрать вот это http://ipic.su/img/img3/fs/11.1310554589.jpg

Rikill 13-07-2011 15:02 1712516

ILIA_1992, сделал привязку ПО, потом привязку ошибки распаковки т.е. если произошла ошибка при распаковке не устанавливается по, также если х64 устанавливается vcredist_x64 если нет то vcredist_x86 ну и убрал кнопку.
Скачать

ILIA_1992 13-07-2011 16:40 1712584

Rikill, спасиб

No4noylis 13-07-2011 18:00 1712631

Edison007, Лександер, Спасибо огоромное за помощь! Я извеняюсь, но не могли бы вы указать что именно в моем скрипте такого ужасного???
Цитата:

Цитата Лександер
А вообще, кто тебя учил ТАК писать скртпы? »

Никто не учил, все чему научился и что понял, взято с это форума!!!

ILIA_1992 13-07-2011 18:43 1712651

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

Gnom_aka_Lexander 13-07-2011 19:55 1712670

Цитата:

Цитата No4noylis
Я извеняюсь, но не могли бы вы указать что именно в моем скрипте такого ужасного? »

эээ... дык, салат у тебя там. А во второх, все это можно сделать раз в пять короче. Пиши в личку, попробую объяснить, как писать скрипты так, чтоб не наворачивать столько всего ненужного. Кстати, я давно уже обратил внимание, на каждой странице инсталлятора находится обычно не больше 5-ти лейбелов, это значит, что можно задействовать одни и теже лейбелы, а на страницах менять их расположение и текст. Это экономит не меньше пары тысяч строчек.
Цитата:

Цитата Rikill
ILIA_1992, тут флудить запрещено, если что-то нужно пишем в лс »

То есть тебе не запрещено? 1, 2, 3, 4 - только то, что рядом, дальше лень просто лезть. За это тебя и забанили на руборде. Чего ты понять никак не хочеш.

MrLOLs 13-07-2011 20:19 1712680

Помогите оптимизировать код

Код
Код:

Function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;
 function NextButtonClick(CurPageID: Integer): Boolean;
 var i: Integer;
 Begin
  Result:=True;
  if CurPageID = wpSelectDir then
      begin
      for i:= 1 to Length(WizardForm.DirEdit.Text) do
      if WizardForm.DirEdit.Text[i] > #122 then
          begin
            MsgBox(cm('Cyrillic'), mbError, mb_Ok);
            Result:=False;
            Exit;
          end;
  if (Pos(Uppercase(ExpandConstant('{pf}')), Uppercase(ExpandConstant('{app}'))) > 0)
  or (Pos(Uppercase(ExpandConstant('{win}')), Uppercase(ExpandConstant('{app}'))) > 0) then
          begin
            MsgBox(cm('SysDirSelect'), mbError, mb_Ok);
            Result:=False;
            Exit;
          end;
      end;
 End;



Можно объединить begin MsgBox ...... end
а также условия Pos(Uppercase(ExpandConstant('{...}'))

Gnom_aka_Lexander 13-07-2011 21:26 1712721

Цитата:

Цитата MrLOLs
Можно объединить begin MsgBox ...... end
а также условия Pos(Uppercase(ExpandConstant('{...}')) »

Можно, у меня както так вышло:
читать дальше »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
Function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

function NextButtonClick(CurPageID: Integer): Boolean;
var i: Integer; S:String; One,Two: Boolean;

Begin Result:=True; if CurPageID = wpSelectDir then begin

for i:= 1 to Length(WizardForm.DirEdit.Text) do if (WizardForm.DirEdit.Text[i] > #122)
then begin One:=True;S:='Cyrillic'; end;

if (Pos(Uppercase(ExpandConstant('{pf}')), Uppercase(ExpandConstant('{app}'))) > 0) then Two:=True;
if (Pos(Uppercase(ExpandConstant('{win}')),Uppercase(ExpandConstant('{app}'))) > 0) then Two:=True;

if Two then S:='SysDirSelect'; if One or Two then begin
MsgBox(S, mbError, mb_Ok); Result:=False; Exit;end; end; End;

MrLOLs 13-07-2011 22:25 1712757

Лександер, Спасибо!

Код запрещает устанавливать программу в папку Windows или Program Files, а также запрещает использовать кириллицу в пути установки.

Serega 13-07-2011 22:40 1712768

Цитата:

Цитата MrLOLs
Вот конечный вариант »

Для чего вы используете Function cm(Message: String): String;, на мой взгляд бесполезная функция. Так же в цикле for...to...do не хватает Break;, т.е. для чего перебирать дальше, если мы уже нашли...
Как говорят, оптимизации кода нет предела, но всё же я бы записал так:
Пример

Код:

function NextButtonClick(CurPageID: Integer): Boolean;
var
  i: Integer;
  path: string;
begin
  if CurPageID = wpSelectDir then
    begin
      path := Uppercase(WizardForm.DirEdit.Text);
      if (Pos(Uppercase(ExpandConstant('{pf}')), path) > 0)
        or (Pos(Uppercase(ExpandConstant('{win}')), path) > 0) then
        begin
          MsgBox(ExpandConstant('{cm:SysDirSelect}'), mbError, MB_OK);
          Exit;
        end;
      for i := 1 to Length(path) do
        if path[i] > #122 then
          begin
            MsgBox(ExpandConstant('{cm:Cyrillic}'), mbError, MB_OK);
            Exit;
          end;
    end;
  Result := True;
end;


MrLOLs 13-07-2011 23:32 1712796

Соединил два предложенные варианта:

Код
Код:

Function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;
function NextButtonClick(CurPageID: Integer): Boolean;
var
        i: integer;
        path,s: string;
        One,Two: boolean;
Begin
Result:=True;
 if CurPageID = wpSelectDir then
        begin
        path:= Uppercase(WizardForm.DirEdit.Text);

    for i := 1 to Length(path) do if path[i] > #122 then
    begin One:=True;S:=cm('Cyrillic'); end;

    if (Pos(Uppercase(ExpandConstant('{pf}')), path) > 0) or (Pos(Uppercase(ExpandConstant('{win}')), path) > 0) then
    begin Two:=True;S:=cm('SysDirSelect'); end;

if One or Two then
begin
MsgBox(S, mbError, mb_Ok); Result:=False; Exit;
end;

        end;
End;



Если не подключать ф-ю Function cm в этом варианте, то CustomMessages не сработает

ILIA_1992 14-07-2011 01:05 1712861

помогите разобраться с прогой regshot
Дело в том,что мне нужен реестр игры властелин колец,хоть и игра запускается с русским текстом и звуком во время игры но во время показа роликов звука нет.
Поэтому нужен реестр
Помогите

Rikill 14-07-2011 01:23 1712866

Neutron, изменить сетапник нереально (разве что иконку), так что смысла в проверке сумм нету.

R.i.m.s.k.y. 14-07-2011 08:01 1712956

Цитата:

Цитата ILIA_1992
Дело в том,что мне нужен реестр игры властелин колец,хоть и игра запускается с русским текстом и звуком во время игры но во время показа роликов звука нет.
Поэтому нужен реестр »

вывод в стиле "таракан без ног не слышит" :)
звуковые файлы могут распаковываться не только в {app}, но и в {appdata}, моидокументы

ILIA_1992 14-07-2011 14:56 1713270

может нужно было поставить [ht=http://img.ii4.ru/images/2011/07/14/127569_Bezemyanney.jpg[/ht] галочку возле rus

У меня после добавления реестра игра стала на аглийском и звук в роликах появился но на английском.ВЧём может быть проблема???

ILIA_1992 14-07-2011 20:38 1713536

Neutron, я немного не понял,в моих документах ничего кроме сохранённого профиля и конфигурации грфики нет

MrLOLs 14-07-2011 22:13 1713593

Помогите, как я могу выдать сообщение только пользователям Windows 7, с помощью http://wiki.delphi-jedi.org/wiki/JCL_Help:IsWin7 или http://wiki.delphi-jedi.org/wiki/JCL...WindowsVersion
Только без помощи Major, Minor.

Habetdin 14-07-2011 23:01 1713624

MrLOLs, пример:
Код:

procedure CurPageChanged(CurPageID: Integer);
var
  Version: TWindowsVersion;
begin
  if CurPageID = wpWelcome then
    begin
      GetWindowsVersionEx(Version);
      if (Version.Major = 6) and (Version.Minor = 1) then
        begin
          MsgBox('Привет, пользователь Windows 7 / Windows Server 2008 R2!', mbInformation, mb_Ok);
        end;
    end;
end;


tiestos 14-07-2011 23:49 1713652

как сюда перенести чекбоксы с vscredit и directX

MrLOLs 15-07-2011 00:00 1713661

tiestos, как на счет использования этого перевода украинского языка http://www.jrsoftware.org/files/istr...n-7-5.1.11.isl (кандидата в официальный перевод), на который я потратил кучу времени.

tiestos 15-07-2011 00:25 1713679

спасибо, я сам перевёл, меня устраивает)

murlakatamenka 15-07-2011 01:08 1713699

tiestos, так можно
Код:

[Tasks]
Name: additional; Description: "Дополнительнео ПО";
Name: additional\dx; Description: "Обновить DirectX"; Flags: unchecked
Name: additional\vcr; Description: "Обновить библиотеки Visual C++"; Flags: unchecked;

[Run]
Filename: {src}\Redist\DirectX\dxsetup.exe; Tasks: additional\dx; StatusMsg: Обновление DirectX ...; Parameters: /silent;
Filename: {src}\Redist\vcredist_x86.exe; Tasks: additional\vcr; StatusMsg: Обновление библиотек  Visual C++ ...; Parameters: /q;


ILIA_1992 18-07-2011 13:32 1714941

у меня вопрос.Возможно ли сделать так,чтобы инсталлятор брал иконку с авторуна ,чтобы потом иконка создалать там куда прописана иконка
и как в setup.exe можно изменить версию файла первоначальная стоит 0.0.0.0

valyok666 18-07-2011 16:17 1715039

ILIA_1992,
AppVersion=2.9b\\\пример
SetupIconFile=Setup.ico

tiestos 18-07-2011 23:57 1715267

Какие есть еще методы сжатия кроме 7Zip-Srep-Precomp-Arc?

Rikill 19-07-2011 00:26 1715290

tiestos, тут не принято это обсуждать и считается офтопиком, т.к. не касается инно, я не нашёл такой темы на осзоне, но возможно вам помогут тут и тут

ILIA_1992 19-07-2011 00:57 1715303

помогите убрать это http://ipic.su/img/img3/fs/Bezyyannyj.1311021895.jpg
И помогите сделать чтобы установщик распаковывал bin файлы

Вот сам скрипт http://rghost.ru/15018141

Rikill 19-07-2011 02:29 1715336

ILIA_1992, Давай ты научишься читать форум, справки, документацию, эти навыки тебе помогут стать хорошим репакером. .bin это переименованый .arc или другой файл и ты можешь на распаковку прописать любой формат который ты вручную прописал. В твоём (точнее YURSHAT'a) скрипте всё правильно сделано, но data.bin у тебя в папке не было, а был файл data.bin1 я его переименовал бросил в папку "Output" и всё распаковалось и ты определись с распаковщиком, фриарк или исдон. Кнопку убрал закомментировав строчки
Код:

BtnSetVisibility(LanguageButton[1],True);
BtnSetVisibility(LanguageButton[2],True);
LanguageLabel.Show;
LngNameLbl.Show;

Качнуть готовенькое, головой думать запрещено!!!

Извини что я грубо, просто надо же что-то понимать и изучать, а не только получать готовые ответы. Если есть люди с рубоарда, простите меня, теперь я знаю каким был, от всего сердца прошу прощения!



качай, я всё исправил, и как работал, добавил музыку?:mail1:
если нажмёшь кнопку "полезное сообщение", мне будет приятнее

ILIA_1992 19-07-2011 03:00 1715348

Rikill, я вообщето над этим скриптом работал долго,но исправить неполучается.
Я сразу делаю сам ,только потом что-то спрашиваю
Спасиб за помощь

Dark_Delphin 19-07-2011 15:03 1715675

Всем привет.

Я не давно находил где-то скины для инсталляторов, очень много.
Тепрь не могу найти их. Где их можно найти?

Gnom_aka_Lexander 19-07-2011 15:15 1715686

ntrx, Держи.
Neutron, В сборке их немного, а то весить стала много, да и комплект скинов весом в гиг, ужатый до 50-ти метров, ставится долго, лучше отдельно их ставить.

Dark_Delphin 19-07-2011 15:26 1715698

Лександер, Neutron, спасибо большое.
Извеняюсь что не по теме.

ivsatel 19-07-2011 18:25 1715809

Подскажите в чем ошибка. Компилируется без ошибок, но при установке получаю "Could not call proc"
Код

Код:

[Setup]
AppName=Notepad++ 5.9.3
AppVerName=Notepad++ 5.9.3
AppVersion=5.9.3
DefaultDirName={pf}\Notepad++
DefaultGroupName=Notepad++
OutputBaseFilename=Notepad++_5.9.3 RC_FullPlug
VersionInfoVersion=5.9.3.0
DirExistsWarning=no
ShowTasksTreeLines=yes
Uninstallable=yes
CreateUninstallRegKey=no
ChangesEnvironment=yes
ChangesAssociations=yes
Compression=lzma2/ultra
LZMAMatchFinder=BT
LZMAUseSeparateProcess=yes
InternalCompressLevel=ultra
SolidCompression=yes
MergeDuplicateFiles=yes
SetupIconFile=N.ico
WizardImageFile=embedded\Blue.bmp
WizardSmallImageFile=embedded\Blue.bmp

[Files]
Source: "{app}\*"; DestDir: "{app}"; AfterInstall: ExtLog(); Flags: replacesameversion createallsubdirs recursesubdirs

[Registry]

Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Notepad++; ValueType: string; ValueName: DisplayName; ValueData: Notepad++; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Notepad++; ValueType: string; ValueName: UninstallString; ValueData: {app}\uninstall.exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Notepad++; ValueType: string; ValueName: DisplayIcon; ValueData: {app}\notepad++.exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Notepad++; ValueType: string; ValueName: DisplayVersion; ValueData: 5.9.3.0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Notepad++; ValueType: string; ValueName: URLInfoAbout; ValueData: http://notepad-plus-plus.org/; Flags: uninsdeletevalue uninsdeletekeyifempty

[C*ode]
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
end;

Procedure InitializeWizard();

begin
with WizardForm do begin
  Position:=poScreenCenter
  ClientWidth:=690
  ClientHeight:=496
  Font.Color:=clWindow
  Font.Name:='MS Sans Serif'
  Font.Style:=[]
  with Bevel do begin
    Left:=0
    Top:=313
    Width:=497
    Height:=2
    Visible:=False
  end;
  with CancelButton do begin
    Left:=600
    Top:=462
    Width:=77
    Height:=25
    BringToFront
  end;
  with NextButton do begin
    Left:=375
    Top:=462
    Width:=77
    Height:=25
    BringToFront
  end;
  with BackButton do begin
    Left:=293
    Top:=462
    Width:=77
    Height:=25
    BringToFront
  end;
  with OuterNotebook do begin
    Left:=0
    Top:=0
    Width:=690
    Height:=496
    with WelcomePage do begin
      Color:=11232829
      with WizardBitmapImage do begin
        Left:=0
        Top:=0
        Width:=690
        Height:=496
      end;
      with WelcomeLabel2 do begin
        Left:=205
        Top:=230
        Width:=465
        Height:=200
      end;
      with WelcomeLabel1 do begin
        Left:=205
        Top:=190
        Width:=465
        Height:=28
        Font.Color:=clWindow
        Font.Size:=8
      end;
    end;
    with InnerPage do begin
      with Bevel1 do begin
        Left:=0
        Top:=58
        Width:=499
        Height:=3
        Visible:=False
      end;
      with InnerNotebook do begin
        Left:=205
        Top:=79
        Width:=465
        Height:=354
        BringToFront
        Color:=11232829
        with LicensePage do begin
          with LicenseNotAcceptedRadio do begin
            Left:=0
            Top:=338
            Width:=465
            Height:=17
            Checked:=True
          end;
          with LicenseAcceptedRadio do begin
            Left:=0
            Top:=318
            Width:=465
            Height:=17
          end;
          with LicenseMemo do begin
            Left:=0
            Top:=38
            Width:=465
            Height:=266
            ReadOnly:=True
            ScrollBars:=ssVertical
          end;
          with LicenseLabel1 do begin
            Left:=0
            Top:=0
            Width:=465
            Height:=28
          end;
        end;
        with PasswordPage do begin
          with PasswordEdit do begin
            Left:=0
            Top:=50
            Width:=465
            Height:=21
            Font.Color:=clWindowText
          end;
          with PasswordEditLabel do begin
            Left:=0
            Top:=34
            Width:=465
            Height:=14
          end;
          with PasswordLabel do begin
            Left:=0
            Top:=0
            Width:=465
            Height:=28
          end;
        end;
        with InfoBeforePage do begin
          with InfoBeforeMemo do begin
            Left:=0
            Top:=24
            Width:=465
            Height:=327
            ScrollBars:=ssVertical
          end;
          with InfoBeforeClickLabel do begin
            Left:=0
            Top:=0
            Width:=465
            Height:=14
          end;
        end;
        with UserInfoPage do begin
          with UserInfoSerialEdit do begin
            Left:=0
            Top:=120
            Width:=465
            Height:=21
            Font.Color:=clWindowText
          end;
          with UserInfoSerialLabel do begin
            Left:=0
            Top:=104
            Width:=465
            Height:=14
          end;
          with UserInfoOrgEdit do begin
            Left:=0
            Top:=68
            Width:=465
            Height:=21
            Font.Color:=clWindowText
          end;
          with UserInfoOrgLabel do begin
            Left:=0
            Top:=52
            Width:=465
            Height:=14
          end;
          with UserInfoNameEdit do begin
            Left:=0
            Top:=16
            Width:=465
            Height:=21
            Font.Color:=clWindowText
          end;
          with UserInfoNameLabel do begin
            Left:=0
            Top:=0
            Width:=465
            Height:=14
          end;
        end;
        with SelectDirPage do begin
          with SelectDirBitmapImage do begin
            Left:=0
            Top:=0
            Width:=32
            Height:=32
            Visible:=False
          end;
          with DiskSpaceLabel do begin
            Left:=0
            Top:=340
            Width:=465
            Height:=14
          end;
          with DirBrowseButton do begin
            Left:=388
            Top:=288
            Width:=77
            Height:=25
          end;
          with DirEdit do begin
            Left:=0
            Top:=290
            Width:=378
            Height:=21
            Font.Color:=clWindowText
          end;
          with SelectDirBrowseLabel do begin
            Left:=0
            Top:=24
            Width:=465
            Height:=28
          end;
          with SelectDirLabel do begin
            Left:=0
            Top:=0
            Width:=465
            Height:=14
          end;
        end;
        with SelectComponentsPage do begin
          with ComponentsDiskSpaceLabel do begin
            Left:=0
            Top:=340
            Width:=417
            Height:=14
          end;
          with ComponentsList do begin
            Left:=0
            Top:=48
            Width:=465
            Height:=275
            Font.Color:=clWindow
            Color:=11232829
          end;
          with TypesCombo do begin
            Left:=0
            Top:=24
            Width:=465
            Height:=21
            Font.Color:=clWindow
            Color:=11232829
          end;
          with SelectComponentsLabel do begin
            Left:=0
            Top:=0
            Width:=465
            Height:=14
          end;
        end;
        with SelectProgramGroupPage do begin
          with SelectGroupBitmapImage do begin
            Left:=0
            Top:=0
            Width:=32
            Height:=32
            Visible:=False
          end;
          with NoIconsCheck do begin
            Left:=0
            Top:=337
            Width:=465
            Height:=17
          end;
          with GroupBrowseButton do begin
            Left:=388
            Top:=288
            Width:=77
            Height:=25
          end;
          with GroupEdit do begin
            Left:=0
            Top:=290
            Width:=378
            Height:=21
            Font.Color:=clWindowText
          end;
          with SelectStartMenuFolderBrowseLabel do begin
            Left:=0
            Top:=24
            Width:=465
            Height:=28
          end;
          with SelectStartMenuFolderLabel do begin
            Left:=0
            Top:=0
            Width:=465
            Height:=14
          end;
        end;
        with SelectTasksPage do begin
          with TasksList do begin
            Left:=0
            Top:=34
            Width:=465
            Height:=317
            Color:=11232829
          end;
          with SelectTasksLabel do begin
            Left:=0
            Top:=0
            Width:=465
            Height:=28
          end;
        end;
        with ReadyPage do begin
          with ReadyMemo do begin
            Left:=0
            Top:=34
            Width:=465
            Height:=317
            Color:=11232829
          end;
          with ReadyLabel do begin
            Left:=0
            Top:=0
            Width:=465
            Height:=28
          end;
        end;
        with PreparingPage do begin
          with PreparingErrorBitmapImage do begin
            Left:=0
            Top:=0
            Width:=16
            Height:=16
            Visible:=False
          end;
          with PreparingLabel do begin
            Left:=24
            Top:=0
            Width:=393
            Height:=14
            Visible:=False
          end;
        end;
        with InstallingPage do begin
          with FilenameLabel do begin
            Left:=0
            Top:=16
            Width:=465
            Height:=16
          end;
          with StatusLabel do begin
            Left:=0
            Top:=0
            Width:=465
            Height:=16
          end;
          with ProgressGauge do begin
            Left:=0
            Top:=42
            Width:=465
            Height:=21
            Min:=0
            Max:=100
          end;
        end;
        with InfoAfterPage do begin
          with InfoAfterMemo do begin
            Left:=0
            Top:=24
            Width:=465
            Height:=327
            ScrollBars:=ssVertical
          end;
          with InfoAfterClickLabel do begin
            Left:=0
            Top:=0
            Width:=465
            Height:=14
          end;
        end;
      end;
      with MainPanel do begin
        Left:=0
        Top:=0
        Width:=690
        Height:=496
        Color:=clWindow
        with WizardSmallBitmapImage do begin
          Left:=0
          Top:=0
          Width:=690
          Height:=496
          BackColor:=clWindow
        end;
        with PageDescriptionLabel do begin
          Left:=25
          Top:=25
          Width:=500
          Height:=14
          Color:=6697728
          Font.Color:=clWindow
        end;
        with PageNameLabel do begin
          Left:=15
          Top:=7
          Width:=500
          Height:=14
          Color:=6697728
          Font.Color:=clWindow
        end;
      end;
    end;
    with FinishedPage do begin
      Color:=11232829
      with WizardBitmapImage2 do begin
        Left:=0
        Top:=0
        Width:=690
        Height:=496
      end;
      with NoRadio do begin
        Left:=205
        Top:=227
        Width:=465
        Height:=17
      end;
      with YesRadio do begin
        Left:=205
        Top:=199
        Width:=465
        Height:=17
      end;
      with RunList do begin
        Left:=205
        Top:=199
        Width:=465
        Height:=149
        BorderStyle:=bsNone
      end;
      with FinishedLabel do begin
        Left:=205
        Top:=119
        Width:=465
        Height:=53
      end;
      with FinishedHeadingLabel do begin
        Left:=205
        Top:=79
        Width:=465
        Height:=24
        Font.Color:=clWindow
        Font.Size:=8
      end;
    end;
  end;
  with BeveledLabel do begin
    Left:=10
    Top:=468
    Width:=150
    Height:=14
    Enabled:=False
    Color:=14405068
  end;
end;
end;

var
ProgressLabel: TLabel;

procedure ExtLog();
begin
with WizardForm.ProgressGauge do begin
ProgressLabel.Caption:=IntToStr((Position-Min)/((Max - Min)/100)) + '%'
begin
ProgressLabel:=TLabel.Create(WizardForm)
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top:=4
ProgressLabel.Left:=200
ProgressLabel.Caption:='0%'
ProgressLabel.AutoSize:=True
ProgressLabel.Font.Color:=clWindowText
ProgressLabel.Font.Style:=[fsBold]
ProgressLabel.Transparent:=True
ProgressLabel.Parent:=WizardForm.ProgressGauge
end;
end;
end;
end;

procedure BackupData0(FileExt: String);
var
  OldValueData: string;
begin
  if RegKeyExists(HKCR, '.' + FileExt) then
    begin
      RegQueryStringValue(HKCR, '.' + FileExt, '', OldValueData);
      RegWriteStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData);
    end;
end;

procedure RestoreData0(FileExt: String);
var
  OldValueData: string;
begin
  if RegKeyExists(HKCR, '.' + FileExt + '(backup)')then
    begin
      RegQueryStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData);
      RegWriteStringValue(HKCR, '.' + FileExt, '', OldValueData);
      RegDeleteKeyIncludingSubkeys(HKCR, '.' + FileExt + '(backup)');
    end;
end;

procedure BackupData1(FileExt: String);
var
  OldValueData: string;
begin
  if RegKeyExists(HKLM, '.' + FileExt) then
    begin
      RegQueryStringValue(HKLM, '.' + FileExt, '', OldValueData);
      RegWriteStringValue(HKLM, '.' + FileExt + '(backup)', '', OldValueData);
    end;
end;

procedure RestoreData1(FileExt: String);
var
  OldValueData: string;
begin
  if RegKeyExists(HKLM, '.' + FileExt + '(backup)')then
    begin
      RegQueryStringValue(HKLM, '.' + FileExt + '(backup)', '', OldValueData);
      RegWriteStringValue(HKLM, '.' + FileExt, '', OldValueData);
      RegDeleteKeyIncludingSubkeys(HKLM, '.' + FileExt + '(backup)');
    end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usPostUninstall then
    begin
      RestoreData0('asp');
      RestoreData0('bsh');
      RestoreData0('cc');
      RestoreData0('cs');
      RestoreData0('css');
      RestoreData0('inc');
      RestoreData0('ini');
      RestoreData0('java');
      RestoreData0('js');
      RestoreData0('jsp');
      RestoreData0('log');
      RestoreData0('lst');
      RestoreData0('lua');
      RestoreData0('mx');
      RestoreData0('nfo');
      RestoreData0('pas');
      RestoreData0('php');
      RestoreData0('pl');
      RestoreData0('rc');
      RestoreData0('sh');
      RestoreData0('sql');
      RestoreData0('tex');
      RestoreData0('txt');
      RestoreData0('vb');
      RestoreData0('vbs');
      RestoreData0('xml');
      RestoreData1('asp');
      RestoreData1('bsh');
      RestoreData1('cc');
      RestoreData1('cs');
      RestoreData1('css');
      RestoreData1('inc');
      RestoreData1('ini');
      RestoreData1('java');
      RestoreData1('js');
      RestoreData1('jsp');
      RestoreData1('log');
      RestoreData1('lst');
      RestoreData1('lua');
      RestoreData1('mx');
      RestoreData1('nfo');
      RestoreData1('pas');
      RestoreData1('php');
      RestoreData1('pl');
      RestoreData1('rc');
      RestoreData1('sh');
      RestoreData1('sql');
      RestoreData1('tex');
      RestoreData1('txt');
      RestoreData1('vb');
      RestoreData1('vbs');
      RestoreData1('xml');
    end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
S: TArrayOfString;
F: string;
i: Integer;
  begin
    If CurStep=ssPostInstall then

    RenameFile(ExpandConstant('{app}\unins000.exe'), ExpandConstant('{app}\uninstall.exe'));
    RenameFile(ExpandConstant('{app}\unins000.dat'), ExpandConstant('{app}\uninstall.dat'));

      F:= ExpandConstant('{app}\config.xml');
        if not FileExists(F) then Exit; // если файла нет, выходим
        LoadStringsFromFile(F, S); // загружаем файл
          for i:= 0 to GetArrayLength(S)-1 do
          if Pos('        <GUIConfig name="stylerTheme" path= />', S[i]) > 0 then
          S[i]:= ExpandConstant('        <GUIConfig name="stylerTheme" path="{app}\stylers.xml" />'); // записываем параметры командной строки
          SaveStringsToFile(F, S, False); // сохраняем файл
  end;

[Run]
Filename: "RegSvr32"; Parameters: "/s NppShell_04.dll"; WorkingDir: "{app}"; Description: "Интегрировать контекстную панель 'Notepad++' в MS Explorer";

[INI]
Filename: "{app}\plugins\Config\SpellChecker.ini"; Section: "Spell-Checker"; Key: "Current Language"; String: "ru"
Filename: "{app}\plugins\Config\SpellChecker.ini"; Section: "Spell-Checker"; Key: "Relative Path"; String: "{app}\plugins\Spell Checker\bin\"

[Icons]
Name: "{userdesktop}\Notepad++"; Filename: "{app}\notepad++.exe"; WorkingDir: "{app}"; Comment: "Notepad++ 5.9.3 RC";
Name: "{group}\Notepad++"; Filename: "{app}\notepad++.exe"; WorkingDir: "{app}"; Comment: "Notepad++ 5.9.3 RC";
Name: "{group}\Help"; Filename: "{app}\NppHelp.chm"; WorkingDir: "{app}"; Comment: "Notepad++ 5.9.3 RC";
Name: "{group}\Uninstall"; Filename: "{uninstallexe}"; WorkingDir: "{app}"; Comment: "Uninstall Notepad++ from your PC";

[Languages]
Name: "Russian"; MessagesFile: "embedded\Russian.isl";


Rikill 19-07-2011 19:25 1715842

ivsatel, на какую строчку жалуется или помечает красным?

ivsatel 19-07-2011 19:27 1715845

Rikill, Компилируется без красного. Ошибка в процессе инсталляции.

Вот полный скрипт http://ifolder.ru/24778570

Rikill 19-07-2011 19:34 1715851

возможно помогу и скрипт будет в этом сообщении.


на версии от рестулз всё прошло удачно при комментировании строчек (ибо у меня нет этих файлов)
Код:

SetupIconFile=N.ico
WizardImageFile=embedded\Blue.bmp
WizardSmallImageFile=embedded\Blue.bmp

[Files]
Source: "{app}\*"; DestDir: "{app}"; AfterInstall: ExtLog(); Flags: replacesameversion createallsubdirs recursesubdirs

[Languages]
Name: "Russian"; MessagesFile: "embedded\Russian.isl";


ivsatel 19-07-2011 19:58 1715866

Цитата:

Цитата Rikill
(ибо у меня нет этих файлов) »

Тут думаю дело не в файлах, а в Procedure InitializeWizard();.

Rikill 19-07-2011 20:03 1715872

ivsatel, а в чём, если без файлов всё прошло хорошо


UPD
выявил ошибку, сейчас исправлю


Скачать исправленное, проблема была в процентах.
:bow:

ivsatel 19-07-2011 20:06 1715873

Rikill, Спасибо огромное!!! Работает!

Dark_Delphin 19-07-2011 22:17 1715931

Всем добрый вечер)!

Что нужно добавить в эту строку что-бы текстура мюзикбутон была поверх всего?

Код:

BASS_Init(ExpandConstant('{tmp}\Music.mp3'))          // музыку
  BASS_CreateOnOffButton(ExpandConstant('{tmp}\MusicButton.png'), 185, 325, 27, 27, 4)            // вкл/выкл


Rikill 19-07-2011 22:34 1715938

ntrx,
Код:

var
  MusicButton, mp3Handle: HWND;
  mp3Name: String;

const
  BASS_ACTIVE_PAUSED  = 3;
  BASS_SAMPLE_LOOP    = 4;

#include "models\botva2.iss"

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@files:BASS.dll stdcall delayload';
function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD; external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';
function BASS_Start: Boolean; external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_ChannelIsActive(handle: DWORD): Integer; external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';
function BASS_ChannelPause(handle: DWORD): Boolean; external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';
function BASS_Pause: Boolean; external 'BASS_Pause@files:BASS.dll stdcall delayload';
function BASS_Stop: Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free: Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure MusicButtonClick(hBtn:HWND);
begin
  if BtnGetChecked(MusicButton) then BASS_ChannelPause(mp3Handle)
    else if BASS_ChannelIsActive(mp3Handle)=BASS_ACTIVE_PAUSED then BASS_ChannelPlay(mp3Handle, False);
end;

function InitializeSetup:boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
  if not FileExists(ExpandConstant('{tmp}\innocallback.dll')) then ExtractTemporaryFile('innocallback.dll');
  Result:=True;
end;

procedure InitializeWizard;
begin
  ExtractTemporaryFile('Music.mp3');
  ExtractTemporaryFile('MusicButton.png');
  ExtractTemporaryFile('BASS.dll');

  MusicButton:=BtnCreate(WizardForm.Handle,ScaleX(50),ScaleY(50),ScaleX(36),ScaleY(36),ExpandConstant('{tmp}\MusicButton.png'),0,True);
  BtnSetEvent(MusicButton,BtnClickEventID,WrapBtnCallback(@MusicButtonClick,1));
  BtnSetVisibility(MusicButton,True);
  BtnSetCursor(MusicButton,GetSysCursorHandle(32649));

  mp3Name:=ExpandConstant('{tmp}\Music.mp3');
  BASS_Init(-1,44100,0,0,0);
  mp3Handle:=BASS_StreamCreateFile(FALSE,PAnsiChar(mp3Name),0,0,BASS_SAMPLE_LOOP);
  BASS_Start;
  BASS_ChannelPlay(mp3Handle,False);
end;

procedure DeinitializeSetup;
begin
    BASS_Stop;
    BASS_Free;
    gdipShutdown;
    end;

удали старое всё, кроме файла botva2.iss. BASS_Module.iss можешь удалить, эта кнопка проявляется везде, мне помогло
старый bass.dll замени этим
доделал



короче этот скрипт для кода у которого используется
WizardForm.InnerNotebook.Hide;
WizardForm.OuterNotebook.Hide;

нужны файлы:
botva2.iss
Music.mp3
MusicButton.png
BASS.dll
botva2.dll
innocallback.dll

Rikill 20-07-2011 13:32 1716312

Neutron, это пока не твой уровень, советую просто переделать скрипт от юршата или этот http://rghost.ru/5496789


ок, тогда скачивай от юршата и проявляй страницы как там
пример:
Код:

[CustomMessages]
russian.Welcome1=Дарова Васяня!

[код]
var
WelcomeLabel1: TLabel

procedure InitializeWizard();
begin
  WelcomeLabel1:= TLabel.Create(WizardForm);
  with WelcomeLabel1 do begin
    AutoSize:=False;
    SetBounds(ScaleX(100), ScaleY(85), ScaleX(350), ScaleY(45));
    WordWrap:=True;
    Alignment := taCenter;
    Transparent:=True;
    Font.Name:='Comic Sans MS';
    Font.Size:= 11;
    Font.Color:=$FFFFFF;
    Caption:= ExpandConstant('{cm:Welcome1}');
    Parent:=WizardForm;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WelcomeLabel1.hide;
  case CurPageID of
    wpWelcome: begin
      WelcomeLabel1.Show;
    end;
end;



скачивать скрипт от юршата для того чтобы смотреть как там сделаны страницы!!!!

VinTagE 20-07-2011 14:40 1716382

Neutron, Если я понял, то тебе нужен статус панель на ботве то вот пример:
Скачать статус панель от Shegorat
P.S> Там разобратся не трудно!

murlakatamenka 21-07-2011 15:31 1717200

Лександер, а можешь ГОГ доделанный выложить. Я almost_completed доделал немного (подправил лэйблы, сместил прогресс бар повыше, доделал отмену установки), но дальше влом. Как-то гуглил и видел что andrew0812 на одном из форумов тебе скидывал (ты ведь Лександер aka Gnom :))

Johny777 22-07-2011 14:10 1717832

Подскажите пожалуйста как растянуть внутренне окно окно
в дизайнере не активно
http://s50.radikal.ru/i129/1107/37/5c69c8346650.jpg

ssv14 22-07-2011 14:37 1717852

Всем добрый день. Ребята, нужна помощь.
Есть скрипт декодирования OGG в WAV
читать дальше »

-------------------------------------------------------------------------------------------

[Setup]
AppName=RecodeOgg
AppVerName=RecodeOgg
OutputDir=.
OutputBaseFilename=RecodeOgg
DefaultDirName={pf}\RecodeOgg
AppendDefaultDirName=False
DisableDirPage=True

[files]
Source: oggdec.exe; DestDir: {app};
Source: oggs\*; DestDir: {app};
Source: oggs\*; DestDir: {app}\Data;

[code]
var
Files: Array of String;
S: String;
n: Integer;

Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k:= Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
End;

procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+ DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;

procedure RecodeOgg;
var ResultCode: integer; CurFile: String;
begin
FindFiles(ExpandConstant('{app}'), '*.ogg') //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов
for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}')), '')
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files[n]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\oggdec.exe'))
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.ProgressGauge.Position := 0;
WizardForm.StatusLabel.Caption := 'Извлечение аудио файлов...';
RecodeOgg;
end;
end;

-------------------------------------------------------------------------------------------


возможно как-то сделать, что бы не велся поиск файлов OGG, а брался из списка,
например из ogglist.txt, в котором прописаны пути к каждому файлу:

Код:

"Voice\voice true\true.ogg"
"NBK\345.ogg"
"SOUNDS\over voice\hard drum.ogg"
"SOUNDS\music\123.ogg"
"SOUNDS\terminal future\small f.ogg"
.
.
.
"SOUNDS\terminal future\big.ogg"

Еще есть библиотека bass.dll последней версии v.2.4.7 и приведен пример для использования музыки MP3. Но она еще умеет трэкерную музыку воспроизводить MOD, IT, S3M. Может кто-то набросать пример использования этих трэкерных форматов?

Gnom_aka_Lexander 22-07-2011 16:56 1717955

Цитата:

Цитата Johny777
Подскажите пожалуйста как растянуть внутренне окно окно
в дизайнере не активно »

в правом верхнем углу - комбобокс с объектами, выбираеш OuterNotebook, и он становится активным, можно менять, по своему усмотрению. С InnerNotebook - тоже самое. В рестулсовском форм-дизайнере, объекты типа TNewNotebook и TNewNotebookPage, только таким образом можно зацеплять для редактирования.
Цитата:

Цитата ssv14
возможно как-то сделать, что бы не велся поиск файлов OGG, а брался из списка,
например из ogglist.txt, в котором прописаны пути к каждому файлу: »

Можно поинтересоваться, для чего? теоретически - можно, используя функции работы с ini-файлами, но есть скрипт, который нормально сам все находит во вложенных подкаталогах.
Цитата:

Цитата ssv14
Еще есть библиотека bass.dll последней версии v.2.4.7 и приведен пример для использования музыки MP3. Но она еще умеет трэкерную музыку воспроизводить MOD, IT, S3M. Может кто-то набросать пример использования этих трэкерных форматов? »

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

Цитата:

Цитата murlakatamenka
Лександер, а можешь ГОГ доделанный выложить. »

В следующий раз, с личными вопросами, сразу в личку обращайся :)

Gnom_aka_Lexander 22-07-2011 17:50 1717985

Цитата:

Цитата VinTagE
Neutron, Если я понял, то тебе нужен статус панель на ботве то вот пример:
Скачать статус панель от Shegorat
P.S> Там разобратся не трудно! »

А в чем связь статус-панели, и модуля системных требований, который ты предлагаешь взамен?

ssv14 22-07-2011 19:08 1718023

ssv14:
Цитата:

возможно как-то сделать, что бы не велся поиск файлов OGG, а брался из списка,
например из ogglist.txt, в котором прописаны пути к каждому файлу.
Цитата:

Цитата Лександер
Можно поинтересоваться, для чего? теоретически - можно, используя функции работы с ini-файлами, но есть скрипт, который нормально сам все находит во вложенных подкаталогах. »

просто тогда будут все OGG файлы распаковываться, а необходимо несколько файлов так и оставить

Gnom_aka_Lexander 22-07-2011 19:35 1718039

Цитата:

Цитата ssv14
просто тогда будут все OGG файлы распаковываться, а необходимо несколько файлов так и оставить »

Ясно, сейчас освобжусь, накидаю пример получения списка из ини, там такто просто, глянь пока в справке функцию -
function GetIniString(const Section, Key, Default, Filename: String): String;
-указываеш заранее в ини список, например так: секция - список, ключ - номер файла, имя файла - имя файла. Потом в скрипте читаеш имена файлов по номерам ключей.
Цитата:

Цитата ssv14
я думаю, можно сделать так: »

Можно и так, но не обязательно батником, можно и в коде это сделать.
Экспортируеш системную функцию перемещения:

function MoveFile(const srcFile, destFile: PChar): Integer; external 'MoveFileA@kernel32.dll stdcall';
Потом в нужном месте пишеш:
MoveFile('файл с измененным расширением','файл с правильным расширением');

кстати, для бекапа, эту функцию тоже удобнее исподьзовать, чем самописную функцию перемещения для инно - системная значительно быстрей сработает.

ssv14 22-07-2011 20:12 1718061

я думаю, можно сделать так:
переименовать те файлы OGG, которые нужно оставить в OG_ например.
После завершения установки и декодирования всех OGG, через батник переименовать OG_ в OGG через секцию [Run]

Код:

[Run]
Filename: "{app}\ren_ogg.bat"; Flags: shellexec runhidden


ssv14 23-07-2011 00:05 1718183

ни как не получается подружить трэкерную музыку с bass.dll v2.4.7
что я не так делаю?

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

Код:

[_Code]
const
  BASS_MUSIC_RAMP              = 1;
  BASS_MUSIC_RAMPS            = 2;
  BASS_MUSIC_LOOP                = 4;
  BASS_MUSIC_FT2MOD          = 16;
  BASS_MUSIC_PT1MOD          = 32;
  BASS_MUSIC_SURROUND    = 512;
  BASS_MUSIC_SURROUND2  = 1024;


function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_MusicLoad(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD; frec: DWORD): Boolean;
external 'BASS_MusicLoad@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelGetLevel(handle: DWORD): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_Start: Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_Stop: Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Free: Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';


function InitializeSetup(): Boolean;

var
  Mus: HWND;
  modName: string;
begin
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('BUSSI.S3M');
  modName := ExpandConstant('{tmp}\BUSSI.S3M');
  BASS_Init(-1, 44100, 0, 0, 0);
  Mus := BASS_MusicLoad(FALSE, PChar(modName), 0, 0, BASS_MUSIC_SURROUND, 0);
  BASS_Start();
  BASS_ChannelPlay(Mus, False);
  BASS_ChannelGetLevel();
  Result := True;
end;
 
procedure DeinitializeSetup();
begin
  BASS_Stop();
  BASS_Free();
end;


nik1967 23-07-2011 09:35 1718254

Цитата:

Цитата Neutron
Ребят, объясните, чего у меня при компиляции выдаёт ошибку? »

Правильно, параметр то не указан:
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
  CurPageChanged2(CurPageID);
end;

И ещё один косяк:
Код:

[Files]
Source: Files\Data\innocallback.dll; Flags: ignoreversion dontcopy nocompression
Source: Files\Data\1.bmp; Flags: ignoreversion dontcopy nocompression

Правда, в скрипте ещё косяков хватает, но просто не стал дальше разбираться, некогда.

Gnom_aka_Lexander 23-07-2011 11:22 1718284

Цитата:

Цитата Neutron
Вообщем слепил, но всё равно какая-то лажа получилась, при нажатии установить, закрывается и ни чего не делает! »

Дык, делает. Именно то, что ты ему и говориш делать.
Код:

procedure InstallButtonClick(Sender: TObject);
var
CurPageID: Integer;
begin
Exec(ExpandConstant('{src}\Setup.exe'),'','',SW_SHOW,ewNoWait,ResultCode); //Установить(но, ты заставляеш его запустить файл Setup.exe, которого нет, поскольку это и есть запущеный сетапник.)
AutoRun.Close; // закрываем форму авторана. (единственная нужная здесь строчка)
PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0); // до кучи, имитируем нажатие кнопки отмены , видимо - контольный в голову, чтоб наверняка :)
end;

В модуле AutoRUN.iss замени приведенный выше кусок, вот этим:
Код:

procedure InstallButtonClick(Sender: TObject);
var CurPageID: Integer;
begin AutoRun.Close; end;

Цитата:

Цитата ssv14
Лександер, не поможешь? »

Я сейчас уперся рогом в свою проблему, всю голову сломал уже, как освобожусь - посмотрю, самому интересно.

ssv14 23-07-2011 11:56 1718294

Лександер, не поможешь?
ни как не получается подружить трэкерную музыку с bass.dll v2.4.7

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

Код:

[_Code]
const
  BASS_MUSIC_RAMP              = 1;
  BASS_MUSIC_RAMPS            = 2;
  BASS_MUSIC_LOOP                = 4;
  BASS_MUSIC_FT2MOD          = 16;
  BASS_MUSIC_PT1MOD          = 32;
  BASS_MUSIC_SURROUND    = 512;
  BASS_MUSIC_SURROUND2  = 1024;


function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_MusicLoad(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD; frec: DWORD): Boolean;
external 'BASS_MusicLoad@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelGetLevel(handle: DWORD): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_Start: Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_Stop: Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Free: Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';


function InitializeSetup(): Boolean;

var
  Mus: HWND;
  modName: string;
begin
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('BUSSI.S3M');
  modName := ExpandConstant('{tmp}\BUSSI.S3M');
  BASS_Init(-1, 44100, 0, 0, 0);
  Mus := BASS_MusicLoad(FALSE, PChar(modName), 0, 0, BASS_MUSIC_SURROUND, 0);
  BASS_Start();
  BASS_ChannelPlay(Mus, False);
  BASS_ChannelGetLevel();
  Result := True;
end;
 
procedure DeinitializeSetup();
begin
  BASS_Stop();
  BASS_Free();
end;


Gnom_aka_Lexander 23-07-2011 15:32 1718401

Цитата:

Цитата Neutron
сколько помню было так! »

Сейчас некогда смотреть, но логично предложить, что гдето в модулях отключена страница приветсятвия. Отчего я и не люблю модульную систему - при большом количестве процедур, собираемых в одну, инсталл начинает здорово тупить. Плюс, всегда есть шанс запутаться в правильности порядка подачи процедур, чего никогда не будет, если процедура одна.

dracosha 24-07-2011 10:09 1718755

Neutron,

Цитата:

Цитата Neutron
2. Имеется например инсталл »

язык

Код:

UsePreviousLanguage=yes
ShowLanguageDialog=yes
LanguageDetectionMethod=uilanguage

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

[Files]
Source: "{#MyAppSourcePath}\russian.txt"; DestDir: "{app}"; Languages: russian;
Source: "{#MyAppSourcePath}\english.txt"; DestDir: "{app}"; Languages: english;


nik1967 24-07-2011 10:40 1718766

Цитата:

Цитата Neutron
1. Как убрать выделение? »

Так:
Код:

with WizardForm.DirEdit do begin
    AutoSelect:= False;               
end;


45king 24-07-2011 12:37 1718821

а как сделать чтобы при удалении игры появлялась сообщение вы хотите удалить сохранение игры да или нет?

VinTagE 24-07-2011 17:07 1718981

45king,
Цитата:

а как сделать чтобы при удалении игры появлялась сообщение вы хотите удалить сохранение игры да или нет? »
Так можно:
читать дальше »

[Registry]
Root: HKLM; SubKey: SOFTWARE\Chuvakstepan\Spider-man3; ValueType: string; ValueName: PathGame; ValueData: {app}; Flags: uninsdeletekey

[code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var ResultStr:String;
begin
if CurUninstallStep=usPostUninstall then
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Chuvakstepan\Spider-man3', 'UnInstConfirm', ResultStr)
if DirExists(ExpandConstant('{userdocs}')+'\Activision\Spider-Man 3') then
if MsgBox('Удалить сохраненные игры',mbconfirmation, mb_YesNo) = IDYES then
begin
if not DelTree(ExpandConstant('{userdocs}')+'\Activision\Spider-Man 3', True, True, True)
then
MsgBox('Папка не удалена!' #13#13 'Папка не существует или задействована.', mbError, MB_OK);
end;
end;
end;

P.S> На этом сайте ты можешь найти всё что тебе нужно =)

Gugle 25-07-2011 18:42 1719706

Доброго времени суток!

Нашел на форуме как добавить дополнительное окно в скрипт, которое просит ввести какую то доп информацию до установки приложения:

Код:

var
  UserPage: TInputQueryWizardPage;

procedure InitializeWizard;
begin
  UserPage := CreateInputQueryPage(wpWelcome,
    'Доп. информация', 'ВНИМАНИЕ! доп инфо ');
  UserPage.Add('Количество :', False);
  UserPage.Add('ни о чем:', True);
end;

Все хорошо. Я даже нашел как проверить, что данные введены:
Код:

function NextButtonClick(CurPageID: Integer): Boolean;
var
  I: Integer;
begin
  Result := True;
  if CurPageID = UserPage.ID then begin
    if UserPage.Values[0] = '' then begin
      MsgBox('Вы должны че нить ввести в первое поле', mbError, MB_OK);
      Result := False;
    end;
  end;
end;

Вопрос! Как проверить, что в UserPage.Values[0] введено число, а не просто текст?
И, если это возможно, как проверить что число попало в промежуток, например от -10 до 10.
Заранее благодарен.

Gnom_aka_Lexander 25-07-2011 20:03 1719733

Цитата:

Цитата Gugle
Вопрос! Как проверить, что в UserPage.Values[0] введено число, а не просто текст?
И, если это возможно, как проверить что число попало в промежуток, например от -10 до 10. »

Так, както:

читать дальше »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
var
UserPage: TInputQueryWizardPage;

procedure InitializeWizard;
begin
UserPage:= CreateInputQueryPage(wpWelcome, 'название страницы','Тема страницы','Служебная подпись страницы');
UserPage.Add('Количество :', False);
UserPage.Add('ни о чем:', True);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
// проверяем, что поле не пустое
if CurPageID = UserPage.ID then begin if UserPage.Values[0] = '' then begin
MsgBox('Вы должны что-нибудь ввести в первое поле', mbError, MB_OK);
Result := False; Exit; end;
// проверяем, что введено именно число
if AnsiUppercase(UserPage.Values[0])<>AnsiLowercase(UserPage.Values[0]) then begin
MsgBox('Допустимо вводить только цифры', mbError, mb_Ok);
Result := False; Exit; end;
// проверяем, что модуль числа, не зависимо от знака, не превышает 10. (как раз попадаем в диапазон от -10 до 10)
if Abs(StrToInt(UserPage.Values[0]))>10 then begin
MsgBox('за пределами допустимых значений', mbError, mb_Ok); Result := False; Exit; end;
end; end;

Gnom_aka_Lexander 25-07-2011 20:42 1719748

Цитата:

Цитата Neutron
страницу выбора папки установки, папки меню пуск и.т.д »

А их всего два во всем инсталляторе -
Код:

procedure InitializeWizard();
begin
WizardForm.DirEdit.AutoSelect:= False;
WizardForm.GroupEdit.AutoSelect:= False;
end;


ssv14 25-07-2011 21:39 1719772

есть код декодирования OGG. Нужно сделать что бы еще и WV декодировалось. Объединяю оба один за другим, но беда в том, что oни получаются идентичны (кроме переменных) и используют одну и туже функцию StringToArray и при компиляции ругается, что во втором куске она продублирована.
Как прописать ее для обоих участков кода, для 3х участков?

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


[code1]
var
Files1: Array of String;
S1: String;
n1: Integer;

Function StringToArray(Text, Cut: String): array of String;

var i1, k1: Integer;

Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k1:= Pos(Cut,Text);
if k1 = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i1:= GetArrayLength(Result) -1;
if k1 = 0 then
Result[i1]:=Text
else begin
Result[i1]:= Copy(Text, 1, k1 -1); Delete(Text, 1, Length(Result[i1]) + Length(Cut));
end;
Until Length(Text) * k1 = 0;
End;

procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S1:= S1 + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+ DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;

procedure RecodeOgg;
var ResultCode: integer;
CurFile: String;

begin
FindFiles(ExpandConstant('{app}\ogg\sound\'), '*.ogg') //Находим все файлы по маске, в выбранной папке
Files1:= StringToArray(S1, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files1)-1; //Получаем кол-во файлов
for n1:=(GetArrayLength(Files1)-1) downto 0 do begin
CurFile:= Files1[n1]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}\ogg\sound\')), '')
Exec(ExpandConstant('{app}\ogg\sound\oggdec.exe'), '-Q '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files1[n1]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files1[n1]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\ogg\sound\oggdec.exe'))
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.ProgressGauge.Position := 0;
WizardForm.StatusLabel.Caption := 'Decompressing audio files, please wait...';
RecodeOgg;
end;
end;



//-------распаковка WV ------------------------------------------------


[code2]
var
Files2: Array of String;
S2: String;
n2: Integer;

Function StringToArray(Text, Cut: String): array of String; //стопор, т.к уже дублируется в предыдущем коде

var i2, k2: Integer;

Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k2:= Pos(Cut,Text);
if k2 = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i2:= GetArrayLength(Result) -1;
if k2 = 0 then
Result[i2]:=Text
else begin
Result[i2]:= Copy(Text, 1, k2 -1); Delete(Text, 1, Length(Result[i2]) + Length(Cut));
end;
Until Length(Text) * k2 = 0;
End;

procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S2:= S2 + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+ DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;

procedure RecodeWV;
var ResultCode: integer;
CurFile: String;

begin
FindFiles(ExpandConstant('{app}\WV\sound\'), '*.wv') //Находим все файлы по маске, в выбранной папке
Files2:= StringToArray(S2, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files2)-1; //Получаем кол-во файлов
for n2:=(GetArrayLength(Files2)-1) downto 0 do begin
CurFile:= Files2[n2]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}\WV\sound\')), '')
Exec(ExpandConstant('{app}\WV\sound\wvunpack.exe'), '-t -q -y '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files2[n2]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files2[n2]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\WV\sound\wvunpack.exe'))
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.ProgressGauge.Position := 0;
WizardForm.StatusLabel.Caption := 'Decompressing audio files, please wait...';
RecodeWV;
end;
end;


Gugle 26-07-2011 10:04 1720050

Лександер, спасибо большое.

Еще вопросы:
1. Можно ли в *.ini файлы добавлять секции не "[название_секции]", а ";название_секции"? Если да, то как?
2. Как добавить полученное мной значение из предыдущего примера "UserPage.Values[0]" в *.ini файл? По всей вероятности надо использовать глобальную переменную, но пока понятного для себя примера не нашел.

Заранее благодарен!

Gugle 26-07-2011 11:51 1720100

Второй вопрос отпал. Нашел описание, разобрался.
первый вопрос, об изменении записи названия секции остался.

Gugle 26-07-2011 13:59 1720194

По поводу первого вопроса.
Собрав инфу по частям сделал следующий пример:
[code]
Код:

procedure UpdateIni();
var
  IniFileName: String;
  StrArray: TArrayOfString;
begin
  IniFileName := ChangeFileExt(ExpandConstant(CurrentFileName), '.ini'); // 1
  if not IniKeyExists('settings', 'TestName', IniFileName) then begin            // 2
    SetArrayLength(StrArray, 2);
    StrArray[0] := '; name и по русски то же';
    StrArray[1] := 'TestName=name.txt';
    SaveStringsToFile(IniFileName, StrArray, True);
  end else begin
    SetIniString('settings', 'newTestName', 'newname.txt', IniFileName);    // 3
  end;
end;

Проблема в том, что для отработки кода в строке 2, в *.ini файле необходима запись:
Цитата:

[settings]
TestName=firstName.txt
А мне нужна реакция на
Цитата:

;settings
TestName=firstName.txt
Строка кода 3, вставляет в *.ini файл данные следующего содержания:
Цитата:

[settings]
newTestName=newname.txt
А мне опять таки надо:
Цитата:

;settings
newTestName=newname.txt
Гуру, помогите плз.

Gugle 26-07-2011 15:07 1720250

Все. Первый вопрос отпал сам собой. Однако, если кто-то найдет решение, то я с удовольствием его посмотрю, т.к. проблема может возникнуть снова.

Родился следующий вопрос.
После инсталяции приложения, мне необходимо размножить (или скопировать) одну из папок. Скачав InnoSetupFAQ_ru-board.chm я нашел там решение этой проблемы с помощью скрипта "SHFileOperation.iss". Однако при удалении приложения эти размноженные папки не удаляются, а хотелось бы, что бы удалялись.
Что для этого нужно сделать?

R.i.m.s.k.y. 26-07-2011 15:39 1720284

вообще-то в инишниках [...] - секции, а ";" - комментарии
придется "руками" через код писать файл раз надо, смотри в сторону SaveStringsToFile, в InnoSetupFAQ_ru-board.chm и шапке есть примеры,
в InnoSetupFAQ_ru-board.chm помоему вообще что тебе нужно один-в-один
Как сделать, чтобы дополнительно создать новую страницу и туда перенести задачи раздела [Tasks], чтобы при их выборе происходило копирование в ini-файл, в зависимости от того, что выбрано (из чекбоксов)?

Цитата:

Цитата Gugle
После инсталяции приложения, мне необходимо размножить (или скопировать) одну из папок. Скачав InnoSetupFAQ_ru-board.chm я нашел там решение этой проблемы с помощью скрипта "SHFileOperation.iss". Однако при удалении приложения эти размноженные папки не удаляются, а хотелось бы, что бы удалялись.
Что для этого нужно сделать? »

Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then
begin
if DirExists(ExpandConstant('{app}\')) then
DelTree(ExpandConstant('{app}'), True, True, True);
end;
end;

может пригодится функция замены текста в текстовом файле
Код:

procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TArrayOfString;
  //str : string;
  i : Integer;
begin
  if not FileExists(FilePath) then begin MsgBox('Файл не найден ' + FilePath, mbError, mb_Ok); Exit;end; // если файла нет, выходим
  LoadStringsFromFile(FilePath, S); // загружаем файл
  for i:= 0 to GetArrayLength(S)-1 do begin
    if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
      StringChangeEx(S[i], find, replace, True);
    end;
  end;
  SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;


Habetdin 26-07-2011 15:55 1720304

Цитата:

Цитата R.i.m.s.k.y.
procedure CurUninstallStepChanged »

Еще можно без секции [code]:
Код:

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


R.i.m.s.k.y. 26-07-2011 15:59 1720308

Цитата:

Цитата Habetdin
Еще можно без секции [code]: »

знаю но не всегда срабатывает

Gugle 26-07-2011 16:16 1720320

R.i.m.s.k.y., возможно Вы имели ввиду пример, описанный в InnoSetupFAQ_ru-board.chm, однако...
1. При использовании процедуры CurStepChanged(CurStep: TSetupStep); для копирования данных папки создаются, а вот данные туда не копируются. В связи с этим сделал свою процедуру, которая стартует сразу после установки необходимой папки:
Код:

Source: "C:\test\Folder0\*"; DestDir: "{app}\Folder0\"; AfterInstall: CopyFolder(); Flags: ignoreversion recursesubdirs createallsubdirs
2. Я не могу понять как удалить созданные папки, если они у меня создаются в зависимости от указанного пользователем значения при установке приложения. Т.е. Я не могу сделать в процедуре CurUninstallStepChanged(CurUninstallStep: TUninstallStep); следующее:
Код:

CopyDir(ExpandConstant('{app}\Folder1\'),ExpandConstant('{app}'));
CopyDir(ExpandConstant('{app}\Folder2\'),ExpandConstant('{app}'));

т.к. количество вводится только во время установки.

Кстати, почему в примере CopyDir()? Это описался человек или так и должно быть?

R.i.m.s.k.y., Ваша процедура удаления CurUninstallStepChanged(CurUninstallStep: TUninstallStep); работет более корректно. Все вопросы по удалению отпали.

Большое спасибо за подсказку.

R.i.m.s.k.y. 26-07-2011 17:06 1720368

Цитата:

Цитата Gugle
В связи с этим сделал свою процедуру, которая стартует сразу после установки необходимой папки: »

и она отрабатывает над каждым файлом в папке
советую копировать папку куда надо без AfterInstall, а потом второй строчкой один мелкий файлик уже с AfterInstall
Код:

Source: "C:\test\Folder0\*"; DestDir: "{app}\Folder0\"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\test\Folder0\ww.txt"; DestDir: "{app}\Folder0\"; AfterInstall: CopyFolder(); Flags: ignoreversion recursesubdirs createallsubdirs

Цитата:

Цитата Gugle
Ваша процедура удаления CurUninstallStepChanged »

она не моя, она системная

и можно на ты, меня не покоробит :)

Gugle 26-07-2011 17:12 1720374

Цитата:

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

В Examples при установке inno setup лежит прекрасный пример (Components.iss) по построению установщика с выбором разных "уровней сложности":
Код:

[Types]
Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom

Вопрос. Как после выбора "Full installation" попасть сразу в последнее окно, а, например, при выборе "Compact installation" поставить сначало дно из своих окон?
Например вот такое:
Код:

var
  UserPage: TInputQueryWizardPage;

procedure InitializeWizard;
begin
  UserPage := CreateInputQueryPage(wpWelcome,
    'Дополнительная информация', 'ВНИМАНИЕ! Все поля должны быть заполнены',
    'Пожалуйста введите количество wrlr, которые необходимо установить '+
    'на рабочую станцию и нажмите клавишу next');
  UserPage.Add('Количество  wrlr:', False);
  UserPage.Add('ни о чем:', True); // Скрытый текст
end;

З.Ы.
Текст из Components.iss
читать дальше »
Код:

; -- Components.iss --
; Demonstrates a components-based installation.

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=userdocs:Inno Setup Examples Output

[Types]
Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom

[Components]
Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help File"; Types: full
Name: "readme"; Description: "Readme File"; Types: full
Name: "readme\en"; Description: "English"; Flags: exclusive
Name: "readme\de"; Description: "German"; Flags: exclusive

[Files]
Source: "MyProg.exe"; DestDir: "{app}"; Components: program
Source: "MyProg.chm"; DestDir: "{app}"; Components: help
Source: "Readme.txt"; DestDir: "{app}"; Components: readme\en; Flags: isreadme
Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Components: readme\de; Flags: isreadme

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"


insombia 26-07-2011 17:20 1720381

Всем привет,как сделать чтобы прогресс бар со временем перемещался на середину и так далее типа как у механиков?

LinkOFF 26-07-2011 21:12 1720518

insombia, я сам хочу узнать

Rikill 26-07-2011 21:25 1720524

insombia, LinkOFF, всмысле в середину?? так штоле?
p.s. надо было так и спросить: "как уменьшить страницу установки и переместить?"

insombia 27-07-2011 14:35 1720872

Rikill не так а когда идет установка то через определённое время прогресс бар с начала перескакивал на середину у каталистов тоже такое было

nik1967 27-07-2011 15:16 1720891

Цитата:

Цитата insombia
у каталистов тоже такое было »

Ну и зачем? Мы наоборот стараемся добиться плавного прогрессбара. Красивше же :good:

Gnom_aka_Lexander 27-07-2011 15:22 1720897

insombia, Такто у них библиотечка IsExec для этого, но от дерганого прогресса они уже отказались. А так, похожего эффекта можно добиться с помощью такого кода:
читать дальше »
procedure CurStepChanged(CurStep: TSetupStep);
var ResultCode,step:integer;
begin
step:=WizardForm.ProgressGauge.Max/5; // шаг приравниваем максимальной позиции прогрессбара деленной на количество запускаемых анпакеров.
if CurStep=ssInstall then
begin
Exec(ExpandConstant('{app}\анпакер1.exe'), 'параметры для анпакера', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
WizardForm.ProgressGauge.Position:=WizardForm.ProgressGauge.Position+step;
Exec(ExpandConstant('{app}\анпакер2.exe'), 'параметры для анпакера', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
WizardForm.ProgressGauge.Position:=WizardForm.ProgressGauge.Position+step;
Exec(ExpandConstant('{app}\анпакер3.exe'), 'параметры для анпакера', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
WizardForm.ProgressGauge.Position:=WizardForm.ProgressGauge.Position+step;
Exec(ExpandConstant('{app}\анпакер4.exe'), 'параметры для анпакера', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
WizardForm.ProgressGauge.Position:=WizardForm.ProgressGauge.Position+step;
Exec(ExpandConstant('{app}\анпакер5.exe'), 'параметры для анпакера', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
WizardForm.ProgressGauge.Position:=WizardForm.ProgressGauge.Max;
end;
end;
в связке с рестулсовской ExecAndWait.

LinkOFF 27-07-2011 15:41 1720902

nik1967, ты не знаешь как мне исправить вот это
http://i25.fastpic.ru/big/2011/0727/...805b4ddc7e.jpg

insombia 27-07-2011 15:44 1720904

LinkOFF а что именно нужно исправить?

LinkOFF 27-07-2011 15:49 1720910

Цитата:

Цитата insombia
LinkOFF а что именно нужно исправить? »

Надписи прозрачными сделать, надо чтоб картинка видна была в WizardSmallImage

insombia 27-07-2011 15:51 1720912

LinkOFF можно и через скрипт уменьшить обьем картинки и не будет такого как у тебя

LinkOFF 27-07-2011 15:54 1720916

Цитата:

Цитата insombia
можно и через скрипт уменьшить обьем картинки и не будет такого как у тебя »

Да я знаю, но мне вообще прозрачность убрать надо, чтоб надписи ложились на вставляемую картинку

insombia 27-07-2011 16:02 1720921

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

nik1967 27-07-2011 16:04 1720923

Цитата:

Цитата LinkOFF
nik1967, ты не знаешь как мне исправить вот это »

Знаю
читать дальше »
Код:

var
  PageNameLabel,PageDescriptionLabel: TLabel;

//***************************************** [ начало 497 58 изображения  ] *********************************************//

PageNameLabel:= TLabel.Create(WizardForm);
  with PageNameLabel do begin
    Left:= WizardForm.PageNameLabel.Left;
    Top:= WizardForm.PageNameLabel.Top;
    Width:= WizardForm.PageNameLabel.Width;
    Height:= WizardForm.PageNameLabel.Height;
    AutoSize:= False;
    WordWrap:= True;
    Font.Name:= WizardForm.PageNameLabel.Font.Name;
    Font.Style:= [fsBold];
    Transparent:= True;
    Parent:= WizardForm.MainPanel;
  end;

PageDescriptionLabel:= TLabel.Create(WizardForm);
  with PageDescriptionLabel do begin
    Left:= WizardForm.PageDescriptionLabel.Left-12;
    Top:= WizardForm.PageDescriptionLabel.Top;
    Height:= WizardForm.PageDescriptionLabel.Height;
    Width:= ScaleX(260);
    AutoSize:= False;
    WordWrap:= True;
    Font.Name:= WizardForm.PageDescriptionLabel.Font.Name;
    Transparent:= True;
    Parent:= WizardForm.MainPanel;
  end;

  with WizardForm do begin
    PageNameLabel.Hide;
    PageDescriptionLabel.Hide;
    with MainPanel do begin
      with WizardSmallBitmapImage do begin
        Left:= ScaleX(0);
        Top:= ScaleY(0);
        Width:= Mainpanel.Width;
        Height:= MainPanel.Height;
      end;
    end;
 end;

//****************************************** [конец 497 58 изображения  ] **********************************************//

Procedure CurPageChanged(CurPageID: Integer);
Begin
  PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
end;


insombia 27-07-2011 16:09 1720926

nik1967 а на мой вопрос ответ знаешь?

LinkOFF 27-07-2011 16:12 1720928

nik1967, я че-то в свой скрипт вставить не могу.Не поможешь?

Gnom_aka_Lexander 27-07-2011 16:31 1720945

Цитата:

Цитата insombia
А как сделать чтобы не писалось распаковывается там какой то файл а просто распаковка файлов а какие именно чтобы не указывалось? »

Можно так:
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.FilenameLabel.Caption := WizardForm.StatusLabel.Caption;
end;


insombia 27-07-2011 16:31 1720946

подскажите как сделать если есть 2 одинаковых кода CurPageChanged (CurPageID: Integer);
как сделать чтобы можно было с ним как и с procedure InitializeWizard(); делать типа
procedure InitializeWizard();
begin
InitializeWizard1(); а то уже давно этим занимался

LinkOFF 27-07-2011 16:33 1720947

А как через Inno Setup AutoRun делать?

insombia 27-07-2011 16:34 1720949

LinkOFF Need for Speed™ Undercover.iss v 2.2 скачай там есть пример

Gnom_aka_Lexander 27-07-2011 16:36 1720950

Цитата:

Цитата insombia
подскажите как сделать если есть 2 одинаковых кода CurPageChanged (CurPageID: Integer); »

Код:

CurPageChanged (CurPageID: Integer);
begin
CurPageChanged1 (CurPageID);
CurPageChanged2 (CurPageID);
end;

Но лучше сразу в общей процедуре писать, в плане производительности и исключения ошибок. При объединении процедур, почти неизбежна ситуация, когда одни и те-же условия обрабатываются по нескульку раз, что приводит к тормозам. А если эти условия используют одинаковые глобальные переменные, то ошибки просто неизбежны.

insombia 27-07-2011 16:44 1720954

как сделать чтобы лого было тоже прозрачный а не таким http://images.bcm.net.ua/images/3455...8331245628.jpg использую iswin7

valyok666 27-07-2011 17:48 1720992

доброго времени суток=)кто подскажет код на создание такого лого скриншот

No4noylis 27-07-2011 18:28 1721006

insombia, вот что нашел http://rghost.ru/8029941

insombia 27-07-2011 20:08 1721050

valyok666 через inno setup gamescript generator по моему

Rikill 27-07-2011 21:22 1721098

valyok666, лого картинка и текстовое лого
Код:

procedure InitializeWizard(); 
var
txt: tlabel;
begin 
txt:=TLabel.Create(WizardForm)
txt.Left:=10;
txt.Top:=330;
txt.Font.Color:=clgray;
txt.Caption:='Forum OSZone';
txt.Font.Style:= [fsBold];
txt.Font.Name= 'georgia'; 
txt.Parent:=WizardForm; 
end;


valyok666 27-07-2011 21:29 1721107

txt.Font.Name= 'georgia';
на эту строчку ругается

LinkOFF 27-07-2011 21:36 1721116

Цитата:

Цитата valyok666
txt.Font.Name= 'georgia';
на эту строчку ругается »

это шрифт, поставь например Times New Roman

No4noylis 27-07-2011 22:30 1721152

Цитата:

Цитата Rikill
txt.Font.Name= 'georgia'; »

Ошибочка,
Вот как нужно, а от имени шрифта не зависит:
Код:

txt.Font.Name:= 'georgia';

Народ!!!! У кого есть кнопочки (желательно .Png), MusucButton.Png, чекбоксы, панели ну еще какие другие картиночки, можете скинуть???? Плиз :)

insombia 27-07-2011 23:10 1721172

No4noylis в Need for Speed™ Undercover.iss v 2.2 есть кажись

У кого то есть Inno Setup Form Designer а то здесь ссылка битая

ssv14 27-07-2011 23:16 1721176

Мне помогли добавить к скрипту распаковки OGG еще и распаковку WV.
читать дальше »


[code]
function StringToArray(Text, Cut: String): array of String;

var i, k: Integer;
begin
SetArrayLength(Result, 0);
if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк

Repeat k:=Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1);
i:=GetArrayLength(Result)-1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1);
Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
end;

procedure FindFiles(FromDir: String; Mask: String);
var FindResult: Boolean;
FSR, DSR: TFindRec;
S: String;
begin
FindResult:=FindFirst(AddBackslash(FromDir)+Mask, FSR);
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;

FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR);
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+ DSR.Name, Mask);
end;
FindResult:= FindNext(DSR);
end;

FindClose(FSR);
FindClose(DSR);
end;


//-------Начало----распаковка OGG------------------------------------------------
procedure RecodeOgg;
var Files: Array of String;
CurFile, S: String;
ResultCode, n: integer;
begin
FindFiles(ExpandConstant('{app}\hl2\sound\'), '*.ogg'); //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|'); //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов

for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n];
StringChange(CurFile, AddBackslash(ExpandConstant('{app}\hl2\sound\')), '');
Exec(ExpandConstant('{app}\hl2\sound\oggdec.exe'), '-Q '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode); //Для каждого файла запускаем декодер
DeleteFile(Files[n]); //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;

DeleteFile(ExpandConstant('{app}\hl2\sound\oggdec.exe'));
end;
//-------Конец----распаковка OGG------------------------------------------------



//-------Начало----распаковка WV ------------------------------------------------
procedure RecodeWV;
var Files: Array of String;
CurFile, S: String;
ResultCode, n: integer;
begin
FindFiles(ExpandConstant('{app}\hl2\sound\'), '*.wv'); //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|'); //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов

for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n];
StringChange(CurFile, AddBackslash(ExpandConstant('{app}\hl2\sound\')), '');
Exec(ExpandConstant('{app}\hl2\sound\wvunpack.exe'), '-t -q -y '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode); //Для каждого файла запускаем декодер
DeleteFile(Files[n]); //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;

DeleteFile(ExpandConstant('{app}\hl2\sound\wvunpack.exe'))
end;
//-------Конец----распаковка WV ------------------------------------------------



procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.ProgressGauge.Position := 0;
WizardForm.StatusLabel.Caption := 'Decompressing audio files, please wait...';
RecodeOgg;
RecodeWV;
end;
end;


Компиляция проходит успешно, но не отрабатывает ни распаковку OGG ни WV. после распаковки файлов идет завершение установки . Успел заметить, после распаковки файлов, пишет: сохранение списка, Decompressing audio.. (в скрипте для OGG после этого шла распаковка файлов OGG).
читать дальше »


[Setup]
AppName=RecodeOgg
AppVerName=RecodeOgg
OutputDir=.
OutputBaseFilename=RecodeOgg
DefaultDirName={pf}\RecodeOgg
AppendDefaultDirName=False
DisableDirPage=True

[files]
Source: oggdec.exe; DestDir: {app};
Source: oggs\*; DestDir: {app};
Source: oggs\*; DestDir: {app}\Data;

[code]
var
Files: Array of String;
S: String;
n: Integer;

Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k:= Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
End;

procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+ DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;

procedure RecodeOgg;
var ResultCode: integer; CurFile: String;
begin
FindFiles(ExpandConstant('{app}'), '*.ogg') //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов
for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}')), '')
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files[n]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\oggdec.exe'))
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.ProgressGauge.Position := 0;
WizardForm.StatusLabel.Caption := 'Извлечение аудио файлов...';
RecodeOgg;
end;
end;


А тут завершение (файлы oggdec и wvunpack удаляются). Кажется список файлов не строится. Ребята, кто-то может помочь?

Rikill 28-07-2011 00:01 1721201

insombia, в сборке Inno Ultra от Лександера и в рестулзовской версиях уже встроен дизайнер

зы с шрифтом ошибся, прошу прощения

ssv14 28-07-2011 00:15 1721210

Все, получилось. Теперь есть распаковка и OGG и WV.
читать дальше »


[code]
var
Files: Array of String;
S: String;
n: Integer;

function StringToArray(Text, Cut: String): array of String;
var i, k: Integer;

begin
SetArrayLength(Result, 0);
if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк

Repeat k:=Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1);
i:=GetArrayLength(Result)-1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1);
Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
end;

procedure FindFiles(FromDir: String; Mask: String);
var FindResult: Boolean;
FSR, DSR: TFindRec;

begin
FindResult:=FindFirst(AddBackslash(FromDir)+Mask, FSR);
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;

FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR);
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+ DSR.Name, Mask);
end;
FindResult:= FindNext(DSR);
end;

FindClose(FSR);
FindClose(DSR);
end;


//-------Начало----распаковка OGG------------------------------------------------
procedure RecodeOgg;
var ResultCode: integer; CurFile: String;

begin
FindFiles(ExpandConstant('{app}\hl2\sound\'), '*.ogg'); //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|'); //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов

for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n];
StringChange(CurFile, AddBackslash(ExpandConstant('{app}\hl2\sound\')), '');
Exec(ExpandConstant('{app}\hl2\sound\oggdec.exe'), '-Q '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode); //Для каждого файла запускаем декодер
DeleteFile(Files[n]); //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;

DeleteFile(ExpandConstant('{app}\hl2\sound\oggdec.exe'));
end;
//-------Конец----распаковка OGG------------------------------------------------



//-------Начало----распаковка WV ------------------------------------------------
procedure RecodeWV;
var ResultCode: integer; CurFile: String;

begin
FindFiles(ExpandConstant('{app}\hl2\sound\'), '*.wv'); //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|'); //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов

for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n];
StringChange(CurFile, AddBackslash(ExpandConstant('{app}\hl2\sound\')), '');
Exec(ExpandConstant('{app}\hl2\sound\wvunpack.exe'), '-t -q -y '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode); //Для каждого файла запускаем декодер
DeleteFile(Files[n]); //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;

DeleteFile(ExpandConstant('{app}\hl2\sound\wvunpack.exe'))
end;
//-------Конец----распаковка WV ------------------------------------------------



procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.ProgressGauge.Position := 0;
WizardForm.StatusLabel.Caption := 'Decompressing audio files, please wait...';
RecodeOgg;
RecodeWV;
end;
end;



просто надо было константы Files, S и n вынести в самое начало кода, сделать их общими для всех процедур. Теперь можно еще создать процедуру Recode... для распаковки чего-то.

Спасибо demon1232010 с forum.ru-board за оказанную помощь :) и спасибо всем остальным, за то что терпели мои топики

No4noylis 28-07-2011 09:11 1721341

Цитата:

Цитата insombia
No4noylis в Need for Speed™ Undercover.iss v 2.2 есть кажись »

Я знаю, взял оттуда, но если у кого еще такое есть скиньте пожалуйста. Ведь одни и теже в репаки ставить не будешь:)

insombia 28-07-2011 10:23 1721398

No4noylis http://rghost.ru/16034211

Rikill 28-07-2011 12:18 1721472

No4noylis, не борзей, хочешь быть репакером рисуй сам :)

insombia 28-07-2011 14:21 1721580

Как разбить инсталяшку на 2 диска 1 что занимал 4 37 гб а второй 1 гб или что-то в этом плане

No4noylis 28-07-2011 15:16 1721624

insombia, так, если не ошибаюсь:
Код:

[Setup]
DiskSpanning=yes
DiskSliceSize=4692251770
SlicesPerDisk=2


LinkOFF 28-07-2011 15:19 1721629

Доброго времени суток.Помогите мне установить черный шрифт на первой и последней страницах установки.Вот скрипт
http://rghost.ru/16063671

Rikill 28-07-2011 15:30 1721644

LinkOFF, http://rghost.ru/16064691

insombia 28-07-2011 15:53 1721667

No4noylis не так не пойдет там максимум 2 гб но не 4 разрешено

Berline 28-07-2011 16:40 1721701

Всем привет!
Подскажите плз... возможно уже упоминалось...
Как средствами Inno Setup изменить дефлотную иконку папки, в которую будет установлена программа?
Например если руками создать в папке файл desktop.ini и прописать всю инфу - иконка так и не отображается...
А если средствами windows - то все ок!

Rikill 28-07-2011 16:58 1721715

insombia, ты хочешь игру в архивах на 2 диска, или стандартным инно сжатием? стандартным инно можно как сказал No4noylis
[Setup]
DiskSpanning=yes
DiskSliceSize=4692251770//в байтах, изменяй-считай сам!!!!!!
SlicesPerDisk=2

Berline
Код:


ExtractTemporaryFile('картинка-dir.bmp');
ExtractTemporaryFile('картинка-group.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\картинка-dir.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;

WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\картинка-group.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;


Berline 28-07-2011 17:40 1721739

Rikill, спасибо, но это не то)
я говорю конкретно про это:
Desktop.ini
Код:

[.ShellClassInfo]
IconResource=ico.ico,0
[ViewState]
Mode=
Vid=
FolderType=Generic


Shegorat 28-07-2011 17:59 1721753

Berline
читать дальше »
Код:

[Setup]
AppName=MyApp
AppverName=MyApp
DefaultDirName={pf}\MyApp

[Files]
Source: E:\MyIcon.ico; DestDir: {app}\;

[ code]
function SetFileAttributes(lpFileName: PChar; dwFileAttributes: DWORD): BOOL; external 'SetFileAttributesA@kernel32.dll stdcall';
function GetFileAttributes(lpFileName: PChar): DWORD; external 'GetFileAttributesA@kernel32.dll stdcall';

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then begin
    SetIniString('.ShellClassInfo', 'IconFile', ExpandConstant('{app}\MyIcon.ico'), ExpandConstant('{app}\desktop.ini')); //пишим данные о иконке
    SetIniString('.ShellClassInfo', 'IconIndex', '0', ExpandConstant('{app}\desktop.ini'));
    SetIniString('.ShellClassInfo', 'IconResource', ExpandConstant('{app}\MyIcon.ico,0'), ExpandConstant('{app}\desktop.ini'));
    SetFileAttributes(PChar(ExpandConstant('{app}\desktop.ini')), FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM); //скрываем ини-файл и ставим атрибут системный
    SetFileAttributes(PChar(ExpandConstant('{app}')), FILE_ATTRIBUTE_SYSTEM); //дополнительно ставим атрибут системный для папки, чтобы иконка отображалась
  end;
end;


insombia
Может все-таки справку будем смотреть?
читать дальше »
Цитата:

Valid values: 262144 through 2100000000, or max
Default value: max (2100000000)

Description:
This specifies the maximum number of bytes per disk slice (SETUP-*.BIN file). Normally, this should be set to the total number of bytes available on the disk media divided by the value of the SlicesPerDisk [Setup] section directive, which defaults to 1.

This directive is ignored if disk spanning is not enabled using the DiskSpanning [Setup] section directive.

To optimally fill 4.7 GB recordable DVDs, use:

SlicesPerDisk=3
DiskSliceSize=1566000000



Rikill
Будь проще и уважительнее к другим участникам форума.

vint56 28-07-2011 21:07 1721852

Berline, вот другой пример
читать дальше »
[Setup]
AppName=Иконка
AppVerName=Иконка
DefaultDirName={pf}\Иконка
DefaultGroupName=Иконка

[Dirs]
Name: "{app}"; Attribs: system; AfterInstall: CreateIni();

[Files]
Source: icon.ico; DestDir: {app}

[code]
//******************************************* [ Папка, в которую устанавливается программа, имеет свою иконку ] ***************************************************//
procedure CreateIni();
begin
SaveStringsToFile(ExpandConstant('{app}\Desktop.ini'), ['[.ShellClassInfo]',
'IconFile=icon.ico',
'IconIndex=0'], False)
end;
//******************************************* [ Папка, в которую устанавливается программа, имеет свою иконку ] ***************************************************//

insombia 28-07-2011 21:31 1721879

Rikill стандартным инно

Rikill 28-07-2011 21:39 1721885

insombia, если стандартным то мы с ночным лисом ответили

Berline 29-07-2011 09:45 1722068

Shegorat, спасибо, Ваш вариант мне кажется поинтереснее...
Только подскажите плз, при компилировании, выдает ошибку: unknown type PChar - что с этим сделать?

Habetdin 29-07-2011 09:49 1722073

Berline, замените PChar на PAnsiChar

bagrat 29-07-2011 12:14 1722166

привет всем (извините может я не в этот топик .но Inno setap здесь),

выполнил следующее установил игру ввел серийник, пропатчил, скомпилировал инно файл ***.iss, затем экпортировал ключи из реестра(regedit) импортировал их в ***.iss , запустил компилятор получил игру

в итоге при запуске репака , просит ввести серийник, ввожу серийник ради любопытства выдает окно с ошибкой Данное окно закрыть не могу никак , только перезагрузко ПК и далее
не подскажете как в скрипте в инно сетапе прописать вручную серийник игры
читать дальше »
; Script generated by the Мастер Inno Setup Script.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{9BE97B2A-A993-466C-A9CF-5844BE254C5B}
AppName=Space Empires V
AppVersion=1.79
;AppVerName=Space Empires V 1.79
AppPublisher=Malfador Machinations
AppPublisherURL=http://www.malfador.com/
AppSupportURL=http://www.malfador.com/
AppUpdatesURL=http://www.malfador.com/
DefaultDirName={pf}\Space Empires V
DefaultGroupName=Space Empires V
AllowNoIcons=yes
InfoAfterFile=C:\Users\Андрей\Desktop\для компиляции exe\3.txt
OutputDir=D:\Для компиляции
OutputBaseFilename=Space Empires V
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
SetupIconFile=C:\Users\Андрей\Desktop\для компиляции exe\space 5\se5.ico
WizardImageFile=c:\Users\Андрей\Desktop\для компиляции exe\space 5\500x400.bmp
WizardSmallImageFile=c:\Users\Андрей\Desktop\для компиляции exe\space 5\100x100.bmp

[Messages]
BeveledLabel=RePack by bAGrat

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: F:\Games\Space Empires V\se5.exe; DestDir: {app}; Flags: ignoreversion
Source: F:\Games\Space Empires V\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\Space Empires V; Filename: {app}\se5.exe
Name: {group}\{cm:ProgramOnTheWeb,Space Empires V}; Filename: http://www.malfador.com/
Name: {group}\{cm:UninstallProgram,Space Empires V}; Filename: {uninstallexe}
Name: {commondesktop}\Space Empires V; Filename: {app}\se5.exe; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Space Empires V; Filename: {app}\se5.exe; Tasks: quicklaunchicon

[Run]
Filename: {app}\se5.exe; Description: {cm:LaunchProgram,Space Empires V}; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKLM; SubKey: SOFTWARE\Strategy First\Space Empires V; ValueType: string; ValueName: Install Path; ValueData: {app}; Flags: uninsdeletekey

[code]
const
Color = clblack;
procedure InitializeWizard();
begin
WizardForm.Font.Color:=clWhite;
wizardForm.WelcomeLabel1.Font.Color:=clWhite;
WizardForm.FinishedHeadingLabel.Font.Color:=clWhite;
WizardForm.PageNameLabel.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.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.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;
WizardForm.Bevel.visible:=false;
WizardForm.Bevel1.visible:=false;
end;

спасибо

Leka_651 29-07-2011 13:36 1722214

Привет)
Скажите как сделать следующее: есть два варианта установки, у каждого из них есть свой набор компонент. Нужно, чтобы при выборе типа установки показывались только его компоненты.

спасибо

R.i.m.s.k.y. 29-07-2011 13:59 1722233

bagrat, запусти инстал из самого инно-сетапа с трассировкой - кнопкой F9 (кажется) или на панели кнопок зеленый квадратик с белым треугольничком
на ошибке инно подсветит строчку
и мне кажется что скрипт вверху неполный, не вижу в нем криминала

bagrat 29-07-2011 14:13 1722240

R.i.m.s.k.y., в том -то и дело , что красным не подчеркивает, а этот скрипт раз 10 компилировал(я новичок извольте )

R.i.m.s.k.y. 29-07-2011 14:22 1722247

bagrat, я ж написал как сделать, инно будет трассировать скрип не на стадии компиляции, а при выполнении, когда эта ошибка вылезет то инно остановит исполнение и красным выделит ошибочную строчку
если тебе долго компилять заново - в секции files замени временно толстые файлы/папки на "заглушки" или закоменнтируй если нету Before/AfterInstall и Check

скорее всего ты обращаещься в секции Code к элементу (например к списку компонентов) по номеру, которого нет, или что-то подобное

скрипты-простыни хорошо бы не только прятать под кат, но и под тег [Сode]...[/Сode]

скрипт вверху точно полностью приведен?

bagrat 29-07-2011 14:32 1722253

да я открыл скипт нажал F9 пошла компиляция; и не будет подсветки(могу даже видео сделать, когда в следующий раз компиляцию начну выполнять(4 дня уже делаю) , для достоверности)

R.i.m.s.k.y. 29-07-2011 14:34 1722256

Цитата:

Цитата bagrat
да я открыл скипт нажал F9 пошла компиляция; »

после компиляции инно сам запустит твой проект, в его окне в логе будет видны стадии прохождения установки
ты пользуешься оригинальным инно, не истулом и не инноиде?
я написал для оригинального инно (и для расширенной версии от кетайсев)
истул и инноиде помоему не умеют трассировать экзешник

ты полностью прочитал мое сообщение выше? ты облегчил секцию Files чтобы поменьше ждать компиляции?

bagrat 29-07-2011 14:43 1722259

программа с офф сайта http://s1.ipicture.ru/uploads/20110729/Hn7B5JPP.bmp +русик сам встроил

isttool использовал, когда внедрял ключи реестра т.е.
выполнить---regedit--software--(папка с игрой)--экспорт)
открыл istool выполнил сжать---открыл скрипт от инно ---registry --импорт --сохранил
затем запустил сохраненный скрипт через инно

Цитата:

Цитата R.i.m.s.k.y.
ты облегчил секцию Files чтобы поменьше ждать компиляции? »

-- НЕТ(настройки инно не менял)

в том то и дело я не продолжаю установку скопилированной игры(репака)т.к у меня игра уже стоит и я ее не удаляю

R.i.m.s.k.y. 29-07-2011 14:50 1722267

Цитата:

Цитата bagrat
в том то и дело я не продолжаю установку скопилированной игры(репака)т.к у меня игра уже стоит и я ее не удаляю »

патч чтоли делаешь?
смысл моих сообщений в том, чтобы инно сам написал тебе проблемную строчку, а дальше уже будем посмотреть
в приведенном тобой скрипте я не вижу ошибок (ну кроме WizardForm.Bevel1.visible, в оригинале в инно нет переменных с цифрами, значит у тебя где-то еще кусок кода в котором объявляются эти переменные, да и ошибка на WizardForm.Bevel1.visible была бы другая - неизвестная переменная а не index list out of bounds

bagrat 29-07-2011 14:55 1722271

нет, решил репак игры сделать(просто лицуху когда-то купил) спрашивал репакеров ,говорят не знают ищи кряк ставь кряк и не морочь себе голову , но все кряки с вирусней

компиляция завершена красного не где нет(

PS сейчас еще раз запущу репак и посмотрю может еще ошибки вылезут

R.i.m.s.k.y. 29-07-2011 15:04 1722280

во первых - в твоем скрипте я не вижу кода для ввода серийника, а твоя ошибка возникает когда ...ввожу серийник ради любопытства выдает окно с ошибкой
во вторых - при трассировке ты нажал отмену установки до места возникновения ошибки или после?
если хочешь - можешь кинуть мне скриптик в личку, обещаю посмотреть и не разглашать, но оформление в инно я не знаю - см подпись :)

вот ты его запусти сейчас скомпилированный не из тотала/проводника, а из самого инно - кнопочкой на панелье

PS - bmp зло, жми в следующий раз в жипег
PS2 - я постоянно делаю репаки, вишера к примеру, мафии там, анрыла и прочего, никаких проблем, к томуже без кряка зачастую никуда тк игры привязываются к диску или к учетке в нете
PS3 - хороший пак innoultra у Лександра, все в одном флаконе.

bagrat 29-07-2011 15:21 1722292

R.i.m.s.k.y., вот еще две ошибки они появляются после того, когда хочу вырубить инсталл
http://s1.ipicture.ru/uploads/20110729/XfTteAso.bmp
http://s1.ipicture.ru/uploads/20110729/kB0ITs1P.jpg, диспетчером не получается(установку репака провожу на вирт машине )
Цитата:

Цитата R.i.m.s.k.y.
во вторых - при трассировке ты нажал отмену установки до места возникновения ошибки или после? »

отмену нажимаю когда окончил компиляцию и инно просит установить репак

нет проблем могу выложить скрипт, только он один в один на предыдущей странице поста

R.i.m.s.k.y. 29-07-2011 15:25 1722295

Цитата:

Цитата bagrat
отмену нажимаю когда окончил компиляцию и инно просит установить репак »

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

ошибка Accsseesscc Violation вообще ни в суп ни в красную армию, это скорее всего экзешник поврежден, виртуалка Microsoft Virtual PC? у нее был глючок с сохранением толстых файлов, они бились при записи

Цитата:

Цитата bagrat
нет проблем могу выложить скрипт, только он один в один на предыдущей странице поста »

раз так ненадо, я вечерком сам его компильну

bagrat 29-07-2011 15:28 1722299

R.i.m.s.k.y., да но у меня стоит игра оригинал, если я начну устанавливать ее даже на другую портицию она станет нормально , но все траблы начнутся после установки

http://rghost.ru/16189801

есть какой-то способ увеличить скорость компиляции , а то опять ждать ~25 мин

Цитата:

Цитата R.i.m.s.k.y.
Microsoft Virtual PC »

нет, использую Oracle VM VirtualBox

R.i.m.s.k.y. 29-07-2011 15:38 1722308

Цитата:

Цитата bagrat
есть какой-то способ увеличить скорость компиляции , а то опять ждать ~25 мин »

купить коре 2600к :-) и разогнать до 4,5ГГц
или временно для проверки как я выше написал в секции Files делать заглушки из пустых папок
Цитата:

Цитата bagrat
но все траблы начнутся после установки »

так это при удалении ошибки? тыж писал что при установке!

Rikill 29-07-2011 15:39 1722311

bagrat, проблема либо в exe либо в виртуалке, инно не виновна, ну или на другой диск, скорее всего кряк гумно

bagrat 29-07-2011 15:53 1722321

Rikill, нет не кряк, ввожу сирийник вручную
Цитата:

Цитата R.i.m.s.k.y.
так это при удалении ошибки? тыж писал что при установке! »

ошибка - при запуске ярлыка игры!

а при удалении http://s1.ipicture.ru/uploads/20110729/kB0ITs1P.jpg

nik1967 29-07-2011 16:13 1722330

Цитата:

Цитата R.i.m.s.k.y.
ну кроме WizardForm.Bevel1.visible, в оригинале в инно нет переменных с цифрами »

Хм, кто тебе это сказал? Из справки (F1):
Код:

TWizardForm = class(TSetupForm)
property Bevel1: TBevel; read;


bagrat 29-07-2011 16:37 1722353

ребята проблема с ошибками снята это их давала вирт машина , но главный вопрос как в скрипте прописать серийник к запуску игры

ребята читая на форуме наталкиваюсь на запись скриптов, к примеру
Код:

  SaveStringsToFile(F, S, False); // сохраняем файл
в самом скрипте когда редактирую, создаю что- то начиная с // ... писать надо или это для пояснения пользователям писать не надо в скрипте

alert30 29-07-2011 16:53 1722366

Ребята, дайте скрипт, чтобы показывалось в процессе инсталлятора, проценты, заранее спасибо...

No4noylis 29-07-2011 17:04 1722375

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

Код:

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

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

var
  TimerID: 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 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 PercentsInstall();
begin
  with WizardForm.ProgressGauge do
  begin
    PercentsLabel.Caption:= 'Выполнено ' + NumToStr((Position-Min)/((Max - Min)/100)) + ' %';
  end;
end;

Procedure MyTimerProc(h, msg, idevent, dwTime: Longword);
Begin
    if WizardForm.CurPageID = wpInstalling then PercentsInstall();
End;

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

procedure InitializeWizard();
begin
    PercentsLabel:= TLabel.Create(WizardForm);
  with PercentsLabel do
  begin
    Left:= WizardForm.DirEdit.Left + ScaleX(150);
    Top:= WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(5);
    Width:= WizardForm.StatusLabel.Width;
    Height:= WizardForm.StatusLabel.Height + ScaleY(5);
    AutoSize:= False;
    Transparent := True;
    Font.Style:= [fsBold, fsItalic];
    Font.Size:= 13;
    Font.Name:= 'Constantia' ;
    Font.Color:= ClWhite;
    Parent:= WizardForm.InstallingPage;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
  begin
  TimerID:= SetTimer(0, 0, 500 {Полсекунды}, WrapTimerProc(@MyTimerProc, 4));
  end;
end;


innocallback.dll кинешь в папку с скриптом.

nik1967 29-07-2011 17:11 1722379

Цитата:

Цитата bagrat
это для пояснения пользователям»

Так сказать, комментарии.
А писать или нет - тебе решать.

alert30 29-07-2011 17:12 1722380

No4noylis, сорри, я видел в процессе инсталляции проценты, только шрифт белый, спасибо.

insombia 29-07-2011 17:35 1722394

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

alert30 29-07-2011 17:57 1722417

insombia, еще раз спасибо. :bow:

bagrat 29-07-2011 20:34 1722502

1)как правильно прописать к файлу Logo.bmp (мой логотип), где должен находится мой графический файл
читать дальше »

[Files]
Source: "Logo.bmp"; DestDir: "{tmp}"; Flags: dontcopy

[code]
procedure RepaintInstall();
begin
ExtractTemporaryFile('Logo.bmp');

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
SetBounds(ScaleX(10), ScaleY(320), ScaleX(175), ScaleY(40));
Bitmap.LoadFromFile(ExpandConstant('{tmp}\Logo.bmp'));
Parent := WizardForm;
end;

procedure InitializeUninstallProgressForm1;
begin
FileCopy(ExpandConstant('{app}\WizardSmallImage.bmp'), ExpandConstant('{tmp}\WizardSmallImage.bmp'), False);
FileCopy(ExpandConstant('{app}\Logo.bmp'), ExpandConstant('{tmp}\Logo.bmp'), False);

UninstallProgressForm.Color:=Color;
UninstallProgressForm.InnerPage.Color:=Color;
UninstallProgressForm.MainPanel.Color:=Color;
UninstallProgressForm.PageNameLabel.Color:=Color;
UninstallProgressForm.PageDescriptionLabel.Hide;
UninstallProgressForm.PageNameLabel.Font.Color:=clWhite;
UninstallProgressForm.PageNameLabel.Width:=ScaleX(300);
UninstallProgressForm.StatusLabel.Color:=Color;
UninstallProgressForm.StatusLabel.Font.Color:=clWhite;

LogoImage := TBitmapImage.Create(UninstallProgressForm);
with LogoImage do
begin
SetBounds(ScaleX(10), ScaleY(320), ScaleX(175), ScaleY(40));
Bitmap.LoadFromFile(ExpandConstant('{tmp}\Logo.bmp'));
Parent := UninstallProgressForm;
end;

2) влияет ли порядок записи процедур в скрипте т.е.
читать дальше »

[code]....
....
end;
ведь процедур и циклов может быть несколько

Rikill 29-07-2011 20:37 1722504

bagrat, ну у тебя всё правильно
Цитата:

Цитата bagrat
2) влияет ли порядок записи процедур в скрипте т.е. »

не понял вопроса
Цитата:

Цитата bagrat
1)как правильно прописать к файлу Logo.bmp (мой логотип), где должен находится мой графический файл »

как у тебя прописано

Edison007 29-07-2011 20:46 1722512

Neutron
http://rghost.ru/16227671

bagrat 29-07-2011 20:51 1722515

извините за вопросы , но я новичок в этом деле

Rikill, может я не правильно прописал его? (я взял скрипт и скопировал его в инно сделал лого соответствующего размера)но вопрос как прописать по адресу7 оставить лого рядом с файлом iss

и опять повторяю вопрос может ктоне читал:
выполнил следующее установил игру ввел серийник, пропатчил, скомпилировал инно файл ***.iss, затем экпортировал ключи из реестра(regedit) импортировал их в ***.iss , запустил компилятор получил игру
в итоге при запуске репака , просит ввести серийник! как прописать путь в скрипте к серийнику?
ведь в реестре он должен где то быть? или хотя бы из текстового файла вытащить как-то


Цитата:

Цитата Rikill
Цитата bagrat:
2) влияет ли порядок записи процедур в скрипте т.е. »
не понял вопроса »

к примеру на форумах беру скрипты для разных примочек , их много, то есть начинается с коде и заканчивается енд; между началом и концом вставляем несколько процедур вот их порядок зависит в компиляции?

Rikill 29-07-2011 21:12 1722527

bagrat, зависит, но это ты и сам поймёшь постепенно, мне сложно объяснить и я до сих пор не понимаю о чём ты, ты о процедурах procedure initializewizard(); и прочих? порядок тогда не важен ибо процедуры надо совмещать, если не знаешь как, то вот мой урок.


про лого: оно запаковывается в инсталлятор, потом при его запуске лого копируется в папку Temp (там хранятся временные файлы) потом инсталлятор, чтобы было удобней из этой папки достаёт твоё лого и засовывает в инсталлятор

bagrat 29-07-2011 21:21 1722531

Цитата:

Цитата Rikill
bagrat, зависит, но это ты и сам поймёшь постепенно, мне сложно объяснить и я до сих пор не понимаю о чём ты, ты о процедурах procedure initializewizard(); и прочих? »

вот мой скрипт http://rghost.ru/16231711 проверь если я не прав отредактируй

у меня при кмпиляции именно с ***.bmp ыми файлами красные ошибки выдает

ilyhakz001 29-07-2011 22:28 1722570

Кто нибудь может подсказать прогу для работы с регистром!

bagrat 29-07-2011 22:30 1722573

ilyhakz001, Reg Organizer, TuneUp Utilities тебе в помощь

ilyhakz001 29-07-2011 22:35 1722578

Цитата:

Цитата bagrat
bagrat »

это для нахождения ключа регистра игры

Rikill 29-07-2011 22:41 1722582

регистр это форматировние текста - капс лок - простой текст, реестр это настройки винды и программ

bagrat 29-07-2011 22:41 1722583

значит открываешь пуск --выполнить---regedit---software-- ищешь папку с игрой выделяешь ---(ПКМ)экспорт и выбираешь к примеру раб стол(реестр игры твой)

Rikill 29-07-2011 22:48 1722589

bagrat, нет, если система х64 битная то иногда хрен найдёшь, в этом посте будет исправленый твой скрипт

http://rghost.ru/16247131
не, ну Андрей, это кошмар, переписал почти с нуля, кошмар, реально, прошу тебя, читай справку???

bagrat 29-07-2011 22:55 1722595

Rikill, для этого и дал ему программу ,когда-то я тоже не мог открыть, подсказали прогу и с помощью ее я выудил

ilyhakz001 29-07-2011 22:56 1722596

у меня х64, и я реально устал искать

Цитата:

Цитата bagrat
bagrat »

спасибо за прогу, теперь нашел

Rikill 29-07-2011 23:05 1722601

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
тут на х64 системе хранится большенство данных реестра.

ilyhakz001 29-07-2011 23:19 1722609

Есть еще одна прога, через неё запускаешь установку игры и она выдает ключи реестра! кто нибудь знает такую?

R.i.m.s.k.y. 29-07-2011 23:24 1722613

Цитата:

Цитата ilyhakz001
Есть еще одна прога, через неё запускаешь установку игры и она выдает ключи реестра! кто нибудь знает такую? »

RegShot

Rikill 29-07-2011 23:27 1722615

bagrat, твой скрипт наверху


спасибо за результаты

insombia 29-07-2011 23:39 1722623

Rikill это же 3D инсталл круто,картинка нормально отображается

bagrat 30-07-2011 00:02 1722628

Rikill, вылазает

может чего-то у меня нет7

Rikill 30-07-2011 00:14 1722633

bagrat, это твой скрипт, я всего лишь пофиксил ошибки, эта ошибка потому что у тебя не рестулзовская версия
качаешь это http://rghost.ru/4978694 кидаешь в папку с инно содержимое папок в архиве Inno Setup_ANSI - FullVCL запускаешь файл iscc в папке с инно, потом это кидаешь в папку с инно http://narod.ru/disk/7868304001/Inno...10319.rar.html а имеенно файлы из папки архива ANSI потом кидаешь в папку islanguages http://vadimsva.ucoz.org/Inno_Setup_E_rus.7z это из папки архива ANSi, запускаешь Compil32ex.exe под кнопкой закрытия нажми languages и выбери русский потом инструменты - настройки "ассоциировать с файлами .iss
всё!

Rikill 30-07-2011 00:41 1722639

Neutron, будь повежливей, там ничего не вижу нигде росписи никакой, не нравится категорически сборка гнома.
Цитата:

Цитата Neutron
Да, вроде нормальное отображение, только сверху и снизу, по краям, слишком много чёткости (завышена пикселизация). »

эт картинка такая, потом исправлю

bagrat 30-07-2011 12:39 1722777

выполнил следующее скачал
http://rghost.ru/4978694 назову проще *
http://narod.ru/disk/7868304001/Inno...10319.rar.html **
http://vadimsva.ucoz.org/Inno_Setup_E_rus.7z *** далее

в папку с установленной инно сетап кидаем содержимое *, C:\Program Files\Inno Setup 5\InnoSetup_ANSI\FullVCL соглашаемся на замену файлов и запускаю файл iscc в папке FullVCL

в папку с установленной инно сетап кидаю содержимое ** только из папки ANSI следующие файлы: Compil32Ex.exe, Templates.dat , ISLanguages\*.lng

Из*** копируем файлы Russian_ansi.lng, Russian_unicode.lng в папку в ISLanguages

запускаем Compil32ex.exe ,отправить ярлык Compil32ex.exe на рабочий стол

ВОT теперь будет понятно всем

LinkOFF 30-07-2011 13:55 1722802

Как сделать приоритет установки в инсталляторе(Высокий,обычный и низкий)

VinTagE 30-07-2011 13:58 1722804

LinkOFF,
Тут смотри
-----------------------------------

Или вот пример от troyan90
Скачать пример

LinkOFF 30-07-2011 18:02 1722874

Помогите пожалуйста присоеденить скрипт для размещения окна установки в правом нижнем углу экрана
вот сам скрипт http://rghost.ru/16317291

ssv14 30-07-2011 21:27 1722968

помогите плз, уже весь мозг вывернул, как из сформированного массива по маске файлов, в процедуре Recode..., удалять строку файла перед удалением самого файла?
читать дальше »


[Setup]
AppName=Recode
AppVerName=Recode
OutputDir=.
OutputBaseFilename=Recode
DefaultDirName={pf}\Recode
AppendDefaultDirName=False
DisableDirPage=True


[code]
var
Files: Array of String;
S: String;
n: Integer;

function StringToArray(Text, Cut: String): array of String;
var i, k: Integer;

begin
SetArrayLength(Result, 0);
if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк

Repeat k:=Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1);
i:=GetArrayLength(Result)-1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1);
Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
end;

procedure FindFiles(FromDir: String; Mask: String);
var FindResult: Boolean;
FSR, DSR: TFindRec;

begin
FindResult:=FindFirst(AddBackslash(FromDir)+Mask, FSR);
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;

FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR);
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+ DSR.Name, Mask);
end;
FindResult:= FindNext(DSR);
end;

FindClose(FSR);
FindClose(DSR);
end;


//-------Начало----распаковка OGG------------------------------------------------
procedure RecodeOgg;
var ResultCode: integer; CurFile: String;

begin
FindFiles(ExpandConstant('{app}\hl2\sound\'), '*.ogg'); //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|'); //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов

for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n];
StringChange(CurFile, AddBackslash(ExpandConstant('{app}\hl2\sound\')), '');
Exec(ExpandConstant('{app}\hl2\sound\oggdec.exe'), '-Q '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode); //Для каждого файла запускаем декодер
DeleteFile(Files[n]); //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;

DeleteFile(ExpandConstant('{app}\hl2\sound\oggdec.exe'));
end;
//-------Конец----распаковка OGG------------------------------------------------



//-------Начало----распаковка WV ------------------------------------------------
procedure RecodeWV;
var ResultCode: integer; CurFile: String;

begin
FindFiles(ExpandConstant('{app}\hl2\sound\'), '*.wv'); //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|'); //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов

for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n];
StringChange(CurFile, AddBackslash(ExpandConstant('{app}\hl2\sound\')), '');
Exec(ExpandConstant('{app}\hl2\sound\wvunpack.exe'), '-t -q -y '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode); //Для каждого файла запускаем декодер
DeleteFile(Files[n]); //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;

DeleteFile(ExpandConstant('{app}\hl2\sound\wvunpack.exe'))
end;
//-------Конец----распаковка WV ------------------------------------------------



procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.ProgressGauge.Position := 0;
WizardForm.StatusLabel.Caption := 'Decompressing audio files, please wait...';
RecodeOgg;
WizardForm.ProgressGauge.Position := 0;
WizardForm.StatusLabel.Caption := 'Decompressing audio files, please wait...';
RecodeWV;
end;
end;


ilyhakz001 30-07-2011 22:39 1723003

Можете помочь, когда устанавливаю выдает ошибку: не чего не найденно для if not IS7ZipExtract вот скрипт
И еще установка идет до 300%! Как это исправить?

insombia 30-07-2011 22:45 1723006

ilyhakz001 это значит что неуказано файла 7-zip который должен распаковываться в скрипте

ilyhakz001 30-07-2011 23:29 1723029

Цитата:

Цитата insombia
insombia »

я все указывал

Rikill 30-07-2011 23:41 1723039

ilyhakz001, а инно говорит об обратном


имеется собственный прогресс бар, на него накладывается текстура, как сделать чтобы проценты ISDone были поверх прогресс бара??


Есть идея собрать эквалайзер на bass.dll, не очень получается, пока нарыл инфу на дельфи, но дельфи яя не знаю как в инно перенести, вот код:
Код:

var
 FileStream: HSTREAM; // handle воспроизводящегося потока
 FX: HFX; // handle добавляемого эффекта
procedure TForm1.TrackBar1Change(Sender: TObject);
var
 PE: BASS_DX8_PARAMEQ;
begin
 BASS_ChannelRemoveFX(FileStream, FX); // чтобы убрать предыдущую настройку
 FX := FBASS_ChannelSetFX(FileStream, BASS_FX_DX8_PARAMEQ, 1);
 PE.fCenter := 80; // частота регулируемой полосы (в герцах, от 80 до 16000)
 PE.fGain := TrackBar1.Position; // задаваемое значение (от -15 до 15)
 BASS_FXSetParameters(FX, @PE);
end;

буду благодарен за помощ.

Shegorat 31-07-2011 08:30 1723095

Rikill
:lamer: Ты бы хоть иногда в справку заглядывал. В данном случае в справку, идущую с bass.dll.
читать дальше »

Код:

[Setup]
AppName=MyApp
AppVername=MyApp
DefaultDirname={pf}\MyApp

[ code]
type
  HSTREAM = DWORD;
  HFX = DWORD;
  BASS_DX8_PARAMEQ = record
    fCenter: single;
    fBandwidth: single;
    fGain: single;
  end;

const
  BASS_FX_DX8_PARAMEQ    = 7;
 
function BASS_ChannelSetFX(handle, type_: DWORD; priority: LongInt): HFX; external 'BASS_ChannelSetFX@files:bassdll.dll stdcall';
function BASS_ChannelRemoveFX(handle: DWORD; fx: HFX): BOOL; external 'BASS_ChannelRemoveFX@files:bassdll.dll stdcall';
function BASS_FXSetParameters(handle: HFX; par: BASS_DX8_PARAMEQ): BOOL; external 'BASS_FXSetParameters@files:bassdll.dll stdcall';
function BASS_FXGetParameters(handle: HFX; var par: BASS_DX8_PARAMEQ): BOOL; external 'BASS_FXGetParameters@files:bassdll.dll stdcall';
function BASS_FXReset(handle: HFX): BOOL; external 'BASS_FXReset@files:bassdll.dll stdcall';

var
 FileStream: HSTREAM; // handle воспроизводящегося потока
 FX: HFX; // handle добавляемого эффекта
 TrackBar1: TTrackBar;
 
procedure TrackBar1Change(Sender: TObject);
var
 PE: BASS_DX8_PARAMEQ;
begin
 BASS_ChannelRemoveFX(FileStream, FX); // чтобы убрать предыдущую настройку
 FX := BASS_ChannelSetFX(FileStream, BASS_FX_DX8_PARAMEQ, 1);
 PE.fCenter := 80; // частота регулируемой полосы (в герцах, от 80 до 16000)
 PE.fGain := TrackBar1.Position; // задаваемое значение (от -15 до 15)
 BASS_FXSetParameters(FX, PE);
end;


Как-то так. Но у функций BASS_FXGetParameters, BASS_FXSetParameters, вторым параметром стоит Pointer, т.е. указатель на область памяти содержащей структуру, а не сама структура, так что хз как будет работать.

ilyhakz001 31-07-2011 11:12 1723132

Ну тогда хотябы как убрать 300%

vint56 31-07-2011 11:17 1723136

ilyhakz001, ты читал справку по isdone
читать дальше »

Описание режимов работы библиотеки


Для осуществения работоспособности библиотеки существует 2 вида определения процентных соотношений между операциями на всем прогрессбаре:

Автоматическая расстановка процентных соотношений в операциях.
При автоматической расстановке необходим тестовый проход для определения времени выполнения каждой операции относительно других.
Для включения данного режима необходимо заполнить вторые значения всех функций извлечения архивов нулями.
Краткая инструкция:
а) первым делом убедитесь, что в начале скрипта закомментирована строка

#define records
(т.е. необходимо поставить точку с запятой в начале этой строки);
б) компилим проект и запускаем на установку. Это и будет нашим тестовым проходом. Все операции должны дойти до конца и завершиться удачно. Прогрессбар будет зашкаливать и все компоненты будут извлечены вне зависимости от того выбраны они, или нет. Все так и должно быть!
в) после тестового прогона в указанной папке создастся файл records.inf (имя и путь назначается в процедуре инициализации. О ней см. "подробное описание функций" ниже), его необходимо добавить в проект, раскомметировав, или добавив в начале скрипта строку:

#define records

Так же стоит отметить, что если сам скрипт находится в папке отличной от той, в которую компилится проект (например в скрипте NFS:Undercover откомпиленный файл сохраняется в Output\setup.exe), то records.inf создастся в папке с setup.exe и его необходимо будет перенести непосредственно к скрипту, или же подправить в секции [Files] его истинное расположение, например:

#ifdef records
Source: Output\records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
г) снова откомпилить проект.
После этого инсталлер готов к работе.
При запуске процесс выполнения операций будет равномерно и корректно отображаться на прогрессбаре.




Ручная расстановка процентов на каждую операцию.
При ручной расстановке если в проекте множество операций, все расчеты необходимо производить вручную. Т.е. сумма процентов всех выполненных операций должна равняться 100%, иначе корректного отображения на прогрессбаре не будет.
Для включения данного режима необходимо заполнить вторые значения всех функций извлечения архивов значениями процентов, отличными от 0 (числа могут быть дробными).
При групповой распаковке архивов по маске (типа *.pcf) для операции задается общий процент на все распаковываемые файлы данной командой, а уж каждый из найденных файлов будет разбивать указанный кусок прогрессбара еще на части пропорциональные размерам файлов. Например строка:

if not ISArcExtract (0, 100, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), false, '', '', '') then break;
...
распакует все *.arc архивы из {src} в {app}, при чем весь прогрессбар будет поделен на кусочки пропрорциональные размерам архивов. В общем тут все так же как в скрипте распаковки FreeArc.iss и ему подобным. Таким образом при распаковке нескольких архивов одного типа проще пользоваться ручной расстановкой, т.к. отличие расперделения процентов от автоматической будет совсем небольшим, но за то не требуется тестовый проход.
Вот некоторые правила, которые неоходимо выполнять при ручной расстановке:
а) сумма процентов учитывая ветвления (использование компонентов, условий) в скрипте должна составлять 100;
б) у компонентов, для которых возможен выбор только одного из нескольких, должны быть одинаковые значения процентов;
в) НЕЛЬЗЯ использовать компоненты, которые можно выбирать одновременно с другими в одной группе (например несколько рядом стоящих компонент без флага exclusive), потому что сумма процентов при различном выборе пользователя может отличаться от 100.



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

insombia 31-07-2011 13:32 1723209

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

Rikill 31-07-2011 14:13 1723250

Shegorat, не создаётся

Bit of perfect 31-07-2011 14:14 1723254

помогите пожалуйста!
Как сделать проверку сист требований?

insombia 31-07-2011 14:19 1723261

Bit of perfect http://forum.ru-board.com/topic.cgi?...&limit=1&m=6#1

Bit of perfect 31-07-2011 14:27 1723269

insombia,
Спс
Я его вставил в скрипт
все комилится без ошибок
но
в установке ничего не почему то((

R.i.m.s.k.y. 31-07-2011 14:41 1723276

Цитата:

Цитата insombia
Как сделать чтобы установку нельзя было продолжить пока не выберется компонент? »

Код:

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:= True;
if WizardSelectedComponents(False) = '' then
begin
//MsgBox('Ни один из компонентов не выбран!', mbInformation, MB_OK);
Result:= False;
end;
end;


LinkOFF 31-07-2011 14:54 1723280

Доброго времени суток.Как мне сделать так чтоб во время установки выплыло сообщение "Вставьте диск 2, содержащий файл Data2.bin и дождитесь его инициализации" вместо обычного окна с выбором папки со 2-ым диском.Скрипт Isdone
И как отключить кнопку "Отмена" в процессе установки?

Bit of perfect 31-07-2011 15:17 1723296

Цитата:

Цитата Bit of perfect
Спс
Я его вставил в скрипт
все комилится без ошибок
но
в установке ничего не почему то(( »


R.i.m.s.k.y. 31-07-2011 15:46 1723309

Цитата:

Цитата LinkOFF
как отключить кнопку "Отмена" в процессе установки »

Код:

[Setup]
AllowCancelDuringInstall=false

по первому вопросу
Код:

Открываем нужный языковой файл в формате .isl* и находим там интересующий нас текст, перед текстом будет переменная, которая и отвечает за отображаемый текст. Заносим эту переменную в свой скрипт в секцию [Messages]. В итоге попробуй: 
[Messages] 
SelectDiskLabel2=Твой текст

* - этот файл находится в папке установки инно\Languages\


ilyhakz001 31-07-2011 15:50 1723311

Как прописать в скрипте чтобы дерекст устанавливался, а не обнавлялся!!
Цитата:

Цитата ilyhakz001
ilyhakz001 »

Извеняюсь уже нашел!!!!!

insombia 31-07-2011 16:29 1723335

R.i.m.s.k.y. блин одно даже до выбора папки куда установить не пускает

Rikill 31-07-2011 17:44 1723387

VASYAKRN, ты и тут срать будешь?! хватит уже!

No4noylis 31-07-2011 18:26 1723412

insombia, попробуй это условие if WizardSelectedComponents(False) = '' then заменить на это
if (CurPageID = wpSelectComponents) and WizardSelectedComponents(False) = '' then

VASYAKRN 31-07-2011 19:19 1723452

скачать

VASYAKRN 31-07-2011 21:45 1723549



как в isdone 0.6 на кнопку "отмена" нанести изображение

єсли можна сделайте ето в етом скрипте
Скрипт
архив

Rikill 31-07-2011 22:19 1723580

VASYAKRN, так же как и остальные кнопки текстурировал, кнопка отмены в исдоне называется "MyCancelButton"

VASYAKRN 31-07-2011 22:49 1723599

Rikill ти не мог би сделать ето в етом скрипте
http://www.oszone.net/go.php?url=htt...ISDone_0.6.iss

VinTagE 31-07-2011 23:18 1723621

VASYAKRN,
Вот держи

VASYAKRN 31-07-2011 23:50 1723629

VinTagE
Спасибо работает!!!!!!

пожалста прикрутите к етому скрипту текстурирувание кнопки http://inno.at.ua/12.7z

Gugle 01-08-2011 10:58 1723767

Доброго времени суток!
Сделал страничку с combobox:
читать дальше »
Код:

PageLevel := CreateCustomPage(wpWelcome, 'Уровень сложности', 'Выберите уровень сложности установки');
  ComboBoxLevel := TNewComboBox.Create(PageLevel);
  ComboBoxLevel.Width := PageLevel.SurfaceWidth;
  ComboBoxLevel.Parent := PageLevel.Surface;
  ComboBoxLevel.Style := csDropDownList;
  ComboBoxLevel.Items.Add('Стандарт');
  ComboBoxLevel.Items.Add('Эксперт');
  ComboBoxLevel.ItemIndex := 0;



Хочу, что бы при выборе "Стандарт" появлялось одно окно, а при выборе "Эксперт" другое окно. Как понял из help надо делать "пропусками отображения окон" (Если правильно понял) используя следующую функцию

читать дальше »
Код:

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID = PageTest_0.ID) and ({значение combobox} == 0) then
    Result := True
  else if (PageID = PageTest_1.ID) and ({значение combobox} == 1) then
    Result := True
  else
    Result := False;
end;



, но как выудить значение из Combobox нигде не нашел.
Подскажите правильно ли я выбрал функцию для отображения разных вариантов развития событий и как можно вытащить выбранное значение в comboBox?

Как вытащить данные из comboBox нашел.
Остался вопрос с правильностью подхода к различным вариантам развития событий.

No4noylis 01-08-2011 12:31 1723844

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

Дело в том что когда ты добавил панель, ты скрыл OuterNotebook и InnerNotebook на которых находились все компоненты всех страниц. Ты можешь вернуть все это удалив из скрипта OuterNotebook.Hide, InnerNotebook.Hide, Bevel.Hide, но тогда не будет видна панель т.к. она на WizardForm, и тебе нужно будет создавать ее на каждой странице указывая для лейбов parent:=WizardForm.*****Page. Или ты можешь вернуть все стандартные компоненты указав для них parent:=WizardForm, а затем в процедуру CurPageChanged добавить процедуры HideComponents, и ShowComponents. в HideComponents ты специально скрываешь все лейбы которые установил на WizardForm, а затем в процедуре ShowComponents ты снова вернешь их для каждой страници. Именно так сделали в скрипте NFS Undercover, который в шапке.

No4noylis 01-08-2011 13:46 1723903

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

На самом деле можно не писать:
Код:

WizardForm.InnerNotebook.Show;
WizardForm.OuterNotebook.Show;

А достаточно удалить:
Код:

WizardForm.InnerNotebook.Hide;
WizardForm.OuterNotebook.Hide;

Просто по умалчиванию InnerNotebook и OuterNotebook УЖЕ включены и писать для них .Show не нужно, просто убери их скрытие .Hide
А вот небольшие примеры:)
у тебя создана панель:
Код:

procedure CreateStatusPanel;
begin
  Welcome := TLabel.Create(WizardForm);
  with Welcome do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(100), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Welcome}');
    Parent := WizardForm;
  end;

  Catalogue := TLabel.Create(WizardForm);
  with Catalogue do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(130), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Catalogue}');
    Parent := WizardForm;
  end;

  StartMenu := TLabel.Create(WizardForm);
  with StartMenu do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(160), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:StartMenu}');
    Parent := WizardForm;
  end;

  Tasks := TLabel.Create(WizardForm);
  with Tasks do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(190), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Task}');
    Parent := WizardForm;
  end;

  Installing := TLabel.Create(WizardForm);
  with Installing do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(220), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Installing}');
    Parent := WizardForm;
  end;

  Finish := TLabel.Create(WizardForm);
  with Finish do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(250), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Finish}');
    Parent := WizardForm;
  end;
end;

Для нее указано расположение Parent := WizardForm, НО сверху WizardForm у тебя есть InnerNotebook и OuterNotebook со всеми стандартными надписями поэтому панели не видно. Чтобы панель была видно у тебя в скрипте добавлено
Код:

WizardForm.InnerNotebook.Hide;
WizardForm.OuterNotebook.Hide;

Чтоб вернуть стандартные надписи можно:
1). InnerNotebook и OuterNotebook скрыты и стандартных надписей не видно. Тут можно сделать так:
удалить
Код:

WizardForm.InnerNotebook.Hide;
WizardForm.OuterNotebook.Hide;

А потом чтоб была видна панель сделать нужно все ее лейбы перенести на каждую страницу (Parent := WizardForm.WelcomePage; Parent := WizardForm.SelectDirPage; и так далее)
Вот пример для первых двух страниц:
Код:

////////////////// welcomepage ///////////////////////////////////
procedure CreateStatusPanel;
begin
  Welcome := TLabel.Create(WizardForm);
  with Welcome do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(100), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Welcome}');
    Parent := WizardForm.welcomepage;
  end;

  Catalogue := TLabel.Create(WizardForm);
  with Catalogue do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(130), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Catalogue}');
    Parent := WizardForm.welcomepage;
  end;

  StartMenu := TLabel.Create(WizardForm);
  with StartMenu do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(160), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:StartMenu}');
    Parent := WizardForm.welcomepage;
  end;

  Tasks := TLabel.Create(WizardForm);
  with Tasks do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(190), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Task}');
    Parent := WizardForm.welcomepage;
  end;

  Installing := TLabel.Create(WizardForm);
  with Installing do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(220), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Installing}');
    Parent := WizardForm.welcomepage;
  end;

  Finish := TLabel.Create(WizardForm);
  with Finish do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(250), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Finish}');
    Parent := WizardForm.welcomepage;
  end;

///////////////////// welcome page /////////////////////////////////

/////////////////// selectdirpage /////////////////////////////////////
 
  Welcome := TLabel.Create(WizardForm);
  with Welcome do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(100), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Welcome}');
    Parent := WizardForm.selectdirpage ;
  end;

  Catalogue := TLabel.Create(WizardForm);
  with Catalogue do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(130), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Catalogue}');
    Parent := WizardForm.selectdirpage ;
  end;

  StartMenu := TLabel.Create(WizardForm);
  with StartMenu do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(160), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:StartMenu}');
    Parent := WizardForm.selectdirpage ;
  end;

  Tasks := TLabel.Create(WizardForm);
  with Tasks do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(190), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Task}');
    Parent := WizardForm.selectdirpage ;
  end;

  Installing := TLabel.Create(WizardForm);
  with Installing do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(220), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Installing}');
    Parent := WizardForm.selectdirpage ;
  end;

  Finish := TLabel.Create(WizardForm);
  with Finish do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(250), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Finish}');
    Parent := WizardForm.selectdirpage ;
  end;
end;
/////////////////// selectdiepage //////////////////////////////////

Как видишь сильно увеличиваеться размер кода, но так проще (Соответственно для каждой страници нужному лейбу делаешь нужный цвет).
2. А можно сделать по другому (Я так делаю):
оставляешь:
Код:

WizardForm.InnerNotebook.Hide;
WizardForm.OuterNotebook.Hide;

А потом для всех стандартных надписей пишешь
Код:

with WizardForm do begin
WizardForm.WelcomeLabel1.Parent:=WizardForm;
WizardForm.WelcomeLabel2.Parent:=WizardForm;
WizardForm.SelectDirLabel.Parent:=WizardForm;
******
end;

ну и так дальше. Теперь они ВСЕ ВСМЕСТЕ будут у тебя на ВСЕХ страницах.
Чтоб это исправить мы сначала их скрываем:
Код:

procedure HideCocmponents:
WizardForm.WelcomeLabel1:=Hide;
WizardForm.WelcomeLabel2:=Hide;
WizardForm.SelectDirLabel:=Hide;
********

а потом для КАЖДОЙ страници возобноволяем:
Код:

procedure ShowComponents(CurPageID: Integer);
begin
 case CurPageID of
    wpWelcome:
    begin
      WizardForm.WelcomeLabel1:=Show;
      WizardForm.WelcomeLabel2:=Show;
    end;

    wpSelectDir:
    begin
    WizardForm.SelectDirLabel:=Show;
    end;
end;
end;

...ну и так далее, я думаю смысл понятен.
И наконец мы добавляем наши процедуры в CurPageChanged:
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
 HideComponents;
 ShowComponents(CurPageID);
end;


MrLOLs 01-08-2011 14:11 1723915

Кто-нибудь знает как ярлыку или exe файлу в Windows 7 поставить атрибут "Выполнять эту программу от имени администратора".


Решение:
[Registry]
Root: HKCU; SubKey: Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers; ValueType: string; ValueName: {app}\Compil32Ex.exe; ValueData: RUNASADMIN; Flags: uninsdeletevalue uninsdeletekeyifempty

No4noylis 01-08-2011 17:08 1724007

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

Да, для нужна InitializeWizard:
Код:

procedure InitializeWizard:
begin
with WizardForm do begin
WizardForm.WelcomeLabel1.Parent:=WizardForm;
WizardForm.WelcomeLabel2.Parent:=WizardForm;
WizardForm.SelectDirLabel.Parent:=WizardForm;
******
end;
end;

А процедуры HideCocmponents и ShowComponents просто добавляются в код, и прописываются в процедуре CurPageChanged (на всякий случай поясняю, для них НЕ нужна InitializeWizard, они пишутся в коде добавляються в CurPageChanged)
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
 HideComponents;
 ShowComponents(CurPageID);
end;


Rikill 01-08-2011 17:09 1724008

Neutron,
ваще так надо:
Код:

var
welcomelabel1, welcomelabel2: tlabel;
procedure InitializeWizard();
 WelcomeLabel1:= TLabel.Create(WizardForm);
  with WelcomeLabel1 do begin
    AutoSize:=False;
    SetBounds(ScaleX(100), ScaleY(85), ScaleX(350), ScaleY(45));
    WordWrap:=True;
    Alignment := taCenter;
    Transparent:=True;
    Font.Name:='arial';
    Font.Size:= 11;
    Font.Color:=$FFFFFF;
    Caption:='дарова васяня!!';
    Parent:=WizardForm;
  end;

  WelcomeLabel2:=TLabel.Create(WizardForm);
  with WelcomeLabel2 do begin
    AutoSize:=False;
    SetBounds(ScaleX(100), ScaleY(140), ScaleX(344), ScaleY(40));
    WordWrap:=True;
    Alignment := taCenter;
    Transparent:=True;
    Font.Name:=fontname;
    Font.Size:= 11;
    Font.Color:=$FFFFFF;
    Caption:= 'закрой все приложение не будь лохом!';
    Parent:=WizardForm;
  end;
procedure CurPageChanged(CurPageID: Integer);
begin
welcomelabel1.hide;
welcomelabel2.hide;
  case CurPageID of
    wpWelcome: begin
      WelcomeLabel1.Show;
      WelcomeLabel2.Show;
end;
end;
end;


No4noylis 01-08-2011 17:15 1724014

Rikill, Можно впринцепе и так, но зачем эти лейбы заново создавать если они уже есть?Просто меняешь Parent как я написал и все:)

VASYAKRN 01-08-2011 17:15 1724016

пожалста добавте к моему скрипту ботву и одно изображение для примера в скрипт http://inno.at.ua/12.7z

insombia 01-08-2011 18:46 1724071

Как сделать чтобы возле создания значков и установки припустим дирекста были три линии просто забыл как оно называется правильно

LinkOFF 01-08-2011 19:45 1724119

Если вот эти линии http://i26.fastpic.ru/big/2011/0801/...445d89b13f.jpg
то вот так


[Setup]
ShowTasksTreeLines=true

И у меня вопрос
Как мне добавить проверку памяти на винчестере

Rikill 01-08-2011 21:00 1724170

VASYAKRN, флудить харэ

nik1967 01-08-2011 21:11 1724180

LinkOFF, может быть места? Если да, то как то так:
Скока надо места
Код:

#define NeedSize                        "400427"
#define TotalNeedSize                  "500427"

[Setup]
AppName=NeedSize
AppVerName=TotalNeedSize
DefaultDirName={pf}\NeedSize
DefaultGroupName=NeedSize

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

[_Code]
//******************************************* [ начало Место для установки ] ***************************************************//

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;

var
FreeMB, TotalMB: Cardinal;
NeedSize, TotalNeedSize:Integer; TotalNeedSpaceLabel,NeedSpaceLabel,FreeSpaceLabel: TLabel;

Function MbOrTb(Byte: Extended): String;
begin
if Byte < 1024 then Result:= NumToStr(Byte) + ' Мб' else
  if Byte/1024 < 1024 then Result:= NumToStr(round(Byte/1024*100)/100) + ' Гб' else
    Result:= NumToStr(round((Byte/(1024*1024))*100)/100) + ' Тб';
end;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
NeedSpaceLabel.Caption := 'Игра займет на диске: '+ MbOrTb(NeedSize);
TotalNeedSpaceLabel.Caption := 'Для распаковки требуется: '+ MbOrTb(TotalNeedSize);
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ MbOrTb(FreeMB);
WizardForm.NextButton.Enabled:= (FreeMB>TotalNeedSize);
WizardForm.NextButton.Enabled:= (FreeMB>NeedSize);
if (FreeMB<TotalNeedSize) then
  FreeSpaceLabel.Font.Color:=clRed else
  FreeSpaceLabel.Font.Color:=WizardForm.Font.Color;
if (FreeMB<NeedSize) then
  FreeSpaceLabel.Font.Color:=clRed else
  FreeSpaceLabel.Font.Color:=WizardForm.Font.Color;
end;

procedure InitializeWizard();
begin
NeedSize := {#NeedSize};
TotalNeedSize := {#TotalNeedSize};

WizardForm.DiskSpaceLabel.Hide;

TotalNeedSpaceLabel := TLabel.Create(WizardForm);
TotalNeedSpaceLabel.Parent := WizardForm.SelectDirPage;
TotalNeedSpaceLabel.SetBounds(ScaleX(5), ScaleY(200), ScaleX(209), ScaleY(13));

FreeSpaceLabel := TLabel.Create(WizardForm);
FreeSpaceLabel.Parent := WizardForm.SelectDirPage;
FreeSpaceLabel.SetBounds(ScaleX(5), ScaleY(180), ScaleX(209), ScaleY(13));

NeedSpaceLabel := TLabel.Create(WizardForm);
NeedSpaceLabel.Parent := WizardForm.SelectDirPage;
NeedSpaceLabel.SetBounds(ScaleX(5), ScaleY(220), ScaleX(209), ScaleY(13));

WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
end;

//******************************************* [ конец Место для установки ] ***************************************************//

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectDir then GetFreeSpaceCaption(nil);
end;


insombia 01-08-2011 23:32 1724240

Как сделать чтобы когда запускаешь игру то игра запускалась сразу с высоким приоритетом?Код какой то или что?
P.S.Видел такое в репаке assassin's creed brotherhood от механиков

murlakatamenka 01-08-2011 23:49 1724250

insombia, недавно кто-то выкладывал скрипт SetPriorityClass.iss
читать дальше »
Код:

#define GameName "name"

[setup]
AppName={#GameName}
AppVersion=1.0
DefaultDirName={pf}\{#GameName}

[_code]

const
  NORMAL_PRIORITY_CLASS          = $00000020;
  IDLE_PRIORITY_CLASS            = $00000040;
  HIGH_PRIORITY_CLASS            = $00000080;
  REALTIME_PRIORITY_CLASS        = $00000100;

function SetPriorityClass(hProcess: THandle; dwPriorityClass: DWORD): BOOL;
  external 'SetPriorityClass@kernel32';

function GetCurrentProcess: THandle;
  external 'GetCurrentProcess@kernel32';

procedure InitializeWizard();
begin
  SetPriorityClass(GetCurrentProcess, IDLE_PRIORITY_CLASS);    //установка приоритета для инсталлятора.
end;


или вот скачать с rghost

Rikill 02-08-2011 01:01 1724269

insombia, а не мог бы ты объяснить какая разница от этих приоритетов?

insombia 02-08-2011 10:47 1724415

Rikill если запустить игру с высоким приоритетом она лучше идет меньше виснет

R.i.m.s.k.y. 02-08-2011 11:02 1724423

Цитата:

Цитата insombia
если запустить игру с высоким приоритетом она лучше идет меньше виснет »

спорное утверждение, наоборот если игруха будет иметь слишком высокий приоритет то системным и прочим процессам будет меньше ресурсов, а ведь мы не в ДОСе живем, игрухи зависят от системных процессов, ресурсы которых игруха с повышенным приоритетом и отожрет

винды давно уже различают запуск полноэкранного приложения и переключают на него что можно дать "здесь и сейчас"
единственно что может пригодится - Set CPU Affinity для старых прог, не держащих многоядренность, тогда эта утилитка пригвоздит процесс к заданному ядру, да и то толку от нее только в ХР, виста и семерка это уже умеют делать сами.

Raf-9600 02-08-2011 12:44 1724486

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

Т.е. если к примеру так указать:
Код:

Source: d2speech.mpq; DestDir: {app}; Components: Voice\English Text\Russian
То файл установиться если выбран хотябы какой-то один из перечисленных компонентов, а мне нужно чтоб он устанавливался только если выбраны оба.

R.i.m.s.k.y. 02-08-2011 13:04 1724503

Raf-9600, Components: Voice\English and Text\Russian

insombia 02-08-2011 13:55 1724538

А как лучше всего сжимать игру через инно указывая просто папку с игрой или все файлы игры?Просто когда то распаковал установку лицензии alice madness returns то там все файлы игры были а не просто папка с игрой,игра сама занимала до 10 гб а инсталятор 6 с лишним

R.i.m.s.k.y. 02-08-2011 14:47 1724575

Цитата:

Цитата insombia
А как лучше всего сжимать игру через инно указывая просто папку с игрой или все файлы игры »

сли нету скрытых или системных файлов внутри, то изомонопенисcуально :), можно указать одну папку и флаги recurseallsubdirs createallsubdirs
только учти, что если укажешь одну папку и поставишь в этой же строчке After/before install, то процедура под After/before install будет отрабатывать НАД КАЖДЫМ файлом в папке, что сильно замедлит установку при большом кол-ве мелких файлов
при указании папки целиком скрытые и системные подпапки/файлы пропускаются, если их нужно добавить - добавляй каждый поотдельности

LinkOFF 02-08-2011 16:48 1724642

Подскажите как мне сделать чтоб при установке проценты были полными.Например не 16.4% а просто 16% и так далее (17%,18%...)

LinkOFF 02-08-2011 18:23 1724703

Цитата:

Цитата Neutron
Это не оно? »

Сам не знаю.Вроде оно

saha1010 02-08-2011 18:35 1724709

Помогите сделать скрипт который будет только записывать 2 значения в реестр которые при установке должен будет ввести сам пользователь.

Например сюда
HKEY_LOCAL_MACHINE\SOFTWARE\ supesGame \\ name REG_SZ ...
HKEY_LOCAL_MACHINE\SOFTWARE\ supesGame \\Key REG_SZ ....

R.i.m.s.k.y. 02-08-2011 18:41 1724712

Цитата:

Цитата saha1010
Помогите сделать скрипт который будет только записывать 2 значения в реестр которые при установке должен будет ввести сам пользователь. »

на визуалбейсике это и то проще будет

Rikill 02-08-2011 22:03 1724806

Я так и не понял как сделать эквалайзер, буду благодарен за помощ.

salat 02-08-2011 22:24 1724811

Хелоу комрады!
Подскажите такую вещь.
Какую нужно использоавть константу что бы установщик распаковывал файлы из корневой директории?
Поясню.

ISO образ
|
Папка Redist--Directx,VC_redist и тд и тп
|
Папка Install--Здесь находится Setup.exe и авторан.
|
Data.bin
Data2.bin
Data3.bin

Вот нужно чтобы setup.exe распаковывал архивы которые лежат в предыдущей директории.
Как это можно реализовать?
Заранее спасибо.

Rikill 02-08-2011 22:38 1724815

рядом с инсталлером {src} в папке с игрой {app} во временной папке {tmp} есть другое, но оно реже используется, я например делаю так:

ISO образ
папка Archives => архивы
папка Support => DX и пр софт
Setup.exe

salat 02-08-2011 22:57 1724826

Rikill,
Нифига.
Мне нужно именно чтобы Setup был в папке. А архивы в предыдущем каталоге.
И src не прокатывает.
там толи {int} то ли как то так было. не помню.

Rikill 02-08-2011 23:17 1724832

salat, справка говорит, что такого нет.

salat 02-08-2011 23:29 1724842

Rikill, ну вот и я о том же. я видел у кого то в репаке. не помню.
там arc архивы были врямо в ехе-шнике и распаковывались без копирования.

Rikill 02-08-2011 23:41 1724855

salat, так бы сразу и сказал, так надо:
[files]
Source: архив.arc; destdir: {tmp}; Flags: dontcopy

архив запаковывается в exe либо в Setup-1.bin, при запуске инсталлера файл копируется в папку temp оттуда доставай его анпакером типо isdone

saha1010 03-08-2011 00:21 1724870

Цитата:

Цитата R.i.m.s.k.y.
Цитата saha1010:
Помогите сделать скрипт который будет только записывать 2 значения в реестр которые при установке должен будет ввести сам пользователь. »
на визуалбейсике это и то проще будет »

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

Rikill 03-08-2011 01:40 1724898

Neutron, не "надено", а "найдено"
var
res : integer;
filepath: String;

begin

...

R.i.m.s.k.y. 03-08-2011 08:05 1724966

Цитата:

Цитата Neutron
Работает, но не выводит сообщение: Найдено подключение к интернету. Установка будет прекращена!
Тепрь чего ему надо? »

а ты выведи res, помоему если пинг возвращает 1 - то все хорошо
Код:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
AllowNoIcons=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Icons]
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}

[ code]
Function InitializeSetup: Boolean;
var
res : integer;
filepath: String;
begin
Exec('ping.exe ', ' 2ip.ru ', ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilTerminated, res);
MsgBox('Res = '+ IntToStr(res), mbInformation, MB_OK);
if res > 0 then
begin
MsgBox('Найдено подключение к интернету. Установка будет прекращена'+Filepath, mbInformation, MB_OK);
Result := False;
end;
end;


insombia 03-08-2011 16:03 1725289

Помогите в скрипте сделать нормальный деинсталятор а то когда удаляеш игру то ошибку кидает и игру приходиться удалять только папкой http://rghost.ru/16757851

vint56 03-08-2011 16:12 1725296

insombia, http://rghost.ru/16758961

bagrat 03-08-2011 16:31 1725315

insombia, перед тем как начать делать рип удали в корзину файлы из игры unins000.__
их обычно 2 , а потом компилируй

insombia 03-08-2011 17:13 1725366

vint56 большое спасибо выручил

insombia 03-08-2011 17:44 1725396

почему после распаковки фриарков в IsExec автоматически идет деинсталяция?

R.i.m.s.k.y. 03-08-2011 21:20 1725497

Neutron, хм, пынг вертает нуль при когда нет связи и когда есть октлик, может использовать не пинг?
подбери отсюда что-нить http://www.nirsoft.net/network_tools.html

insombia 03-08-2011 22:34 1725527

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

ProfLooder 03-08-2011 23:02 1725542

Цитата:

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

На руборде вроде было.
А вапще вот
Код:

[Файлс]
Source: compiler:InnoCallBack.dll; DestDir: {tmp};
Source: progress.bmp; DestDir: {tmp}
Source: {win}Help; DestDir: {app}; Flags: external

[Код]
type
  TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
  TPBInfo = record ProgressBarName: TNewProgressBar ; ImageHeight, LastWidth, MaxWidth: Integer; end;

var
ProgressBarEdit: array of TEdit;
ProgressBarImage: array of TBitmapImage;
PBBuff: array of TPBInfo;
ProgressTimer: Longword; PBCount: Integer;

function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

procedure TextureProgressBar(ProgressBar:TNewProgressBar);
var n: Integer;
begin
n:= PBCount; SetArrayLength(ProgressBarEdit, n+1); SetArrayLength(ProgressBarImage, n+1)
SetArrayLength(PBBuff, n+1);

ProgressBarEdit[n]:= TEdit.Create(WizardForm)
ProgressBarEdit[n].SetBounds(ProgressBar.Left, ProgressBar.Top, ProgressBar.Width, ProgressBar.Height);
ProgressBarEdit[n].Enabled:= False;
ProgressBarEdit[n].Parent:= ProgressBar.Parent;
ProgressBarEdit[n].Visible:= ProgressBar.Visible;

PBBuff[n].LastWidth:= ProgressBar.Position;
PBBuff[n].ImageHeight:= ProgressBarEdit[n].Height - ScaleY(2);
PBBuff[n].ProgressBarName:= ProgressBar ;
PBBuff[n].MaxWidth:= ScaleX(ProgressBar.Width);

ProgressbarImage[n]:= TBitmapImage.Create(WizardForm);
ProgressbarImage[n].Stretch:= True;
ProgressbarImage[n].Parent:= ProgressBarEdit[n];
ProgressbarImage[n].SetBounds(ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0))
ProgressbarImage[n].Bitmap.LoadFromFile(ExpandConstant('{tmp}progress.bmp'));

ProgressBar.Width:= ScaleX(0); ProgressBar.Height:= ScaleY(0);

PBCount:= PBCount+1
end;

procedure HideAllTexturedPB();
var n: integer;
begin
for n:=0 to PBCount-1 do begin ProgressBarEdit[n].Hide; ProgressBarImage[n].Hide; end;
end;

procedure UpdateAllTexturedPB();
var n: integer;
begin
for n:=0 to PBCount-1 do begin
ProgressBarEdit[n].Visible:= PBBuff[n]. ProgressBarName.Visible;
ProgressBarImage[n].Visible:= PBBuff[n].ProgressBarName.Visible; end;
end;

procedure UpdatePB(HandleW, msg, idEvent, TimeSys: LongWord);
var f: integer; CurWidth: single;
begin
for f:=0 to PBCount-1 do begin
UpdateAllTexturedPB
with PBBuff[f].ProgressB arName do begin
  CurWidth := (Position*PBBuff[f].MaxWidth)/Max;
  if PBBuff[f].LastWidth <> Round(CurWidth) then begin
    PBBuff[f].LastWidth:= Round(CurWidth);
    ProgressBarImage[f].SetBounds(ScaleX(0), ScaleY(0), PBBuff[f].LastWidth, PBBuff[f].ImageHeight); end;
  end;
end;
end;

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

TextureProgressBar(WizardForm.ProgressGauge)
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then ProgressTimer:= SetTimer(0,0, 200, WrapTimerProc(@UpdatePB, 4));
if CurStep=ssPostInstall then KillTimer(0, ProgressTimer);
end;


nik1967 04-08-2011 09:13 1725676

Цитата:

Цитата Neutron
Парни объясните в чём дело, ну или поделитесь нормальным рабочим скриптом!? »

Как то так
Код:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
AllowNoIcons=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Icons]
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}

[_code]
Function InitializeSetup: Boolean;
var
res : integer;
begin
Result := True;
Exec('ping.exe ', ' 2ip.ru ', ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilTerminated, res);
if res = 0 then begin
MsgBox('Найдено подключение к интернету. Установка будет прекращена!', mbInformation, MB_OK);
Result := False;
end;
end;


insombia 04-08-2011 10:44 1725726

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

VASYAKRN 04-08-2011 14:10 1725825

народ как вставить надписи на выделеное место

http://inno.at.ua/12.7z

insombia 04-08-2011 14:54 1725853

VASYAKRN если ты использовал это то там скрипт недоделаный

valyok666 04-08-2011 15:06 1725856

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

VinTagE 04-08-2011 16:04 1725886

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

nik1967 04-08-2011 17:03 1725915

Цитата:

Цитата valyok666
у кого нибудь есть примеры создания авторана в инно? »

AutoRun (3 примера)

insombia 04-08-2011 20:34 1726008

У кого то ещё остался закос под gog?а то на rghost'е ссылка битая уже

salat 04-08-2011 21:31 1726044

изъезженый вопрос. но все же.
как изменить цвет всех остальных окон кроме основной формы?
таких как всплывающее окно при выборе папки, удалении.
заранее спасибо.

vint56 04-08-2011 21:47 1726046

salat, как я понял ты про это говориш
читать дальше »
[Setup]
AppName=app
AppVerName=app
DefaultDirName={pf}\app
[code]
//******************************************* [ Установшик серый начало ] ***************************************************//
const
//$282828 - серый
Color = $282828;

procedure InitializeWizard();
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.WelcomeLabel1.Font.Color:=clWhite;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clWhite;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clWhite;
end;
//******************************************* [ Установшик серый конец ] ***************************************************//

insombia,
Form Designer
http://rghost.ru/16858401

salat 04-08-2011 22:12 1726052

vint56,
Нифига не пашет. Давно как то пробовал.
Цвет меняю ResTools'ом.
Нашел как изменять цвет в анинстале.
а как в окне выбора папки?

insombia 04-08-2011 22:22 1726061

кто-то может мне в скрипт добавит на первую и последнюю страничку картинку Img2.bmp

vint56 04-08-2011 22:36 1726071

insombia, http://rghost.ru/16863871
salat, сделай скрин что ты хочеш или покажи что не работает

valyok666 04-08-2011 23:45 1726095

так чтоли?

посмотрите немного доделал скрипт скрипт

insombia,http://rghost.ru/16874221 качай картинка сделана

salat 05-08-2011 03:35 1726162

vint56,
Нужно эти окна сделать другого цвета.






vint56 05-08-2011 08:36 1726224

salat, проше использовать скин http://rghost.ru/16893961

insombia 05-08-2011 10:46 1726285

valyok666 спс мне уже винт сделал,можешь мне если не затруднит в скрипт впаять свою картинку ЖД со скрипта кризиса?А то я пробовал мне пишет что my image не найден или что-то такое

insombia 05-08-2011 11:18 1726313

del

valyok666 05-08-2011 11:31 1726319

insombia, ok сделаю

salat 05-08-2011 15:54 1726436

vint56,
Спасибо.
ISSkin'ом подправил цвета и все ок.

А возможно как то ускорить работу установщика? а то из за скина при открытии долго копирует в tmp..

vint56 05-08-2011 16:21 1726449

salat, просто эти файлы установшик не будет сжимать и будет быстро запускатся
[Files]
Source: InstallFiles\ISSkin.dll; DestDir: {app}; Flags: dontcopy nocompression
Source: InstallFiles\Tiger.cjstyles; DestDir: {tmp}; Flags: dontcopy nocompression
Source: InstallFiles\Tiger.cjstyles; DestDir: {app}; Flags: ignoreversion nocompression; Attribs: hidden system
Source: InstallFiles\ISSkin.dll; DestDir: {app}; Flags: ignoreversion nocompression; Attribs: hidden system

salat 05-08-2011 16:25 1726454

vint56, а я и так nocompression поставил и все равно тупит.

vint56 05-08-2011 16:35 1726458

salat, в установшике есть другие файлы может тоже поставить без сжатия и еще в секций setup не стоит параметры
InternalCompressLevel=ultra64
Compression=lzma/ultra64
SolidCompression=true

Rikill 05-08-2011 16:36 1726461

salat, тогда убери авто-сжатие всего инсталлятора.
т.е. из секции [setup]
строчку compression и solidcompression

valyok666 05-08-2011 17:21 1726471

insombia, держи

Цитата:

Цитата insombia
А то я пробовал мне пишет что my image не найден или что-то такое »

ты забыл в var прописать MyImage: TBitmapImage;=)

insombia 05-08-2011 18:26 1726512

как изменить цвет текста инсталятора на зеленый?

Rikill 05-08-2011 18:45 1726524

insombia,
procedure initializewizard();
begin
WizardForm.Font.Color:= clLime
end;
Цитата:

Цитата insombia
Rikill не пашет »

значит у вас где-то ещё указаны цвета

Цитата:

Цитата salat
insombia,
const
Color = clLime; //
procedure InitializeWizard1();
begin
WizardForm.Font.Color:=color;
end;
procedure InitializeWizard();
begin
InitializeWizard1();
end; »

это тоже самое

insombia 05-08-2011 19:36 1726547

Rikill не пашет

salat 05-08-2011 19:49 1726555

insombia,
const
Color = clLime; //

procedure InitializeWizard1();
begin
WizardForm.Font.Color:=color;
end;

procedure InitializeWizard();
begin
InitializeWizard1();
end;

Gnom_aka_Lexander 05-08-2011 21:59 1726613

insombia, Все очень просто. Просто не все знают, что у некоторых надписей свой собственный шрифт, и глобальное изменение его не меняет. В этом случае, нужно задавать шрифт полностью, а затем возвращать на место частности. Пример:

читать дальше »
const
TfonColor = $00B1AFAE; // Цвет фона
TfontColor = $FF0F0F; // Цвет текста


procedure InitializeWizard();
begin
//-----------------------------------------
// задаем цвет, заодно
// задаем цвет всем элементам,которые нам нужны.
WizardForm.Color:=TfonColor;
WizardForm.WelcomePage.Color:=WizardForm.Color;
WizardForm.FinishedPage.Color:=WizardForm.Color;
WizardForm.InnerPage.Color:=WizardForm.Color;
WizardForm.DirEdit.Color:=WizardForm.Color;
WizardForm.ReadyMemo.Color:=WizardForm.Color;
WizardForm.MainPanel.Color:=WizardForm.Color;
//-----------------------------------------

//-----------------------------------------
// задаем глобальный шрифт
WizardForm.Font.Color:=TfontColor;
WizardForm.Font.Size:=9;
WizardForm.Font.Name:='Georgia';
WizardForm.Font.Style := [fsBold, fsItalic];

// задаем цвет всем шрифтам,которые автоматически
// не меняются со шрифтом визарда.
WizardForm.PageNameLabel.Font := WizardForm.Font;
WizardForm.WelcomeLabel1.Font := WizardForm.Font;

// возвращаем размер шрифта там, где это нужно
WizardForm.WelcomeLabel1.Font.Size:=14;
WizardForm.FinishedHeadingLabel.Font := WizardForm.Font;
WizardForm.FinishedHeadingLabel.Font.Size:=14;
//-----------------------------------------
end;
Но при этом, останутся элементы, цвет шрифта на которых, не изменить - кнопки и чекбоксы. Тут уж только скином.

insombia 05-08-2011 22:59 1726646

Спасибо всем кто откликнулся но я уже сам разобрался как его поминять

saha1010 06-08-2011 10:19 1726751

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

Gnom_aka_Lexander 06-08-2011 12:17 1726790

saha1010, Сто лет назад делал.
читать дальше »
[code]
var
ISCustomPage1: TWizardPage;
key1: TNewEdit;
key2: TNewEdit;
key3: TNewEdit;
key4: TNewEdit;
user: TNewEdit;

procedure InitializeWizard();
begin
{ Creates custom wizard page }
ISCustomPage1 := CreateCustomPage(wpWelcome, 'Информация о пользователе', 'Пожалуйста, введите данные о себе.');

{ key1 }
key1 := TNewEdit.Create(WizardForm);
with key1 do
begin
Name := 'key1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(48);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4; // количество знаков
end;
{ key2 }
key2 := TNewEdit.Create(WizardForm);
with key2 do
begin
Name := 'key2';
Parent := ISCustomPage1.Surface;
Left := ScaleX(136);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4;
end;

{ key3 }
key3 := TNewEdit.Create(WizardForm);
with key3 do
begin
Name := 'key3';
Parent := ISCustomPage1.Surface;
Left := ScaleX(224);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4;
end;

{ key4 }
key4 := TNewEdit.Create(WizardForm);
with key4 do
begin
Name := 'key4';
Parent := ISCustomPage1.Surface;
Left := ScaleX(312);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4;
end;

{ user }
user := TNewEdit.Create(WizardForm);
with user do
begin
Name := 'user';
Parent := ISCustomPage1.Surface;
Left := ScaleX(48);
Top := ScaleY(56);
Width := ScaleX(329);
Height := ScaleY(21);
Text := '';
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
Var
S1, S2: String;
begin
result:=true;
if CurPageID = wpReady then begin//запись после страницы готовности.
S1 := ExpandConstant(key1.Text+'-'+key2.Text+'-'+key3.Text+'-'+key4.Text);
RegWriteStringValue(HKLM, 'Software\GSC Game World\STALKER-COP', 'InstallCDKEY', S1);
S2 := user.Text;
RegWriteStringValue(HKLM, 'Software\GSC Game World\STALKER-COP', 'InstallUserName',S2);
end;
end;

Raf-9600 06-08-2011 17:30 1726929

Ктонить может объединить эти коды?

Описания компонентов
читать дальше »
function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup();
begin
disabledesc();
end;

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(200);
InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := 'ГиКц';
InfoCaption.Left := ScaleX(224);
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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
Info.WordWrap := true;
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'Английская озвучка;'+ // SoundUnit\eng
'Французская озвучка;'+ // SoundUnit\fra
'Немецкая озвучка;'+ // SoundUnit\deu
'Итальянская озвучка;'+ // SoundUnit\ita
'Испанская озвучка;' // SoundUnit\spa
);
end;


Сколько есть, и требуеться для установки
читать дальше »
var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel: TLabel;
n: Integer;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard();
begin
NeedSize := 6100; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
ListBoxRefresh
end;
end;


Слайд-шоу рандомно (в окне инсталляции)
читать дальше »
const
n=21; //количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
For i:=1 to X do A:=A+chr(i);
B:='';
For i:=1 to X do begin
j:=Random(Length(A)-1)+1;
C:='';
B:=B + A[j];
for k:=1 to Length(A) do
if k<>j then C:=C+A[k];
A:=C;
end;
for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
StatusMessages: TNewStaticText;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
then begin
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
if (currTime/{#TIME_FOR_VIEW} = N) then currTime:=0;
end;
end;


procedure InitializeWizard;
begin
bmp:=get_unique_random_number(N);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';
for z:=2 to N do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;

procedure DeInitializeSetup();
begin
KillTimer(0, TimerID);
end;


Улучшенный деинсталлятор
читать дальше »
function ShouldSkipPage(CurPage: Integer): Boolean;
begin
if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
case CurPage of
wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
Result := True;
end;
end;

const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;

procedure InitializeWizard();
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
end;


//Проверка на оставшыеся файлы
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
if DirExists(ExpandConstant('{app}')) then
if ExpandConstant('{language}') = 'ua' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
'"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
'"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
'"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

IDCANCEL:;
end
else
if ExpandConstant('{language}') = 'ru' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

IDCANCEL:;
end
else
case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
'"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
'"No" to open the directory with explorer to delete the files manually.'#13#13 +
'"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

IDCANCEL:;
end
end
end
end;


Реализация рисунка 497х58 в верху инсталлятора
читать дальше »
procedure InitializeWizard();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;

insombia 06-08-2011 17:41 1726932

Raf-9600

читать дальше »
[code]
function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup();
begin
disabledesc();
end;

procedure InitializeWizard1();
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(200);
InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := 'ГиКц';
InfoCaption.Left := ScaleX(224);
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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
Info.WordWrap := true;
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'Английская озвучка;'+ // SoundUnit\eng
'Французская озвучка;'+ // SoundUnit\fra
'Немецкая озвучка;'+ // SoundUnit\deu
'Итальянская озвучка;'+ // SoundUnit\ita
'Испанская озвучка;' // SoundUnit\spa
);
end;
///////////////////////////////////////////
var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel: TLabel;
n: Integer;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard2();
begin
NeedSize := 6100; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
ListBoxRefresh
end;
end;
//////////////////////////////////////////////////
const
n=21; //количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
For i:=1 to X do A:=A+chr(i);
B:='';
For i:=1 to X do begin
j:=Random(Length(A)-1)+1;
C:='';
B:=B + A[j];
for k:=1 to Length(A) do
if k<>j then C:=C+A[k];
A:=C;
end;
for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
StatusMessages: TNewStaticText;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
then begin
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
if (currTime/{#TIME_FOR_VIEW} = N) then currTime:=0;
end;
end;


procedure InitializeWizard3();
begin
bmp:=get_unique_random_number(N);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';
for z:=2 to N do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged2(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;

procedure DeInitializeSetup();
begin
KillTimer(0, TimerID);
end;
///////////////////////////////////////////////
function ShouldSkipPage(CurPage: Integer): Boolean;
begin
if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
case CurPage of
wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
Result := True;
end;
end;

const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;

procedure InitializeWizard4();
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
end;
end;

procedure CurPageChanged3(CurPageID: Integer);
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
end;


//Проверка на оставшыеся файлы
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
if DirExists(ExpandConstant('{app}')) then
if ExpandConstant('{language}') = 'ua' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
'"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
'"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
'"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

IDCANCEL:;
end
else
if ExpandConstant('{language}') = 'ru' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

IDCANCEL:;
end
else
case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
'"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
'"No" to open the directory with explorer to delete the files manually.'#13#13 +
'"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

IDCANCEL:;
end
end
end
end;
//////////////////////////////////////////
procedure InitializeWizard5();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;
////////////////
procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
CurPageChanged1 (CurPageID);
CurPageChanged2 (CurPageID);
CurPageChanged3 (CurPageID);
end;


Пробуй если где-то будет ошибка скажешь где может что-то пропустил

Raf-9600 06-08-2011 18:00 1726937

insombia
Подсвечивает первую строчку, и пишет ошибку Unknown type 'PChar'.

insombia 06-08-2011 18:15 1726947

Raf-9600 PChar это значит у тебя не такая инно как надо когда будет Лександер или ещё кто-то понимающий подскажут тебе

Habetdin 06-08-2011 18:22 1726950

Raf-9600,
Цитата:

Цитата Habetdin
замените PChar на PAnsiChar »


Raf-9600 06-08-2011 18:43 1726956

Цитата:

Цитата Habetdin
замените PChar на PAnsiChar »

Подсвечивает эту строчку
Код:

StringChange(Result, ',', '.')
И пишет ошибку Semicolon (';') expected.

vint56 06-08-2011 18:59 1726959

Raf-9600, http://rghost.ru/17044241 компилятор Inno Setup QuickStart Pack (ansi) 5.4.2

Raf-9600 06-08-2011 19:44 1726969

insombia, Habetdin, vint56, Всем Спасибо! Установил обычную версию, и скрипт заработал.

Richter 07-08-2011 06:04 1727112

Приветствую всех! Подскажите, пожалуйста, код, чтобы увеличить размеры изображения на первой странице инсталлятора, как это сделано у RG Механиков. Заранее благодарен. [IMG] http://forum.oszone.net/attachment.p...1&d=1312682544 [/IMG]

vint56 07-08-2011 09:13 1727142

Richter, http://rghost.ru/17090951

insombia 07-08-2011 14:04 1727261

http://images.bcm.net.ua/images/3013...4011916282.jpg как сделать чтобы Дополнительные файлы были сразу выбраны http://images.bcm.net.ua/images/5991...368922737.jpg?

VinTagE 07-08-2011 15:19 1727296

insombia, Как - то так:
читать дальше »

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: Version; Description: Версия 'Таблетки'; Types: full; Flags: fixed
Name: Version\Version1; Description: Версия 1; Flags: exclusive;
Name: Version\Version2; Description: Версия 2; Flags: exclusive;

insombia 07-08-2011 15:34 1727303

VinTagE да оно выручил как всегда

insombia 07-08-2011 16:20 1727319

У кого-то есть нормальный скрипт чтобы знать сколько осталось до завершение установки?Просто тот что есть на innoultra не пишет слово осталось времени а какие то иероглифы

nano321 07-08-2011 16:41 1727334

Доброго всем времени суток! Короче у меня такая проблема я скачал готовый скрипт nfs undercover 2.2. С установкой у меня все ок, но вот в чем проблема, после установки нажимаеш на кнопку финиш или как там ее установщи закрывается и игра автоматически сама запускается. помогите плиз!!!

insombia 07-08-2011 16:45 1727337

nano321 в строке [Run] значит указано про запуск игры убери то что указано и игра не будет запускаться сразу после закрытия инсталятора

nano321 07-08-2011 17:17 1727352

insombia, спс какже я сам не додумался? :search:

insombia 07-08-2011 18:28 1727376

nano321 Полезное сообщение замена спасибо :clapping:

VinTagE 07-08-2011 19:19 1727404

insombia,
Цитата:

У кого-то есть нормальный скрипт чтобы знать сколько осталось до завершение установки?Просто тот что есть на innoultra не пишет слово осталось времени а какие то иероглифы »
Вот сделал:
читать дальше »

[Setup]
AppName=FreeArc Example
AppVerName=FreeArc Example 3.3 Extreme
DefaultDirName={pf}\FreeArc Example

[Files]
Source: compiler:innocallback.dll; DestDir: {tmp}; Flags: dontcopy;
Source: {win}\Help\; DestDir: {app}; Flags: external;

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

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

[CustomMessages]
rus.hour= часов
rus.min= мин
rus.sec= сек

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

var
StartInstall: Integer;
TimeLabel: TLabel;
TimerID: Longword;

function GetTickCount: DWord; external 'GetTickCount@kernel32';
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 cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail then {hh: mm:ss format}
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 then {more than hour}
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 then {1..60 minutes}
Result:= IntToStr(Ticks/60000) +m+' '+ IntToStr(Ticks/1000 - Ticks/1000/60*60) +s
else Result:= Format('%.1n', [Abs(Ticks/1000)]) +s {less than one minute}
End;

procedure GetTime(HandleW, Msg, idEvent, TimeSys: LongWord);
var Remaining: Integer;
begin
with WizardForm.ProgressGauge do begin
if position > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position))
TimeLabel.Caption:= 'Осталось ждать: ' + TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)
if (Remaining = 0) then TimeLabel.Caption:= 'Завершение...'
end;
end;

procedure InitializeWizard();
begin
TimeLabel:= TLabel.Create(WizardForm)
TimeLabel.SetBounds(ScaleX(0), ScaleY(80), ScaleX(457), ScaleY(20));
TimeLabel.AutoSize:= False
TimeLabel.Transparent:= True;
TimeLabel.Parent:= WizardForm.InstallingPage;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep = ssInstall then
begin
StartInstall:= GetTickCount
TimerID:= SetTimer(0,0, 500, WrapTimerProc(@GetTime, 4))
end;
end;

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

salat 07-08-2011 20:12 1727421

а как подвинуть вниз StatusInfo?

insombia 07-08-2011 20:47 1727445

salat скрипт нужен и мне кажется что нужно уменьшить размер прогресс бара и будет тебе счастье

Grenader007 07-08-2011 21:48 1727476

У меня вопрос, как сделать БЭКАП файлов папки packs перед установкой в тужу самую папку?

читать дальше »
AppId={{60CAB1F5-A8F8-41D5-B10E-4C551FA92C8A}
AppName=SOmod
AppVersion=1.1
;AppVerName=SOmod 1.1
AppPublisher=Áðàòñòâî Ñïåêòð, Inc.
AppPublisherURL=http://spectrum.stalker-online.co/
AppSupportURL=http://spectrum.stalker-online.co/
AppUpdatesURL=http://spectrum.stalker-online.co/
DefaultDirName=C:\Program Files\stalker-online\packs;
DisableDirPage=yes
DefaultGroupName=SOmod
DisableProgramGroupPage=yes
LicenseFile=C:\Users\1\Desktop\ModSO\lic.txt
InfoBeforeFile=C:\Users\1\Desktop\ModSO\inf-do.txt
OutputDir=C:\Users\1\Desktop\ModSO
OutputBaseFilename=SOmod
SetupIconFile=C:\Users\1\Desktop\ModSO\favicon.ico
Compression=lzma
SolidCompression=yes

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

[Files]
Source: "C:\Users\1\Downloads\packs\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{cm:ProgramOnTheWeb,SOmod}"; Filename: "http://spectrum.stalker-online.co/"

alert30 07-08-2011 22:12 1727499

salat, дай этот скрипт, пожалуйста, где "Установка ..., осталось ждать ..." (который подчеркнуто). Заранее спасибо!

salat 07-08-2011 22:46 1727524

insombia, а в том то и дело что я хочу оставить широкий бар.
Это стандартный фриарковский с запросом след диска.
alert30
http://rghost.ru/2927495


Разобрался короч.

insombia 08-08-2011 11:19 1727740

как можно реализовать такую фишку как в 3D инсталяторе что когда переходишь с начальной странички на следующую то он прокручивается или что-то такое?

R.i.m.s.k.y. 08-08-2011 11:27 1727743

епт, это ведь просто инсталлер! на кой йенг такие сложности? :o
такими темпами когда-нибудь инсталлер станет сложнее самой устанавливаемой проги

bagrat 08-08-2011 12:22 1727774

ребята кто-то может дать скрипт для тихой установки программы , заранее спасибо

Gugle 08-08-2011 12:23 1727776

Доброго времени суток!
Подскажите пожалуйста, как можно вытянуть список доступных сетевых интерфейсов (MAC адрес, IP адрес и название) и создать страницу, на которой будет этот список и около каждой карты CheckBox, после выбора карт получить массив с выбранными?

Richter 08-08-2011 13:46 1727843

bagrat,
[Tasks]
Name: task1; Description: Дополнительное программное обеспечение:
Name: task1\task2; Description: Обновить DirectX
Name: task1\task3; Description: Установить PhysX
Name: task1\task4; Description: Установить Microsoft Visual C++ Redist

[Run]
Filename: {src}\Redist\DirectX\DirectX.exe; Parameters: /silent; Tasks: task1\task2; Flags: waituntilterminated
Filename: {src}\Redist\PhysX.exe; Parameters: /Q; Tasks: task1\task3; Flags: waituntilterminated
Filename: {src}\Redist\VC Redist.exe; Parameters: /Q; Tasks: task1\task4; Flags: waituntilterminated
;установка доп по после установки игры. папка Redist и setup.exe находятся в одной папке

Программы в смысле ПО для репака? Если правильно понял - то так.

Richter 08-08-2011 13:50 1727848

Как убрать текст с поля деинсталлятора? http://forum.oszone.net/attachment.p...1&d=1312796930

insombia 08-08-2011 14:18 1727874

Richter procedure InitializeUninstallProgressForm;

UninstallProgressForm.PageNameLabel.Font.Color:=clwhite;

замени на UninstallProgressForm.PageNameLabel.Font.Color:=clblack;

Richter 08-08-2011 14:27 1727881

insombia
Так только чёрный текст на чёрном фоне становится невидимым. Остаётся чёрная прямоугольная площадь, перекрывающая рисунок...
У меня был код, растягивающий верхнюю картинку в окне установщика. Там как-то его вкрутил, а вот с деинсталлятором что-то не получается.

insombia 08-08-2011 14:28 1727882

Richter попробуй удалить UninstallProgressForm.PageNameLabel.Font.Color:=clwhite; потом скажешь что будет писать

Richter 08-08-2011 14:31 1727887

Тот же эффект - текста нет а площадь под надпись накрывает рисунок.

insombia 08-08-2011 14:32 1727889

Richter жди тогда когда кто-то другой придет и тебе подскажет,дай свой скрипт посмотрю может выйдет

Richter 08-08-2011 14:38 1727897

http://forum.oszone.net/attachment.p...1&d=1312799830

insombia 08-08-2011 15:11 1727929

Richter не знаю не получилось

Richter 08-08-2011 15:15 1727931

UninstallProgressForm.PageNameLabel.Hide;

valyok666 08-08-2011 16:40 1727988

Richter, Лови
заметил что у тебя ещё на финишной странице картинка уходила влево исправил=)

insombia 09-08-2011 10:09 1728392

Как переместить выбор создания ярлыков и дополнительного ПО возле выбора куда установить игру чтобы при этом секция где до этого нужно было выбирать все это пропала?

No4noylis 09-08-2011 13:15 1728521

insombia, Для этого удаляй Task, и на SelectDir сам создавай чекбоксы для ярлыков и дополнительного ПО!

vint56 09-08-2011 13:17 1728524

insombia, как так
читать дальше »
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

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

[CustomMessages]
russian.SoftTask=Установить дополнительное ПО
russian.SoftInstall=Идет установка дополнительного ПО. Пожалуйста подождите...

[Icons]
Name: {commondesktop}\My Program; Filename: {app}\MyProg.exe; IconIndex: 0; Check: MakeDesktopIcon

[code]
var
Soft: TCheckBox ;
DesktopIcon: TCheckBox;
DesktopIconlb: TLabel;

function MakeDesktopIcon: Boolean;
begin
Result:=DesktopIcon.Checked;
end;

procedure InitializeWizard();
begin
Soft:= TCheckBox.Create(WizardForm)
Soft.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top+ScaleY(26), ScaleX(200), ScaleY(20))
Soft.Caption:= ExpandConstant('{cm:SoftTask}')
Soft.Checked:=True;
Soft.Parent:=WizardForm.SelectDirPage;

DesktopIcon := TCheckBox.Create(WizardForm);
with DesktopIcon do
begin
Left := ScaleX(0);
Top := ScaleY(130);
Width := ScaleX(15);
TabOrder := 0;
Checked := True;
Parent := WizardForm.SelectDirPage;
end;

DesktopIconlb := TLabel.Create(WizardForm);
DesktopIconlb.Left := DesktopIcon.Left + ScaleX(17);
DesktopIconlb.Top := DesktopIcon.Top + ScaleY(3);
DesktopIconlb.Caption := 'Добавить ярлык на рабочий стол';
DesktopIconlb.Font.Color := clblack;
DesktopIconlb.Transparent := True;
DesktopIconlb.Parent := WizardForm.SelectDirPage;
end;


procedure CurStepChanged(CurStep: TSetupStep);
var res: integer;
begin
if CurStep = ssPostInstall then begin
If Soft.Checked then begin
WizardForm.FileNameLabel.Caption:=ExpandConstant('{cm:SoftInstall}');
Exec(ExpandConstant('{src}\Redist\PhysX_9.09.0428_System Software.exe'), '/quiet', ExpandConstant('{src}\Redist'), SW_SHOW, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{src}\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('{src}\DirectX'), SW_SHOW, ewWaitUntilTerminated, Res);
if isWin64 then
Exec(ExpandConstant('{src}\Redist\vcredist_x64.exe'), '/Q', ExpandConstant('{src}\Redist'), SW_SHOW, ewWaitUntilTerminated, Res)
else
Exec(ExpandConstant('{src}\Redist\vcredist_x86.exe'), '/Q', ExpandConstant('{src}\Redist'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;
end;

insombia 09-08-2011 13:33 1728540

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

insombia 09-08-2011 13:54 1728552

vint56 блин у меня черный инсталятор то получилось так http://images.bcm.net.ua/images/4294...0248071598.jpg как исправить?

vint56 09-08-2011 14:04 1728558

insombia,
Цитата:

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

procedure CurStepChanged(CurStep: TSetupStep);

ShowComponents; на этапе показа
LabelCurrFileName.Hide; он скроет лайбал и не будет показывать файлы
а поповоду 2 вопроса
читать дальше »

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

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

[CustomMessages]
russian.SoftTask=Установить дополнительное ПО
russian.SoftInstall=Идет установка дополнительного ПО. Пожалуйста подождите...

[Icons]
Name: {commondesktop}\My Program; Filename: {app}\MyProg.exe; IconIndex: 0; Check: MakeDesktopIcon

[code]
var
Soft,DesktopIcon: TCheckBox ;
Softlb,DesktopIconlb: TLabel;

function MakeDesktopIcon: Boolean;
begin
Result:=DesktopIcon.Checked;
end;

procedure InitializeWizard();
begin
Soft := TCheckBox.Create(WizardForm);
with Soft do
begin
Left := ScaleX(0);
Top := ScaleY(110);
Width := ScaleX(15);
TabOrder := 0;
Checked := True;
Parent := WizardForm.SelectDirPage;
end;

Softlb := TLabel.Create(WizardForm);
Softlb.Left := ScaleX(17);
Softlb.Top := ScaleY(110);
Softlb.Caption := 'Установить По';
Softlb.Font.Color := clwhite;
Softlb.Transparent := True;
Softlb.Parent := WizardForm.SelectDirPage;


DesktopIcon := TCheckBox.Create(WizardForm);
with DesktopIcon do
begin
Left := ScaleX(0);
Top := ScaleY(130);
Width := ScaleX(15);
TabOrder := 0;
Checked := True;
Parent := WizardForm.SelectDirPage;
end;

DesktopIconlb := TLabel.Create(WizardForm);
DesktopIconlb.Left := DesktopIcon.Left + ScaleX(17);
DesktopIconlb.Top := DesktopIcon.Top + ScaleY(3);
DesktopIconlb.Caption := 'Добавить ярлык на рабочий стол';
DesktopIconlb.Font.Color := clwhite;
DesktopIconlb.Transparent := True;
DesktopIconlb.Parent := WizardForm.SelectDirPage;
end;


procedure CurStepChanged(CurStep: TSetupStep);
var res: integer;
begin
if CurStep = ssPostInstall then begin
If Soft.Checked then begin
WizardForm.FileNameLabel.Caption:=ExpandConstant('{cm:SoftInstall}');
Exec(ExpandConstant('{src}\Redist\PhysX_9.09.0428_System Software.exe'), '/quiet', ExpandConstant('{src}\Redist'), SW_SHOW, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('{src}\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('{src}\DirectX'), SW_SHOW, ewWaitUntilTerminated, Res);
if isWin64 then
Exec(ExpandConstant('{src}\Redist\vcredist_x64.exe'), '/Q', ExpandConstant('{src}\Redist'), SW_SHOW, ewWaitUntilTerminated, Res)
else
Exec(ExpandConstant('{src}\Redist\vcredist_x86.exe'), '/Q', ExpandConstant('{src}\Redist'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;
end;

insombia 09-08-2011 14:40 1728580

что делать если есть 2 одинаковых CurStepChanged(CurStep: TSetupStep);

с ним типа
Procedure CurPageChanged(CurPageID: Integer);
Begin
CurPageChanged2 (CurPageID);
end; не пашет

vint56 09-08-2011 14:48 1728586

insombia, там где одинаковые поменяй на 1 и 2
procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged2(CurPageID);
end;

R.i.m.s.k.y. 09-08-2011 14:50 1728588

будет забавно если CurPageChanged1 и CurPageChanged2 сработают над одной страницей

Gnom_aka_Lexander 09-08-2011 15:00 1728591

Цитата:

Цитата R.i.m.s.k.y.
будет забавно если CurPageChanged1 и CurPageChanged2 сработают над одной страницей »

Я писал уже про объединение процедур несколько раз, но есть авторитетные люди, которые говорят, что что можно забить на мои советы, и делать так, как по их авторитетному мнению нужно делать. Но, в конце концов, справедливость не так, так иначе себя покажет. Программирование терпит мелкие ошибки до случая, не далее :)

R.i.m.s.k.y. 09-08-2011 15:03 1728594

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

Цитата:

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

Код:

[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 1728604

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

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 1728611

vint56 ты не понял мне нужно именно на CurStepChanged(CurStep: TSetupStep); похожее сделать но оно не пашет

vint56 09-08-2011 15:43 1728620

insombia
procedure CurStepChanged(CurStep: TSetupStep);
begin
CurStepChanged1(CurStep);
CurStepChanged2(CurStep);

end

strelyaev 09-08-2011 17:38 1728696

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

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

Gnom_aka_Lexander 09-08-2011 18:11 1728721

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 1729231

давно ничего не делал, но возникла надобность
есть вот такой кусочек
читать дальше »
PHP код:

[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
  
Label0TLabel;
  
NewRadioButton1TNewRadioButton;
  
NewRadioButton2TNewRadioButton;

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 1729257

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 1729627

to vint56, благодарю
to all
Цитата:

Цитата Imitri7
требуется изменить цвет прогрессбара + чтобы обязательно показывались проценты
есть вот такая нараблтка
PHP код:

function SetWindowTheme(hwndHWNDpszSubAppNamepcharpszSubIdListpchar): Longintexternal 'SetWindowTheme@uxtheme.dll stdcall delayload';

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

procedure CurPageChanged(CurPageIDInteger);
begin
if CurPageID=wpSelectDir then
SendMessage
(wizardform.progressgauge.Handle, $04090, $000977FF); 


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

vint56 11-08-2011 11:19 1729685

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 1730018

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

VoLT 11-08-2011 21:41 1730136

Наконец пора поставить точку в плагинах для Inno ею будет проект b2p - b2p.sf.net

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

No4noylis 11-08-2011 21:50 1730139

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

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

insombia 11-08-2011 22:19 1730157

No4noylis блин как я сам не додумался :o

insombia 12-08-2011 10:21 1730343

Подскажите пожалуйста почему здесь http://images.bcm.net.ua/images/3051...3656839166.png нету такой строчки Не создавать ярлык в пуске или что-то такое?

VinTagE 12-08-2011 10:57 1730366

insombia, Попробуй так:
Код:

[Setup] 
AllowNoIcons=Yes


insombia 12-08-2011 13:56 1730517

Как сделать чтобы возле обзор была картинка как здесь http://fastpic.ru/view/18/2011/0812/...0a10c.png.html ?

VinTagE 12-08-2011 14:16 1730541

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 1730548

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 1730611

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

Raf-9600 13-08-2011 11:29 1730962

Ктонить подскажет, как правильно прописать совместимость к игре? Тоесть когда я выставляю так:

Код:

Root: HKU; Subkey: "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; ValueType: String; ValueName: "{app}\Diablo.exe"; ValueData: "WIN98 256COLOR 640X480 DISABLETHEMES DISABLEDWM HIGHDPIAWARE"; Components: Game\Diablo; MinVersion: 0,5.01.2600; Flags: Uninsdeletekey
То при установке в x64 винду, ключ создается в Software\Wow6432Node, а мне нужно чтоб он создавался именно там где я его прописал. Как это сделать, не включая в инсталляторе глобальный x64 режим?

El Sanchez 13-08-2011 12:44 1730989

Цитата:

Цитата Raf-9600
Root: HKU »

Raf-9600, неверный корневой куст, HKU - это HKEY_USERS, совместимость там не прописывается. Ну пусть даже и опечатались и имели в виду HKCU, но в HKCU\Software\Wow6432Node тоже совместимость не пишется, поэтому остается контекст машины HKLM - там совместимость в двух местах. Если хотите писать сразу в Software контекста машины и применить совместимость глобально, то:
Код:

Root: HKLM64; Subkey: "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; ValueType: String; ValueName: "{app}\Diablo.exe"; ValueData: "WIN98 256COLOR 640X480 DISABLETHEMES DISABLEDWM HIGHDPIAWARE"; Components: Game\Diablo; MinVersion: 0,5.01.2600; Flags: Uninsdeletekey;Check: IsWin64
Но я бы затронул только пользовательский контекст:
Код:

Root: HKCU; Subkey: "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; ValueType: String; ValueName: "{app}\Diablo.exe"; ValueData: "WIN98 256COLOR 640X480 DISABLETHEMES DISABLEDWM HIGHDPIAWARE"; Components: Game\Diablo; MinVersion: 0,5.01.2600; Flags: Uninsdeletekey

Raf-9600 13-08-2011 16:07 1731093

У меня ещё два вопроса:
1. Можно ли как-то указать, чтоб файл устанавливался только если НЕ выбран определённый компонент?
2. Вот я, для переименования файлов использую батники, а можно ли без них, навпрямую, через cmd.exe все указывать? :)

R.i.m.s.k.y. 13-08-2011 16:36 1731114

El Sanchez, я бы поставил HKCU32 или HKLM32, ну в зависимости откуда игра читает

El Sanchez 13-08-2011 17:40 1731138

Цитата:

Цитата R.i.m.s.k.y.
я бы поставил HKCU32 или HKLM32, ну в зависимости откуда игра читает »

R.i.m.s.k.y., да не игра, а винда будет оттуда данные о совместимости программ считывать. :) Если указать HKLM32, то запись будет произведена в куст Wow6432Node, что не требуется, да и не нужно, а HKCU32 эквивалентно HKCU.

Цитата:

Цитата Raf-9600
Можно ли как-то указать, чтоб файл устанавливался только если НЕ выбран определённый компонент? »

Код:

[Files]
Source: test.txt; DestDir: {app}; Components: not ComponentName

Цитата:

Цитата Raf-9600
для переименования файлов использую батники, а можно ли без них, навпрямую, через cmd.exe все указывать? »

Raf-9600, переименовывать можно на этапе установки:
Код:

[Files]
Source: {app}\old.txt; DestDir: {app}; DestName: new.txt

Либо в секции [code], используя функцию RenameFile (см. справку). Но если нужно через cmd.exe, то:
Код:

[Run]
Filename: {cmd}; Parameters: "/c  Ren ""{app}\old.txt"" ""new.txt"""


Raf-9600 13-08-2011 18:16 1731151

Цитата:

Но если нужно через cmd.exe
Сенки, так гораздо удобнее :)

А вот касательно компонентов, проблемка.
Есть ли возможность прописать так, чтоб файл устанавливался если выбран компонент Game\Diablo\Englisch, но не устанавливался, если выбран Game\Diablo\Englisch\Crack ?

El Sanchez 13-08-2011 20:07 1731204

Цитата:

Цитата Raf-9600
Есть ли возможность прописать так, чтоб файл устанавливался если выбран компонент Game\Diablo\Englisch, но не устанавливался, если выбран Game\Diablo\Englisch\Crack ? »

В таком случае должна быть возможность выбора родительского компонента Game\Diablo\Englisch без одновременного выбора дочернего Game\Diablo\Englisch\Crack. Для этого на компонентах нужно проставить флаги:
Код:

[Components]
Name: Game\Diablo\Englisch; Description: blabla; Flags: checkablealone
Name: Game\Diablo\Englisch\Crack; Description: blablabla; Flags: dontinheritcheck

[Files]
Source: test.txt; DestDir: {app}; Components: Game\Diablo\Englisch and not Game\Diablo\Englisch\Crack


Devils Night 14-08-2011 01:51 1731366

Как сделать, чтобы шла проверка?
Ситуация такая - перед установкой, инсталлятор проверяет наличие установленных в системе программ таких как: dotnetfx3_x86, vcredist_x86, xliveredist, umdf, wmfdist11 и wmpappcompat, если программы установлены, то начинается установка, если нет, то сначала устанавливаются dotnetfx3_x86, vcredist_x86, xliveredist, umdf, wmfdist11 и wmpappcompat а потом и сама программа.

Возможно ли такое, или может быть есть какие другие варианты?

Rikill 14-08-2011 02:18 1731374

Devils Night, в тихом режиме эти программы сами делают проверку.

VASYAKRN 14-08-2011 14:01 1731523

прикрутите к моему скрипту иконку папки на странице папки и меню пуск через ботву

скрипт
иконка

insombia 14-08-2011 14:49 1731550

Помогите к скрипту прикрутить слайд-шоу как здесь

Rikill 14-08-2011 14:57 1731555

VASYAKRN,
Код:

procedure InitializeWizard();
begin
ExtractTemporaryFile('иконка.bmp');
ExtractTemporaryFile('иконка на меню пуск.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\иконка.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;

WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\иконка на меню пуск.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
end;



А вам insombia сюда.

insombia 14-08-2011 15:13 1731567

Rikillя это уже когда то использовал у меня пропал прогресс бар и были 2 кнопки отмены

Rikill 14-08-2011 15:20 1731574

insombia, (facepalm) а может прочитаете документацию к isSlideShow??? Даже в гоговском инсталле прогресс бар внизу, потому что он не может быть на слайд шоу, слайд шоу как правило поверх всего.
Можно поиграться с этим, поставив true

WizardForm.ProgressGauge.visible:=false;

А это злополучная кнопа отмены, удалить строчки:

WizardForm.CancelButton.Left:=ScaleX(405);
WizardForm.CancelButton.Top:=ScaleY(325);

VASYAKRN 14-08-2011 15:56 1731593

Rikill
Ти можеш сделать ето в скрипте
Я пробивал У МЕНЯ НЕ ПОЛУЧАЕТСЯ

insombia 14-08-2011 16:15 1731605

VASYAKRN

procedure InitializeWizard1();
begin
ExtractTemporaryFile('иконка.bmp');
ExtractTemporaryFile('иконка на меню пуск.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\иконка.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;

WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\иконка на меню пуск.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
end;

procedure InitializeWizard();
begin
InitializeWizard1();
end;

Rikill 14-08-2011 16:15 1731608

insombia, это оно и есть.


http://rghost.ru/17926531 лови, там надо было немного подумать просто.

insombia 14-08-2011 16:20 1731612

Rikill то правильно он говорил что у него не получается вставить код я ему дал пример как его вставить

Devils Night 14-08-2011 16:45 1731631

Цитата:

Цитата Rikill
Devils Night, в тихом режиме эти программы сами делают проверку. »

Немного не то, нужно чтобы сам инсталятор проверял на наличие установленных компонентов, а при тихой установке dotnetfx3_x86, vcredist_x86, xliveredist, они всё равно запускаются, и создаётся впечатление, что они по новой устанавливаются т.к конец установки, довольно долго завершается.
Может будут, какие другие варианты?

Rikill 14-08-2011 16:46 1731632

Devils Night, можно сделать проверку по реестру, но это сложновато

R.i.m.s.k.y. 14-08-2011 17:02 1731640

Devils Night,

Код:

//**проверка наличия фреймворка 3.5
function netfw35(): Boolean;
begin
        if ( RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5') )
    then Result := True else Result := False;
end;

//** проверка на установку MS Visual C++ 2008
Function isvcredist():boolean;
var b1,b2,b3 : boolean;
begin
  if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\DevDiv\VC\Servicing\9.0\RED') then b1 := True;
  if IsWin64 then begin
    if RegKeyExists(HKLM64, 'SOFTWARE\Microsoft\DevDiv\VC\Servicing\9.0\RED') then b2 := True;
    if RegKeyExists(HKLM32, 'SOFTWARE\Microsoft\DevDiv\VC\Servicing\9.0\RED') then b3 := True;
  end;
  if (b1 or b2 or b3) then Result := True else Result := False;
end;

Function InitializeSetup: Boolean;
begin
...
if (not isvcredist) then MsgBox('Не установлен Microsoft Visual C++ 2008', mbInformation, MB_OK);
if (not netfw35) then MsgBox('Не установлен FrameWork 3.5', mbInformation, MB_OK);
...
end;


Rikill 14-08-2011 17:09 1731646

R.i.m.s.k.y., я думаю ещё можно привязать к Check, было бы удобнее

R.i.m.s.k.y. 14-08-2011 17:13 1731653

Цитата:

Цитата Rikill
я думаю ещё можно привязать к Check, было бы удобнее »

такой вариант можно использовать, к примеру, чтобы сделат неснимаемые галки если компонента не хватает
пример неснимаемых галок давал Serega

VASYAKRN 14-08-2011 17:35 1731670

прикрутите к моему скрипту .png иконку папки на странице папки и меню пуск через ботву

скрипт
иконка

Rikill 14-08-2011 17:47 1731676

VASYAKRN, неблагодарное быдло
Цитата:

Цитата VASYAKRN
прикрутите к моему скрипту .png иконку папки на странице папки и меню пуск через ботву »

не имеешь уважения к форумчанам, никто не поможет, это весь скрипт переписывать.

El Sanchez 14-08-2011 19:13 1731731

Цитата:

Цитата Devils Night
нужно чтобы сам инсталятор проверял на наличие установленных компонентов »

Devils Night, и это правильно.

Цитата:

Цитата Devils Night
Может будут, какие другие варианты? »

dotnetfx3_x86, vcredist_x86, xliveredist - сердцем этих установщиков является msi-документ, а значит используем возможности API системы, а именно функцию MsiQueryProductState.

Код:

[code]
const
  INSTALLSTATE_DEFAULT = 5;

#ifdef UNICODE
  #define A "W"
 #else
  #define A "A"
#endif

function MsiQueryProductState(szProduct: String): Integer;
external 'MsiQueryProductState{#A}@msi.dll stdcall';

function IsMsiProductInstall(ProductCode: String): Boolean;
begin
  Result := MsiQueryProductState(ProductCode) = INSTALLSTATE_DEFAULT;
end;

//к примеру определяем установлен ли Microsoft Visual C++ 2010  x86 Redistributable, ProductCode которого {196BB40D-1578-3D01-B289-BEFC77A11A1E}
procedure InitializeWizard();
begin
  if IsMsiProductInstall('{196BB40D-1578-3D01-B289-BEFC77A11A1E}') then
    MsgBox('vcredist 2010 installed for current user', mbInformation, MB_OK)
  else
    MsgBox('vcredist 2010 not installed', mbInformation, MB_OK);
end;

ProductCode можно посмотреть в msi-документе с помощью Orca (таблица Property, свойство ProductCode)

Rikill 14-08-2011 21:16 1731806

El Sanchez, помнишь мы говорили про appmutex, можно ли сделать так, чтобы на деинсталлятор правило не действовало, например если у меня ошибка распаковки вызывается деинсталлятор, и выдаётся сообщение "вы уже запустили одну копию этой программы"

VASYAKRN 14-08-2011 23:10 1731861

обєдините Install И PostInstall на одной странице или просто удалите Install
troyan90 зарание спасиба.Етот скрипт я делал по ево Hitman - Blood Money весии непомню
скрипт

Gugle 15-08-2011 09:43 1732041

Доброго времени суток!

Гуру, подскажите пожалуйста, как получить информацию о всех сетевых интерфейсах установленных на локальном ПК?
Никак не могу разобраться с этим.

insombia 15-08-2011 10:35 1732082

Подскажите как сделать чтобы весь текст был только белом фоне http://images.bcm.net.ua/images/7045...116723403.jpg?
P.S. Копирование файлов не в счет

Imitri7 15-08-2011 10:58 1732092

insombia, ну придется почти всю страницу переписывать, и потом уже двигать текст, пример из старого скрипта злого деда вот :

читать дальше »
PHP код:

[Setup]
AppName=Mirror's Edge
AppVerName=Mirror'
s Edge
DefaultDirName
={pf}EA GamesMirror's Edge
WizardImageFile=WizardImg.bmp
WizardSmallImageFile=WizardSmallImg.bmp

[code]
var
WLabel1, WLabel2,
FLabel1, FLabel2: TLabel;
PageNameLabel, PageDescriptionLabel: TLabel;
procedure InitializeWizard();
//WizardImageFile
begin
WizardForm.Caption:='
Программа установки игры "Mirrors Edge"';
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.WizardBitmapImage.Width := 497;
WizardForm.WizardBitmapImage.Height := 313;
WizardForm.WizardSmallBitmapImage.Left:=0;
WizardForm.WizardSmallBitmapImage.Width:=497;
WizardForm.WizardSmallBitmapImage.Height:=58;
WizardForm.PageDescriptionLabel.Width:=300;
WizardForm.PageNameLabel.Width:=300;
WizardForm.FileNameLabel.Visible:=False;
WizardForm.ProgressGauge.Top:=ScaleY(100);
WizardForm.StatusLabel.Top:=ScaleY(80);
WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(176);
WLabel1.Top := ScaleY(16);
WLabel1.Width := ScaleX(301);
WLabel1.Height := ScaleY(54);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Font.Size := 11;
WLabel1.Font.Style := [fsBold];
WLabel1.Font.Color:= clBlack;

WLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;
WLabel2 :=TLabel.Create(WizardForm);
WLabel2.Top := ScaleY(76);
WLabel2.Left := ScaleX(176);
WLabel2.Width := ScaleX(301);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.Font.Color:= clBlack;

WLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;
WizardForm.WizardBitmapImage2.Width := 497;
WizardForm.WizardBitmapImage2.Height := 313;
FLabel1 := TLabel.Create(WizardForm);
FLabel1.Left := ScaleX(176);
FLabel1.Top := ScaleY(16);
FLabel1.Width := ScaleX(301);
FLabel1.Height := ScaleY(54);
FLabel1.AutoSize := False;
FLabel1.WordWrap := True;
FLabel1.Font.Size := 11;
FLabel1.Font.Style := [fsBold];
FLabel1.Font.Color:= clBlack;

FLabel1.Caption := WizardForm.FinishedHeadingLabel.Caption;
FLabel1.Transparent := True;
FLabel1.Parent := WizardForm.FinishedPage;
FLabel2 :=TLabel.Create(WizardForm);
FLabel2.Top := ScaleY(76);
FLabel2.Left := ScaleX(176);
FLabel2.Width := ScaleX(301);
FLabel2.Height := ScaleY(53);
FLabel2.AutoSize := False;
FLabel2.WordWrap := True;
FLabel2.Font.Color:= clBlack;


FLabel2.Caption := '
Программа установлена на Ваш компьютер.' #13#13
'
Нажмите «Завершить»чтобы выйти из программы установки.';
FLabel2.Transparent := True;
FLabel2.Parent := WizardForm.FinishedPage;
begin
PageNameLabel := TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left := ScaleX(10);
Top := ScaleY(10);
Width := ScaleX(300);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Color := clBlack;
Font.Style := [fsBold];
Transparent := True;
Parent := WizardForm.MainPanel;
end;

PageDescriptionLabel := TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left := ScaleX(15);
Top := ScaleY(25);
Width := ScaleX(400);
Height := ScaleY(30);
AutoSize := False;
WordWrap := True;
Font.Color := clBlack;
Transparent := True;
Parent := WizardForm.MainPanel;
end;

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := Mainpanel.Width;
Height := MainPanel.Height;
end;
end;
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
end;
end; 


если не разберешься, задавай вопросы подскажу =)

to all кто нибудь может проверить на 64х разрядной системе программу? ссылка вот (желательно скинуть скрин папки программы)

insombia 15-08-2011 11:12 1732103

Цитата:

Цитата Imitri7
ну придется почти всю страницу переписывать, и потом уже двигать текст, пример из старого скрипта злого деда вот :
читать дальше » »

Жаль не пашет только текст весь стал корявый

Imitri7 15-08-2011 11:27 1732114

insombia, скинь скрин, можт я подскажу че сделать чтоб все пучком было )

insombia 15-08-2011 12:01 1732157

Imitri7 вот именно что скрипта у меня нету я хочу сделать что-то похожее

El Sanchez 15-08-2011 12:13 1732165

Цитата:

Цитата Rikill
помнишь мы говорили про appmutex, можно ли сделать так, чтобы на деинсталлятор правило не действовало, например если у меня ошибка распаковки вызывается деинсталлятор, и выдаётся сообщение "вы уже запустили одну копию этой программы" »

Rikill, не совсем понял, что требуется. При ошибке распаковки на этапе установки и так выводится соответствующее сообщение и производится откат.

Цитата:

Цитата Gugle
как получить информацию о всех сетевых интерфейсах установленных на локальном ПК? »

Gugle, может какую конкретную инфу, типа MAC, IP, название? Всех - это с минипортами, ассинхронными адаптерами и т.д.?

Gugle 15-08-2011 12:22 1732174

El Sanchez, мне нужны MAC, IP, Description всех ethernet адаптеров установленных на ПК.

Пока, все что нашел это работа с "cmd.exe", через команду "ipconfig /all". Оттуда, конечно, можно вытащить информацию, но я предполагаю, что это можно сделать более изящно, чем парсить вывод cmd.exe.

El Sanchez 15-08-2011 13:30 1732224

Gugle, добавил MAC в этот код, еще и ошибку исправил:
скрипт

Код:

[code]
type
  IP_ADDR_INFO = array of record
  Description: String;
  IPv4: String;
  IPv6: String;
  MAC: String;
end;

function GetLocalIP(var IPAddrInfo: IP_ADDR_INFO): Boolean;
var
  objSWbemLocator, objSWbemServices, objSWbemObjectSet, objRegExp, objRegExpMatches: Variant;
  IndexCount, i: Byte;
  strBuf, ptrnIPv4, ptrnIPv6: String;
begin
  try
    objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
    objRegExp := CreateOleObject('VBScript.RegExp');
  except
    ShowExceptionMessage;
    Exit;
  end;
  ptrnIPv4 := '(\d{1,3}[.]){3}\d{1,3}'; //IPv4 regexp
  ptrnIPv6 := //IPv6 regexp
    '(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,6})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|' +
    '(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|//(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|' +
    '(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}){1,1})|' +
    '((([0-9a-fA-F]{1,4}:){1,7}|:):)|(:(:[0-9a-fA-F]{1,4}){1,7})|(((([0-9a-fA-F]{1,4}:){6})(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
    '((([0-9a-fA-F]{1,4}:){5}[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
    '(([0-9a-fA-F]{1,4}:){5}:[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
    '(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
    '(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,3}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
    '(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,2}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})';

  objSWbemServices := objSWbemLocator.ConnectServer();
  objSWbemServices.Security_.ImpersonationLevel := 3;
  IndexCount := objSWbemServices.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration').Count;
  objSWbemObjectSet := objSWbemServices.ExecQuery('SELECT Description,IPAddress,MACAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE');

  for i := 1 to IndexCount do
  try
    SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)+1);
    strBuf := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).GetObjectText_;
    IPAddrInfo[GetArrayLength(IPAddrInfo)-1].Description := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).Properties_.Item('Description').Value;
    objRegExp.Pattern := ptrnIPv4;
    if objRegExp.Test(strBuf) then
    begin
      objRegExpMatches := objRegExp.Execute(strBuf);
      IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv4 := objRegExpMatches.Item[0].Value;
    end;
    objRegExp.Pattern := ptrnIPv6;
    if objRegExp.Test(strBuf) then
    begin
      objRegExpMatches := objRegExp.Execute(strBuf);
      IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv6 := objRegExpMatches.Item[0].Value;
    end;
    IPAddrInfo[GetArrayLength(IPAddrInfo)-1].MAC := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).Properties_.Item('MACAddress').Value;
  except
    GetExceptionMessage;
    SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)-1);
  end;
  Result := (GetArrayLength(IPAddrInfo) > 0);
end;

procedure InitializeWizard();
var
  i: Byte;
  arr: IP_ADDR_INFO;
begin
  if GetLocalIP(arr) then for i := 0 to GetArrayLength(arr)-1 do
  MsgBox(
    'Description: ' + arr[i].Description + #13#10 +
    'IPv4: ' + arr[i].IPv4 + #13#10 +
    'IPv6: ' + arr[i].IPv6 + #13#10 +
    'MAC: ' + arr[i].MAC, mbInformation, MB_OK);
end;


Gugle 15-08-2011 13:40 1732232

El Sanchez, спасибо. Пошел разбиться со скриптом.

Появились вопросы:
1. На строке:
Код:

strBuf := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).GetObjectText_;
Вываливается с ошибкой:
SWbemObjectSet: Не найден.

читать дальше »
2. Где и/или как можно посмотреть весь список столбцов ... (что такое ту мы используем?) для формирования своего запроса типа:
Код:

objSWbemObjectSet := objSWbemServices.ExecQuery('SELECT Description,IPAddress,MACAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE');

Все понятно откуда это! Пояснять не надо. )))



3. А можно еще и DeviceID вытащить?
Начал поиск, но если знаешь название в скрипте, то напиши плз. Я пока очень медленно в этом разбираюсь.

Rikill 15-08-2011 14:29 1732286

El Sanchez, отката не происходит, ибо выводится сообщение что уже запущен один вариант установки из-за AppMutex нужно сделать исключение для деинсталлятора, чтобы можно было запустить setup.exe один раз, но чтобы можно было вместе запускать setup.exe/unins000.exe

Imitri7 15-08-2011 14:47 1732300

insombia, не так уж и сложно сделать такой инстал, есть примеры даже, просто переделывай под себя)

R.i.m.s.k.y. 15-08-2011 14:55 1732304

Цитата:

Цитата El Sanchez
dotnetfx3_x86, vcredist_x86, xliveredist - сердцем этих установщиков является msi-документ, а значит используем возможности API системы, а именно функцию MsiQueryProductState. »

подскажи, пожалуйста, GUID framework 3.5 и vcredist 2008 x86
а что за Orca такая?

El Sanchez 15-08-2011 16:29 1732377

Цитата:

Цитата Gugle
Вываливается с ошибкой:
SWbemObjectSet: Не найден. »

Это если запустить код в режиме отладки. Так и должно быть в данном случае.

Цитата:

Цитата Gugle
А можно еще и DeviceID вытащить? »

А это свойство какого класса WMI? В Win32_NetworkAdapterConfiguration такого нет.

Цитата:

Цитата Rikill
отката не происходит, ибо выводится сообщение что уже запущен один вариант установки из-за AppMutex нужно сделать исключение для деинсталлятора, чтобы можно было запустить setup.exe один раз, но чтобы можно было вместе запускать setup.exe/unins000.exe »

Rikill, все, я тебя понял. Действительно, если нужно при установке вызвать деинсталлятор предыдущей установки, будет сообщение. Пока не знаю как побороть.


Цитата:

Цитата R.i.m.s.k.y.
подскажи, пожалуйста, GUID framework 3.5 и vcredist 2008 x86
а что за Orca такая? »

R.i.m.s.k.y., framework 3.5, vcredist 2008 x86, Orca

Gugle 15-08-2011 17:12 1732409

Цитата:

Цитата El Sanchez
Это если запустить код в режиме отладки. Так и должно быть в данном случае. »

Понятно. Спс.

Цитата:

Цитата El Sanchez
А это свойство какого класса WMI? В Win32_NetworkAdapterConfiguration такого нет. »

Нда... Хороший вопрос. Пошел искать. Если, что вернусь. )))

Еще вопрос.
Как (или куда) правильно записать:
Код:

type
  IP_ADDR_INFO = array of record
    Description: String;
    IPv4: String;
    IPv6: String;
    MAC: String

end;

если я хочу вынести предоставленный тобой скрип в отдельный *.iss?
Т.е. есть скрипт A1.iss из которого я хочу вызывать скрипт A2.iss. В A2.iss есть функция которая вызывается:
Код:

function GetLocalIP(var IPAddrInfo: IP_ADDR_INFO): Boolean;
Вопрос исчерпан. Извиняюсь, что поторопился.

VASYAKRN 15-08-2011 19:03 1732481

обєдините Install И PostInstall на одной странице или просто удалите Install
troyan90 зарание спасиба.Етот скрипт я делал по ево Hitman - Blood Money весии непомню
скрипт

insombia 15-08-2011 19:18 1732489

Как сделать чтобы когда на диске не хватает места то установка на тот диск была не возможна а то у меня на диске свободно мало места но все-равно туда можно установить игру

+как сделать как на скриншоте чтобы свободное место было в белой рамочке или любой другой по цвету вот мой скрипт http://rghost.ru/18065321

Rikill 15-08-2011 19:44 1732504

insombia, на картинке моя идея и картинка тоже, рамочку не сделать без ботвы, а чтобы она была надо весь скрипт переписать ;)
данные о хардах
картинка на странице с данными.
размеры сам укажешь.

insombia 15-08-2011 19:48 1732506

Rikill у меня это уже все есть в скрипте

VASYAKRN 15-08-2011 19:54 1732509

как сделать readymemo прозрачним без рамочки

valyok666 15-08-2011 19:54 1732510

insombia, щас сделаю подожди
смотри так получилось
вот что получилось

insombia 15-08-2011 19:55 1732513

valyok666 оо давай ты как-раз во-время

Rikill 15-08-2011 20:01 1732517

insombia,
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

тут указано, что если у тебя меньше места(freemb) чем указано (needsize) то кнопка вперёд (WizardForm.NextButton.Enabled) становится неактивной (false) но если места хватает(else), то кнопка активной становится (true), так что это ты накосячил.

insombia 15-08-2011 20:07 1732524

Rikill может потому-что я не комплиировал игру а просто файлы для инно?

Rikill 15-08-2011 20:09 1732525

insombia, возможно, а возможно ты другой скрипт туда вставил (есть похожий) а возможно ты не правильно размер указал надо в мегабайтах

insombia 15-08-2011 20:12 1732526

Rikill надо в мегабайтах а где это указать именно?

R.i.m.s.k.y. 15-08-2011 20:15 1732528

El Sanchez, можешь положить Orca отдельно? а то с моим эмулятором интернета от Мегафон веб-инсталлеры не пролезают
давно бы нашелся ушлый адвокатец и засудил их за дискриминацию по unlim-net признаку :)

valyok666 15-08-2011 20:17 1732531

insombia, скачал?стотри 275 страницу

insombia 15-08-2011 20:19 1732533

Кстати есть одна проблема не помню писал о ней или нет но вообщем есть такое дело при использовании Прогресс бар в маленьком окне начальное окно такое а после завершения установки оно такое

valyok666 ооо вот это дело

valyok666 15-08-2011 20:26 1732537

insombia, этот пример где то пару недель назад на рубоарде был я его сохранил на всякий случай=)токо пришлось немного сдвинуть картинку диска чтобы в рамку влез

insombia 15-08-2011 20:31 1732544

valyok666 клево значит я тоже на всякий случай буду некоторые примеры беречь

vint56 15-08-2011 20:37 1732550

R.i.m.s.k.y., orca.zip (2.1 МБ)
http://rghost.ru/18073991

valyok666 15-08-2011 20:39 1732552

как вам не показывает то что нужно
скрипт

insombia 15-08-2011 20:41 1732553

vint56 а как ты сделал на начальной и финишной страничке что текст большой а то у меня он маленький некоторым людям сложно увидеть что там написано вот скрин твоего репака

valyok666 15-08-2011 20:57 1732564

insombia,
Код:

var
WelcomeLabel3: TLabel;

procedure InitializeWizard();
begin
WizardForm.Font.Color:= clRed; цвет
WizardForm.Font.Name:= 'Comic Sans MS'; шрифт
end;


El Sanchez 15-08-2011 21:04 1732566


Цитата:

Цитата R.i.m.s.k.y.
можешь положить Orca отдельно? »

R.i.m.s.k.y., версия поновее

vint56 15-08-2011 21:57 1732609

insombia, вот тебе пример
читать дальше »
#define MyAppName "Call of Duty Black Ops"
#define AppVerName "Call of Duty Black Ops v 1.0"
[Setup]
AppName={#MyAppName}
AppVerName={#AppVerName}
DefaultDirName={pf}\{#MyAppName}

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

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

[code]
var
WelcomeLabel1,WelcomeLabel2,WelcomeLabel3,WelcomeLabel4,
FinishedHeadingLabel,FinishedHeadingLabel1,FinishedLabel,FinishedLabel1,FinishedLabel2,FinishedLabel 3: TLabel;

procedure InitializeWizard();
begin
WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do begin
AutoSize:=False;
SetBounds(ScaleX(-26), ScaleY(31), ScaleX(550), ScaleY(70));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 14;
Font.Color:=$000000;
Font.Style:=[fsBold];
Caption:= ExpandConstant('{cm:Welcome1}');
Parent:=WizardForm.WelcomePage;
end;
WelcomeLabel2:= TLabel.Create(WizardForm);
with WelcomeLabel2 do begin
AutoSize:=False;
SetBounds(ScaleX(-27), ScaleY(30), ScaleX(550), ScaleY(70));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 14;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
Caption:= ExpandConstant('{cm:Welcome1}');
Parent:=WizardForm.WelcomePage;
end;

WelcomeLabel3:=TLabel.Create(WizardForm);
with WelcomeLabel3 do begin
AutoSize:=False;
SetBounds(ScaleX(-26), ScaleY(121), ScaleX(550), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$000000;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Welcome2}');
Parent:=WizardForm.WelcomePage;
end;
WelcomeLabel4:=TLabel.Create(WizardForm);
with WelcomeLabel4 do begin
AutoSize:=False;
SetBounds(ScaleX(-27), ScaleY(120), ScaleX(550), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$FFFFFF;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Welcome2}');
Parent:=WizardForm.WelcomePage;
end;
FinishedHeadingLabel:= TLabel.Create(WizardForm);
with FinishedHeadingLabel do begin
SetBounds(ScaleX(-29), ScaleY(11), ScaleX(550), ScaleY(65));
AutoSize:= false;
Alignment := taCenter;
Transparent:= true;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 13;
Font.Color:=$00000;
Font.Style := [fsBold];
Caption:= ExpandConstant('{cm:Finished1}');
Parent:=WizardForm.FinishedPage;
end;
FinishedHeadingLabel1:= TLabel.Create(WizardForm);
with FinishedHeadingLabel1 do begin
SetBounds(ScaleX(-30), ScaleY(10), ScaleX(550), ScaleY(65));
AutoSize:= false;
Alignment := taCenter;
Transparent:= true;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 13;
Font.Color:=$FFFFFF;
Font.Style := [fsBold];
Caption:= ExpandConstant('{cm:Finished1}');
Parent:=WizardForm.FinishedPage;
end;

FinishedLabel:=TLabel.Create(WizardForm);
with FinishedLabel do begin
AutoSize:=False;
SetBounds(ScaleX(26), ScaleY(121), ScaleX(450), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$000000;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Finished2}');
Parent:=WizardForm.FinishedPage;
end;
FinishedLabel1:=TLabel.Create(WizardForm);
with FinishedLabel1 do begin
AutoSize:=False;
SetBounds(ScaleX(25), ScaleY(120), ScaleX(450), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$FFFFFF;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Finished2}');
Parent:=WizardForm.FinishedPage;
end;
FinishedLabel2:=TLabel.Create(WizardForm);
with FinishedLabel2 do begin
AutoSize:=False;
SetBounds(ScaleX(26), ScaleY(261), ScaleX(450), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$000000;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Finished3}');
Parent:=WizardForm.FinishedPage;
end;
FinishedLabel3:=TLabel.Create(WizardForm);
with FinishedLabel3 do begin
AutoSize:=False;
SetBounds(ScaleX(25), ScaleY(260), ScaleX(450), ScaleY(200));
WordWrap:=True;
Alignment := taCenter;
Transparent:=True;
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$FFFFFF;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Finished3}');
Parent:=WizardForm.FinishedPage;
end;
end;

procedure HideComponents;
begin
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
HideComponents;
end;

insombia 15-08-2011 22:10 1732619

vint56

PageDescriptionLabel1,WelcomeLabel1,WelcomeLabel2,WelcomeLabel3,WelcomeLabel4,TotalNeedSpaceLabel,Ne edSpaceLabel,FreeSpaceLabel,
FinishedHeadingLabel,FinishedHeadingLabel1,FinishedLabel,FinishedLabel1,FinishedLabel2,FinishedLabel 3,StatusLabel,LogoLabel: TLabel;

здесь ошибки кидает

vint56 15-08-2011 22:17 1732625

insombia, это не ошибки а дубликаты потому что они у тебя уже есть

insombia 15-08-2011 22:50 1732637

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

Gugle 16-08-2011 09:53 1732849

Доброго времени суток!

Народ, пните меня в описание методов (процедур/функций) для разных объектов, таких как: TNewCheckListBox, TNewProgressBar, TNewStaticText и т.д.

И вопрос: Как обойти элементы добавленные в TNewCheckListBox?
Смог только найти функцию, с помощью которой можно обратиться в элементу и узнать выделен он или нет (
Код:

CheckListBox.Checked[1]:=True/False
). Но этого мало, надо еще как то вытащить количество элементов и их описание. Для простоты примера выложил заготовку, если кому не лень подскажите.

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

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[code]

procedure InitializeWizard;
var
Page: TWizardPage;
CheckListBox: TNewCheckListBox;
RichEditViewer: TRichEditViewer;
i: Integer;
s: String;

begin
{ РАЗ }
Page := CreateCustomPage(wpWelcome, 'Тестовая панель', 'Тестовая панель номер РАЗ!.');

CheckListBox := TNewCheckListBox.Create(Page);
CheckListBox.Width := Page.SurfaceWidth;
CheckListBox.Height := ScaleY(100);
CheckListBox.Flat := True;
CheckListBox.Parent := Page.Surface;

for i := 0 to 15 do
CheckListBox.AddCheckBox('TNewCheckListBox_'+IntToStr(i), '', 0, True, True, False, True, nil);

{ ДВА }
Page := CreateCustomPage(Page.ID, 'Тестовая панель', 'Тестовая панель номер ДВА!');
RichEditViewer := TRichEditViewer.Create(Page);
RichEditViewer.Width := Page.SurfaceWidth;
RichEditViewer.Height := Page.SurfaceHeight;
RichEditViewer.Parent := Page.Surface;
RichEditViewer.ScrollBars := ssVertical;
RichEditViewer.UseRichEdit := True;

for i:=0 to CheckListBox.Count-1 do begin
s := s + '; ' + IntToStr(i) + '_' + CheckListBox.Checked[i] + '_' + CheckListBox.Item[i];
end;

RichEditViewer.RTFText := s;
RichEditViewer.ReadOnly := True;

end;

insombia 16-08-2011 12:34 1732994

Как сделать такие проценты в инсталяторе? http://fastpic.ru/view/25/2011/0705/...e029a.png.html

vint56 16-08-2011 14:33 1733097

insombia, нужно использовать isdone

insombia 16-08-2011 15:02 1733108

Кто может прикрутить такую верхнюю панель(Где типа закрыть-свернуть) http://uaimage.com/gallery/b5073689 в мой скрипт http://rghost.ru/18157871
вот скрипт с которого это хотелось бы прифигачить http://inno.at.ua/load/0-0-0-122-20

valyok666 16-08-2011 16:23 1733169

insombia, там не панель там форма и стиль
isombia переписывай скрипт vinta лучший вариант

Gugle 16-08-2011 17:01 1733202

Доброго времени суток!

Подскажите плз, есть ли возможность работать с *.xml файлами загружая их структуру, для изменения/добавления/удаления некоторых полей в нем?
Если стандартных средств нет, то может у кого нить наработки?

Нашел только следующие упоминания о работе с xml:
читать дальше »
Код:

procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TArrayOfString;
  //str : string;
  i : Integer;
begin
  if not FileExists(FilePath) then begin MsgBox('Файл не найден', mbError, mb_Ok); Exit;end; // если файла нет, выходим
  LoadStringsFromFile(FilePath, S); // загружаем файл
  for i:= 0 to GetArrayLength(S)-1 do begin
    if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
      StringChangeEx(S[i], find, replace, True);
    end;
  end;
  SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;


читать дальше »
Код:

///////////////////////////////////////////////////////////////////////////////
// Find given text in given file, and replace
// complete textline with given text.
// Created: March 27, 2002 by S.T.I.Bracke
// Revised: May 22, 2002 by S.T.I.Bracke
function ReplaceLine(strFilename, strFind, strNewLine: String): Boolean;
var
  strTemp : String;
  iLineCounter : Integer;
  a_strTextfile : TArrayOfString;
 
begin
  { Load textfile into string array }
  LoadStringsFromFile(strFilename, a_strTextfile);
 
  { Search trough all textlines for given text }
  // old line
  // for iLineCounter := 1 to High(a_strTextfile) do
  // new line corrected by Nikolaus Moll
  for iLineCounter := 0 to GetArrayLength(a_strTextfile)-1 do
    begin
      { Overwrite textline when text searched for is part of it }
      if (Pos(strFind, a_strTextfile[iLineCounter]) > 0) then
        a_strTextfile[iLineCounter] := strNewLine;
    end;
 
  { Save string array to textfile (overwrite, no append!) }
  SaveStringsToFile(strFilename, a_strTextfile, False);
 
  Result := True;
 
end;



Но это работа непосредственно с файлами, а не со структурой xml.

El Sanchez 16-08-2011 18:29 1733254

Gugle, использовать объект Microsoft.XMLDOM. Методы и свойства. Пример использования я когда-то давал.

R.i.m.s.k.y. 16-08-2011 20:08 1733316

Вложений: 1
Цитата:

Цитата Gugle
Подскажите плз, есть ли возможность работать с *.xml файлами загружая их структуру »

кто-то давал скрипты

insombia 16-08-2011 21:44 1733363

кто-то может помочь вообщем при использовании маленького прогресс бара инсталятор такой

До http://uaimage.com/image/882763ba После http://uaimage.com/image/55730bb9

вот скрипт http://rghost.ru/18207171

No4noylis 16-08-2011 22:39 1733378

insombia, так должно быть: http://rghost.ru/18214121 .

insombia 16-08-2011 23:25 1733406

No4noylis блин так криво получилось но все-равно спс :)

Все сделал на руборде подказали кое что а размеры инсталятора в углу сам подобрал и все теперь нормально

avmaksimov 17-08-2011 21:59 1734136

Стоит задача и не знаю как решить... Вкратце, есть своя dll, а в ней функция, ну доступ возвращает 0 и 1. 0 - все плохо и 1 все хорошо.

Функция запускается при ssPostInstall, т.е. после копирования всех остальных файлов... Так вот - как сделать так, чтобы в случае ошибки, делать откат изменений, такой же, как и при нажатии "Отмена" на более ранних этапах?

Самому делать бэкапы заменяемых файлов (если есть) и разархивировать в случае ошибки, как-то не то... Перелазил весь рунет и англонет, но ничего не нашел... Если кто знает, помогите, пожалуйста!

avmaksimov 18-08-2011 07:59 1734293

Все, что я нашел пока, это то, что при копировании какого-либо файла в обработчике Check вызвать "
Код:

SendMessage(WizardForm.Handle, $0010{WM_CLOSE}, 0, 0);
"... перед этим поставив следующим образом переменные обработчика:
Код:

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

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

Буду рад ошибиться. Кто согласен, что это было бы полезно, присоединяйтесь: http://innosetup.uservoice.com/forum...nges?ref=title

Gugle 18-08-2011 10:34 1734355

El Sanchez, R.i.m.s.k.y., спасибо большое. Пошел разбираться.

R.i.m.s.k.y. 18-08-2011 10:39 1734357

Цитата:

Цитата Gugle
Пошел разбираться. »

c таким ником вообще вопросов быть не должно! только ответы! :tongue:

VASYAKRN 18-08-2011 11:47 1734411

http://inno.at.ua/TMP/12.7z
сделайте readymemo прозрачним, без рамочки

[s]Добавлено:[/s]
http://inno.at.ua/TMP/Fenixx_Dead_Spase_2_ISdone0.6.7z
перемистите isdone c sspostinstall na ssinstall

[s]Добавлено:[/s]
http://inno.at.ua/TMP/undercover_bratherhood_lite.7z
вставте workspace.png i statuspanel.png на все станице и 1.png на все странице кроме первой и последней через ботву. Файли в архиве

valyok666 18-08-2011 12:11 1734419

VASYAKRN, а самому что не сделать?

VASYAKRN 18-08-2011 12:28 1734429

Valyok666
пробивал никак

valyok666 18-08-2011 12:30 1734433

так гугл и поиск на что?

VASYAKRN 18-08-2011 12:57 1734451

Все равно нету

Raf-9600 18-08-2011 14:25 1734514

Ктонить подскажет скрипт, чтоб при распаковке определенного файла, ингалятор, над прогресс-баром писал не "Распаковка файлов", а допустим "Распаковка музыки".
У меня когда-то был такой, кажысь через AferInstal работал, но я его потерял =\

P.S.
Ещё интересует, если применить такой скрипт на выполнение огромного количества мелких файлов (распаковку .ogg), то насколько существенно это замедлит установку?

R.i.m.s.k.y. 18-08-2011 14:26 1734517

Raf-9600,
procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
end;

замедлит несильно

Raf-9600 18-08-2011 15:23 1734560

R.i.m.s.k.y., А можно по подробнее? Я просто не кодер, смыслю мало чего. Интуиция подсказывает что либо у Вас код не полный, либо возле файла к которому это приценяться, нужно что-то дописать :)

R.i.m.s.k.y. 18-08-2011 15:29 1734569

Raf-9600, тут распаковка и этот самый ChangeCaption, думаю разберешься что к чему, тут просто как моя жисть :)
вся соль инно - в коде, и если не кодер может опробовать что-то попроще?
Код:

[Files]
Source: Folder1; DestDir: {app}; BeforeInstall: ChangeCaption('Установка первой папки'); Flags: ignoreversion recursesubdirs createallsubdirs uninsrestartdelete setntfscompression restartreplace
Source: unrar.exe; Destdir: {tmp}; BeforeInstall: ChangeCaption('Копирование архива'); 
Source: rar.rar; Destdir: {tmp}; BeforeInstall: ChangeCaption('Копирование архива'); AfterInstall: Unrar(ExpandConstant('{app}\2'));
Source: Folder2; DestDir: {app}; BeforeInstall: ChangeCaption('Установка второй папки'); Flags: ignoreversion recursesubdirs createallsubdirs uninsrestartdelete setntfscompression restartreplace

[_Code]
procedure ChangeCaption(str: string);
begin
    WizardForm.StatusLabel.Caption:= str;
end;

procedure Unrar (path : string);
var res : integer;
begin
    ChangeCaption('Распаковка архива');
    Exec(ExpandConstant('{tmp}\unrar.exe'), ' x ' + ExpandConstant('{tmp}\rar.rar') + ' ' + path, ExpandConstant('{tmp}'),SW_HIDE,ewWaitUntilTerminated,res);
end;


insombia 18-08-2011 16:03 1734601

Как сделать чтобы не было Setup-1a.bin а просто Setup-1.bin?

Imitri7 18-08-2011 16:10 1734608

insombia, переименовать в нужном месте в скрипте

insombia 18-08-2011 16:22 1734616

Imitri7 и где именно?

Raf-9600 18-08-2011 16:34 1734625

Цитата:

Цитата R.i.m.s.k.y.
думаю разберешься что к чему, тут просто как моя жисть »

Действительно. :)
Благодарю за код.

Цитата:

Цитата R.i.m.s.k.y.
вся соль инно - в коде, и если не кодер может опробовать что-то попроще? »

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

Imitri7 18-08-2011 16:47 1734646

insombia, ctrl+H и в первую строку пишем Setup-1a.bin а во вторую Setup-1.bin жмем заменить все

to all
наработка
PHP код:

[Files]
SourceDirBitmap.bmpDestDir: {tmp}; Flagsdontcopy
Source
DirBitmap2.bmpDestDir: {tmp}; Flagsdontcopy

[CustomMessages]
ru.Enter=Укажите путь до вашего Steam профиля:

[
code]
Var
Label0Label1Label2TLabel;
NewEdit1NewEdit2TNewEdit;
TestSystemButtonTNewButton;
  
BitmapImage1TBitmapImage;

procedure InitializeWizard();
begin
    WizardForm
.DirBrowseButton.Top := ScaleY(44);
    
WizardForm.DirEdit.Top := ScaleY(44);

    
WizardForm.SelectDirBrowseLabel.Top := ScaleY(150);
    
begin
ExtractTemporaryFile
('DirBitmap.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap.bmp'));
WizardForm.SelectDirBitmapImage.Width:= 32
WizardForm
.SelectDirBitmapImage.Height:= 32
WizardForm
.SelectDirBitmapImage.Top:= WizardForm.SelectDirBitmapImage.Top
WizardForm
.SelectDirBitmapImage.Parent := WizardForm.SelectDirPage;

  
BitmapImage1 := TBitmapImage.Create(WizardForm);
  
with BitmapImage1 do
  
begin
    Name 
:= 'BitmapImage1';
    
Parent := WizardForm.SelectDirPage;
    
Left := WizardForm.SelectGroupBitmapImage.Left;
    
Top := WizardForm.SelectGroupBitmapImage.Top ScaleY(30) + ScaleY(44);
    
Width := ScaleX(32);
    
Height := ScaleY(32);
    
ExtractTemporaryFile('DirBitmap2.bmp');
    
Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap2.bmp'));
  
end;

//ExtractTemporaryFile('DirBitmap2.bmp');
//WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap2.bmp'));
//WizardForm.SelectGroupBitmapImage.Width:= 32
//WizardForm.SelectGroupBitmapImage.Height:= 32
//WizardForm.SelectGroupBitmapImage.Top:= WizardForm.SelectGroupBitmapImage.Top + ScaleY(30) + ScaleY(44);
//WizardForm.SelectGroupBitmapImage.Parent := WizardForm.SelectDirPage;
end;
    
with WizardForm do begin
Label0 
:= TLabel.Create(WizardForm);
with Label0 do begin
Name 
:= 'Label0';
Parent := WizardForm.SelectDirPage;
Caption := ExpandConstant('{cm:Enter}');
Transparent := False;
Left := WizardForm.SelectStartMenuFolderLabel.Left
Top 
:= WizardForm.SelectStartMenuFolderLabel.Top ScaleY(30) + ScaleY(44);
Height := ScaleY(20);
//AutoSize := true;
end;
NewEdit1 := TNewEdit.Create(WizardForm);
with NewEdit1 do begin
Name 
:= 'NewEdit1';
Parent := WizardForm.SelectDirPage;
Top := WizardForm.DirEdit.Top ScaleY(30) + ScaleY(44);
Width :=  WizardForm.DirEdit.Width
Height 
:= ScaleY(20);
Text := 'D:\Games\Steam\steamapps\steamprofile';
//Color:=clColor;
end;
NewEdit1.TabOrder := 2;
end;
    
TestSystemButton := TNewButton.Create(WizardForm);
    
with TestSystemButton do begin
      Parent 
:= WizardForm.SelectDirPage;
      
Caption := 'Обзор...';
      
Left:= WizardForm.GroupBrowseButton.left
      Top
:=WizardForm.DirEdit.Top ScaleY(30) + ScaleY(44);
      
Width:=WizardForm.GroupBrowseButton.Width
      Height
:=WizardForm.GroupBrowseButton.Height
      
//OnClick:=@TestSystemButtonOnClick
    
end;
end


задача: надо сделать вторую кнопку рабочей, чтобы можно было выбирать папку и чтобы определенные компоненты туда ставились
буду рад любой помощи :)

El Sanchez 18-08-2011 18:19 1734721

Цитата:

Цитата avmaksimov
Функция запускается при ssPostInstall, т.е. после копирования всех остальных файлов... Так вот - как сделать так, чтобы в случае ошибки, делать откат изменений, такой же, как и при нажатии "Отмена" на более ранних этапах? »

avmaksimov, какой смысл сначала копировать файлы, а потом проверять их на "что-то тут не так"? Подобного рода проверки надо делать до установки или во время установки. Кстати, что проверяет ваша функция?

Gnom_aka_Lexander 18-08-2011 18:46 1734735

Цитата:

Цитата VASYAKRN
http://inno.at.ua/TMP/12.7z
сделайте readymemo прозрачним, без рамочки »

Легко. Прозрачный и без рамочки - как просил. Если хочеш - по остальным вопросам помогу. Но в таком-же стиле - чего просиш, то и дам.

VASYAKRN 18-08-2011 22:32 1734862

http://inno.at.ua/TMP/18.08.bmp
gnom
сделай такое readymemo и пажалста помоги с остальним http://inno.at.ua/TMP/12.7z

[s]Добавлено:[/s]
http://inno.at.ua/TMP/Fenixx_Dead_Spase_2_ISdone0.6.7z
перемистите isdone c sspostinstall na ssinstall

[s]Добавлено:[/s]
http://inno.at.ua/TMP/undercover_bratherhood_lite.7z
вставте workspace.png i statuspanel.png на все станице и 1.png на все странице кроме первой и последней через ботву. Файли в архиве

Devils Night 19-08-2011 05:05 1734964

Такой вопрос, кто нибудь слышал про библиотеку Quickinstall.dll, и для чего она?

insombia 19-08-2011 14:13 1735210

Devils Night думаю по названию понятно ускорение установки но это мое предположение

valyok666 19-08-2011 17:38 1735337

кто нибудь знает где можно скачать эту книгу??

VASYAKRN 19-08-2011 20:33 1735433

дайте пожалста "справку к инно"

как сделать ISLogo недоступним на странице установки

У кого есть иакой инстал




insombia 19-08-2011 21:13 1735456

VASYAKRN на твоем сайте я нашел около 4-х примеров которые тебя интересуют

VASYAKRN 19-08-2011 22:07 1735490

insombia меня интересуют оригинальние репаки а не переделание кемта

LinkOFF 20-08-2011 14:00 1735770

Rikill, можешь мне опять сделать черный шрифт на первой и последней страницах установки
http://rghost.ru/18623081

Rikill 20-08-2011 14:13 1735777

LinkOFF, http://rghost.ru/18624141

ilyhakz001 20-08-2011 17:34 1735893

Кто нибудь подскажите, почему то фриарк не сжимает нормально, и не только фриарк, и среп тоже, с 9 Гб спустил всего до 7 Гб, на счет фрриарка, не только у меня такая проблема! Игра Prototype!

insombia 20-08-2011 17:49 1735902

ilyhakz001 тебе сюда http://forum.ru-board.com/topic.cgi?...=30239&start=0

ilyhakz001 20-08-2011 18:02 1735908

Цитата:

Цитата insombia
insombia »

Уже писал, не кто не отвечат, вот и решил спросить тут!

Rikill 20-08-2011 18:02 1735909

ilyhakz001, а прекомп?)

insombia 20-08-2011 18:26 1735922

ilyhakz001 эта тема предназначена для скриптов для инно а не сжатия

LinkOFF 20-08-2011 19:01 1735938

Rikill, спасибо, выручил

salat 20-08-2011 19:57 1735975

ёуёуёу всем!
чет не могу сообразить как сформулировать для гугла..
весь моссск выело.
вообще нужно сделать даунлоадер с сервера. чтобы файлы программы скачивались.
кто поможет?

Rikill 20-08-2011 19:58 1735976

salat, http://www.sherlocksoftware.org/inno...s/itd0.3.5.exe

salat 20-08-2011 20:02 1735978

Rikill, Во! точно! Спасибо, оперативно:)

MaxHacker 20-08-2011 22:32 1736062

как сделать чтобы инсталятор определял какая система (32-х или 64-х битная) и в зависимости от этого устанавливал ту или иную папку (пусть это будут папки: folder32 и folder64)

Rikill 20-08-2011 22:53 1736074

MaxHacker, чтобы инсталл создавал ту или иную пустую папку надо так:
[Dirs]
Name: {app}\Folder64; Check: isWin64
Name: {app}\Folder32; Check: not isWin64

Для копирования файлов в папку (тут и создаётся и копируется в DestDir):
[Files]
Source: Копируемая папка x64; DestDir:{app}\Folder64; Check: isWin64
Source: Копируемая папка; DestDir:{app}\Folder32; Check: not isWin64

VASYAKRN 21-08-2011 11:41 1736287

http://inno.at.ua/TMP/18.08.bmp

сделайте такое readymemo http://inno.at.ua/TMP/12.7z

insombia 21-08-2011 12:56 1736319

VASYAKRN сам делай себе это это не сложно это раз во вторых нужно не писать сделайте такое readymemo а нужно писать сделайте пожалуйста такое readymemo кому не сложно и все

LinkOFF 21-08-2011 18:00 1736471

Как в скрипте isdone к надписи 100% добавить Завершено:100%

Rikill 21-08-2011 18:27 1736485

LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
тут исправь на
LabelPct1.Caption := 'Прошло'+IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';

LinkOFF 21-08-2011 19:37 1736541

Rikill, а можно как-нибудь сделать чтоб когда выбераешь язык установки были разные слова в зависимости от языка

No4noylis 21-08-2011 20:27 1736575

LinkOFF, конечно
читать дальше »

[CustomMessages]
russian.Pct1Caption=Прошло
english.Pct1Caption=Passed

Ну и соответственно:

LabelPct1.Caption := ExpandConstant('{cm:Pct1Caption}') +IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';

insombia 21-08-2011 21:52 1736642

VASYAKRN ..... я не знаю хватит уже доставать со своими дурацкими вопросами тебе никто не ответит!!! ты бы хоть свои посты редактировал задал вопрос мне а пишешь кому не сложно

LinkOFF 21-08-2011 23:06 1736694

Цитата:

Цитата No4noylis
LinkOFF, конечно
читать дальше »
------- »

Не получилось
Цитата:

Цитата VASYAKRN
insombia
http://inno.at.ua/TMP/18.08.bmp
сделайте
пожалуйста такое readymemo кому не сложно
http://inno.at.ua/TMP/12.7z »

пустая трата времени

Rikill 21-08-2011 23:27 1736704

LinkOFF, ты ошибку какбе говори не разводи флуд, что именно не получилось? Всё клещами надо вытаскивать...

Imitri7 22-08-2011 12:18 1736920

to all
решил задачу, это выбор папки и присвоение NewEdit1 этот адрес
читать дальше »

[Files]
Source: DirBitmap.bmp; DestDir: {tmp}; Flags: dontcopy
Source: DirBitmap2.bmp; DestDir: {tmp}; Flags: dontcopy

[CustomMessages]
ru.Enter=Укажите путь до вашего Steam профиля:

[_code]
Var
Label0, Label1, Label2: TLabel;
NewEdit1, NewEdit2: TNewEdit;
TestSystemButton: TNewButton;
BitmapImage1: TBitmapImage;

procedure SystemButtonOnClick(Sender: TObject);
var s: String;
begin
BrowseForFolder('Укажите путь до вашего Steam профиля:', s, False);
if s<>'' then NewEdit1.Text:= s;
end;

procedure InitializeWizard();
begin
WizardForm.DirBrowseButton.Top := ScaleY(44);
WizardForm.DirEdit.Top := ScaleY(44);
WizardForm.SelectDirBrowseLabel.Top := ScaleY(150);

ExtractTemporaryFile('DirBitmap.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap.bmp'));
WizardForm.SelectDirBitmapImage.Width:= 32
WizardForm.SelectDirBitmapImage.Height:= 32
WizardForm.SelectDirBitmapImage.Top:= WizardForm.SelectDirBitmapImage.Top
WizardForm.SelectDirBitmapImage.Parent := WizardForm.SelectDirPage;

BitmapImage1 := TBitmapImage.Create(WizardForm);
with BitmapImage1 do
begin
Name := 'BitmapImage1';
Parent := WizardForm.SelectDirPage;
Left := WizardForm.SelectGroupBitmapImage.Left;
Top := WizardForm.SelectGroupBitmapImage.Top + ScaleY(30) + ScaleY(44);
Width := ScaleX(32);
Height := ScaleY(32);
ExtractTemporaryFile('DirBitmap2.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap2.bmp'));
end;

Label0 := TLabel.Create(WizardForm);
with Label0 do begin
Name := 'Label0';
Parent := WizardForm.SelectDirPage;
Caption := ExpandConstant('{cm:Enter}');
Transparent := False;
Left := WizardForm.SelectStartMenuFolderLabel.Left
Top := WizardForm.SelectStartMenuFolderLabel.Top + ScaleY(30) + ScaleY(44);
Height := ScaleY(20);
//AutoSize := true;
end;
NewEdit1 := TNewEdit.Create(WizardForm);
with NewEdit1 do begin
Name := 'NewEdit1';
Parent := WizardForm.SelectDirPage;
Top := WizardForm.DirEdit.Top + ScaleY(30) + ScaleY(44);
Width := WizardForm.DirEdit.Width
Height := ScaleY(20);
Text := 'D:\Games\Steam\steamapps\steamprofile';
TabOrder := 2;
//Color:=clColor;
end;
TestSystemButton := TNewButton.Create(WizardForm);
with TestSystemButton do begin
Parent := WizardForm.SelectDirPage;
Caption := 'Обзор...';
Left:= WizardForm.GroupBrowseButton.left
Top:=WizardForm.DirEdit.Top + ScaleY(30) + ScaleY(44);
Width:=WizardForm.GroupBrowseButton.Width
Height:=WizardForm.GroupBrowseButton.Height
OnClick:=@SystemButtonOnClick
end;
end;


но по прежнему остается задача : установка файлов по этому пути
как это реализовать?

No4noylis 22-08-2011 12:48 1736939

Imitri7, а так не получится?
Код:

[Setup]
DefaultDirName=D:\Games\Steam\steamapps\steamprofile


Imitri7 22-08-2011 13:13 1736955

No4noylis, ты не правильно понял, мне нужно чтобы в обе папки файлы распаковывались

Gnom_aka_Lexander 22-08-2011 13:49 1736980

Imitri7, Както так, я думаю:

читать дальше »
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
 Source: DirBitmap.bmp; DestDir: {tmp}; Flags: dontcopy
 Source: DirBitmap2.bmp; DestDir: {tmp}; Flags: dontcopy
Source: файл; DestDir: {Code:GetStimApp};

[CustomMessages]
 Enter=Укажите путь до вашего Steam профиля:

[_code]
 Var
 Label0, Label1, Label2: TLabel;
 NewEdit1, NewEdit2: TNewEdit;
 TestSystemButton: TNewButton;
 BitmapImage1: TBitmapImage;

 procedure SystemButtonOnClick(Sender: TObject);
 var s: String;
 begin
 BrowseForFolder('Укажите путь до вашего Steam профиля:', s, False);
 if s<>'' then NewEdit1.Text:= s;
 end;

function GetStimApp : String;
begin
Result:=NewEdit1.Text;
end;


procedure InitializeWizard();
 begin
 WizardForm.DirBrowseButton.Top := ScaleY(44);
 WizardForm.DirEdit.Top := ScaleY(44);
 WizardForm.SelectDirBrowseLabel.Top := ScaleY(150);

 ExtractTemporaryFile('DirBitmap.bmp');
 WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap.bmp'));
 WizardForm.SelectDirBitmapImage.Width:= 32
 WizardForm.SelectDirBitmapImage.Height:= 32
 WizardForm.SelectDirBitmapImage.Top:= WizardForm.SelectDirBitmapImage.Top
 WizardForm.SelectDirBitmapImage.Parent := WizardForm.SelectDirPage;

 BitmapImage1 := TBitmapImage.Create(WizardForm);
 with BitmapImage1 do
 begin
 Name := 'BitmapImage1';
 Parent := WizardForm.SelectDirPage;
 Left := WizardForm.SelectGroupBitmapImage.Left;
 Top := WizardForm.SelectGroupBitmapImage.Top + ScaleY(30) + ScaleY(44);
 Width := ScaleX(32);
 Height := ScaleY(32);
 ExtractTemporaryFile('DirBitmap2.bmp');
 Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirBitmap2.bmp'));
 end;

 Label0 := TLabel.Create(WizardForm);
 with Label0 do begin
 Name := 'Label0';
 Parent := WizardForm.SelectDirPage;
 Caption := ExpandConstant('{cm:Enter}');
 Transparent := False;
 Left := WizardForm.SelectStartMenuFolderLabel.Left
 Top := WizardForm.SelectStartMenuFolderLabel.Top + ScaleY(30) + ScaleY(44);
 Height := ScaleY(20);
 //AutoSize := true;
 end;
 NewEdit1 := TNewEdit.Create(WizardForm);
 with NewEdit1 do begin
 Name := 'NewEdit1';
 Parent := WizardForm.SelectDirPage;
 Top := WizardForm.DirEdit.Top + ScaleY(30) + ScaleY(44);
 Width := WizardForm.DirEdit.Width
 Height := ScaleY(20);
 Text := 'D:\Games\Steam\steamapps\steamprofile';
 TabOrder := 2;
 //Color:=clColor;
 end;
 TestSystemButton := TNewButton.Create(WizardForm);
 with TestSystemButton do begin
 Parent := WizardForm.SelectDirPage;
 Caption := 'Обзор...';
 Left:= WizardForm.GroupBrowseButton.left
 Top:=WizardForm.DirEdit.Top + ScaleY(30) + ScaleY(44);
 Width:=WizardForm.GroupBrowseButton.Width
 Height:=WizardForm.GroupBrowseButton.Height
 OnClick:=@SystemButtonOnClick
 end;
 end;


По крайней мере, в этом направлении смотри.

Imitri7 22-08-2011 14:27 1737008

Лександер, не прокатило, пойду в справке искать

El Sanchez 23-08-2011 12:08 1737654

Цитата:

Цитата Imitri7
не прокатило, пойду в справке искать »

Imitri7, думаю, из реестра нужно брать инфу о местоположении профиля, например:
читать дальше »

Код:

[Files]
Source: {app}\file1.ext; DestDir: {code:GetSteamProfileDir|{reg:HKCU\Software\Valve\Steam,ModInstallPath|}}; Components: SteamProfileFiles
...
Source: {app}\fileN.ext; DestDir: {code:GetSteamProfileDir|{reg:HKCU\Software\Valve\Steam,ModInstallPath|}}; Components: SteamProfileFiles

[Components]
Name: SteamProfileFiles; Description: Steam Profile Files; Check: IsSteamProfileExists()

[code]
function GetSteamProfileDir(Param: String): String;
begin
    Result := ExtractFileDir(RemoveBackSlash(Param));
end;

function IsSteamProfileExists(): Boolean;
begin
    Result := DirExists(GetSteamProfileDir(ExpandConstant('{reg:HKCU\Software\Valve\Steam,ModInstallPath|}')));
end;


superalex 23-08-2011 18:59 1737895

в папке maps есть папка cstrike, мне нужна чтобы эта папка с файлами и вложенными в нее папками была сохранена в установщики подскажите пожалуйста нужные настройки ?

[Files]
Source: "maps\*"; DestDir: "{app}\counter-strike source";Flags:ignoreversion;

LinkOFF 23-08-2011 19:07 1737904

Доброго времени суток.У меня вопрос: что надо прописать в скрипте чтоб распаковать зашифрованный архив(с паролем)?
Архив freearc

Rikill 23-08-2011 20:35 1737956

LinkOFF, смотри документацию либо к исдоне либо к модулю от Шегората

boss911 23-08-2011 21:14 1737967

superalex

Код:

[Files]
Source: maps\*; DestDir: {app}\counter-strike source; Flags: ignoreversion recursesubdirs createallsubdirs


superalex 23-08-2011 22:04 1738005

Цитата:

Цитата boss911
boss911 »

спасибо

Raf-9600 24-08-2011 01:01 1738151

1. Как сделать чтоб файл устанавливался если выбран компонент "inMPQ\video\MPQ" и один (любой) из этих VideoD2\German VideoD2\Spanish VideoD2\French VideoD2\Italian ?
2. Ктонить подскажет код, скрывающий BeveledLabel на странице установки?

Habetdin 24-08-2011 02:07 1738174

Цитата:

Цитата Raf-9600
если выбран компонент "inMPQ\video\MPQ" и один (любой) из этих VideoD2\German VideoD2\Spanish VideoD2\French VideoD2\Italian »

Код:

[Files]
Source: File.ext; DestDir: {app}; Components: "inMPQ\video\MPQ" and ("VideoD2\German VideoD2\Spanish" or "VideoD2\French VideoD2\Italian"); Flags: ignoreversion


Цитата:

Цитата Raf-9600
код, скрывающий BeveledLabel на странице установки »

Код:

[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpInstalling then
    WizardForm.BeveledLabel.hide;
  if CurPageID = wpInfoAfter then
    WizardForm.BeveledLabel.show;
  // на wpFinished по-умолчанию скрыто, как и на wpWelcome
end;


Mafia_forever 24-08-2011 09:16 1738241

Кто нибудь дайте сыль на скачивание Inno Setup Preprocessor и botva2.dll

Mafia_forever 24-08-2011 09:46 1738259

Вложений: 1
люди помогите сделать как здесь http://forum.oszone.net/attachment.p...1&d=1314085443

insombia 24-08-2011 13:10 1738390

Mafia_forever сложно в примерах на innoultra посмотреть?

Raf-9600 24-08-2011 17:34 1738582

Цитата:

Цитата Habetdin
Цитата:

Цитата Raf-9600
Как сделать чтоб файл устанавливался если выбран компонент "inMPQ\video\MPQ" и один (любой) из этих VideoD2\German VideoD2\Spanish VideoD2\French VideoD2\Italian ? »

Код:

Source: File.ext; DestDir: {app}; Components: "inMPQ\video\MPQ" and ("VideoD2\German VideoD2\Spanish" or "VideoD2\French VideoD2\Italian"); Flags: ignoreversion
»

Пишет ошибку "Mismatched or misplaced quotes on parametr "Components"".

Habetdin 24-08-2011 17:53 1738588

Raf-9600, попробуйте без кавычек в Components, правда я не знаю, как Inno тогда поймет кусок "\German VideoD2\"

Raf-9600 24-08-2011 18:01 1738597

Цитата:

Цитата Habetdin
попробуйте без кавычек в Components »

В таком случае, жалуется на несуществующий компонент. По-моему знаки ( ) неверно воспринялись.

Rikill 24-08-2011 18:07 1738599

Не нужны кавычки и скобочки

Raf-9600 24-08-2011 18:49 1738613

Сорри, это я налажал, лишними были только кавычки

Единственное что я не понимаю, это зачем там "or", учитывая что из четырех компонентов в скобках, необходим любой один, чтоб условие выполнялось?

Rikill 24-08-2011 19:19 1738629

or это или, или этот компонент или тот ;)

El Sanchez 25-08-2011 08:32 1738906

Цитата:

Цитата Habetdin
попробуйте без кавычек в Components, правда я не знаю, как Inno тогда поймет кусок "\German VideoD2\" »

Habetdin, Raf-9600 перечислил 4 компонента, а не 2, только без запятых :)

Цитата:

Цитата Rikill
Не нужны кавычки и скобочки »

Rikill, скобки нужны, т.к. если, например, выбрать компонент VideoD2\Italian и не выбрать inMPQ\video\MPQ, файл все равно будет установлен, поэтому:

Код:

Source: File.ext; DestDir: {app}; Components: inMPQ\video\MPQ and (VideoD2\German or VideoD2\Spanish or VideoD2\French or VideoD2\Italian); Flags: ignoreversion

Mafia_forever 25-08-2011 10:53 1738982

insombia сыль дай

Rikill 25-08-2011 13:27 1739099

Mafia_forever, гугл возьми и найди

kindza811 25-08-2011 17:14 1739233

лого не отображается,хотя сделал всё по скрипту
[code][Setup]
AppName=Logo
AppVerName=Logo
DefaultDirName=C:\Logo

[Files]
Source: Button.bmp; Flags: dontcopy

Код:


procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
  ShellExec('', 'http://www.forum.ru-board.com', '' , '', SW_SHOW, ewNoWait, ResCode)
end;
 
procedure InitializeWizard();
var
  BtnPanel: TPanel;
  BtnImage: TBitmapImage;
begin
  ExtractTemporaryFile('Button.bmp')
   
  BtnPanel:=TPanel.Create(WizardForm)
  with BtnPanel do begin
    Left:=20
    Top:=325
    Width:=132
    Height:=27
    Cursor:=crHand
    OnClick:=@logoOnClick
    Parent:=WizardForm
  end
  BtnImage:=TBitmapImage.Create(WizardForm)
  with BtnImage do begin
    AutoSize:=True;
    Enabled:=False;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
    Parent:=BtnPanel
  end
end;


valyok666 25-08-2011 18:01 1739255

kindza811, кинь скрипт сделаю

kindza811 25-08-2011 18:05 1739260

Вложений: 1
Цитата:

Цитата valyok666
кинь скрипт сделаю »

вот

valyok666 25-08-2011 18:58 1739275

kindza811, ты просто в [Files] добавь Source: Button.bmp; Flags: dontcopy

kindza811 25-08-2011 22:48 1739398

Не помогло...

Habetdin 25-08-2011 23:12 1739423

kindza811, а вы после этого точно перекомпиллировали скрипт? Все должно работать :unsure:

kindza811 25-08-2011 23:21 1739432

Цитата:

Цитата Habetdin
а вы после этого точно перекомпиллировали скрипт? Все должно работать »

я разрешение поменял,половину рисунка стало видно,но не знаю как что бы полностью было видно :help:

Habetdin 25-08-2011 23:30 1739441

kindza811, либо еще раз уменьшить рисунок, либо изменить это:
Код:

  BtnPanel:=TPanel.Create(WizardForm)
  with BtnPanel do begin
    Left:=20 // положение относительно левого края окна
    Top:=325 // положение относительно верха окна
    Width:=132 // ширина кнопки
    Height:=27 // высота


kindza811 25-08-2011 23:33 1739444

сейчас попробую

LinkOFF 26-08-2011 00:08 1739465

Цитата:

Цитата Habetdin
либо еще раз уменьшить рисунок, либо изменить это: »

Я ему дал скрипт

Mafia_forever 26-08-2011 11:15 1739629

помогите создать несколько ярлыков на раб. стол и с разными названиями

Rikill 26-08-2011 11:20 1739633

Есть в справке.

insombia 26-08-2011 12:18 1739663

Mafia_forever

читать дальше »
[Icons]
Name: {commondesktop}\Back to the Future The Game - Episode 1; Filename: "{app}\Back to the Future The Game - Episode 1\BackToTheFuture101.exe"; IconIndex: 0; Check: MakeDesktopIcon
Name: {commondesktop}\Back to the Future The Game - Episode 2; Filename: "{app}\Back to the Future The Game - Episode 2\BackToTheFuture102.exe"; IconIndex: 0; Check: MakeDesktopIcon
Name: {commondesktop}\Back to the Future The Game - Episode 3; Filename: "{app}\Back to the Future The Game - Episode 3\BackToTheFuture103.exe"; IconIndex: 0; Check: MakeDesktopIcon
Name: {commondesktop}\Back to the Future The Game - Episode 4; Filename: "{app}\Back to the Future The Game - Episode 4\BackToTheFuture104.exe"; IconIndex: 0; Check: MakeDesktopIcon
Name: {commondesktop}\Back to the Future The Game - Episode 5; Filename: "{app}\Back to the Future The Game - Episode 5\BackToTheFuture105.exe"; IconIndex: 0; Check: MakeDesktopIcon
Name: {group}\{cm:UninstallProgram,Back to the Future Collection}; Filename: {uninstallexe}

Sollar 26-08-2011 12:53 1739690

Здравствуйте, мучаюсь довольно долго
Нужно чтобы при выбора одной задачи (то есть отметки в тасках на первой в списке) все остальные стали б неотмеченными и скрытыми

В этом варианте почему-то только при постановке второй галочки процедура срабатывает

Код:

procedure TaskOnClick(Sender: TObject);
var
i:integer;
begin
  if IsTaskSelected('nomer1') or IsTaskSelected('nomer0') then
        begin
        for i:=2 to WizardForm.TasksList.Items.Count-1 do
          begin
          WizardForm.TasksList.ItemEnabled[i]:= False;
          end;
        end;
end;

procedure InitializeWizard();
begin
WizardForm.TasksList.OnClick := @TaskOnClick;
end;


Habetdin 26-08-2011 14:31 1739733

Цитата:

Цитата Sollar
Нужно чтобы при выбора одной задачи (то есть отметки в тасках на первой в списке) все остальные стали б неотмеченными и скрытыми »

А почему не сделать задачи с флагом exclusive? Тогда сразу оба нельзя выбрать :) Пример:
Код:

[Tasks]
Name: nomer; Description: Тырым-пырым;
Name: nomer/1; Description: Первый; Flags: exclusive;
Name: nomer/2; Description: Второй; Flags: exclusive;


Цитата:

Цитата LinkOFF
Я ему дал скрипт »

Проблема с Button.bmp и его размерами :tomato2:

insombia 26-08-2011 14:37 1739738

Sollar если ты о репаке от рекодинг deus ex то хотелось тоже узнать как это сделать?

Rikill 26-08-2011 14:44 1739740

insombia, surface.dll какбе, она всё делает.

Sollar 26-08-2011 14:50 1739741

Habetdin, потому что задач где-то около 20, т.е. есть 1 задача, включающая в себя все остальные, типа "все"
insombia, нет) просто в один инсталлер собираю программы, которыми пользуюсь

Mafia_forever 26-08-2011 14:57 1739743

insombia почти получилось только выдаёт маленькую ошибку

Required function or procedure 'MakeDesktopIcon' not found :gamer:

LinkOFF 26-08-2011 15:18 1739748

Как сделать в скрипте isdone выбор компонентов с извлечением их из архива freearc?

Rikill 26-08-2011 15:29 1739754

Mafia_forever, удали все check
линкофф, читай справку в исдоне

Mafia_forever 26-08-2011 16:11 1739774

Вложений: 1
как поставить картиру как показанно на картинке чтобы было только на первой и последней странице!!

kindza811 26-08-2011 16:24 1739778

Цитата:

Цитата Mafia_forever
как поставить картиру как показанно на картинке чтобы было только на первой и последней странице!! »

Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp
 
[files]
Source: Img2.bmp; DestDir: {tmp}; Flags: dontcopy

Код:


var
WelcomeLabel1, WelcomeLabel2, FinishedLabel, FinishedHeadingLabel: TLabel;
 
procedure InitializeWizard();
begin
ExtractTemporaryFile('img2.bmp');
 
WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\img2.bmp'));
 
WelcomeLabel1:= TLabel.Create(WizardForm);
WelcomeLabel1.AutoSize:= False;
with WizardForm.WelcomeLabel1 do
WelcomeLabel1.SetBounds(Left, Top, Width, Height);
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.SetBounds(Left, Top, Width, Height);
WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel2.Font.Color:= clWhite;
WelcomeLabel2.Transparent:= True;
WelcomeLabel2.WordWrap:= true;
WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent:= WizardForm.WelcomePage
 
FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.AutoSize:= False;
with WizardForm.FinishedHeadingLabel do
FinishedHeadingLabel.SetBounds(Left, Top, Width, Height);
FinishedHeadingLabel.Font:= WizardForm.FinishedHeadingLabel.Font
FinishedHeadingLabel.Font.Color:= clWhite;
FinishedHeadingLabel.Transparent:= True;
FinishedHeadingLabel.WordWrap:= true;
FinishedHeadingLabel.Caption:= WizardForm.FinishedHeadingLabel.Caption;
FinishedHeadingLabel.Parent:= WizardForm.FinishedPage
 
FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
FinishedLabel.SetBounds(Left, Top, Width, Height);
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
FinishedLabel.Parent:= WizardForm.FinishedPage
 
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
end;
 
procedure CurPageChanged(CurPageID: Integer);
begin
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
end;


insombia 26-08-2011 16:54 1739799

Mafia_forever скачай это там все это легко делается

Mafia_forever 26-08-2011 16:57 1739803

kindza811 спасибо большое :up

Mafia_forever 26-08-2011 17:02 1739808

Вложений: 1
след вопрос>> как сделать как показано на картинку и дайте прямую ссылку для скачивания botva2.dll и musicbutton.bmp

Mafia_forever 26-08-2011 17:07 1739814

insombia болшое спасибо :)

kindza811 26-08-2011 17:10 1739815

Подскажите пожалуйста,раньше я создавал репаки и сжатие было хорошим,игра 4 GB была 1.8 GB,а сейчас игра 4.1 GB стала 2.9 GB,что делать?) :hi:

Mafia_forever 26-08-2011 17:15 1739820

Вложений: 1
как создать ярлыки как показанно на картинке

kindza811 26-08-2011 17:21 1739824

Цитата:

Цитата Mafia_forever
как создать ярлыки как показанно на картинке »

тебе скинули программу через неё как раз и можно это сделать

Rikill 26-08-2011 17:34 1739834

kindza811, это зависит от самой игры, некоторые игры разработчики сами жмут 7зипом, их надо сначала прекомпом потом фриарком :D а некоторые оставляют девственные файлы - они хорошо жмутся.

kindza811 26-08-2011 17:41 1739838

Можешь объяснить по подробней?Я просто иногда туго соображаю

insombia 26-08-2011 18:02 1739852

Mafia_forever Полезное сообщение-это спасибо

Rikill 26-08-2011 18:09 1739855

kindza811, короче если игра плохо сжимается жми программой Precomp а полученный файл freearcом, для распаковки этих файлов юзай isdone, подробней не смогу объяснить(

Mafia_forever 26-08-2011 19:32 1739895

kindza811 да мне скинули прогу но она не так создает как я хочу :drug:

как сделать как показано на картинке http://forum.oszone.net/attachment.p...8&d=1314363688 и дайте прямую ссылку для скачивания botva2.dll и musicbutton.bmp

Mafia_forever 26-08-2011 19:36 1739897

Вложений: 1
и последний вопрос как сделать как показано на картинке

insombia 26-08-2011 20:04 1739907

Mafia_forever isdone

LinkOFF 26-08-2011 20:46 1739926

Цитата:

Цитата kindza811
Подскажите пожалуйста,раньше я создавал репаки и сжатие было хорошим,игра 4 GB была 1.8 GB,а сейчас игра 4.1 GB стала 2.9 GB,что делать? »

Сжатие зависит от кол-ва файлов, их размера и типа
Цитата:

Цитата Mafia_forever
как создать ярлыки как показанно на картинке »

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"


[Icons]
Name: "{userdesktop}\Одиночная игра"; Filename: "{app}\файл.exe"; WorkingDir: "{app}"; Tasks: desktopicon;
Name: "{userdesktop}\Сетевая игра"; Filename: "{app}\файл.exe"; WorkingDir: "{app}"; Tasks: desktopicon;

Mafia_forever 26-08-2011 21:27 1739957

LinkOFF не то я имею виду так

Дополнительные ярлыки игры:

"галочка" Создать ярлык для игры
"галочка" Создать ярлык для трейнера игры

Дополнительные задачи:

"галочка" Установить Microsoft DirectX
"галочка" Установить Microsofst Visual C++

вот это я имею виду

помогите плиз очень нужно просто

LinkOFF 26-08-2011 21:54 1739979

Mafia_forever, Галочка там по умолчанию должна стоять
а доп. задачи
[Tasks]
Name: additional; Description: "Дополнительные компоненты";
Name: additional\dx; Description: "Обновить DirectX"; Flags: unchecked
Name: additional\vcr; Description: "Обновить Visual C++"; Flags: unchecked;

[Run]
Filename: {src}\Redist\DirectX\DXSETUP.exe; Tasks: additional\dx; Parameters: /silent; StatusMsg: Обновление DirectX...
Filename: {src}\Redist\vcredist_x86.exe; Tasks: additional\vcr; Parameters: /q; StatusMsg: Обновление Visual C++...

Так?

А если хочешь линии то подпиши это

[Setup]
ShowTasksTreeLines=true

Mafia_forever 26-08-2011 22:03 1739989

вот это я имел виду спасибо огромное :happy:

[Tasks]
Name: additional; Description: "Дополнительные компоненты";
Name: additional\dx; Description: "Обновить DirectX"; Flags: unchecked
Name: additional\vcr; Description: "Обновить Visual C++"; Flags: unchecked;

как сделать также но теперь чтоб ярлыки несколько было на раб. столе и какой хочешь ярлык отмечаешь и все

LinkOFF 26-08-2011 22:18 1740005

[Tasks]
Name: "desktopicon"; Description: "Создать ярлык для игры"; GroupDescription: "{cm:AdditionalIcons}"
Name: "desktopicon"; Description: "Создать для трейнера"; GroupDescription: "{cm:AdditionalIcons}"


[Icons]
Name: "{userdesktop}\Одиночная игра"; Filename: "{app}\файл.exe"; WorkingDir: "{app}"; Tasks: desktopicon;
Name: "{userdesktop}\Сетевая игра"; Filename: "{app}\файл.exe"; WorkingDir: "{app}"; Tasks: desktopicon;

Mafia_forever 26-08-2011 22:26 1740011

бинго спасибо LinkOFF

LinkOFF теперь еще маленькая мелочь нужен botva2dll и musicbutton.bmp

люди чтоб не мучить вас вопросами плиз пройдите по этой ссылке http://spaces.ru/files/?sid=&link_id...ss&dir=1729630 и скачайте архив и просмотрите внимательно если кто понял дате готовый скрипт где всё раскидано по полочкам :)

LinkOFF 26-08-2011 22:35 1740019

http://rghost.ru/19425011 там и botva2.dll и musicbutton.bmp

LinkOFF 26-08-2011 22:51 1740026

Цитата:

Цитата Mafia_forever
люди чтоб не мучить вас вопросами плиз пройдите по этой ссылке http://spaces.ru/files/?sid=&link_id...ss&dir=1729630 и скачайте архив и просмотрите внимательно если кто понял дате готовый скрипт где всё раскидано по полочкам »

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

VASYAKRN 27-08-2011 09:24 1740186

Как убрать фон у надписей от ISDone

insombia 27-08-2011 12:11 1740242

VASYAKRN CustomMessages весь от него поудаляй когда сделаешь инсталятор и будет писать ошибки там где ошибки связанные с ISDon'ом тоже удали

Rikill 27-08-2011 13:24 1740276

VASYAKRN, справку читай окда?

Mafia_forever 27-08-2011 13:41 1740286

люди помогите последняя дороботка для моего инсталятора как вставить musicbutton.png и какие библиотеки нужны
дайте полное описание до полочки

Mafia_forever 27-08-2011 15:11 1740334

и ещё как сделать чтоб в конце просил перезагрузку

Habetdin 27-08-2011 15:27 1740344

Цитата:

Цитата Mafia_forever
просил перезагрузку »

Код:

[Setup]
AlwaysRestart=true


Raf-9600 27-08-2011 15:54 1740371

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

Код:

[_Code]
procedure ChangeCaption(str: string);
begin
    WizardForm.StatusLabel.Caption:= str;
end;

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
  Info: TNewStaticText;
  InfoCaption: TNewStaticText;
  InfoPanel: TPanel;

  NeedSize:Integer;
  FreeMB, TotalMB: Cardinal;
  NeedSpaceLabel: TLabel;
  n: Integer;
  VolumeName, FileSystemName: String;
  VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
  ListBox: TListBox;
  StartMenuTreeView: TStartMenuFolderTreeView;

  procedure GetFreeSpaceCaption(Sender: TObject);
var
  Path: String;
begin
  Path := ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled := False else
  WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
  if NeedSize > 1024 then
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard1();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;

procedure InitializeWizard2();
begin
  NeedSize := 2500;                  //Здесь указывается место для приложения
  WizardForm.DiskSpaceLabel.Hide;
  NeedSpaceLabel := TLabel.Create(WizardForm);
  with NeedSpaceLabel do
  begin
  Parent := WizardForm.SelectDirPage;
  Left := ScaleX(0);
  Top := ScaleY(220);
  Width := ScaleX(209);
  Height := ScaleY(13);
  end;
  ListBox:= TListBox.Create(WizardForm)
  ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
  ListBox.Font.Size:= 9
  ListBox.Font.Style:= []
  ListBox.Font.Name:= 'Courier New';
  ListBox.OnClick:= @ObjectOnClick;
  ListBox.Parent:= WizardForm.SelectDirPage;
  WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
  end;

procedure CurPageChanged1(CurPageID: Integer);
  begin
  if CurPageID=wpSelectDir then
  begin
  GetNeedSpaceCaption;
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled:=False
  ListBoxRefresh
  end;
end;

procedure InitializeWizard3();
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(200);
  InfoPanel := TPanel.Create(WizardForm);
  InfoPanel.Parent := WizardForm.SelectComponentsPage;
  InfoPanel.Caption := '';
  InfoPanel.Top := WizardForm.ComponentsList.Top;
  InfoPanel.Left := ScaleX(216);
  InfoPanel.Width := ScaleX(200);
  InfoPanel.Height := WizardForm.ComponentsList.Height;
  InfoPanel.BevelInner := bvRaised;
  InfoPanel.BevelOuter := bvLowered;
  InfoCaption := TNewStaticText.Create(WizardForm);
  InfoCaption.Parent := WizardForm.SelectComponentsPage;
  InfoCaption.Caption := 'Описание';
  InfoCaption.Left := ScaleX(224);
  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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
  Info.WordWrap := true;
  //Впишыте описание компонентов
  enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
      'Выберите язык внутриигрового текста;'+ //Text
      'Немецкий текст;'+
      'Испанский текст;'+
      'Французский текст;'+
      'Итальянский текст;'+
      'Польский текст;'+

      'Выберите этот пункт, если вы не хотите чтобы, после запуская игры, воспроизводились вступительные ролики Blizzard;' // NoIntro
    );
end;



  function ShouldSkipPage(CurPage: Integer): Boolean;
    begin
      if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
        case CurPage of
          wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
          wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
            Result := True;
        end;
    end;

    const
      WM_LBUTTONDOWN = 513;
      WM_LBUTTONUP = 514;

    procedure InitializeWizard4();
    begin
      if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
      begin
        PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
        PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
      end;
    end;

    procedure CurPageChanged2(CurPageID: Integer);
    begin
      if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
        (CurPageID = wpSelectComponents) then
        WizardForm.BackButton.Visible := False;
    end;


//Проверка на оставшыеся файлы
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Res: Integer;
begin
 case CurUninstallStep of
 usPostUninstall:
  begin
  if DirExists(ExpandConstant('{app}')) then
  if ExpandConstant('{language}') = 'ua' then
  case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
              '"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
              '"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
              '"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

        IDCANCEL:;
  end
  else
  if ExpandConstant('{language}') = 'ru' then
  case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
              '"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
              '"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
              '"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

        IDCANCEL:;
  end
  else
    case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
              '"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
              '"No" to open the directory with explorer to delete the files manually.'#13#13 +
              '"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

        IDCANCEL:;
    end
  end
 end
end;




const
n1=28; //количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N1] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
 For i:=1 to X do A:=A+chr(i);
 B:='';
 For i:=1 to X do begin
  j:=Random(Length(A)-1)+1;
  C:='';
  B:=B + A[j];
  for k:=1 to Length(A) do
  if k<>j then C:=C+A[k];
  A:=C;
 end;
 for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
StatusMessages: TNewStaticText;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
 then begin
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
  if (currTime/{#TIME_FOR_VIEW} = N1) then currTime:=0;
 end;
end;


procedure InitializeWizard5;
begin
bmp:=get_unique_random_number(N1);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';
for z:=2 to N1 do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged3(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;


procedure CurPageChanged4(CurPageID: Integer);
begin
  if CurPageID = wpInstalling then
    WizardForm.BeveledLabel.hide;
  if CurPageID = wpInfoAfter then
    WizardForm.BeveledLabel.show;
end;




procedure InitializeWizard;
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
end;


procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
  CurPageChanged2(CurPageID);
  CurPageChanged3(CurPageID);
  CurPageChanged4(CurPageID);
end;

procedure DeinitializeSetup();
begin
  disabledesc();
  KillTimer(0, TimerID);
end;


Rikill 27-08-2011 16:00 1740375

Raf-9600, удали все ненужные файлы, и убери стандартное сжатие т.е.
строчку Compression из секции [setup] и всё что связано со сжатием.

Raf-9600 27-08-2011 16:15 1740385

Цитата:

Цитата Rikill
удали все ненужные файлы »

Таких нет :)

Цитата:

Цитата Rikill
и убери стандартное сжатие т.е.
строчку Compression из секции [setup] »

Если её убрать (у меня она Compression=zip) то сжатие будет использоваться более сильное.

Цитата:

Цитата Rikill
и всё что связано со сжатием »

Пробовал даже InternalCompressLevel=none - бестолку.

Собстно я сомневаюсь что это с сжатием связано, т.е. было дело, паковал гораздо более объемные файлы с сжатием LZMA, и таких трабл небыло.

Rikill 27-08-2011 16:18 1740388

Raf-9600, дай скрипт и файлы, если боишся что VASIAKRN с*издит то кидай в личку.

Raf-9600 27-08-2011 16:31 1740396

Цитата:

Цитата Rikill
кидай в личку »

Готово :)

vint56 27-08-2011 16:39 1740404

Mafia_forever, BASS_v.1.2-pre от Shegorat
http://ifolder.ru/24378199

Raf-9600, а есть такое Compression=zip можно поставить Compression=none и на временые файлы tmp
Source: botva2.dll; DestDir: {tmp}; Flags: nocompression это пример

Raf-9600 27-08-2011 16:46 1740410

Цитата:

Цитата vint56
и на временые файлы tmp
Source: botva2.dll; DestDir: {tmp}; Flags: nocompression это пример »

Знаю, не дурак :)
У меня на все "системные" файлы стоит
Код:

Flags: dontcopy noencryption nocompression solidbreak
Но я все таки склоняюсь что собака зарыта в коде.

Mafia_forever 27-08-2011 16:48 1740412

скажите как помтавить musicbutton.png

скажите как поcтавить musicbutton.png

Rikill 27-08-2011 16:49 1740414

vint56, у него секция [files] на 9 тысяч строк!

Mafia_forever 27-08-2011 16:56 1740417

и ещё как зарегестрировать ярлык на раб столе чтоб он запускался всегда а то у меня запускается 1 раз а потом ошибка пишет Отправить отчет или Не отправлять отчет

Raf-9600 27-08-2011 16:59 1740421

Цитата:

Цитата Rikill
у него секция [files] на 9 тысяч строк! »

И? В этом и проблема? Я сделал инсталятор другой игры, с эти же скриптом, секция [files] - 225 строчек. Да, запускается инсталятор быстрее, но закрывается так же долго.

vint56 27-08-2011 17:15 1740432

Raf-9600, поменяй местами
procedure DeinitializeSetup();
begin
disabledesc();
KillTimer(0, TimerID);
на
KillTimer(0, TimerID);
disabledesc();
end;

sergey3695 27-08-2011 17:20 1740435

Raf-9600, это все из-за билиотеки, а не из-за скрипта. Лови пример как это сделать без библиотеки (компилируется на последней версии (Inno Setup build 110319)). http://ifolder.ru/25414377

Raf-9600 27-08-2011 17:20 1740436

vint56, не помогло. Но все равно Спасибо, это вроде бы ближе к истине, чем то что мне рекомендовали ранее :)

Mafia_forever 27-08-2011 17:28 1740443

помогите кто нибудь :help:

vint56 27-08-2011 17:31 1740446

Mafia_forever, тебе уже ответили
Mafia_forever, BASS_v.1.2-pre от Shegorat
http://ifolder.ru/24378199

Raf-9600 27-08-2011 17:42 1740454

Цитата:

Цитата sergey3695
это все из-за билиотеки, а не из-за скрипта. Лови пример как это сделать без библиотеки (компилируется на последней версии »

Скрипт конечно крутой, но боюсь что мне знаний не хватит, адаптировать его под собственные нужды.

Mafia_forever 27-08-2011 17:44 1740456

vint56 о да ответили но я там не видел подробностей куда чё в скрипт вписывать :dont-know

R.i.m.s.k.y. 27-08-2011 18:21 1740480

ответить тебе и сделать за тебя - это две большие разницы

Цитата:

Цитата Mafia_forever
и ещё как зарегестрировать ярлык на раб столе чтоб он запускался всегда а то у меня запускается 1 раз а потом ошибка пишет Отправить отчет или Не отправлять отчет »

если ярлык запускается первый раз и потом не запускается - дело скорее всего "не в бензине"

Mafia_forever 27-08-2011 22:20 1740617

дайте сыль для callbackctrl.dll

Habetdin 27-08-2011 23:13 1740652

Mafia_forever, первые ссылки из Google: http://rghost.ru/9817741, http://rghost.ru/9353911 - в архивах есть CallbackCtrl.dll

insombia 28-08-2011 11:07 1740824

Mafia_forever чтобы не спрашивать по 100500 раз здесь есть все библиотеки со скриптами http://forum.ru-board.com/topic.cgi?...&limit=1&m=4#1

вот не могу понять что такое в isSlideShow v1.02 Hwnd - Хэндл окна обясните

LinkOFF 28-08-2011 11:23 1740841

Что нужно прописать в скрипте чтоб когда выбираешь компонент в инсталле менялись параметры реестра

VASYAKRN 28-08-2011 12:37 1740889

Текстурируйте кнопки http://inno.at.ua/TMP/Assassins_Creed_Revelations.7z

insombia 28-08-2011 12:49 1740897

VASYAKRN капец ты что сам не можешь или что??? это не сложно есть куча примеров как это делать

Mafia_forever 28-08-2011 14:46 1740973

вот скрипт http://spaces.ru/files/?sid=&link_id...ss&dir=1729630 куда чё надо вписать чтоб на инсталяторе была musicbutton.png у меня есть все библиотеки для этого но я не знаю что надо вписывать в сам код в сам скрипт

valyok666 28-08-2011 16:10 1741014

Mafia_forever, ты бы скидывал архив с файлами

insombia 28-08-2011 18:35 1741066

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

R.i.m.s.k.y. 28-08-2011 18:43 1741069

Цитата:

Цитата LinkOFF
Ну кто-нибудь мне поможет на счет этого
Что нужно прописать в скрипте чтоб когда выбираешь компонент в инсталле менялись параметры реестра »

во-1, здесь никто никому не должен
во-2 - может ты это имеешь ввиду?
Код:

[Registry]
Components: Smooth_video_project_cool_things; Root: HKCU; Subkey: Software\Gabest\Media Player Classic; Flags: uninsdeletekey

а можно узнать что вы делаете чтобы ненароком не скачать :tongue:

Mafia_forever 28-08-2011 19:48 1741107

помогите с musicbutton

Gugle 29-08-2011 10:44 1741455

Доброго времени суток!
Мне надо, что бы при выборе типа установки (на первой панели), на второй панели была видна или скрывалась одна или несколько строк.
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[_CODE_]
var
  Page: TWizardPage;
  PageTest: TInputQueryWizardPage;
  ComboBoxLevel: TNewComboBox;
  s: String;

procedure InitializeWizard;
var
  i: Integer;

begin
  { РАЗ }
  Page := CreateCustomPage(wpWelcome, 'Уровень сложности', 'Выберите уровень сложности установки');
  ComboBoxLevel := TNewComboBox.Create(Page);
  ComboBoxLevel.Width := Page.SurfaceWidth;
  ComboBoxLevel.Parent := Page.Surface;
  ComboBoxLevel.Style := csDropDownList;
  ComboBoxLevel.Items.Add('Стандарт');
  ComboBoxLevel.Items.Add('Эксперт');
  ComboBoxLevel.ItemIndex := 0;

  { ДВА }
  PageTest := CreateInputQueryPage(Page.ID, 'Настройки',
      'ВНИМАНИЕ!', 'Нажмите кнопку "Далее"');
  PageTest.Add('Видим всегда', False);
  PageTest.Add('Видит только эксперт', False);
  PageTest.Values[0] := 'всегда';
  PageTest.Values[1] := 'эксперт';

end;

// обработчик нажатия на клавишу Next
function NextButtonClick(CurPageID: Integer): Boolean;
var
  i: Integer;

begin
  Result := True;

  // Эксперт
  if CurPageID = PageTest.ID then begin
   
    Exit;
  end;
end;


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

Sollar 29-08-2011 14:04 1741600

Объясните, почему если из строчки Name: nomer0; Description: Все222; GroupDescription: w; MinVersion: 0,1; Check: isTaskChecked('nomer0'); Components: nomer0; удалить Components: nomer0; то становится видно зависимые задачи у nomer1, если оставить - нет

Код:

[Types]
Name: Ros; Description: Рос
Name: Other; Description: Другое
 
[Components]
;компоненты Другое
Name: nomer0; Description: Все; Types: Other; Flags: disablenouninstallwarning checkablealone; 
Name: ex1; Description: Alcohol52; Types: Other; Flags: disablenouninstallwarning
Name: ex2; Description: BullzipPDFPrinter; Flags: disablenouninstallwarning; Types: Other; 
Name: ex3; Description: FoxitReader; Types: Other; Flags: disablenouninstallwarning; 
;компоненты Рос
Name: nomer1; Description: Все; Types: Ros; Flags: disablenouninstallwarning checkablealone; 
Name: ex4; Description: 7zip; Types: Ros; Flags: disablenouninstallwarning; 
 
[Tasks]
Name: nomer1; Description: Все; GroupDescription: ж; MinVersion: 0,1; Check: isTaskChecked('nomer1'); Components: nomer1;
Name: nomer1; Description: Все; GroupDescription: ж; MinVersion: 0,1; Flags: unchecked; Check: not(isTaskChecked('nomer1')); Components: nomer1; 
 
Name: nomer0; Description: Все222; GroupDescription: w; MinVersion: 0,1; Check: isTaskChecked('nomer0'); Components: nomer0;
Name: nomer0; Description: Все222; GroupDescription: w; MinVersion: 0,1; Flags: unchecked; Check: not(isTaskChecked('nomer0')); Components: nomer0; 
Name: nomer0\Alcohol52; Description: Alcohol52; GroupDescription: w; Components: ex1; MinVersion: 0,1; Check: isTaskChecked('nomer0\Alcohol52');
Name: nomer0\Alcohol52; Description: Alcohol52; GroupDescription: w; Components: ex1; MinVersion: 0,1; Flags: unchecked ; Check: not(isTaskChecked('nomer0\Alcohol52')); 
Name: nomer0\FoxitReader; Description: FoxitReader; GroupDescription: w; Components: ex3; MinVersion: 0,1; Check: isTaskChecked('nomer0\FoxitReader'); 
Name: nomer0\FoxitReader; Description: FoxitReader; GroupDescription: w; Components: ex3; MinVersion: 0,1; Flags: unchecked; Check: not(isTaskChecked('nomer0\FoxitReader'));
Name: nomer0\BullzipPDFPrinter; Description: BullzipPDFPrinter; GroupDescription: w; Components: ex2; MinVersion: 0,1; Check: isTaskChecked('nomer0\BullzipPDFPrinter'); 
Name: nomer0\BullzipPDFPrinter; Description: BullzipPDFPrinter; GroupDescription: w; Components: ex2; MinVersion: 0,1; Flags: unchecked; Check: not(isTaskChecked('nomer0\BullzipPDFPrinter')); 
Name: nomer1\zip7; Description: 7zip; GroupDescription: ж; Components: ex4; MinVersion: 0,1; Check: isTaskChecked('nomer1\zip7'); 
Name: nomer1\zip7; Description: 7zip; GroupDescription: ж; Components: ex4; MinVersion: 0,1; Flags: unchecked; Check: not(isTaskChecked('nomer1\zip7'));

Также хотелось бы увидеть ответ на это сообщение тык

LinkOFF 29-08-2011 14:35 1741633

Доброго времени суток.Что нужно прописать в скрипте чтоб при выбое компонентов из архива freearc распаковывался нужный файл

No4noylis 29-08-2011 14:47 1741646

LinkOFF, В ISDоne 0,6 есть пример.

Mafia_forever 29-08-2011 17:08 1741801

скажите как убать путь распаковки во время установки
Пример:
Распаковка файлов....
C\Program Files\Inno Setup 5\bass.dll /////как убрать эту строку чтоб никогда не появлялась

R.i.m.s.k.y. 29-08-2011 17:35 1741820

Sollar, какой-то неправильный скрипт, и он делает неправильный мйод :o
конечно строчка в допзадачах
Name: nomer0; ... Check: isTaskChecked('nomer0'); Components: nomer0;
отработает, но во-1 isTaskChecked отработает только раз перед показом окна задач и в этот момент задача не выбрана, а во-2 ты в строчке этой задачи спрашиваешь а выбрана ли она? да еще флаг uncheked ставишь, если инно компилит или ворд красненьким не подчеркивает не значит что ошибки нет

Mafia_forever,
шапку для кого делали?

Код:

procedure InitializeWizard();
...
WizardForm.FileNameLabel.Visible:= False;
...

или
Код:

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

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

procedure ShowInstallPath();
begin
WizardForm.FileNameLabel.Visible := True;
end;


El Sanchez 29-08-2011 18:07 1741845

Цитата:

Цитата Sollar
Объясните, почему если из строчки Name: nomer0; Description: Все222; GroupDescription: w; MinVersion: 0,1; Check: isTaskChecked('nomer0'); Components: nomer0; удалить Components: nomer0; то становится видно зависимые задачи у nomer1, если оставить - нет »

Sollar, потому что зависимые задачи/компоненты нужно писать сразу после основной, а не через несколько строчек, да и R.i.m.s.k.y. верно говорит - лишние проверки да и вообще строки. isTaskChecked - кастомная функция? Или спутали с IsTaskSelected? Хотя бы должно быть так:
Код:

[Types]
Name: Ros; Description: Рос
Name: Other; Description: Другое

[Components]
;компоненты Другое
Name: nomer0; Description: Все; Types: Other; Flags: disablenouninstallwarning checkablealone;
Name: ex1; Description: Alcohol52; Types: Other; Flags: disablenouninstallwarning
Name: ex2; Description: BullzipPDFPrinter; Flags: disablenouninstallwarning; Types: Other;
Name: ex3; Description: FoxitReader; Types: Other; Flags: disablenouninstallwarning;
;компоненты Рос
Name: nomer1; Description: Все; Types: Ros; Flags: disablenouninstallwarning checkablealone;
Name: ex4; Description: 7zip; Types: Ros; Flags: disablenouninstallwarning;

[Tasks]
Name: nomer1; Description: Все; GroupDescription: ж; MinVersion: 0,1; Components: nomer1
Name: nomer1\zip7; Description: 7zip; GroupDescription: ж; Components: ex4; MinVersion: 0,1
Name: nomer0; Description: Все222; GroupDescription: w; MinVersion: 0,1; Components: nomer0
Name: nomer0\Alcohol52; Description: Alcohol52; GroupDescription: w; Components: ex1; MinVersion: 0,1
Name: nomer0\FoxitReader; Description: FoxitReader; GroupDescription: w; Components: ex3; MinVersion: 0,1
Name: nomer0\BullzipPDFPrinter; Description: BullzipPDFPrinter; GroupDescription: w; Components: ex2; MinVersion: 0,1


Цитата:

Цитата R.i.m.s.k.y.
если инно компилит или ворд красненьким не подчеркивает не значит что ошибки нет »

R.i.m.s.k.y., этт точно.

Mafia_forever 29-08-2011 18:12 1741849

R.i.m.s.k.y. как можно теперь вместо

C\Program Files\Inno Setup 5\bass.dll

поставить это

Общий Размер 800мб... Распаковано 80мб - 5%

Mafia_forever 29-08-2011 21:19 1741992

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

R.i.m.s.k.y. 29-08-2011 21:25 1741997

Mafia_forever, не знаю, мне это неинтересно, недаром я в подпись вынес оформление в инно - пустая трата времени, головняка много, а толку мало

Mafia_forever 29-08-2011 22:13 1742042

R.i.m.s.k.y.
ладно потом узнаю а обьясни что такое РЕПАК а то я не непонимаю

kindza811 29-08-2011 22:16 1742046

Здравствуйте,помогите мне сделать такой же инсталлятор как показано на скриншотах






kindza811 29-08-2011 22:19 1742048

Вложений: 2
http://forum.oszone.net/attachment.p...1&d=1314641926
http://forum.oszone.net/attachment.p...1&d=1314641926

R.i.m.s.k.y. 29-08-2011 22:20 1742053

Mafia_forever, нашел епт гугель :)
к твоему сведению яндекс давно уже починили

Репак - это перепакованное нечто с разными целями и очевидностями , отличающееся от оригинала в разные стороны полезности
К примеру можно взять дистр вишера 1, грамотно содрать регшотом, добавить к нему приключения что вышли, книги, музыку, ролики и тп что не вошло в оффиздание, все патчи и носд - будет суперрепак (у меня такой, да!)
А можно взять оригинал CoD и повырезать из него все дороги кроме русской, пережать в нем видео в три раза меньше, звук в 56кбит с целью меньшего размера - будет гетторепак
А можно взять идиотский формат блурея и без пережатия запихать все в один файл-контейнер-матрешку, что значительно юзабельнее, по пути сняв заSHITу - тоже будет репак, ремуксом называется
Далее берется ремукс и палка-руко-выпрямлялка, видео кодится до приемлемого размера с меньшим разрешением кадра с целью утягивания по открытым каналам связи, сиречь интернет - сие зовется СЧЕГОСОДРАЛИ_рип, если драли с блурика - блюрейрип.

в таком вот акцепте

вот поэтому я и не долюбливаю оформлялщиков, акцентируются на эффектном внешнем виде, а после скачки не работает установка, на 40-60% ошибки недостающих файлов
такими геттокодерами инно понимается как цель самовыражения, наподобие забора, отметимся красиво и похрену что за забором

kindza811, а чей-то на твои картинки антивирь мой ругается как Каддафи на НАТО? только ты не думай что я решил помочь

Rikill 29-08-2011 22:42 1742074

kindza811, этот скрипт защищён авторскими правами, тебе его никто не даст.

Mafia_forever 29-08-2011 23:12 1742111

R.i.m.s.k.y. надо подумать очень долго я почти считай сделал свой инсталятор только не магу найти код для musicbutton.png

insombia 29-08-2011 23:31 1742130

Mafia_forever innoultra.ru там есть почти все!

Mafia_forever 30-08-2011 00:15 1742165

insombia у меня на инстляторе во время распаковки ARC архива прогресс не наполняется что сделать надо не знаешь

Raf-9600 30-08-2011 01:10 1742190

У меня есть вот такой батник:
Код:

for /R data\local\sfx\Act1 %%i in (*.ogg) do oggdec.exe "%%i"
Ктонить подскажет, как его перенести в секцию [Run]? В смысле чтоб функции прописанные выше, выполнялись навпрямую, без батников.

El Sanchez 30-08-2011 09:20 1742276

Цитата:

Цитата Raf-9600
Ктонить подскажет, как его перенести в секцию [Run]? В смысле чтоб функции прописанные выше, выполнялись навпрямую, без батников. »

Raf-9600,
Код:

[Run]
Filename: {cmd}; Parameters: "/c for /R ""полный путь до data\local\sfx\Act1"" %i in (*.ogg) do oggdec.exe ""%i"""; Flags: runhidden


R.i.m.s.k.y. 30-08-2011 09:43 1742285

El Sanchez, я бы добавил на конце waituntilterminated и WorkingDir

Код:

[Run]
Filename: {cmd}; Parameters: "/c for /R ""полный путь до data\local\sfx\Act1"" %i in (*.ogg) do oggdec.exe ""%i""";  WorkingDir: """полный путь до data\local\sfx\Act1""";  StatusMsg: "немножко уличной магии";  Flags: runhidden waituntilterminated


vint56 30-08-2011 09:51 1742293

Raf-9600, есть такой код от Shegorat может пригодится
читать дальше »
[Setup]
AppName=RecodeOgg
AppVerName=RecodeOgg
OutputDir=.
OutputBaseFilename=RecodeOgg
DefaultDirName={pf}\RecodeOgg
AppendDefaultDirName=False
DisableDirPage=True

[files]
Source: oggdec.exe; DestDir: {app};
Source: oggs\*; DestDir: {app};
Source: oggs\*; DestDir: {app}\Data;
[code]
var
Files: Array of String;
S: String;
n: Integer;

Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k:= Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
End;

procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;

procedure RecodeOgg;
var ResultCode: integer; CurFile: String;
begin
FindFiles(ExpandConstant('{app}'), '*.ogg') //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов
WizardForm.ProgressGauge.Position:=0
for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}')), '')
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q '+AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files[n]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\oggdec.exe'))
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then RecodeOgg;
end;

Sollar 30-08-2011 11:06 1742332

El Sanchez, как сделать чтобы событие наступало сразу после первого клика?
если так, то только после второго
Код:

procedure TaskOnClick(Sender: TObject);
var
i:integer;
begin
  if IsTaskSelected('nomer1') or IsTaskSelected('nomer0') then
        begin
        for i:=2 to WizardForm.TasksList.Items.Count-1 do
          begin
          WizardForm.TasksList.ItemEnabled[i]:= False;
          end;
        end;
end;

procedure InitializeWizard();
begin
WizardForm.TasksList.OnClick := @TaskOnClick;
end;

а если так, то только после перехода на другую страницу
Код:

procedure CurPageChanged(CurPageID: Integer);
var
  i: integer;
begin
  if CurPageID = wpSelectTasks then
    begin
    if IsTaskSelected('nomer1') or IsTaskSelected('nomer0') then
        begin
        for i:=2 to WizardForm.TasksList.Items.Count-1 do
          begin
          WizardForm.TasksList.ItemEnabled[i]:= False;
          end;
        end;
    end;
end;


Raf-9600 30-08-2011 15:08 1742527

Ктонить может объединить код конвертирования OGG
Код:

[C0de]
var
Files: Array of String;
S: String;
n: Integer;

Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k:= Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
End;

procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;

procedure RecodeOgg;
var ResultCode: integer; CurFile: String;
begin
FindFiles(ExpandConstant('{app}'), '*.ogg') //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов
WizardForm.ProgressGauge.Position:=0
for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}')), '')
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q '+AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files[n]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\oggdec.exe'))
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then RecodeOgg;
end;

с кодом
Код:

#define TIME_FOR_VIEW 10

[C0de]
procedure ChangeCaption(str: string);
begin
    WizardForm.StatusLabel.Caption:= str;
end;

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
  Info: TNewStaticText;
  InfoCaption: TNewStaticText;
  InfoPanel: TPanel;

  NeedSize:Integer;
  FreeMB, TotalMB: Cardinal;
  NeedSpaceLabel: TLabel;
  n: Integer;
  VolumeName, FileSystemName: String;
  VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
  ListBox: TListBox;
  StartMenuTreeView: TStartMenuFolderTreeView;

  procedure GetFreeSpaceCaption(Sender: TObject);
var
  Path: String;
begin
  Path := ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled := False else
  WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
  if NeedSize > 1024 then
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard1();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;

procedure InitializeWizard2();
begin
  NeedSize := 2500;                  //Здесь указывается место для приложения
  WizardForm.DiskSpaceLabel.Hide;
  NeedSpaceLabel := TLabel.Create(WizardForm);
  with NeedSpaceLabel do
  begin
  Parent := WizardForm.SelectDirPage;
  Left := ScaleX(0);
  Top := ScaleY(220);
  Width := ScaleX(209);
  Height := ScaleY(13);
  end;
  ListBox:= TListBox.Create(WizardForm)
  ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
  ListBox.Font.Size:= 9
  ListBox.Font.Style:= []
  ListBox.Font.Name:= 'Courier New';
  ListBox.OnClick:= @ObjectOnClick;
  ListBox.Parent:= WizardForm.SelectDirPage;
  WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
  end;

procedure CurPageChanged1(CurPageID: Integer);
  begin
  if CurPageID=wpSelectDir then
  begin
  GetNeedSpaceCaption;
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled:=False
  ListBoxRefresh
  end;
end;

procedure InitializeWizard3();
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(200);
  InfoPanel := TPanel.Create(WizardForm);
  InfoPanel.Parent := WizardForm.SelectComponentsPage;
  InfoPanel.Caption := '';
  InfoPanel.Top := WizardForm.ComponentsList.Top;
  InfoPanel.Left := ScaleX(216);
  InfoPanel.Width := ScaleX(200);
  InfoPanel.Height := WizardForm.ComponentsList.Height;
  InfoPanel.BevelInner := bvRaised;
  InfoPanel.BevelOuter := bvLowered;
  InfoCaption := TNewStaticText.Create(WizardForm);
  InfoCaption.Parent := WizardForm.SelectComponentsPage;
  InfoCaption.Caption := 'Описание';
  InfoCaption.Left := ScaleX(224);
  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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
  Info.WordWrap := true;
  //Впишыте описание компонентов
  enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
      'Выберите язык внутриигрового текста;'+ //Text
      'Немецкий текст;'+
      'Испанский текст;'+
      'Французский текст;'+
      'Итальянский текст;'+
      'Польский текст;'+
      'Выберите этот пункт, если вы хотите установить внутриигровую музыку. Учтите, что её можно отключить даже после инсталляции, в меню опций игры.;' // Music
    );
end;



  function ShouldSkipPage(CurPage: Integer): Boolean;
    begin
      if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
        case CurPage of
          wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
          wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
            Result := True;
        end;
    end;

    const
      WM_LBUTTONDOWN = 513;
      WM_LBUTTONUP = 514;

    procedure InitializeWizard4();
    begin
      if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
      begin
        PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
        PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
      end;
    end;

    procedure CurPageChanged2(CurPageID: Integer);
    begin
      if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
        (CurPageID = wpSelectComponents) then
        WizardForm.BackButton.Visible := False;
    end;


//Проверка на оставшыеся файлы
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Res: Integer;
begin
 case CurUninstallStep of
 usPostUninstall:
  begin
  if DirExists(ExpandConstant('{app}')) then
  if ExpandConstant('{language}') = 'ua' then
  case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
              '"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
              '"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
              '"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

        IDCANCEL:;
  end
  else
  if ExpandConstant('{language}') = 'ru' then
  case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
              '"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
              '"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
              '"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

        IDCANCEL:;
  end
  else
    case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
              '"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
              '"No" to open the directory with explorer to delete the files manually.'#13#13 +
              '"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

        IDCANCEL:;
    end
  end
 end
end;




const
n1=28; //количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N1] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
 For i:=1 to X do A:=A+chr(i);
 B:='';
 For i:=1 to X do begin
  j:=Random(Length(A)-1)+1;
  C:='';
  B:=B + A[j];
  for k:=1 to Length(A) do
  if k<>j then C:=C+A[k];
  A:=C;
 end;
 for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
StatusMessages: TNewStaticText;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
 then begin
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
  if (currTime/{#TIME_FOR_VIEW} = N1) then currTime:=0;
 end;
end;


procedure InitializeWizard5;
begin
bmp:=get_unique_random_number(N1);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов...';
for z:=2 to N1 do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged3(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;


procedure CurPageChanged4(CurPageID: Integer);
begin
  if CurPageID = wpInstalling then
    WizardForm.BeveledLabel.hide;
  if CurPageID = wpInfoAfter then
    WizardForm.BeveledLabel.show;
end;




procedure InitializeWizard;
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
end;


procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
  CurPageChanged2(CurPageID);
  CurPageChanged3(CurPageID);
  CurPageChanged4(CurPageID);
end;

procedure DeinitializeSetup();
begin
  disabledesc();
  KillTimer(0, TimerID);
end;

Я как ни мучался, постоянно слайд-шоу глючит. Тоесть первую картинку подгружает, а когда приходит время отобразить следующую, пишет ошибку, что не нашло слайда во временной папке.
И ещё три просьбы, касательно кода для конвертирования OGG:
1. Можно ли сделать чтоб он запускался только если выбран компонент VoiceD2 или VoiceLoD?
2. Можно ли сделать чтоб во время его выполнения, отображалась определённая надпись в StatusLabel?
3. Ктонить способен модифицировать его так, чтобы он запускался ДО начала выполнения секции [Run]?

R.i.m.s.k.y. 30-08-2011 16:31 1742579

Raf-9600,

1. используй функцию IsComponentSelected('VoiceD2 ')

2. да можно, делай.
Код:

procedure ChangeCaption(str: string);
    begin
    WizardForm.StatusLabel.Caption:= str;
end;

вызывай откуда хочешь эту процедуру примерно так: ChangeCaption('Будь мужиком, прочти справку!')

3. я способен, читай в справке
Код:

procedure CurStepChanged(CurStep: TSetupStep);
Called with CurStep=ssInstall just before the actual installation starts, with CurStep=ssPostInstall just after the actual installation finishes, and with CurStep=ssDone just before Setup terminates after a successful install.

или
Код:

procedure CurPageChanged(CurPageID: Integer);
wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished

не знаешь инглиша - в шапке русская справка , или translate.google.com

Raf-9600 30-08-2011 16:54 1742600

Цитата:

Цитата R.i.m.s.k.y.
используй функцию IsComponentSelected('VoiceD2 ') »

Если я не ошибаюсь, это нужно прописать две строчки:
Код:

if IsComponentSelected('VoiceD2') = True then
if IsComponentSelected('VoiceLoD') = True then

Только я не догоняю, где именно? :)

Цитата:

Цитата R.i.m.s.k.y.
вызывай откуда хочешь эту процедуру примерно так: ChangeCaption('Будь мужиком, прочти справку!') »

Почему я вот прописал вот так:
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then RecodeOgg;
begin
WizardForm.StatusLabel.Caption := 'Конвертация ogg...';
end;
end;

А оно нефига StatusLabel не меняет? Это я делал по примеру смены StatusLabel на время распаковки слайдов, из кода выше.

Цитата:

Цитата R.i.m.s.k.y.
я способен, читай в справке »

Я немного не шарю в коде >.<

R.i.m.s.k.y. 30-08-2011 17:04 1742612

программирование надо чуток знать, оно упорядочивает мышление

вот ты чего хочешь? чтобы при выбранных компонентах запустилось перекодирование, значит пиши
if (IsComponentSelected('VoiceD2') and IsComponentSelected('VoiceLoD') ) then RecodeOgg;

а когда? когда CurStep = ssPostInstall

но хорошо бы написать что нужно подождать, значит добавляем
ChangeCaption('Конвертация ogg, иди покури');
но добавить надо перед перекодированием, а то перекодируем, потом напишем и никто не заметит, ведь все выполняется последовательно

значит все вместе будет
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then begin
    if (IsComponentSelected('VoiceD2')  and IsComponentSelected('VoiceLoD') ) then begin
      ChangeCaption('Конвертация ogg, иди покури');
      RecodeOgg;
    end; //if IsComponentSelected
  end; //CurStep = ssPostInstall
end;//CurStepChanged


Raf-9600 30-08-2011 17:37 1742629

Цитата:

Цитата R.i.m.s.k.y.
программирование надо чуток знать, оно упорядочивает мышление »

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

Теперь осталось только сообразить как запустить конвертацию до начала выполнения [Run], и самое главное, объединить код конвертации ogg с кодом выше.

Касательно того что вы написали о CurStepChanged, я не догнал. Там вроде нет параметра указывающего на срабатывания после распаковки всех файлов, но до выполнения [Run].

Нашел в гугле такую реализацию:

[Run]
Filename: "{app}\MyProgram.exe"; AfterInstall: SomeProc

Но тогда выполняется только одна функция =\

El Sanchez 30-08-2011 17:58 1742647

Цитата:

Цитата R.i.m.s.k.y.
я бы добавил на конце waituntilterminated и WorkingDir »

R.i.m.s.k.y., в данном случае ни то, ни другое не нужно. WorkingDir не нужен, т.к . путь уже передан в for. waituntilterminated используется совместно с флагом shellexec, без shellexec же waituntilterminated - это дефолт.

Цитата:

Цитата Sollar
как сделать чтобы событие наступало сразу после первого клика?
если так, то только после второго »

Sollar, приведенные коды корректно работать не будут. Сдается мне, что вы хотите какие-то ненужные действия с задачами изобрести. Нужно нормально поставленное задание. Хочу деталей! © "А.Е. Быков, Интерны"

El Sanchez 30-08-2011 18:16 1742656

Цитата:

Цитата Raf-9600
Теперь осталось только сообразить как запустить конвертацию до начала выполнения [Run] »

Raf-9600, ну так и пишите первой срокой в [Run] конвертацию кодом, который я давал раньше. [Run] выполняется как раз после установки файлов и до ssPostInstall (у вас в коде выше конвертация производится над уже установленными/распакованными файлами).

Raf-9600 30-08-2011 18:23 1742663

El Sanchez, Вы то дали, и я Вам благодарен. Но кто ж знал, что процесс конвертирования можно отображать в виде прогресс-бара? :)

P.S.
Просто у меня ogg конвертируются весьма долго (очень много файлов), посему я и вцепился за идею прогресс-бара..

R.i.m.s.k.y. 30-08-2011 19:32 1742724

C прогрессбаром не подскажу - не знаю

Raf-9600 30-08-2011 20:01 1742751

А касательно объединения кодов, ктонить помочь может?

Код:

[C0de]
var
Files: Array of String;
S: String;
n: Integer;

Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k:= Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
End;

procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;

procedure RecodeOgg;
var ResultCode: integer; CurFile: String;
begin
FindFiles(ExpandConstant('{app}'), '*.ogg') //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов
WizardForm.ProgressGauge.Position:=0
for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}')), '')
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q '+AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files[n]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\oggdec.exe'))
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then begin
    if (IsComponentSelected('VoiceD2')  and IsComponentSelected('VoiceLoD') ) then begin
      ChangeCaption('Конвертация ogg, иди покури');
      RecodeOgg;
    end; //if IsComponentSelected
  end; //CurStep = ssPostInstall
end;//CurStepChanged

Код:

#define TIME_FOR_VIEW 10

[C0de]
procedure ChangeCaption(str: string);
begin
    WizardForm.StatusLabel.Caption:= str;
end;

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
  Info: TNewStaticText;
  InfoCaption: TNewStaticText;
  InfoPanel: TPanel;

  NeedSize:Integer;
  FreeMB, TotalMB: Cardinal;
  NeedSpaceLabel: TLabel;
  n: Integer;
  VolumeName, FileSystemName: String;
  VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
  ListBox: TListBox;
  StartMenuTreeView: TStartMenuFolderTreeView;

  procedure GetFreeSpaceCaption(Sender: TObject);
var
  Path: String;
begin
  Path := ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled := False else
  WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
  if NeedSize > 1024 then
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard1();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;

procedure InitializeWizard2();
begin
  NeedSize := 2500;                  //Здесь указывается место для приложения
  WizardForm.DiskSpaceLabel.Hide;
  NeedSpaceLabel := TLabel.Create(WizardForm);
  with NeedSpaceLabel do
  begin
  Parent := WizardForm.SelectDirPage;
  Left := ScaleX(0);
  Top := ScaleY(220);
  Width := ScaleX(209);
  Height := ScaleY(13);
  end;
  ListBox:= TListBox.Create(WizardForm)
  ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
  ListBox.Font.Size:= 9
  ListBox.Font.Style:= []
  ListBox.Font.Name:= 'Courier New';
  ListBox.OnClick:= @ObjectOnClick;
  ListBox.Parent:= WizardForm.SelectDirPage;
  WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
  end;

procedure CurPageChanged1(CurPageID: Integer);
  begin
  if CurPageID=wpSelectDir then
  begin
  GetNeedSpaceCaption;
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled:=False
  ListBoxRefresh
  end;
end;

procedure InitializeWizard3();
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(200);
  InfoPanel := TPanel.Create(WizardForm);
  InfoPanel.Parent := WizardForm.SelectComponentsPage;
  InfoPanel.Caption := '';
  InfoPanel.Top := WizardForm.ComponentsList.Top;
  InfoPanel.Left := ScaleX(216);
  InfoPanel.Width := ScaleX(200);
  InfoPanel.Height := WizardForm.ComponentsList.Height;
  InfoPanel.BevelInner := bvRaised;
  InfoPanel.BevelOuter := bvLowered;
  InfoCaption := TNewStaticText.Create(WizardForm);
  InfoCaption.Parent := WizardForm.SelectComponentsPage;
  InfoCaption.Caption := 'Описание';
  InfoCaption.Left := ScaleX(224);
  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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
  Info.WordWrap := true;
  //Впишыте описание компонентов
  enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
      'Выберите язык внутриигрового текста;'+ //Text
      'Немецкий текст;'+
      'Испанский текст;'+
      'Французский текст;'+
      'Итальянский текст;'+
      'Польский текст;'+
      'Выберите этот пункт, если вы хотите установить внутриигровую музыку. Учтите, что её можно отключить даже после инсталляции, в меню опций игры.;' // Music
    );
end;



  function ShouldSkipPage(CurPage: Integer): Boolean;
    begin
      if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
        case CurPage of
          wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
          wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
            Result := True;
        end;
    end;

    const
      WM_LBUTTONDOWN = 513;
      WM_LBUTTONUP = 514;

    procedure InitializeWizard4();
    begin
      if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
      begin
        PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
        PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
      end;
    end;

    procedure CurPageChanged2(CurPageID: Integer);
    begin
      if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
        (CurPageID = wpSelectComponents) then
        WizardForm.BackButton.Visible := False;
    end;


//Проверка на оставшыеся файлы
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Res: Integer;
begin
 case CurUninstallStep of
 usPostUninstall:
  begin
  if DirExists(ExpandConstant('{app}')) then
  if ExpandConstant('{language}') = 'ua' then
  case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
              '"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
              '"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
              '"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

        IDCANCEL:;
  end
  else
  if ExpandConstant('{language}') = 'ru' then
  case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
              '"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
              '"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
              '"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

        IDCANCEL:;
  end
  else
    case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
              '"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
              '"No" to open the directory with explorer to delete the files manually.'#13#13 +
              '"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

        IDCANCEL:;
    end
  end
 end
end;




const
n1=28; //количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N1] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
 For i:=1 to X do A:=A+chr(i);
 B:='';
 For i:=1 to X do begin
  j:=Random(Length(A)-1)+1;
  C:='';
  B:=B + A[j];
  for k:=1 to Length(A) do
  if k<>j then C:=C+A[k];
  A:=C;
 end;
 for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
StatusMessages: TNewStaticText;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
 then begin
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
  if (currTime/{#TIME_FOR_VIEW} = N1) then currTime:=0;
 end;
end;


procedure InitializeWizard5;
begin
bmp:=get_unique_random_number(N1);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов...';
for z:=2 to N1 do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged3(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;


procedure CurPageChanged4(CurPageID: Integer);
begin
  if CurPageID = wpInstalling then
    WizardForm.BeveledLabel.hide;
  if CurPageID = wpInfoAfter then
    WizardForm.BeveledLabel.show;
end;




procedure InitializeWizard;
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
end;


procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
  CurPageChanged2(CurPageID);
  CurPageChanged3(CurPageID);
  CurPageChanged4(CurPageID);
end;

procedure DeinitializeSetup();
begin
  disabledesc();
  KillTimer(0, TimerID);
end;


El Sanchez 30-08-2011 22:03 1742846

Цитата:

Цитата Raf-9600
А касательно объединения кодов, ктонить помочь может? »

Raf-9600, только объединил, не проверял. Имхо укоротить код можно минимум на треть.
читать дальше »

Код:

#define TIME_FOR_VIEW 10

[C0de]
const
n1=28; //количество слайдов
oneMB= 1024*1024;

type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N1] of byte;

function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
  Info, InfoCaption, StatusMessages: TNewStaticText;
  InfoPanel: TPanel;

  FreeMB, TotalMB: Cardinal;
  NeedSpaceLabel: TLabel;
  NeedSize, n, currTime: Integer;
  VolumeName, FileSystemName, S: String;
  VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
  ListBox: TListBox;
  StartMenuTreeView: TStartMenuFolderTreeView;

  Files: Array of String;
  TimerID: LongWord;
  SplashImage: TBitmapImage;
  bmp: TRandNumbers;
  z:byte;

procedure ChangeCaption(str: string);
begin
    WizardForm.StatusLabel.Caption:= str;
end;

Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k:= Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
End;

procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;

procedure RecodeOgg;
var ResultCode: integer; CurFile: String;
begin
FindFiles(ExpandConstant('{app}'), '*.ogg') //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов
WizardForm.ProgressGauge.Position:=0
for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}')), '')
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q '+AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files[n]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\oggdec.exe'))
end;

  procedure GetFreeSpaceCaption(Sender: TObject);
var
  Path: String;
begin
  Path := ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled := False else
  WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
  if NeedSize > 1024 then
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';
end;


Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard1();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;

procedure InitializeWizard2();
begin
  NeedSize := 2500;                  //Здесь указывается место для приложения
  WizardForm.DiskSpaceLabel.Hide;
  NeedSpaceLabel := TLabel.Create(WizardForm);
  with NeedSpaceLabel do
  begin
  Parent := WizardForm.SelectDirPage;
  Left := ScaleX(0);
  Top := ScaleY(220);
  Width := ScaleX(209);
  Height := ScaleY(13);
  end;
  ListBox:= TListBox.Create(WizardForm)
  ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
  ListBox.Font.Size:= 9
  ListBox.Font.Style:= []
  ListBox.Font.Name:= 'Courier New';
  ListBox.OnClick:= @ObjectOnClick;
  ListBox.Parent:= WizardForm.SelectDirPage;
  WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
  end;

procedure CurPageChanged1(CurPageID: Integer);
  begin
  if CurPageID=wpSelectDir then
  begin
  GetNeedSpaceCaption;
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled:=False
  ListBoxRefresh
  end;
end;

procedure InitializeWizard3();
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(200);
  InfoPanel := TPanel.Create(WizardForm);
  InfoPanel.Parent := WizardForm.SelectComponentsPage;
  InfoPanel.Caption := '';
  InfoPanel.Top := WizardForm.ComponentsList.Top;
  InfoPanel.Left := ScaleX(216);
  InfoPanel.Width := ScaleX(200);
  InfoPanel.Height := WizardForm.ComponentsList.Height;
  InfoPanel.BevelInner := bvRaised;
  InfoPanel.BevelOuter := bvLowered;
  InfoCaption := TNewStaticText.Create(WizardForm);
  InfoCaption.Parent := WizardForm.SelectComponentsPage;
  InfoCaption.Caption := 'Описание';
  InfoCaption.Left := ScaleX(224);
  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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
  Info.WordWrap := true;
  //Впишыте описание компонентов
  enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
      'Выберите язык внутриигрового текста;'+ //Text
      'Немецкий текст;'+
      'Испанский текст;'+
      'Французский текст;'+
      'Итальянский текст;'+
      'Польский текст;'+
      'Выберите этот пункт, если вы хотите установить внутриигровую музыку. Учтите, что её можно отключить даже после инсталляции, в меню опций игры.;' // Music
    );
end;



  function ShouldSkipPage(CurPage: Integer): Boolean;
    begin
      if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
        case CurPage of
          wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
          wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
            Result := True;
        end;
    end;

    const
      WM_LBUTTONDOWN = 513;
      WM_LBUTTONUP = 514;

    procedure InitializeWizard4();
    begin
      if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
      begin
        PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
        PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
      end;
    end;

    procedure CurPageChanged2(CurPageID: Integer);
    begin
      if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
        (CurPageID = wpSelectComponents) then
        WizardForm.BackButton.Visible := False;
    end;


//Проверка на оставшыеся файлы
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Res: Integer;
begin
 case CurUninstallStep of
 usPostUninstall:
  begin
  if DirExists(ExpandConstant('{app}')) then
  if ExpandConstant('{language}') = 'ua' then
  case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
              '"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
              '"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
              '"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

        IDCANCEL:;
  end
  else
  if ExpandConstant('{language}') = 'ru' then
  case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
              '"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
              '"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
              '"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

        IDCANCEL:;
  end
  else
    case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
              '"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
              '"No" to open the directory with explorer to delete the files manually.'#13#13 +
              '"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

        IDCANCEL:;
    end
  end
 end
end;


function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
 For i:=1 to X do A:=A+chr(i);
 B:='';
 For i:=1 to X do begin
  j:=Random(Length(A)-1)+1;
  C:='';
  B:=B + A[j];
  for k:=1 to Length(A) do
  if k<>j then C:=C+A[k];
  A:=C;
 end;
 for i:=1 to X do Result[i]:=ord(B[i]);
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
 then begin
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
  if (currTime/{#TIME_FOR_VIEW} = N1) then currTime:=0;
 end;
end;


procedure InitializeWizard5;
begin
bmp:=get_unique_random_number(N1);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов...';
for z:=2 to N1 do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
  if CurStep = ssPostInstall then begin
    if (IsComponentSelected('VoiceD2')  and IsComponentSelected('VoiceLoD') ) then begin
      ChangeCaption('Конвертация ogg, иди покури');
      RecodeOgg;
    end; //if IsComponentSelected
  end; //CurStep = ssPostInstall
end;

procedure CurPageChanged3(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;


procedure CurPageChanged4(CurPageID: Integer);
begin
  if CurPageID = wpInstalling then
    WizardForm.BeveledLabel.hide;
  if CurPageID = wpInfoAfter then
    WizardForm.BeveledLabel.show;
end;




procedure InitializeWizard;
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
end;


procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
  CurPageChanged2(CurPageID);
  CurPageChanged3(CurPageID);
  CurPageChanged4(CurPageID);
end;

procedure DeinitializeSetup();
begin
  disabledesc();
  KillTimer(0, TimerID);


Mafia_forever 30-08-2011 22:13 1742852

как сделать чтобы при выборе компонентов установки он создавал папку и распаковывался туда
например отметить скажем sound.mp3 в выборочой установке и во время установки инстлятор должен создать папку mp3 и распаковать его туда

Raf-9600 30-08-2011 22:33 1742862

El Sanchez, Превосходно! Спасибо огромное!

А касательно длинны кода - знаю. Возможно из-за лишних строчек, инсталы созданные с ним, так тормозят. Но мне знаний не хватает его "почистить". Если для Вас не сложно, был бы весьма признателен, если вы уделите свое время этой проблеме. Но я не настаиваю, Вы и так мне очень помогли.

Habetdin 31-08-2011 00:01 1742919

Mafia_forever, пример:
Код:

[Components]
Name: unpack; Description: "Распаковать sound.mp3 в папку mp3"

[Files]
Source: Files\mp3\sound.mp3; DestDir: {app}\mp3; Components: unpack; Flags: ignoreversion

З.Ы.: чтение справки творит чудеса ;)

Raf-9600 31-08-2011 00:19 1742922

Ктонить встречался с кодом\dll'кой isProgressBar от ExpeditorR, для создания "технического" прогресс-бара? Как я понял, он создает отдельную страницу с собственным прогресс-баром. А можно ли сделать так, чтоб его прогресс-бар отображался поверх\вместо стандартного, на стандартной странице инсталляции?

Sollar 31-08-2011 11:34 1743108

El Sanchez, как заставить срабатывать процедуру после клика по определенному объекту? потому что только после второго клика она работала
вот вопрос, а задачу я сделал по-другому, теперь мне интересно на будущее

и еще, можно ли в зависимых задачах писать разные groupdescription? если нет, то как это обойти? возможно ли такое?

Mafia_forever 31-08-2011 16:29 1743353

как сделть чтоб интлятор во время установки сам определил папку установки

Наприmер GTA San Andreas Usef Files

а если выбранна другая папка выходило сообщение
что не верная папка

Habetdin 31-08-2011 18:48 1743448

Mafia_forever, имя папки задано, страница выбора места установки отключена:
Код:

[Setup]
DisableDirPage=yes
DefaultDirName={pf}\Fixed Folder Name


Kizekil 01-09-2011 18:21 1744179

Здравствуйте!!! :) Можно задать вам пару вопросиков?Скажите пожалуйста как поменять цвет шрифта (там код какой то) .Как сделать чтоб отображалось время установки (без архивов и FreeArc,скачивал ISDone не помогло,можно код? :blush2: )?. Зделать изображение на весь экран (только страница привествия) .Смотрел ваши комменты и видно что вы разбираетесь в инно сетуп :) .Надеюсь ответите!!!С уважением,Kizekil!!!

insombia 01-09-2011 21:11 1744308

Kizekil
Цитата:

Как сделать чтоб отображалось время установки (без архивов и FreeArc,скачивал ISDone не помогло,можно код?
читать дальше »
[CustomMessages]
rus.hour= часов
rus.min= мин
rus.sec= сек

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

var
StartInstall: Integer;
TimeLabel: TLabel;
TimerID: Longword;

function GetTickCount: DWord; external 'GetTickCount@kernel32';
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 cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail then {hh: mm:ss format}
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 then {more than hour}
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 then {1..60 minutes}
Result:= IntToStr(Ticks/60000) +m+' '+ IntToStr(Ticks/1000 - Ticks/1000/60*60) +s
else Result:= Format('%.1n', [Abs(Ticks/1000)]) +s {less than one minute}
End;

procedure GetTime(HandleW, Msg, idEvent, TimeSys: LongWord);
var Remaining: Integer;
begin
with WizardForm.ProgressGauge do begin
if position > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position))
TimeLabel.Caption:= 'Осталось ждать: ' + TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)
if (Remaining = 0) then TimeLabel.Caption:= 'Завершение...'
end;
end;

procedure InitializeWizard();
begin
TimeLabel:= TLabel.Create(WizardForm)
TimeLabel.SetBounds(ScaleX(0), ScaleY(80), ScaleX(457), ScaleY(20));
TimeLabel.AutoSize:= False
TimeLabel.Transparent:= True;
TimeLabel.Parent:= WizardForm.InstallingPage;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep = ssInstall then
begin
StartInstall:= GetTickCount
TimerID:= SetTimer(0,0, 500, WrapTimerProc(@GetTime, 4))
end;
end;

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

Kizekil 02-09-2011 16:11 1744793

Как сделать чтоб была установка direct x и других нужных вещей?И как поставить изображение на всё окно инсталлятора (только на странице привествия)?

Mafia_forever 02-09-2011 18:57 1744892

Цитата:

Цитата insombia
Как сделать чтоб отображалось время установки (без архивов и FreeArc,скачивал ISDone не помогло,можно код? »

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

[CustomMessages]
rus.hour= часов
rus.min= мин
rus.sec= сек

Source: compiler:innocallback.dll; DestDir: {tmp}; Flags: dontcopy;

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

var
StartInstall: Integer;
TimeLabel: TLabel;
TimerID: Longword;

function GetTickCount: DWord; external 'GetTickCount@kernel32';
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 cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail then {hh: mm:ss format}
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 then {more than hour}
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 then {1..60 minutes}
Result:= IntToStr(Ticks/60000) +m+' '+ IntToStr(Ticks/1000 - Ticks/1000/60*60) +s
else Result:= Format('%.1n', [Abs(Ticks/1000)]) +s {less than one minute}
End;

procedure GetTime(HandleW, Msg, idEvent, TimeSys: LongWord);
var Remaining: Integer;
begin
with WizardForm.ProgressGauge do begin
if position > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position))
TimeLabel.Caption:= 'Осталось ' + TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)
if (Remaining = 0) then TimeLabel.Caption:= 'Завершение...'
end;
end;

procedure InitializeWizard();
begin
TimeLabel:= TLabel.Create(WizardForm)
TimeLabel.SetBounds(ScaleX(0), ScaleY(80), ScaleX(457), ScaleY(20));
TimeLabel.AutoSize:= False
TimeLabel.Transparent:= True;
TimeLabel.Parent:= WizardForm.InstallingPage;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep = ssInstall then
begin
StartInstall:= GetTickCount
TimerID:= SetTimer(0,0, 500, WrapTimerProc(@GetTime, 4))
end;
end;

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

Цитата:

Цитата Kizekil
Как сделать чтоб была установка direct x и других нужных вещей »

[Setup]
ShowTasksTreeLines=true

[Tasks]
Name: additional; Description: "Дополнительные компоненты";
Name: additional\dx; Description: "Обновить DirectX";
Name: additional\vcr; Description: "Обновить Visual C++";

[Run]
Filename: {src}\Redist\DirectX.exe; Tasks: additional\dx; Parameters: /silent; StatusMsg: Обновление DirectX...
Filename: {src}\Redist\MS Visual C++ 2005 SP1.exe; Tasks: additional\vcr; Parameters: /q; StatusMsg: Обновление Visual C++...

Цитата:

Цитата Kizekil
И как поставить изображение на всё окно инсталлятора (только на странице привествия)? »

[Files]
Source: "C:\Program Files\Inno Setup 5\Img2.bmp"; DestDir: {tmp}; Flags: dontcopy

[code]

var
WelcomeLabel1, WelcomeLabel2, FinishedLabel, FinishedHeadingLabel: TLabel;

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

WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\img2.bmp'));

WelcomeLabel1:= TLabel.Create(WizardForm);
WelcomeLabel1.AutoSize:= False;
with WizardForm.WelcomeLabel1 do
WelcomeLabel1.SetBounds(Left, Top, Width, Height);
WelcomeLabel1.Font:= WizardForm.WelcomeLabel1.Font
WelcomeLabel1.Font.Color:= clyellow;
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.SetBounds(Left, Top, Width, Height);
WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel2.Font.Color:= clblue;
WelcomeLabel2.Transparent:= True;
WelcomeLabel2.WordWrap:= true;
WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent:= WizardForm.WelcomePage

FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.AutoSize:= False;
with WizardForm.FinishedHeadingLabel do
FinishedHeadingLabel.SetBounds(Left, Top, Width, Height);
FinishedHeadingLabel.Font:= WizardForm.FinishedHeadingLabel.Font
FinishedHeadingLabel.Font.Color:= clRed;
FinishedHeadingLabel.Transparent:= True;
FinishedHeadingLabel.WordWrap:= true;
FinishedHeadingLabel.Caption:= WizardForm.FinishedHeadingLabel.Caption;
FinishedHeadingLabel.Parent:= WizardForm.FinishedPage

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
FinishedLabel.SetBounds(Left, Top, Width, Height);
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Color:= clyellow;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
FinishedLabel.Parent:= WizardForm.FinishedPage

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.Position:=poScreenCenter;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
end;

insombia будь добр дай код для music button.png а то мой не работает

const
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;
var
MusicButton1,MusicButton2,mp3Handle: HWND;
mp3Name: String;

function sndPlaySound(lpszSoundName: String; uFlags: cardinal):integer; external 'sndPlaySound{#A}@winmm.dll stdcall';
function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@files:BASS.dll stdcall delayload';
function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD; external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';
function BASS_Start(): Boolean; external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_ChannelIsActive(handle: DWORD): Integer; external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';
function BASS_ChannelPause(handle: DWORD): Boolean; external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';
function BASS_Pause(): Boolean; external 'BASS_Pause@files:BASS.dll stdcall delayload';
function BASS_Stop(): Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free(): Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';

function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then ExtractTemporaryFile('CallbackCtrl.dll');
Result:=True;
end;

procedure WFBtnEnter(hBtn:HWND);
begin
sndPlaySound(ExpandConstant('{tmp}\WFEnter.wav'), $0001);
end;

procedure MusicButtonClick(hBtn:HWND);
begin
sndPlaySound(ExpandConstant('{tmp}\Click.wav'), $0001);
if BtnGetChecked(hBtn) then begin


BASS_ChannelPause(mp3Handle);
end else
case BASS_ChannelIsActive(mp3Handle) of
BASS_ACTIVE_PAUSED:
begin
BASS_ChannelPlay(mp3Handle, False);
end;
end;
btnSetChecked(MusicButton1, BtnGetChecked(hBtn))
btnSetChecked(MusicButton2, BtnGetChecked(hBtn))
end;


procedure InsertMusic;
begin
ExtractTemporaryFile('MusicButton.png');
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('Music.mp3');
ExtractTemporaryFile('Click.wav');
ExtractTemporaryFile('Check.wav');
ExtractTemporaryFile('WFEnter.wav');


MusicButton1:=BtnCreate(WizardForm.WelcomePage.Handle,ScaleX(20),ScaleY(20),ScaleX(25),ScaleY(23),Ex pandConstant('{tmp}\MusicButton.png'),0,True);

BtnSetEvent(MusicButton1,BtnClickEventID,WrapBtnCallback(@MusicButtonClick,1));
BtnSetEvent(MusicButton1,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetVisibility(MusicButton1,True);
BtnSetCursor(MusicButton1,GetSysCursorHandle(32649));
ImgApplyChanges(WizardForm.WelcomePage.Handle);




MusicButton2:=BtnCreate(WizardForm.SelectDirPage.Handle,ScaleX(20),ScaleY(20),ScaleX(25),ScaleY(23), ExpandConstant('{tmp}\MusicButton.png'),0,True);
BtnSetEvent(MusicButton2,BtnClickEventID,WrapBtnCallback(@MusicButtonClick,1));
BtnSetEvent(MusicButton2,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetVisibility(MusicButton2,True);
BtnSetCursor(MusicButton2,GetSysCursorHandle(32649));
ImgApplyChanges(WizardForm.SelectDirPage.Handle);

mp3Name := ExpandConstant('{tmp}\Music.mp3');
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
end;

//************************************************ [Конец - Музыка] ***************************************************//

procedure InitializeWizard;
begin
InsertMusic;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
ImgApplyChanges(WizardForm.Handle);
end;


procedure DeinitializeSetup();
begin
BASS_Stop();
BASS_Free();
gdipShutdown;
end;

Rikill 03-09-2011 02:52 1745108

Mafia_forever, ты мемуары свои под спойлер спряч!

Kizekil 03-09-2011 08:16 1745143

Как сделать чтоб приветстие было в таком тёмном окне?

Это когда в секции [code] два раза написано procedure InitializeWizard();

insombia 03-09-2011 14:59 1745290

Kizekil
Цитата:

Как сделать чтоб приветстие было в таком тёмном окне?
В фотошопе нарисовать и потом через form desinger текст переместить в то окно
Цитата:

Это когда в секции [code] два раза написано procedure InitializeWizard();
procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
end; и так далее перед этим в любом коде где есть InitializeWizard ставь 1 и так далее

valyok666 03-09-2011 15:54 1745312

insombia, коды можно совмещать надо читать урок от рикилл

Devils Night 04-09-2011 00:44 1745653

Цитата:

Цитата Kizekil
Это когда в секции [code] два раза написано procedure InitializeWizard(); »

Вот в помощь может пригодится.
читать дальше »
Код:

// ******************************************************** События установки ********************************************************

[ Code]
// События установки имеющие дубликацию

function BackButtonClick(CurPageID: Integer): Boolean;
begin
  Result := BackButtonClick1(CurPageID); if not Result then exit;
//  Result := BackButtonClick2(CurPageID); if not Result then exit;
//  Result := BackButtonClick3(CurPageID); if not Result then exit;
//  Result := BackButtonClick4(CurPageID); if not Result then exit;
//  Result := BackButtonClick5(CurPageID); if not Result then exit;
//  Result := BackButtonClick6(CurPageID); if not Result then exit;
//  Result := BackButtonClick7(CurPageID); if not Result then exit;
//  Result := BackButtonClick8(CurPageID); if not Result then exit;
//  Result := BackButtonClick9(CurPageID); if not Result then exit;
//  Result := BackButtonClick10(CurPageID); if not Result then exit;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
//  CurPageChanged2(CurPageID);
//  CurPageChanged3(CurPageID);
//  CurPageChanged4(CurPageID);
//  CurPageChanged5(CurPageID);
//  CurPageChanged6(CurPageID);
//  CurPageChanged7(CurPageID);
//  CurPageChanged8(CurPageID);
//  CurPageChanged9(CurPageID);
//  CurPageChanged10(CurPageID);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  CurStepChanged1(CurStep);
//  CurStepChanged2(CurStep);
//  CurStepChanged3(CurStep);
//  CurStepChanged4(CurStep);
//  CurStepChanged5(CurStep);
//  CurStepChanged6(CurStep);
//  CurStepChanged7(CurStep);
//  CurStepChanged8(CurStep);
//  CurStepChanged9(CurStep);
//  CurStepChanged10(CurStep);
end;

procedure DeinitializeSetup();
begin
  DeinitializeSetup1();
//  DeinitializeSetup2();
//  DeinitializeSetup3();
//  DeinitializeSetup4();
//  DeinitializeSetup5();
//  DeinitializeSetup6();
//  DeinitializeSetup7();
//  DeinitializeSetup8();
//  DeinitializeSetup9();
//  DeinitializeSetup10();
end;

function GetCustomSetupExitCode(): Integer;
begin
  Result := GetCustomSetupExitCode1(); if Result>0 then exit;
//  Result := GetCustomSetupExitCode2(); if Result>0 then exit;
//  Result := GetCustomSetupExitCode3(); if Result>0 then exit;
//  Result := GetCustomSetupExitCode4(); if Result>0 then exit;
//  Result := GetCustomSetupExitCode5(); if Result>0 then exit;
//  Result := GetCustomSetupExitCode6(); if Result>0 then exit;
//  Result := GetCustomSetupExitCode7(); if Result>0 then exit;
//  Result := GetCustomSetupExitCode8(); if Result>0 then exit;
//  Result := GetCustomSetupExitCode9(); if Result>0 then exit;
//  Result := GetCustomSetupExitCode10(); if Result>0 then exit;
end;

function InitializeSetup(): Boolean;
begin
  Result := InitializeSetup1(); if not Result then exit;
//  Result := InitializeSetup2(); if not Result then exit;
//  Result := InitializeSetup3(); if not Result then exit;
//  Result := InitializeSetup4(); if not Result then exit;
//  Result := InitializeSetup5(); if not Result then exit;
//  Result := InitializeSetup6(); if not Result then exit;
//  Result := InitializeSetup7(); if not Result then exit;
//  Result := InitializeSetup8(); if not Result then exit;
//  Result := InitializeSetup9(); if not Result then exit;
//  Result := InitializeSetup10(); if not Result then exit;
 
end;

procedure InitializeWizard();
begin
  InitializeWizard1();
//  InitializeWizard2();
//  InitializeWizard3();
//  InitializeWizard4();
//  InitializeWizard5();
//  InitializeWizard6();
//  InitializeWizard7();
//  InitializeWizard8();
//  InitializeWizard9();
//  InitializeWizard10();
end;

function NeedRestart(): Boolean;
begin
  Result := NeedRestart1(); if Result then exit;
//  Result := NeedRestart2(); if Result then exit;
//  Result := NeedRestart3(); if Result then exit;
//  Result := NeedRestart4(); if Result then exit;
//  Result := NeedRestart5(); if Result then exit;
//  Result := NeedRestart6(); if Result then exit;
//  Result := NeedRestart7(); if Result then exit;
//  Result := NeedRestart8(); if Result then exit;
//  Result := NeedRestart9(); if Result then exit;
//  Result := NeedRestart10(); if Result then exit;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := NextButtonClick1(CurPageID); if not Result then exit;
//  Result := NextButtonClick2(CurPageID); if not Result then exit;
//  Result := NextButtonClick3(CurPageID); if not Result then exit;
//  Result := NextButtonClick4(CurPageID); if not Result then exit;
//  Result := NextButtonClick5(CurPageID); if not Result then exit;
//  Result := NextButtonClick6(CurPageID); if not Result then exit;
//  Result := NextButtonClick7(CurPageID); if not Result then exit;
//  Result := NextButtonClick8(CurPageID); if not Result then exit;
//  Result := NextButtonClick9(CurPageID); if not Result then exit;
//  Result := NextButtonClick10(CurPageID); if not Result then exit;
end;

procedure RegisterPreviousData(PreviousDataKey: Integer);
begin
  RegisterPreviousData1(PreviousDataKey);
//  RegisterPreviousData2(PreviousDataKey);
//  RegisterPreviousData3(PreviousDataKey);
//  RegisterPreviousData4(PreviousDataKey);
//  RegisterPreviousData5(PreviousDataKey);
//  RegisterPreviousData6(PreviousDataKey);
//  RegisterPreviousData7(PreviousDataKey);
//  RegisterPreviousData8(PreviousDataKey);
//  RegisterPreviousData9(PreviousDataKey);
//  RegisterPreviousData10(PreviousDataKey);
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := ShouldSkipPage1(PageID); if not Result then exit;
//  Result := ShouldSkipPage2(PageID); if not Result then exit;
//  Result := ShouldSkipPage3(PageID); if not Result then exit;
//  Result := ShouldSkipPage4(PageID); if not Result then exit;
//  Result := ShouldSkipPage5(PageID); if not Result then exit;
//  Result := ShouldSkipPage6(PageID); if not Result then exit;
//  Result := ShouldSkipPage7(PageID); if not Result then exit;
//  Result := ShouldSkipPage8(PageID); if not Result then exit;
//  Result := ShouldSkipPage9(PageID); if not Result then exit;
//  Result := ShouldSkipPage10(PageID); if not Result then exit;
end;




// События установки не имеющие дубликацию
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin

end;

function CheckPassword(Password: String): Boolean;
begin

end;

function CheckSerial(Serial: String): Boolean;
begin

end;

function PrepareToInstall(var NeedsRestart: Boolean): String;
begin

end;

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
begin

end;




// ******************************************************** События удаления********************************************************
// События удаления имеющие дубликацию

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  CurUninstallStepChanged1(CurUninstallStep);
//  CurUninstallStepChanged2(CurUninstallStep);
//  CurUninstallStepChanged3(CurUninstallStep);
//  CurUninstallStepChanged4(CurUninstallStep);
//  CurUninstallStepChanged5(CurUninstallStep);
//  CurUninstallStepChanged6(CurUninstallStep);
//  CurUninstallStepChanged7(CurUninstallStep);
//  CurUninstallStepChanged8(CurUninstallStep);
//  CurUninstallStepChanged9(CurUninstallStep);
//  CurUninstallStepChanged10(CurUninstallStep);
end;

procedure DeinitializeUninstall();
begin
  DeinitializeUninstall1();
//  DeinitializeUninstall2();
//  DeinitializeUninstall3();
//  DeinitializeUninstall4();
//  DeinitializeUninstall5();
//  DeinitializeUninstall6();
//  DeinitializeUninstall7();
//  DeinitializeUninstall8();
//  DeinitializeUninstall9();
//  DeinitializeUninstall10();
end;

function InitializeUninstall(): Boolean;
begin
  Result := InitializeUninstall1(); if not Result then exit;
//  Result := InitializeUninstall2(); if not Result then exit;
//  Result := InitializeUninstall3(); if not Result then exit;
//  Result := InitializeUninstall4(); if not Result then exit;
//  Result := InitializeUninstall5(); if not Result then exit;
//  Result := InitializeUninstall6(); if not Result then exit;
//  Result := InitializeUninstall7(); if not Result then exit;
//  Result := InitializeUninstall8(); if not Result then exit;
//  Result := InitializeUninstall9(); if not Result then exit;
//  Result := InitializeUninstall10(); if not Result then exit;
end;

procedure InitializeUninstallProgressForm();
begin
  InitializeUninstallProgressForm1();
//  InitializeUninstallProgressForm2();
//  InitializeUninstallProgressForm3();
//  InitializeUninstallProgressForm4();
//  InitializeUninstallProgressForm5();
//  InitializeUninstallProgressForm6();
//  InitializeUninstallProgressForm7();
//  InitializeUninstallProgressForm8();
//  InitializeUninstallProgressForm9();
//  InitializeUninstallProgressForm10();
end;

function UninstallNeedRestart(): Boolean;
begin
  Result := UninstallNeedRestart1(); if Result then exit;
//  Result := UninstallNeedRestart2(); if Result then exit;
//  Result := UninstallNeedRestart3(); if Result then exit;
//  Result := UninstallNeedRestart4(); if Result then exit;
//  Result := UninstallNeedRestart5(); if Result then exit;
//  Result := UninstallNeedRestart6(); if Result then exit;
//  Result := UninstallNeedRestart7(); if Result then exit;
//  Result := UninstallNeedRestart8(); if Result then exit;
//  Result := UninstallNeedRestart9(); if Result then exit;
//  Result := UninstallNeedRestart10(); if Result then exit;
end;


insombia 04-09-2011 13:53 1745864

del

Rikill 04-09-2011 14:27 1745878

insombia, удали создание кнопки вручную, если не ошибаюсь это MyCancelButton и раскрой стандартную отмену удалив строку:
WizardForm.CancelButton.Visible:=false;
потом повесь на ст. отмену удаление:
WizardForm.CancelButton.OnClick:=@CancelButtonOnClick;

Raf-9600 04-09-2011 17:05 1745992

Ктонить может объединить этот код
читать дальше »
Код:

#define TIME_FOR_VIEW 5

[C0de]
procedure ChangeCaption(str: string);
begin
    WizardForm.StatusLabel.Caption:= str;
end;


function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
  Info: TNewStaticText;
  InfoCaption: TNewStaticText;
  InfoPanel: TPanel;

  NeedSize:Integer;
  FreeMB, TotalMB: Cardinal;
  NeedSpaceLabel: TLabel;
  n: Integer;
  VolumeName, FileSystemName: String;
  VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
  ListBox: TListBox;
  StartMenuTreeView: TStartMenuFolderTreeView;

  procedure GetFreeSpaceCaption(Sender: TObject);
var
  Path: String;
begin
  Path := ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled := False else
  WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
  if NeedSize > 1024 then
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard1();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;

procedure InitializeWizard2();
begin
  NeedSize := 510;                  //Здесь указывается место для приложения
  WizardForm.DiskSpaceLabel.Hide;
  NeedSpaceLabel := TLabel.Create(WizardForm);
  with NeedSpaceLabel do
  begin
  Parent := WizardForm.SelectDirPage;
  Left := ScaleX(0);
  Top := ScaleY(220);
  Width := ScaleX(209);
  Height := ScaleY(13);
  end;
  ListBox:= TListBox.Create(WizardForm)
  ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
  ListBox.Font.Size:= 9
  ListBox.Font.Style:= []
  ListBox.Font.Name:= 'Courier New';
  ListBox.OnClick:= @ObjectOnClick;
  ListBox.Parent:= WizardForm.SelectDirPage;
  WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
  end;

procedure CurPageChanged1(CurPageID: Integer);
  begin
  if CurPageID=wpSelectDir then
  begin
  GetNeedSpaceCaption;
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled:=False
  ListBoxRefresh
  end;
end;

procedure InitializeWizard3();
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(200);
  InfoPanel := TPanel.Create(WizardForm);
  InfoPanel.Parent := WizardForm.SelectComponentsPage;
  InfoPanel.Caption := '';
  InfoPanel.Top := WizardForm.ComponentsList.Top;
  InfoPanel.Left := ScaleX(216);
  InfoPanel.Width := ScaleX(200);
  InfoPanel.Height := WizardForm.ComponentsList.Height;
  InfoPanel.BevelInner := bvRaised;
  InfoPanel.BevelOuter := bvLowered;
  InfoCaption := TNewStaticText.Create(WizardForm);
  InfoCaption.Parent := WizardForm.SelectComponentsPage;
  InfoCaption.Caption := 'Описание';
  InfoCaption.Left := ScaleX(224);
  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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
  Info.WordWrap := true;
  //Впишыте описание компонентов
  enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
      'Выберите какую игру вы хотите установить.;'+ //Text
      'Культовая игра разработанная компанией Condor (позже, переименованная в студию Blizzard North).;'+ //Game\Diablo
      'Полная, русская локализация, созданная командой PC Boheme, издаваемая фирмой Фаргус. Отличается отсутствием некоторых монологов.;'+ // \Diablo\Russian     
      'Оригинальная, англоязычная локализация. Содержит обновленные файлы до последней версии - 1.9b.;'+ // Diablo\Englisch
      'Взломать игру, позволив ей запускаться без лицензионного диска. Выбрав этот пункт, вы потеряете возможность играть на офицыальных серверах Battle.net.;'+ // Diablo\Englisch\Crack                                         
      'Дополнение для игры Diablo, разработанное и выпущенное компанией Sierra Entertainment в 1997 году. Содержит множество нововведений, среди которых, новый персонаж - Монах. В игре уже активированы некоторые скрытые функции, среди которых, мультиплеер, и Бард;'+ // Game\Hellfire
      'Полная, русская локализация, созданная командой PC Boheme, издаваемая фирмой Фаргус. Отличается отсутствием некоторых монологов.;'+ // Hellfire\Russian
      'Оригинальная, англоязычная локализация.;'+ // Hellfire\Englisch
      'Установить обновление Hellfire до последней версии - 1.01, исправляющее некоторые ошибки, и открывающее возможность игры за нового персонажа - Варвара. Но учтите, что выбрав этот компонент, вы потеряете возможность играть в мультиплеере.;'+ // Game\Hellfire\Englisch\101
      'Взломать игру, позволив ей запускаться без требования оригинального CD.;' // Game\Hellfire\Englisch\Crack

      );
  end;



  function ShouldSkipPage(CurPage: Integer): Boolean;
    begin
      if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
        case CurPage of
          wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
          wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
            Result := True;
        end;
    end;

    const
      WM_LBUTTONDOWN = 513;
      WM_LBUTTONUP = 514;

    procedure InitializeWizard4();
    begin
      if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
      begin
        PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
        PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
      end;
    end;

    procedure CurPageChanged2(CurPageID: Integer);
    begin
      if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
        (CurPageID = wpSelectComponents) then
        WizardForm.BackButton.Visible := False;
    end;


//Проверка на оставшыеся файлы
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Res: Integer;
begin
 case CurUninstallStep of
 usPostUninstall:
  begin
  if DirExists(ExpandConstant('{app}')) then
  if ExpandConstant('{language}') = 'ua' then
  case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
              '"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
              '"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
              '"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

        IDCANCEL:;
  end
  else
  if ExpandConstant('{language}') = 'ru' then
  case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
              '"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
              '"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
              '"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

        IDCANCEL:;
  end
  else
    case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
              '"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
              '"No" to open the directory with explorer to delete the files manually.'#13#13 +
              '"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

        IDCANCEL:;
    end
  end
 end
end;




const
n1=47; //количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N1] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
 For i:=1 to X do A:=A+chr(i);
 B:='';
 For i:=1 to X do begin
  j:=Random(Length(A)-1)+1;
  C:='';
  B:=B + A[j];
  for k:=1 to Length(A) do
  if k<>j then C:=C+A[k];
  A:=C;
 end;
 for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
StatusMessages: TNewStaticText;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
 then begin
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
  if (currTime/{#TIME_FOR_VIEW} = N1) then currTime:=0;
 end;
end;


procedure InitializeWizard5;
begin
bmp:=get_unique_random_number(N1);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов...';
for z:=2 to N1 do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged3(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;




procedure InitializeWizard;
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
end;


procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
  CurPageChanged2(CurPageID);
  CurPageChanged3(CurPageID);
end;

procedure DeinitializeSetup();
begin
  disabledesc();
  KillTimer(0, TimerID);
end;


С этим "Автовыбор диска установки", и этим Запрет русских символов в пути?

VASYAKRN 04-09-2011 17:10 1745997

У кого есть 3д скрипт от рекодинг какой нибуть

xXDx 04-09-2011 19:23 1746069

посмотрите мой инсталл, скажите что тут не хватает, что нужно удалить и как его можно улучшить http://rghost.ru/20444771

insombia 04-09-2011 20:51 1746129

как в ISDone0.6e сделать чтобы писалось просто распаковка файлов а каких именно не указывалось?

No4noylis 04-09-2011 21:00 1746132

insombia, удали LabelCurrFileName и все что с ним связано, либо напиши в коде LabelCurrFileName.Hide; либо напиши LabelCurrFileName.Caption:='Распаковка файлов'; :)

insombia 04-09-2011 21:20 1746144

Цитата:

удали LabelCurrFileName и все что с ним связано
это помогло :)

Rikill 04-09-2011 22:19 1746188

VASYAKRN, тебе уже сказали пи*дуй отсюда, научись писать нормально и адекватно себя вести.

xXDx, прикольный скрипт, молодец, осталось забить пустое место словами.

Raf-9600,
читать дальше »
Код:

#define TIME_FOR_VIEW 5
 [setup]
 appname=test
 appvername=1.0
 DefaultDirName=test

 [c0de]
 procedure ChangeCaption(str: string);
 begin
 WizardForm.StatusLabel.Caption:= str;
 end;

 function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
 function GetDriveType(lpRootPathName: PChar): Cardinal; external 'GetDriveTypeA@kernel32.dll stdcall';
 function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
 function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';
 const
 DRIVE_FIXED = 3;

 var
 Info: TNewStaticText;
 InfoCaption: TNewStaticText;
 InfoPanel: TPanel;

 NeedSize:Integer;
 FreeMB, TotalMB: Cardinal;
 NeedSpaceLabel: TLabel;
 n: Integer;
 VolumeName, FileSystemName: String;
 VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
 ListBox: TListBox;
 StartMenuTreeView: TStartMenuFolderTreeView;
 function NoSD(s: string): string;
 var
 x, bit, i: Integer;
 tp: Cardinal;
 sd: string;
 begin
 sd:= ExpandConstant('{sd}');
 Result:= sd;
 // Вызываем функцию WinAPI
 // Функция возвращает битовую маску установленных логических дисков.
 // Бит 0 определяет наличие диска А:, бит 1 - диска B и т.д.
 x:= GetLogicalDrives;
 if x <> 0 then
 // цикл по полученным битам переменной X
 for i:= 1 to 64 do
 begin
 // Накладываем битовую маску для выделения бита с поряковым номером 0
 bit:= x and 1;
 // нашли логический диск...
 if bit = 1 then
 begin
 // определяем тип логического диска
 tp:= GetDriveType(PChar(Chr(64 + i) + ':'));
 if tp = DRIVE_FIXED then
 // если диск не является системным
 if Chr(64 + i) <> Copy(sd, 1, 1) then
 begin
 Result:= Chr(64 + i) + ':';
 Break;
 end;
 end;
 // побитовый сдвиг вправо
 x:= x shr 1;
 end;
 end;

 procedure GetFreeSpaceCaption(Sender: TObject);
 var
 Path: String;
 begin
 Path := ExtractFileDrive(WizardForm.DirEdit.Text);
 GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
 if FreeMB < NeedSize then
 WizardForm.NextButton.Enabled := False else
 WizardForm.NextButton.Enabled := True; end;

 procedure GetNeedSpaceCaption;
 begin
 if NeedSize > 1024 then
 NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
 NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

 const oneMB= 1024*1024;
 function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
 function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

 Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
 Begin
 if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
 if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
 if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
 If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
 If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
 Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
 StringChange(Result, ',', '.')
 End;

 Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
 Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

 Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
 Begin
 if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
 else Result:= String;
 End;

 Procedure GetDiskInfo(Disk: String);
 Begin
 FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
 GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
 FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
 End;

 Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
 ListBox.Items.Clear
 for n:= 1 to 31 do // диск 'А' пропустить
 if (GetLogicalDrives and (1 shl n)) > 0 then
 if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
 if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
 for n:= 0 to ListBox.Items.Count -1 do begin
 Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
 if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
 if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
 if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
 ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
 End;

 Procedure ObjectOnClick(Sender: TObject); Begin
 Case TObject(Sender) of
 ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
 StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
 WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
 end; End;

 procedure InitializeWizard1();
 begin
 with WizardForm do begin
 with MainPanel do
 Height := Height - 1;
 with WizardSmallBitmapImage do begin
 Left := 0;
 Top := 0;
 Height := 58; //Размер рисунка
 Width := 497; //
 end;
 with PageNameLabel do begin
 Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
 Left := Left + 497; //
 end;
 with PageDescriptionLabel do begin
 Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
 Left := Left + 497; //
 end;
 end;
 end;

 procedure InitializeWizard2();
 begin
 NeedSize := 510; //Здесь указывается место для приложения
 WizardForm.DiskSpaceLabel.Hide;
 NeedSpaceLabel := TLabel.Create(WizardForm);
 with NeedSpaceLabel do
 begin
 Parent := WizardForm.SelectDirPage;
 Left := ScaleX(0);
 Top := ScaleY(220);
 Width := ScaleX(209);
 Height := ScaleY(13);
 end;
 ListBox:= TListBox.Create(WizardForm)
 ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
 ListBox.Font.Size:= 9
 ListBox.Font.Style:= []
 ListBox.Font.Name:= 'Courier New';
 ListBox.OnClick:= @ObjectOnClick;
 ListBox.Parent:= WizardForm.SelectDirPage;
 WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
 WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
 end;

 procedure CurPageChanged1(CurPageID: Integer);
 begin
 if CurPageID=wpSelectDir then
 begin
 GetNeedSpaceCaption;
 if FreeMB < NeedSize then
 WizardForm.NextButton.Enabled:=False
 ListBoxRefresh
 end;
 end;

 procedure InitializeWizard3();
 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(200);
 InfoPanel := TPanel.Create(WizardForm);
 InfoPanel.Parent := WizardForm.SelectComponentsPage;
 InfoPanel.Caption := '';
 InfoPanel.Top := WizardForm.ComponentsList.Top;
 InfoPanel.Left := ScaleX(216);
 InfoPanel.Width := ScaleX(200);
 InfoPanel.Height := WizardForm.ComponentsList.Height;
 InfoPanel.BevelInner := bvRaised;
 InfoPanel.BevelOuter := bvLowered;
 InfoCaption := TNewStaticText.Create(WizardForm);
 InfoCaption.Parent := WizardForm.SelectComponentsPage;
 InfoCaption.Caption := 'Описание';
 InfoCaption.Left := ScaleX(224);
 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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
 Info.WordWrap := true;
 //Впишыте описание компонентов
 enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
 'Выберите какую игру вы хотите установить.;'+ //Text
 'Культовая игра разработанная компанией Condor (позже, переименованная в студию Blizzard North).;'+ //Game\Diablo
 'Полная, русская локализация, созданная командой PC Boheme, издаваемая фирмой Фаргус. Отличается отсутствием некоторых монологов.;'+ // \Diablo\Russian
 'Оригинальная, англоязычная локализация. Содержит обновленные файлы до последней версии - 1.9b.;'+ // Diablo\Englisch
 'Взломать игру, позволив ей запускаться без лицензионного диска. Выбрав этот пункт, вы потеряете возможность играть на офицыальных серверах Battle.net.;'+ // Diablo\Englisch\Crack
 'Дополнение для игры Diablo, разработанное и выпущенное компанией Sierra Entertainment в 1997 году. Содержит множество нововведений, среди которых, новый персонаж - Монах. В игре уже активированы некоторые скрытые функции, среди которых, мультиплеер, и Бард;'+ // Game\Hellfire
 'Полная, русская локализация, созданная командой PC Boheme, издаваемая фирмой Фаргус. Отличается отсутствием некоторых монологов.;'+ // Hellfire\Russian
 'Оригинальная, англоязычная локализация.;'+ // Hellfire\Englisch
 'Установить обновление Hellfire до последней версии - 1.01, исправляющее некоторые ошибки, и открывающее возможность игры за нового персонажа - Варвара. Но учтите, что выбрав этот компонент, вы потеряете возможность играть в мультиплеере.;'+ // Game\Hellfire\Englisch\101
 'Взломать игру, позволив ей запускаться без требования оригинального CD.;' // Game\Hellfire\Englisch\Crack

 );
 end;



 function ShouldSkipPage(CurPage: Integer): Boolean;
 begin
 if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
 case CurPage of
 wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
 wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
 Result := True;
 end;
 end;

 const
 WM_LBUTTONDOWN = 513;
 WM_LBUTTONUP = 514;

 procedure InitializeWizard4();
 begin
 if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
 begin
 PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
 PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
 end;
 end;

 procedure CurPageChanged2(CurPageID: Integer);
 begin
 if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
 (CurPageID = wpSelectComponents) then
 WizardForm.BackButton.Visible := False;
 end;


 //Проверка на оставшыеся файлы
 procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
 var
 Res: Integer;
 begin
 case CurUninstallStep of
 usPostUninstall:
 begin
 if DirExists(ExpandConstant('{app}')) then
 if ExpandConstant('{language}') = 'ua' then
 case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
 '"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
 '"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
 '"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

 IDYES:
 if not DelTree(ExpandConstant('{app}'), True, True, True) then
 MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

 IDNO:
 if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
 MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

 IDCANCEL:;
 end
 else
 if ExpandConstant('{language}') = 'ru' then
 case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
 '"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
 '"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
 '"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

 IDYES:
 if not DelTree(ExpandConstant('{app}'), True, True, True) then
 MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

 IDNO:
 if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
 MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

 IDCANCEL:;
 end
 else
 case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
 '"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
 '"No" to open the directory with explorer to delete the files manually.'#13#13 +
 '"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

 IDYES:
 if not DelTree(ExpandConstant('{app}'), True, True, True) then
 MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

 IDNO:
 if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
 MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

 IDCANCEL:;
 end
 end
 end
 end;




 const
 n1=47; //количество слайдов
 type
 TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
 TRandNumbers = array[1..N1] of byte;

 function WrapTimerProc(callback:TProc; paramcount:integer):longword;
 external 'wrapcallback@files:InnoCallback.dll stdcall';

 function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
 external 'SetTimer@user32.dll stdcall';

 function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
 external 'KillTimer@user32.dll stdcall';

 function get_unique_random_number(X:byte):TRandNumbers;
 var
 A,b,c: string;
 i,j,k:byte;
 begin
 For i:=1 to X do A:=A+chr(i);
 B:='';
 For i:=1 to X do begin
 j:=Random(Length(A)-1)+1;
 C:='';
 B:=B + A[j];
 for k:=1 to Length(A) do
 if k<>j then C:=C+A[k];
 A:=C;
 end;
 for i:=1 to X do Result[i]:=ord(B[i]);
 end;

 var
 TimerID: LongWord;
 currTime: Integer;
 SplashImage: TBitmapImage;
 StatusMessages: TNewStaticText;
 bmp: TRandNumbers;
 z:byte;

 procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
 begin
 currTime := currTime + 1;
 if (currTime mod {#TIME_FOR_VIEW} = 0)
 then begin
 SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
 if (currTime/{#TIME_FOR_VIEW} = N1) then currTime:=0;
 end;
 end;


 procedure InitializeWizard5;
 begin
 bmp:=get_unique_random_number(N1);
 ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

 currTime := 0;

 WizardForm.ProgressGauge.Parent := WizardForm;
 WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
 WizardForm.ProgressGauge.Left := ScaleX(10);
 WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
 WizardForm.ProgressGauge.Height := 16;
 WizardForm.ProgressGauge.Hide;

 WizardForm.StatusLabel.Parent := WizardForm;
 WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
 WizardForm.StatusLabel.Left := ScaleX(10);
 WizardForm.StatusLabel.Width := ScaleX(397);
 WizardForm.StatusLabel.Hide;

 SplashImage := TBitmapImage.Create(WizardForm);
 SplashImage.Top := 0;
 SplashImage.Left := 0;
 SplashImage.Width := WizardForm.MainPanel.Width;
 SplashImage.Height := WizardForm.Bevel.Top;
 SplashImage.Parent := WizardForm.InnerPage;
 SplashImage.Stretch := True;
 SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
 SplashImage.Hide;
 end;

 procedure CurStepChanged(CurStep: TSetupStep);
 begin
 if CurStep = ssInstall then
 begin
 WizardForm.StatusLabel.Caption := 'Распаковка слайдов...';
 for z:=2 to N1 do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
 end;
 end;

 procedure CurPageChanged3(CurPageID: Integer);
 var
 pfunc: LongWord;
 begin
 if (CurPageID = wpInstalling) then
 begin
 pfunc := WrapTimerProc(@OnTimer, 5);
 TimerID := SetTimer(0, 0, 1000, pfunc);
 WizardForm.PageNameLabel.Visible := False;
 WizardForm.PageDescriptionLabel.Visible := False;
 WizardForm.InnerNotebook.Hide;
 WizardForm.Bevel1.Hide;
 WizardForm.MainPanel.Hide;
 WizardForm.PageNameLabel.Hide;
 WizardForm.PageDescriptionLabel.Hide;
 WizardForm.ProgressGauge.Show;
 WizardForm.StatusLabel.Show;
 SplashImage.Show;
 WizardForm.CancelButton.Enabled := True;
 WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
 end else
 begin
 WizardForm.ProgressGauge.Hide;
 SplashImage.Hide;
 WizardForm.FileNameLabel.Hide;
 WizardForm.StatusLabel.Hide;
 if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
 begin
 WizardForm.InnerNotebook.Show;
 WizardForm.Bevel1.Show;
 WizardForm.MainPanel.Show;
 WizardForm.PageNameLabel.Show;
 WizardForm.PageDescriptionLabel.Show;
 end;
 If CurPageID = wpFinished then
 end;
 end;

 function NextButtonClick(CurPageID: Integer): Boolean;
 var
 i,j: integer;
 s,c: string;
 begin
 Result := True;
 if CurPageID = wpSelectDir then
 begin
 c := 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
 for i:=1 to length(WizardForm.DirEdit.text) do
 for j:=1 to length(c) do
 begin
 if WizardForm.DirEdit.text[i] = c[j] then
 begin
 s := 'В пути установки присутствуют русские буквы, что недопустимо'#13#13'Пожалуйста, повторите ввод.';
 MsgBox(s, mbError, mb_Ok);
 Result := False ;
 exit;
 end
 else Result := True;
 end;
 end;
 end;


 procedure InitializeWizard;
 begin
 InitializeWizard1();
 InitializeWizard2();
 InitializeWizard3();
 InitializeWizard4();
 InitializeWizard5();
 end;


 procedure CurPageChanged(CurPageID: Integer);
 begin
 CurPageChanged1(CurPageID);
 CurPageChanged2(CurPageID);
 CurPageChanged3(CurPageID);
 end;

 procedure DeinitializeSetup();
 begin
 disabledesc();
 KillTimer(0, TimerID);
 end;



Habetdin, это не я, чесно!

Habetdin 04-09-2011 22:22 1746190

Цитата:

Цитата Rikill
Raf-9600
...
Òðåáóåòñÿ êàê ìèíèìóì »

Эх, что же с кодировкой сделали? =)
читать дальше »
Код:

#define TIME_FOR_VIEW 5
 [setup]
 appname=test
 appvername=1.0
 DefaultDirName=test

 [code]
 procedure ChangeCaption(str: string);
 begin
 WizardForm.StatusLabel.Caption:= str;
 end;

 function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
 function GetDriveType(lpRootPathName: PChar): Cardinal; external 'GetDriveTypeA@kernel32.dll stdcall';
 function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
 function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';
 const
 DRIVE_FIXED = 3;

 var
 Info: TNewStaticText;
 InfoCaption: TNewStaticText;
 InfoPanel: TPanel;

 NeedSize:Integer;
 FreeMB, TotalMB: Cardinal;
 NeedSpaceLabel: TLabel;
 n: Integer;
 VolumeName, FileSystemName: String;
 VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
 ListBox: TListBox;
 StartMenuTreeView: TStartMenuFolderTreeView;
 function NoSD(s: string): string;
 var
 x, bit, i: Integer;
 tp: Cardinal;
 sd: string;
 begin
 sd:= ExpandConstant('{sd}');
 Result:= sd;
 // Вызываем функцию WinAPI
 // Функция возвращает битовую маску установленных логических дисков.
 // Бит 0 определяет наличие диска А:, бит 1 - диска B и т.д.
 x:= GetLogicalDrives;
 if x <> 0 then
 // цикл по полученным битам переменной X
 for i:= 1 to 64 do
 begin
 // Накладываем битовую маску для выделения бита с поряковым номером 0
 bit:= x and 1;
 // нашли логический диск...
 if bit = 1 then
 begin
 // определяем тип логического диска
 tp:= GetDriveType(PChar(Chr(64 + i) + ':'));
 if tp = DRIVE_FIXED then
 // если диск не является системным
 if Chr(64 + i) <> Copy(sd, 1, 1) then
 begin
 Result:= Chr(64 + i) + ':';
 Break;
 end;
 end;
 // побитовый сдвиг вправо
 x:= x shr 1;
 end;
 end;

 procedure GetFreeSpaceCaption(Sender: TObject);
 var
 Path: String;
 begin
 Path := ExtractFileDrive(WizardForm.DirEdit.Text);
 GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
 if FreeMB < NeedSize then
 WizardForm.NextButton.Enabled := False else
 WizardForm.NextButton.Enabled := True; end;

 procedure GetNeedSpaceCaption;
 begin
 if NeedSize > 1024 then
 NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
 NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

 const oneMB= 1024*1024;
 function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
 function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

 Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
 Begin
 if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
 if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
 if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
 If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
 If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
 Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
 StringChange(Result, ',', '.')
 End;

 Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
 Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

 Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
 Begin
 if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
 else Result:= String;
 End;

 Procedure GetDiskInfo(Disk: String);
 Begin
 FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
 GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
 FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
 End;

 Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
 ListBox.Items.Clear
 for n:= 1 to 31 do // диск 'А' пропустить
 if (GetLogicalDrives and (1 shl n)) > 0 then
 if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
 if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
 for n:= 0 to ListBox.Items.Count -1 do begin
 Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
 if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
 if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
 if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
 ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
 End;

 Procedure ObjectOnClick(Sender: TObject); Begin
 Case TObject(Sender) of
 ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
 StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
 WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
 end; End;

 procedure InitializeWizard1();
 begin
 with WizardForm do begin
 with MainPanel do
 Height := Height - 1;
 with WizardSmallBitmapImage do begin
 Left := 0;
 Top := 0;
 Height := 58; //Размер рисунка
 Width := 497; //
 end;
 with PageNameLabel do begin
 Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
 Left := Left + 497; //
 end;
 with PageDescriptionLabel do begin
 Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
 Left := Left + 497; //
 end;
 end;
 end;

 procedure InitializeWizard2();
 begin
 NeedSize := 510; //Здесь указывается место для приложения
 WizardForm.DiskSpaceLabel.Hide;
 NeedSpaceLabel := TLabel.Create(WizardForm);
 with NeedSpaceLabel do
 begin
 Parent := WizardForm.SelectDirPage;
 Left := ScaleX(0);
 Top := ScaleY(220);
 Width := ScaleX(209);
 Height := ScaleY(13);
 end;
 ListBox:= TListBox.Create(WizardForm)
 ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
 ListBox.Font.Size:= 9
 ListBox.Font.Style:= []
 ListBox.Font.Name:= 'Courier New';
 ListBox.OnClick:= @ObjectOnClick;
 ListBox.Parent:= WizardForm.SelectDirPage;
 WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
 WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
 end;

 procedure CurPageChanged1(CurPageID: Integer);
 begin
 if CurPageID=wpSelectDir then
 begin
 GetNeedSpaceCaption;
 if FreeMB < NeedSize then
 WizardForm.NextButton.Enabled:=False
 ListBoxRefresh
 end;
 end;

 procedure InitializeWizard3();
 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(200);
 InfoPanel := TPanel.Create(WizardForm);
 InfoPanel.Parent := WizardForm.SelectComponentsPage;
 InfoPanel.Caption := '';
 InfoPanel.Top := WizardForm.ComponentsList.Top;
 InfoPanel.Left := ScaleX(216);
 InfoPanel.Width := ScaleX(200);
 InfoPanel.Height := WizardForm.ComponentsList.Height;
 InfoPanel.BevelInner := bvRaised;
 InfoPanel.BevelOuter := bvLowered;
 InfoCaption := TNewStaticText.Create(WizardForm);
 InfoCaption.Parent := WizardForm.SelectComponentsPage;
 InfoCaption.Caption := 'Описание';
 InfoCaption.Left := ScaleX(224);
 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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
 Info.WordWrap := true;
 //Впишыте описание компонентов
 enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
 'Выберите какую игру вы хотите установить.;'+ //Text
 'Культовая игра разработанная компанией Condor (позже, переименованная в студию Blizzard North).;'+ //Game\Diablo
 'Полная, русская локализация, созданная командой PC Boheme, издаваемая фирмой Фаргус. Отличается отсутствием некоторых монологов.;'+ // \Diablo\Russian
 'Оригинальная, англоязычная локализация. Содержит обновленные файлы до последней версии - 1.9b.;'+ // Diablo\Englisch
 'Взломать игру, позволив ей запускаться без лицензионного диска. Выбрав этот пункт, вы потеряете возможность играть на офицыальных серверах Battle.net.;'+ // Diablo\Englisch\Crack
 'Дополнение для игры Diablo, разработанное и выпущенное компанией Sierra Entertainment в 1997 году. Содержит множество нововведений, среди которых, новый персонаж - Монах. В игре уже активированы некоторые скрытые функции, среди которых, мультиплеер, и Бард;'+ // Game\Hellfire
 'Полная, русская локализация, созданная командой PC Boheme, издаваемая фирмой Фаргус. Отличается отсутствием некоторых монологов.;'+ // Hellfire\Russian
 'Оригинальная, англоязычная локализация.;'+ // Hellfire\Englisch
 'Установить обновление Hellfire до последней версии - 1.01, исправляющее некоторые ошибки, и открывающее возможность игры за нового персонажа - Варвара. Но учтите, что выбрав этот компонент, вы потеряете возможность играть в мультиплеере.;'+ // Game\Hellfire\Englisch\101
 'Взломать игру, позволив ей запускаться без требования оригинального CD.;' // Game\Hellfire\Englisch\Crack

 );
 end;



 function ShouldSkipPage(CurPage: Integer): Boolean;
 begin
 if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
 case CurPage of
 wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
 wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
 Result := True;
 end;
 end;

 const
 WM_LBUTTONDOWN = 513;
 WM_LBUTTONUP = 514;

 procedure InitializeWizard4();
 begin
 if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
 begin
 PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
 PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
 end;
 end;

 procedure CurPageChanged2(CurPageID: Integer);
 begin
 if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
 (CurPageID = wpSelectComponents) then
 WizardForm.BackButton.Visible := False;
 end;


 //Проверка на оставшыеся файлы
 procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
 var
 Res: Integer;
 begin
 case CurUninstallStep of
 usPostUninstall:
 begin
 if DirExists(ExpandConstant('{app}')) then
 if ExpandConstant('{language}') = 'ua' then
 case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
 '"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
 '"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
 '"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

 IDYES:
 if not DelTree(ExpandConstant('{app}'), True, True, True) then
 MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

 IDNO:
 if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
 MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

 IDCANCEL:;
 end
 else
 if ExpandConstant('{language}') = 'ru' then
 case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
 '"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
 '"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
 '"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

 IDYES:
 if not DelTree(ExpandConstant('{app}'), True, True, True) then
 MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

 IDNO:
 if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
 MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

 IDCANCEL:;
 end
 else
 case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
 '"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
 '"No" to open the directory with explorer to delete the files manually.'#13#13 +
 '"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

 IDYES:
 if not DelTree(ExpandConstant('{app}'), True, True, True) then
 MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

 IDNO:
 if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
 MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

 IDCANCEL:;
 end
 end
 end
 end;




 const
 n1=47; //количество слайдов
 type
 TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
 TRandNumbers = array[1..N1] of byte;

 function WrapTimerProc(callback:TProc; paramcount:integer):longword;
 external 'wrapcallback@files:InnoCallback.dll stdcall';

 function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
 external 'SetTimer@user32.dll stdcall';

 function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
 external 'KillTimer@user32.dll stdcall';

 function get_unique_random_number(X:byte):TRandNumbers;
 var
 A,b,c: string;
 i,j,k:byte;
 begin
 For i:=1 to X do A:=A+chr(i);
 B:='';
 For i:=1 to X do begin
 j:=Random(Length(A)-1)+1;
 C:='';
 B:=B + A[j];
 for k:=1 to Length(A) do
 if k<>j then C:=C+A[k];
 A:=C;
 end;
 for i:=1 to X do Result[i]:=ord(B[i]);
 end;

 var
 TimerID: LongWord;
 currTime: Integer;
 SplashImage: TBitmapImage;
 StatusMessages: TNewStaticText;
 bmp: TRandNumbers;
 z:byte;

 procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
 begin
 currTime := currTime + 1;
 if (currTime mod {#TIME_FOR_VIEW} = 0)
 then begin
 SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
 if (currTime/{#TIME_FOR_VIEW} = N1) then currTime:=0;
 end;
 end;


 procedure InitializeWizard5;
 begin
 bmp:=get_unique_random_number(N1);
 ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

 currTime := 0;

 WizardForm.ProgressGauge.Parent := WizardForm;
 WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
 WizardForm.ProgressGauge.Left := ScaleX(10);
 WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
 WizardForm.ProgressGauge.Height := 16;
 WizardForm.ProgressGauge.Hide;

 WizardForm.StatusLabel.Parent := WizardForm;
 WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
 WizardForm.StatusLabel.Left := ScaleX(10);
 WizardForm.StatusLabel.Width := ScaleX(397);
 WizardForm.StatusLabel.Hide;

 SplashImage := TBitmapImage.Create(WizardForm);
 SplashImage.Top := 0;
 SplashImage.Left := 0;
 SplashImage.Width := WizardForm.MainPanel.Width;
 SplashImage.Height := WizardForm.Bevel.Top;
 SplashImage.Parent := WizardForm.InnerPage;
 SplashImage.Stretch := True;
 SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
 SplashImage.Hide;
 end;

 procedure CurStepChanged(CurStep: TSetupStep);
 begin
 if CurStep = ssInstall then
 begin
 WizardForm.StatusLabel.Caption := 'Распаковка слайдов...';
 for z:=2 to N1 do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
 end;
 end;

 procedure CurPageChanged3(CurPageID: Integer);
 var
 pfunc: LongWord;
 begin
 if (CurPageID = wpInstalling) then
 begin
 pfunc := WrapTimerProc(@OnTimer, 5);
 TimerID := SetTimer(0, 0, 1000, pfunc);
 WizardForm.PageNameLabel.Visible := False;
 WizardForm.PageDescriptionLabel.Visible := False;
 WizardForm.InnerNotebook.Hide;
 WizardForm.Bevel1.Hide;
 WizardForm.MainPanel.Hide;
 WizardForm.PageNameLabel.Hide;
 WizardForm.PageDescriptionLabel.Hide;
 WizardForm.ProgressGauge.Show;
 WizardForm.StatusLabel.Show;
 SplashImage.Show;
 WizardForm.CancelButton.Enabled := True;
 WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
 end else
 begin
 WizardForm.ProgressGauge.Hide;
 SplashImage.Hide;
 WizardForm.FileNameLabel.Hide;
 WizardForm.StatusLabel.Hide;
 if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
 begin
 WizardForm.InnerNotebook.Show;
 WizardForm.Bevel1.Show;
 WizardForm.MainPanel.Show;
 WizardForm.PageNameLabel.Show;
 WizardForm.PageDescriptionLabel.Show;
 end;
 If CurPageID = wpFinished then
 end;
 end;

 function NextButtonClick(CurPageID: Integer): Boolean;
 var
 i,j: integer;
 s,c: string;
 begin
 Result := True;
 if CurPageID = wpSelectDir then
 begin
 c := 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
 for i:=1 to length(WizardForm.DirEdit.text) do
 for j:=1 to length(c) do
 begin
 if WizardForm.DirEdit.text[i] = c[j] then
 begin
 s := 'В пути установки присутствуют русские буквы, что недопустимо'#13#13'Пожалуйста, повторите ввод.';
 MsgBox(s, mbError, mb_Ok);
 Result := False ;
 exit;
 end
 else Result := True;
 end;
 end;
 end;


 procedure InitializeWizard;
 begin
 InitializeWizard1();
 InitializeWizard2();
 InitializeWizard3();
 InitializeWizard4();
 InitializeWizard5();
 end;


 procedure CurPageChanged(CurPageID: Integer);
 begin
 CurPageChanged1(CurPageID);
 CurPageChanged2(CurPageID);
 CurPageChanged3(CurPageID);
 end;

 procedure DeinitializeSetup();
 begin
 disabledesc();
 KillTimer(0, TimerID);
 end;


Raf-9600 05-09-2011 00:37 1746256

А можно ещё в эту модификацию кода встроить те же кусочки?
читать дальше »
Код:

#define TIME_FOR_VIEW 10
[C0de]
//Ничего не отображающий прогресс-бар
procedure NeaProgress;
begin
  WizardForm.ProgressGauge.Style:= npbstMarquee;
end;

const
n1=28; //количество слайдов
oneMB= 1024*1024;

type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N1] of byte;

function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
  Info, InfoCaption, StatusMessages: TNewStaticText;
  InfoPanel: TPanel;

  FreeMB, TotalMB: Cardinal;
  NeedSpaceLabel: TLabel;
  NeedSize, n, currTime: Integer;
  VolumeName, FileSystemName, S: String;
  VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
  ListBox: TListBox;
  StartMenuTreeView: TStartMenuFolderTreeView;

  Files: Array of String;
  TimerID: LongWord;
  SplashImage: TBitmapImage;
  bmp: TRandNumbers;
  z:byte;

procedure ChangeCaption(str: string);
begin
    WizardForm.StatusLabel.Caption:= str;
end;

Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k:= Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
End;

procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;

procedure RecodeOgg;
var ResultCode: integer; CurFile: String;
begin
FindFiles(ExpandConstant('{app}'), '*.ogg') //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов
WizardForm.ProgressGauge.Position:=0
for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}')), '')
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q '+AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files[n]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\oggdec.exe'))
end;

  procedure GetFreeSpaceCaption(Sender: TObject);
var
  Path: String;
begin
  Path := ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled := False else
  WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
  if NeedSize > 1024 then
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';
end;


Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard1();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;

procedure InitializeWizard2();
begin
  NeedSize := 2500;                  //Здесь указывается место для приложения
  WizardForm.DiskSpaceLabel.Hide;
  NeedSpaceLabel := TLabel.Create(WizardForm);
  with NeedSpaceLabel do
  begin
  Parent := WizardForm.SelectDirPage;
  Left := ScaleX(0);
  Top := ScaleY(220);
  Width := ScaleX(209);
  Height := ScaleY(13);
  end;
  ListBox:= TListBox.Create(WizardForm)
  ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
  ListBox.Font.Size:= 9
  ListBox.Font.Style:= []
  ListBox.Font.Name:= 'Courier New';
  ListBox.OnClick:= @ObjectOnClick;
  ListBox.Parent:= WizardForm.SelectDirPage;
  WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
  end;

procedure CurPageChanged1(CurPageID: Integer);
  begin
  if CurPageID=wpSelectDir then
  begin
  GetNeedSpaceCaption;
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled:=False
  ListBoxRefresh
  end;
end;

procedure InitializeWizard3();
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(200);
  InfoPanel := TPanel.Create(WizardForm);
  InfoPanel.Parent := WizardForm.SelectComponentsPage;
  InfoPanel.Caption := '';
  InfoPanel.Top := WizardForm.ComponentsList.Top;
  InfoPanel.Left := ScaleX(216);
  InfoPanel.Width := ScaleX(200);
  InfoPanel.Height := WizardForm.ComponentsList.Height;
  InfoPanel.BevelInner := bvRaised;
  InfoPanel.BevelOuter := bvLowered;
  InfoCaption := TNewStaticText.Create(WizardForm);
  InfoCaption.Parent := WizardForm.SelectComponentsPage;
  InfoCaption.Caption := 'Описание';
  InfoCaption.Left := ScaleX(224);
  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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
  Info.WordWrap := true;
  //Впишыте описание компонентов
  enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
      'Выберите язык внутриигрового текста;'+ //Text
      'Немецкий текст;'+
      'Испанский текст;'+
      'Французский текст;'+
      'Итальянский текст;'+
      'Польский текст;'+
      'Оригинальный, английский текст;'+ // Text\Englisch
      'Выберите этот пункт, если вы хотите установить внутриигровую музыку. Учтите, что её можно отключить даже после инсталляции, в меню опций игры.;' // Music
    );
end;



  function ShouldSkipPage(CurPage: Integer): Boolean;
    begin
      if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
        case CurPage of
          wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
          wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
            Result := True;
        end;
    end;

    const
      WM_LBUTTONDOWN = 513;
      WM_LBUTTONUP = 514;

    procedure InitializeWizard4();
    begin
      if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
      begin
        PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
        PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
      end;
    end;

    procedure CurPageChanged2(CurPageID: Integer);
    begin
      if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
        (CurPageID = wpSelectComponents) then
        WizardForm.BackButton.Visible := False;
    end;


//Проверка на оставшыеся файлы
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Res: Integer;
begin
 case CurUninstallStep of
 usPostUninstall:
  begin
  if DirExists(ExpandConstant('{app}')) then
  if ExpandConstant('{language}') = 'ua' then
  case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
              '"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
              '"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
              '"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

        IDCANCEL:;
  end
  else
  if ExpandConstant('{language}') = 'ru' then
  case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
              '"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
              '"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
              '"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

        IDCANCEL:;
  end
  else
    case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
              '"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
              '"No" to open the directory with explorer to delete the files manually.'#13#13 +
              '"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

        IDYES:
        if not DelTree(ExpandConstant('{app}'), True, True, True) then
                MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

        IDNO:
        if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
                MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

        IDCANCEL:;
    end
  end
 end
end;


function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
 For i:=1 to X do A:=A+chr(i);
 B:='';
 For i:=1 to X do begin
  j:=Random(Length(A)-1)+1;
  C:='';
  B:=B + A[j];
  for k:=1 to Length(A) do
  if k<>j then C:=C+A[k];
  A:=C;
 end;
 for i:=1 to X do Result[i]:=ord(B[i]);
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
 then begin
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
  if (currTime/{#TIME_FOR_VIEW} = N1) then currTime:=0;
 end;
end;


procedure InitializeWizard5;
begin
bmp:=get_unique_random_number(N1);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов...';
for z:=2 to N1 do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
  if CurStep = ssPostInstall then begin
    if (IsComponentSelected('VoiceD2\German') or IsComponentSelected('VoiceD2\Spanish') or IsComponentSelected('VoiceD2\French') or IsComponentSelected('VoiceD2\Italian') or IsComponentSelected('VoiceD2\Polish') or IsComponentSelected('VoiceD2\Russian') or IsComponentSelected('VoiceLoD\German') or IsComponentSelected('VoiceLoD\Spanish') or IsComponentSelected('VoiceLoD\French') or IsComponentSelected('VoiceLoD\Italian') or IsComponentSelected('VoiceLoD\Polish') or IsComponentSelected('VoiceLoD\Russian') ) then begin
      ChangeCaption('Конвертация монологов...');
      RecodeOgg;
    end; //if IsComponentSelected
  end; //CurStep = ssPostInstall
end;

procedure CurPageChanged3(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;


procedure CurPageChanged4(CurPageID: Integer);
begin
  if CurPageID = wpInstalling then
    WizardForm.BeveledLabel.hide;
  if CurPageID = wpInfoAfter then
    WizardForm.BeveledLabel.show;
end;




procedure InitializeWizard;
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
end;


procedure CurPageChanged(CurPageID: Integer);
begin
  CurPageChanged1(CurPageID);
  CurPageChanged2(CurPageID);
  CurPageChanged3(CurPageID);
  CurPageChanged4(CurPageID);
end;

procedure DeinitializeSetup();
begin
  disabledesc();
  KillTimer(0, TimerID);
end;

этот "Автовыбор диска установки", и этот Запрет русских символов в пути?
Пожаааааалуйста
Первый код, этот тот тот же что я давал на предыдущей странице, только в этот встроен код конвертации OGG с прогресс-баром. Вот он:
читать дальше »
Код:

[C0de]
var
Files: Array of String;
S: String;
n: Integer;

Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k:= Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
End;

procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;

procedure RecodeOgg;
var ResultCode: integer; CurFile: String;
begin
FindFiles(ExpandConstant('{app}'), '*.ogg') //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов
WizardForm.ProgressGauge.Position:=0
for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}')), '')
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q '+AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files[n]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\oggdec.exe'))
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then RecodeOgg;
end;


Плиз, код с таким функционалом, для меня очень важен

Rikill 05-09-2011 03:41 1746294

Raf-9600, как негры на тебя пашем
http://rghost.ru/20483881
не смог сюда текстом выложить ибо Òðåáóåòñÿ êàê ìèíèìóì

Devils Night 05-09-2011 05:14 1746296

Есть вопрос, имеется скрипт авторана ->
читать дальше »
Код:

[Setup]
AppName=AutoRUN
VersionInfoDescription=AutoRUN
VersionInfoProductName=AutoRUN
AppVerName=AutoRUN
CreateAppDir=no
OutputDir=.
OutputBaseFilename=Autorun

[Languages]
Name: Russian; MessagesFile: compiler:Default.isl

[Files]
Source: 1.bmp; Flags: dontcopy

[Messages]
SetupAppTitle=AutoRUN

[ Code]
const
  BM_CLICK    = $00F5;

var
  AutoRun: TSetupForm;
  img1: TBitmapImage;
  PlayButton, InstallButton, SupportButton, ReadmeButton, WebButton, ExitButton, UninstallButton: TButton;
  AppPath,UninsPath: string;
  ResultCode: Integer;
procedure CurPageChanged(CurPageID: Integer);
begin
  If CurPageID=wpWelcome then
  SendMessage(WizardForm.NextButton.Handle, BM_CLICK, 0, 0);
end;

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

procedure PlayButtonClick(Sender: TObject);
var
  exe: string;
begin
  exe:='shift.exe';
  if RegQueryStringValue(HKLM, 'SOFTWARE\Electronic Arts\Game','Install Dir', AppPath) then
  begin
    Exec(AddBackslash(AppPath) + Exe, '', ExtractFilePath(AddBackslash(AppPath) + Exe), SW_SHOWNORMAL,ewNoWait,ResultCode)
  AutoRun.Close;
  PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
  end
end;

procedure InstallButtonClick(Sender: TObject);
var
  CurPageID: Integer;
begin
  Exec(ExpandConstant('{src}\Setup.exe'),'','',SW_SHOW,ewNoWait,ResultCode)
  AutoRun.Close;
  PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end;

procedure SupportButtonClick(Sender: TObject);
begin
  shellexec('open', ExpandConstant('{src}\Game.exe'), '', '',SW_SHOWNORMAL, ewnowait, ResultCode)
end;

procedure ReadmeButtonClick(Sender: TObject);
begin
  ShellExec('open', ExpandConstant('{src}\readme.txt'),'','', SW_SHOW, ewNoWait, ResultCode)
end;

procedure WebButtonClick(Sender: TObject);
begin
  shellexec('open', 'http://localhost', '', '',SW_SHOWNORMAL, ewnowait, ResultCode)
end;

procedure ExitButtonClick(Sender: TObject);
var
  CurPageID: Integer;
begin
  AutoRun.Close;
  PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end;

procedure UninstallButtonClick(Sender: TObject);
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Game','UninstallString', UninsPath) then
  begin
    UninsPath:=RemoveQuotes(UninsPath)
    Exec(UninsPath,'','',SW_SHOWNORMAL,ewNoWait,ResultCode)
    AutoRun.Close;
    PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
  end
end;

procedure CreateAutoRun;
begin
  //AutoRun
  AutoRun := CreateCustomForm;
  with AutoRun do begin
    Left := 498;
    Top := 75;
    Width := 495;
    Height := 340;
    BorderIcons := [];
    BorderStyle:=bsToolWindow //(bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin)
    Color := clBtnFace;
    Font.Color := clWindowText;
    Font.Height := -11;
    Font.Name := 'MS Sans Serif';
    Font.Style := [];
    Position := poScreenCenter;
    Caption:='AutoRUN'
  end;
  //img1
  img1 := TBitmapImage.Create(AutoRun);
  ExtractTemporaryFile('1.bmp');
  with img1 do begin
    Parent := AutoRun;
    Left := 0;
    Stretch:= true;
    Top := 0;
    Width := Autorun.Width;
    Height := Autorun.Height;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  end;
  //PlayButton
  PlayButton:= TButton.Create(AutoRun);
  with PlayButton do begin
    Parent := AutoRun;
    Left := 300;
    Top := 110;
    Width := 150;
    Height := 22;
    Caption:= 'Íà÷àòü èãðó';
    Cursor:= crHand;
  // ModalResult:= mrOk;
    OnClick := @PlayButtonClick;
    if not RegQueryStringValue(HKLM, 'SOFTWARE\Game','Install Dir', AppPath) then
  begin
    PlayButton.Enabled := False;
  end
  end;
  //InstallButton
  InstallButton:= TButton.Create(AutoRun);
  with InstallButton do begin
    Parent:= AutoRun;
    Left := 300;
    Top := 80;
    Width := 150;
    Height := 22;
    Caption:= 'Install Game';
    Cursor:= crHand;
    OnClick := @InstallButtonClick;
  end;
  //SupportButton
  SupportButton:= TButton.Create(AutoRun);
  with SupportButton do begin
    Parent:= AutoRun;
    Left := 300;
    Top := 140;
    Width := 150;
    Height := 22;
    Caption:= 'Èíôî';
    Cursor:= crHand;
    OnClick := @SupportButtonClick;
  end;
  //ReadmeButton
  ReadmeButton:= TButton.Create(AutoRun);
  with ReadmeButton do begin
    Parent:= AutoRun;
    Left := 300;
    Top := 170;
    Width := 150;
    Height := 22;
    Caption:= 'Readme';
    Cursor:= crHand;
    OnClick := @ReadmeButtonClick;
  end;
  //WebButton
  WebButton:= TButton.Create(AutoRun);
  with WebButton do begin
    Parent:= AutoRun;
    Left := 300;
    Top := 200;
    Width := 150;
    Height := 22;
    Caption:= 'Âåá-ñàéò';
    Cursor:= crHand;
    OnClick := @WebButtonClick;
  end;
  //ExitButton
  ExitButton:= TButton.Create(AutoRun);
  with ExitButton do begin
    Parent:= AutoRun;
    Left := 300;
    Top := 260;
    Width := 150;
    Height := 22;
    Caption:= 'Âûõîä';
    Cursor:= crHand;
    OnClick := @ExitButtonClick;
//    ModalResult:= mrCancel;
  end;
  //UninstallButton
  UninstallButton:= TButton.Create(AutoRun);
  with UninstallButton do begin
    Parent:= AutoRun;
    Left := 300;
    Top := 230;
    Width := 150;
    Height := 22;
    Caption:= 'Óäàëèòü èãðó';
    Cursor:= crHand;
    OnClick := @UninstallButtonClick;
  end;

  if not RegQueryStringValue(HKLM, 'SOFTWARE\Game','UninstallString', UninsPath) then
  begin
    InstallButton.Enabled:=true;
    UninstallButton.Enabled:=false;
  end;
  if RegQueryStringValue(HKLM, 'SOFTWARE\Game','UninstallString', UninsPath) then
  begin
    InstallButton.Enabled:=false;
    UninstallButton.Enabled:=true;
  end;

  AutoRun.ShowModal;
end;

procedure InitializeWizard;
begin
  CreateAutoRun;
end;


Так вот, есть три программы, точнее одна и две дополнительные, вопрос в следующем, как сделать так, чтобы в авторане было три галочки как в выборе компонентов, то что выбрано галочкой, то собственно и устанавливалось, да кстати, забыл главное, кнопка установить, должна быть одна, возможно ли такое?

valyok666 05-09-2011 10:07 1746408

Devils Night, на пару примеров которые мне кидали

Raf-9600 05-09-2011 10:55 1746437

Rikill, Спасибо огромное! Но у меня появилась небольшая проблема. После распаковки файлов, у меня ещё куча всего выполняется в [Run], на этот период я вызываю анимацию прогресс-бара через BeforeInstall: NeaProgress
Код:

procedure NeaProgress;
begin
  WizardForm.ProgressGauge.Style:= npbstMarquee;
end;

После выполнения всех действий с [Run], должна запускаться конвертация OGG с обычным прогресс-баром (отображающим прогресс сего действия). Собстно проблема в том, что во время конвертации, прогресс-бар не меняется на обычный, а остается таким
Код:

WizardForm.ProgressGauge.Style:= npbstMarquee;
Это можно какнить исправить?

xXDx 05-09-2011 12:44 1746497

Rikill, всмысле, например какими словами?

Gugle 05-09-2011 12:52 1746505

Доброго времени суток!
Господа, подскажите пожалуйста, как можно получит список логических дисков пользователя?

Raf-9600 05-09-2011 15:37 1746620

Мой предыдущий вопрос касательно прогресс-бара, уже не актуален. Добрые люди с ру-боарда помогли!

Rikill 05-09-2011 16:53 1746686

xXDx, как в простом инстале.
Gugle, ёксель моксель Raf-9600 кидал примеры страницу назад http://www.forum.oszone.ru/post-1217528-96.html

Sollar 05-09-2011 17:02 1746691

хэллоу, как у пользователя спросить информацию?
и эту информацию добавить к параметрам инсталла

не могу ничего найти наподобие Inputbox

Rikill 06-09-2011 01:24 1746995

Sollar, Edit'ы в помощ.

Sollar 07-09-2011 09:46 1747796

подскажите как уместить 5 полей на странице либо добавить скроллбар?

Gugle 07-09-2011 10:46 1747833

Вложений: 1
Цитата:

Цитата Rikill
Gugle, ёксель моксель Raf-9600 кидал примеры страницу назад http://www.forum.oszone.ru/post-1217528-96.html »

Спасибо большое. Пропустил это сообщение.

Вопрос про сетевые интерфейсы. В недавнем прошлом я интересовался как можно получить список сетевых интерфейсов, установленных на компе. В связи с чем был предложен некоторый скрипт, который ищет эти самые пресловутые интерфейсы. Ссылка на ответ, за что спасибо El Sanchez .
Но после некоторго тестирования, я обнаружил, что данный скрипт не выявляет всех интерфейсов, представленных в системе. Прикрепил скриншот рабочего стола. Работаю в w2008 server. Вопрос остается открытым для меня. Как определить все network adapters системы? Если у кого будут идеи и мысли по этому вопросу, буду рад выслушать.

Gugle 07-09-2011 13:14 1747935

Гуру, помогите!

Поиск в google показал, что надо смотреть в реестр в ветку:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}
именно там собрана информация обо всех сетевых интерфейсах. Остался открытым вопрос как правильно отсортировать именно Ethernet адаптеры. Глядя на все это я предпологаю что надо пройтись по всем ключам DriverDesc расположенным в этой ветке и выбрать те, в которых встречается слово "Ethernet" и "Сетевая". Помогите, пожалуйста, правильно сделать запрос.

З.Ы.
Хотя может и по какому то другому ключу надо идти. Никак е могу найти закономерность. (((

Rikill 07-09-2011 17:02 1748175

Sollar, смотря в чём, если ты про "лиц соглашение" там скроль сама ставится.

Sollar 07-09-2011 17:35 1748208

Rikill, нет на CreateInputQueryPage после 5 Page.Add


возможно ли исходя из списка компонентов и типов в ini файле распределять разные задачи-компоненты по типам при инсталлировании?

дайте ссылку, пример, где происходит работа с ини файлом

Rikill 07-09-2011 19:05 1748264

Sollar, в справке есть примеры работы с ini файлами без секции код (!) секция [INI]

R.i.m.s.k.y. 07-09-2011 19:10 1748268

Цитата:

Цитата Sollar
подскажите как уместить 5 полей на странице либо добавить скроллбар? »

да он вроде как сам появляется когда нужен, и на самолепных страницах тоже
Цитата:

Цитата Sollar
возможно ли исходя из списка компонентов и типов в ini файле распределять разные задачи-компоненты по типам при инсталлировании?
дайте ссылку, пример, где происходит работа с ини файлом »

да возможно, см справку в инно по секции [INI], она не кусается

El Sanchez 07-09-2011 22:39 1748385

Цитата:

Цитата Gugle
данный скрипт не выявляет всех интерфейсов, представленных в системе »

Gugle, в WQL запросе есть условие WHERE IPEnabled=TRUE, т.е. поиск ведется активных интерфейсов, отключенные отсеиваются. Условие можно убрать из запроса, но тогда в массив попадет все, включая минипорты и адаптеры всех мастей.
Цитата:

Цитата Gugle
выбрать те, в которых встречается слово "Ethernet" и "Сетевая" »

Gugle, тогда условие WHERE IPEnabled=TRUE замените на WHERE Description LIKE "%Ethernet%" OR Description LIKE "%Сетевая%", но это лишнее, имена интерфейсов получите, но IP, MAC отключенных нет.

Sollar 08-09-2011 09:26 1748556

Цитата:

Цитата R.i.m.s.k.y.
Цитата Sollar:
подскажите как уместить 5 полей на странице либо добавить скроллбар? »
да он вроде как сам появляется когда нужен, и на самолепных страницах тоже »

а ты попробуй, не появляется скролла

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

Gugle 08-09-2011 16:03 1748859

Цитата:

Цитата El Sanchez
Gugle, тогда условие WHERE IPEnabled=TRUE замените на WHERE Description LIKE "%Ethernet%" OR Description LIKE "%Сетевая%", но это лишнее, имена интерфейсов получите, но IP, MAC отключенных нет. »

Если убрать условие WHERE IPEnabled=TRUE, то туда действительно попадут адаптеры всех мастей. Это мне не надо.
Усли поставить условие WHERE Description LIKE "%Ethernet%" OR Description LIKE "%Сетевая%", отсеиваются (названия из картинки):
4_port_01
4_port_02
4_port_03
4_port_04
LAN_BASEBOARD_1
LAN_BASEBOARD_2
Local Area connection
Что бы они туда попали, надо в условие внести какое нить слово/фразу, которая есть в названии. Я думаю, что сами винды определяют адаптеры, которые надо отобразить (на картинке это Network Connections и Server Manager), немного по другому, а не через поле Description. Я так и не смогу выяснить как это делается. (((

Вот и спрашиваю на форуме, вдруг кто то сталкивался с проблемой, а может быть кто то просто посмотрев на "поля таблицы", определит как это можно сделать.
Мне надо, чтобы в установщике отображался то же самый список, что и в Network Connections / Server Manager. Очень надо. Пока я сам не могу догнаться как это сделать. То ли глуповат, то ли руки не так заточены (а может и все сразу).

Кстати, VPN сетевые адаптеры у меня так и не попали в список.

kindza811 08-09-2011 21:28 1749201

как мне сделать такой инсталлятор? подскажите,вот мой скрипт http://rghost.ru/20901371

Polsta 08-09-2011 22:11 1749234

Ребята а есть ли в Inno Setup возможность записать значение в реестр следующим образом:

Допустим устанавливаем программу на диск С в папку Test, а в реестр нужно занести два значения

1-е это буква диска C
2-е это название папки в которую установили программу Test

[HKEY_LOCAL_MACHINE\SOFTWARE\Test program]
"Path"="C:\\"
"Directory"="Test"

Я знаю что переменная {app} хранит путь установки, а есть ли другая переменная которая хранит букву диска и название директории

insombia 08-09-2011 22:21 1749238

kindza811 во первых выкладывай весь скрипт,во вторых есть много таких инсталяторов к примеру закос под шепарда,ну а в третих можно сделать все самому только тебе нужно будет:STS
читать дальше »
Модуль панели статуса для Inno Setup. Создает панель статуса в выбранном месте, для этого вам потребуется прописать всего несколько функций. Для отрисовки панели используется botva2.dll. Модуль пока только на русском языке. Readme как и в предыдущем модуле нет, но есть несколько примеров использования.

bass.dll и скрипт для растяжения изображения на весь экран

El Sanchez 08-09-2011 23:53 1749277

Цитата:

Цитата Gugle
Мне надо, чтобы в установщике отображался то же самый список, что и в Network Connections / Server Manager »

Gugle, переделал предыдущий скрипт, пришлось добавить еще класс Win32_NetworkAdapter:
Код:

[code]
type
  IP_ADDR_INFO = array of record
  Name: String;
  IPv4: String;
  IPv6: String;
  MAC: String;
end;

function GetLocalIP(var IPAddrInfo: IP_ADDR_INFO): Boolean;
var
  objSWbemLocator, objSWbemServices, objSWbemObjectSet, objSWbemObject, objRegExp, objRegExpMatches: Variant;
  IndexCount, i: Byte;
  strBuf, ptrnIPv4, ptrnIPv6: String;
begin
  try
    objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
    objRegExp := CreateOleObject('VBScript.RegExp');
  except
    ShowExceptionMessage;
    Exit;
  end;
  ptrnIPv4 := '(\d{1,3}[.]){3}\d{1,3}'; //IPv4 regexp
  ptrnIPv6 := //IPv6 regexp
    '(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,6})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|' +
    '(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|//(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|' +
    '(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}){1,1})|' +
    '((([0-9a-fA-F]{1,4}:){1,7}|:):)|(:(:[0-9a-fA-F]{1,4}){1,7})|(((([0-9a-fA-F]{1,4}:){6})(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
    '((([0-9a-fA-F]{1,4}:){5}[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
    '(([0-9a-fA-F]{1,4}:){5}:[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
    '(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
    '(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,3}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
    '(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,2}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})';

  objSWbemServices := objSWbemLocator.ConnectServer();
  objSWbemServices.Security_.ImpersonationLevel := 3;
  IndexCount := objSWbemServices.ExecQuery('SELECT * FROM Win32_NetworkAdapter').Count;
  objSWbemObjectSet := objSWbemServices.ExecQuery('SELECT Name,MACAddress FROM Win32_NetworkAdapter WHERE NetConnectionID!=NULL');

  for i := 1 to IndexCount do
  try
    //check object in collection
    objSWbemObjectSet.Item('Win32_NetworkAdapter.DeviceID="' + IntToStr(i) + '"').GetObjectText_;
    strBuf := objSWbemServices.Get('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).GetObjectText_;
    SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)+1);
    //Name
    IPAddrInfo[GetArrayLength(IPAddrInfo)-1].Name := objSWbemObjectSet.Item('Win32_NetworkAdapter.DeviceID="' + IntToStr(i) + '"').Properties_.Item('Name').Value;
    //IPv4 address
    objRegExp.Pattern := ptrnIPv4;
    if objRegExp.Test(strBuf) then
    begin
      objRegExpMatches := objRegExp.Execute(strBuf);
      IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv4 := objRegExpMatches.Item[0].Value;
    end;
    //IPv6 address
    objRegExp.Pattern := ptrnIPv6;
    if objRegExp.Test(strBuf) then
    begin
      objRegExpMatches := objRegExp.Execute(strBuf);
      IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv6 := objRegExpMatches.Item[0].Value;
    end;
    //MAC
    IPAddrInfo[GetArrayLength(IPAddrInfo)-1].MAC := objSWbemObjectSet.Item('Win32_NetworkAdapter.DeviceID="' + IntToStr(i) + '"').Properties_.Item('MACAddress').Value;
  except
  end;
  Result := (GetArrayLength(IPAddrInfo) > 0);
end;

procedure InitializeWizard();
var
  i: Byte;
  arr: IP_ADDR_INFO;
begin
if GetLocalIP(arr) then for i := 0 to GetArrayLength(arr)-1 do
  MsgBox(
    'Name: ' + arr[i].Name + #13#10 +
    'IPv4: ' + arr[i].IPv4 + #13#10 +
    'IPv6: ' + arr[i].IPv6 + #13#10 +
    'MAC: ' + arr[i].MAC, mbInformation, MB_OK);
end;


Sollar 09-09-2011 10:40 1749451

С ini более-менее разобрался, все равно не понятно с зависимыми задачами, но это сейчас неважно
Интересует, возможно ли создание циклов в секции Types?
Можно ли ее заменить полностью функцией из кода? {code:gets} А не только Name: и Description: ?

Существует ли функция для определения количества секций в INI файле? Если нет, то как их можно подсчитать?

вот примерно то что я хочу сделать
Код:

function InitializeSetup(): Boolean;
begin
  for I := 1 to [количество секций в ini-файле] do
begin
str:='org'+inttostr(i);
org[i] := GetIniString(str, 'org', 'Error', 'C:\временная\example.ini');
if GetIniString(str, 'ex1', 'Error', 'C:\временная\example.ini') = '1' then
    s1 :=s1 +' ' + GetIniString(str, 'org', 'Error', 'C:\временная\example.ini');
 if GetIniString(str, 'ex2', 'Error', 'C:\временная\example.ini') = '1' then
    s2 :=s2 +' ' + GetIniString(str, 'org', 'Error', 'C:\временная\example.ini');
end;
  Result := True;
end;

а затем в цикле вставить переменную org[i] в секцию types
[Types]
for i := 1 to [количество секций в ini-файле] do
Name: {code:gets|org[i]}; Description: {code:gets|org[i]}

El Sanchez 09-09-2011 13:13 1749572

Цитата:

Цитата Polsta
Допустим устанавливаем программу на диск С в папку Test, а в реестр нужно занести два значения
1-е это буква диска C
2-е это название папки в которую установили программу Test
[HKEY_LOCAL_MACHINE\SOFTWARE\Test program]
"Path"="C:\\"
"Directory"="Test" »

Polsta,
Код:

[Registry]
Root: HKLM; Subkey: "Software\Test program"; ValueType: string; ValueName: Path; ValueData: {drive:{app}}\
Root: HKLM; Subkey: "Software\Test program"; ValueType: string; ValueName: Directory; ValueData: {code:ExtractFileName|{app}}


R.i.m.s.k.y. 09-09-2011 13:19 1749574

Цитата:

Цитата El Sanchez
{code:ExtractFileName|{app}} »

что за конструкция с вертикальной палочкой?

El Sanchez 09-09-2011 15:23 1749690

Цитата:

Цитата R.i.m.s.k.y.
что за конструкция с вертикальной палочкой? »

Help -> Pascal Scripting -> Scripted Constants

VinTagE 09-09-2011 19:32 1749870

Здравствуйте.
Хочу представить вам свою наработку:


EXArchives.dll v.1.0b от VinTagE
Описание:
* Это распаковка архивов.
* 1 прогресс бар показывает распаковку архивов
* 2 прогресс бар показывает обработку архивов
* Сделал плавный индикатор (2 прогресс бар) обработки архивов
* Версия EXArchives.dll v.1.0b
Автор - VinTagE
-----------
Скачать
-----------


P.S.: Прошу протестировать и если найдёте какие нибудь ошибки, сообщите мне.
Спасибо за внимание =)

Jim_Di_Griz 09-09-2011 20:11 1749889

Добрый день.
Есть вопрос:
Программа при работе создает ветку в реестре, нужно во время деинсталляции программы удалять ветку с ключами внутри.
Как это можно сделать средствами Inno setup?
Спасибо.

Habetdin 09-09-2011 20:23 1749896

Jim_Di_Griz, используйте флаг uninsdeletekey:
Код:

[Registry]
Root: HKLM; SubKey: Software\My Program; Flags: uninsdeletekey


Jim_Di_Griz 09-09-2011 21:21 1749920

Цитата:

Jim_Di_Griz, используйте флаг uninsdeletekey:
Спасибо, все работает.

VaZz9 09-09-2011 21:59 1749939

Здравствуйте, помогите решить задачу, нужно заменить при установке в уже имеющемся файле .xml рандомное значение между двумя строками (Ник)
<Nick type="string">ТутЛюбойНик</Nick>. Как это можно реализовать. Спасибо.

andrejshapal 10-09-2011 19:28 1750397

Помогите плиз прикрутить распаковку arc к скрипту...
http://rghost.ru/21107801
Пробовал брать скрипт на сайте freearc, использовать IssDone, но везде большие скрипты, и на определённых местах выдаёт ошибки. Замахался с ними. Возможно есть простой скрипт?

Sollar 10-09-2011 19:57 1750411

[Types]
; переменная для цикла
#define l

; итак: пишем подпрограмму, которая будет делать все что нам нужно l раз
#sub AddDescription
Name: {code:gets|{#l}}; Description: {code:gets|{#l}};
#endsub

; создаем цикл с вызовом нашей подпрограммы
#for {l = 1; l < 3; l++} AddDescription

[Components]
Name: n1; Description: gdsgdg; types: {code:gets1};
Name: n2; Description: dsfgsg; types: {code:gets2};

Код:

var
s1, s2, str : string;
i: integer;

function InitializeSetup(): Boolean;
begin
  for I := 1 to 2 do
begin
str:='org'+inttostr(i);
 if GetIniString(str, 'ex1', 'Error', 'C:\временная\example.ini') = '1' then
    s1 :=s1 + GetIniString(str, 'org', 'Error', 'C:\временная\example.ini');
 if GetIniString(str, 'ex2', 'Error', 'C:\временная\example.ini') = '1' then
    s2 :=s2 +' ' + GetIniString(str, 'org', 'Error', 'C:\временная\example.ini');
end;
  Result := True;
end;

function Gets1(Param: String): String;
begin
  Result := s1;
end;


function Gets2(Param: String): String;
begin
  Result := s2;
end;

function Gets(Param: String): String;
begin
 str:= 'org'+ param;
 Result := GetIniString(str, 'org', 'fgsegfsdgr', 'C:\временная\example.ini');
end;

Почему при записи типов в компоненты пишет, что не существует такого типа?! что не так? даже если явно значения задавать

Devils Night 11-09-2011 10:09 1750641

В общем имеется код ->
читать дальше »
Код:

[ Code]
type
  HSTREAM=DWORD;
  TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
var
  MP3List:TStringList;
  CurrentMP3:integer;
  hMP3:HWND;
  TimerID:LongWord;

function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT;  external 'SetTimer@user32.dll stdcall delayload';
function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload';
function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';
function BASS_StreamCreateFile(Mem:BOOL;f:PChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';

procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
  if BASS_ChannelIsActive(hMP3)=0 then begin
    BASS_Stop;
    BASS_StreamFree(hMP3);
    hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0);
    BASS_Start;
    if hMP3<>0 then
      if BASS_ChannelPlay(hMP3,True) then begin
        CurrentMP3:=CurrentMP3+1;
        if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
      end;
  end;
end;

function InitializeSetup:boolean;
begin
  ExtractTemporaryFile('Play.mp3');
  MP3List:=TStringList.Create;
  MP3List.Add(ExpandConstant('{tmp}')+'\Play.mp3');
  CurrentMP3:=0;
  Result:=True;
end;

procedure InitializeWizard;
begin
  TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
  BASS_Init(-1,44100,0,0,0);
  BASS_SetConfig(5,100);
  BASS_SetConfig(6,100);
end;

procedure DeinitializeSetup;
begin
  KillTimer(0,TimerID);
  BASS_Stop;
  BASS_Free;
  MP3List.Free;
end;


как к нему прикрутить кнопку?

Нашёл только это
читать дальше »
Код:

[ Code]
var
PageNameLabel, PageDescriptionLabel: TLabel;
PageID,ResultCode: Integer;

procedure InitializeWizard();
begin

ExtractTemporaryFile('bass.dll');
ExtractTemporaryFile('innocallback.dll');
ExtractTemporaryFile('botva2.dll');
ExtractTemporaryFile('mb.bmp');
ExtractTemporaryFile('music.mp3');

BASS_Init(ExpandConstant('{tmp}\music.mp3'))
BASS_CreateOnOffButton(ExpandConstant('{tmp}\mb.bmp'), 20, 320, 36, 36, 4)
end;

но он работает с ошибками

nik1967 11-09-2011 11:12 1750669

Devils Night, 3 различных примера

VASYAKRN 11-09-2011 14:17 1750753

текстурирувал кнопки и вибивает ошибки помогите пожалста
Ссылка

insombia 11-09-2011 14:21 1750755

VASYAKRN какие ошибки?

VASYAKRN 11-09-2011 15:28 1750787

Цитата:

Цитата insombia
VASYAKRN какие ошибки? »

При тектурирувоние через ботву появляетса фон

insombia 11-09-2011 15:53 1750806

VASYAKRN скрипт нужно полностью переделывать

VASYAKRN 11-09-2011 16:05 1750814

Цитата:

Цитата insombia
VASYAKRN скрипт нужно полностью переделывать »


уточни
если хочеш могу дать скрипт без текстур

insombia 11-09-2011 16:44 1750831

VASYAKRN придется писать новый скрипт для того чтобы картинки были не в bmp a в png

VASYAKRN 11-09-2011 16:49 1750835

Цитата:

Цитата insombia
VASYAKRN придется писать новый скрипт для того чтобы картинки были не в bmp a в png »

там есть текстурирувание через bmp i botva
оба с глюками.
Может с какимось получитса сделать

insombia 11-09-2011 16:52 1750836

VASYAKRN ХЗ

VASYAKRN 11-09-2011 16:55 1750839

Цитата:

Цитата insombia
VASYAKRN ХЗ »

непонял

insombia 11-09-2011 17:06 1750848

VASYAKRN не заморачуйся

El Sanchez 11-09-2011 17:14 1750851

Цитата:

Цитата VaZz9
Здравствуйте, помогите решить задачу, нужно заменить при установке в уже имеющемся файле .xml рандомное значение между двумя строками (Ник)
<Nick type="string">ТутЛюбойНик</Nick>. Как это можно реализовать »

VaZz9, пример

Цитата:

Цитата Sollar
Почему при записи типов в компоненты пишет, что не существует такого типа?! что не так? даже если явно значения задавать »

Нужно явно указывать имена типов/компонентов, параметр Name: не должен содержать символов {}, компилятор считает, что {code:gets|{#l}} - это имя типа, а не функция.

Kizekil 11-09-2011 17:19 1750853

Здравствуйте!!!Так вот у меня проблемка возникла.Хочу чтоб распаковывало с frearc,но вылазит ошибка .Чуствую что это как-то звязано с директивой #define Archives "{src}\.bin.Может вы знаете как это исправить?

insombia 11-09-2011 17:43 1750875

Kizekil укажи местоположение архивов

Kizekil 11-09-2011 17:46 1750877

Каких архивов?Как указать?Можно пример?

insombia 11-09-2011 17:48 1750879

Kizekil frearc файлов ну припустим D:\Warhammer 40.000-Space Marine Repack\Data-1.arc

Kizekil 11-09-2011 17:51 1750884

Это в секции Files?

insombia 11-09-2011 17:52 1750885

Kizekil нет в #define Archives "{src}\.bin

Kizekil 11-09-2011 17:54 1750887

Я так понимаю сначала надо упаковать папку с игрой в архив?

insombia 11-09-2011 17:54 1750888

Kizekil ну да

Kizekil 11-09-2011 17:57 1750889

Всё равно выдаёт ошибку.Я пишу так #define Archives "{src}\C:\Users\Женя\Downloads\Need for Speed™ Undercover [2.4]\Output\CCleaner.arc;DestDir:{app}\;Disk:1;Components:Russian" Может что-то неправильно.И у меня без компонентов.Может убрать Components:Russian?Тогда без ошибки будет?

No4noylis 11-09-2011 19:07 1750940

Kizekil, указана константа {src} т.е. рядом с инсталлятором, зачем после этого писать С:\...??? Просто пиши имя архива и ложи его рядом с setup.exe. Более того, я не понимаю к чему написано DestDir:{app}\;Disk:1;Components:Russian"? Я думаю так должно быть #define Archives {src}\CCleaner.arc;

Kizekil 11-09-2011 20:01 1750981

Не помогло

insombia 11-09-2011 21:24 1751027

Оцените инсталятор,может чего то не хватает,может что-то лишнее http://rghost.ru/21249991

No4noylis 11-09-2011 21:40 1751040

insombia, неплохо, какой скин добавлял?

insombia 11-09-2011 21:44 1751046

No4noylis оригинальное название не знаю у меня он называется tiger

insombia 11-09-2011 22:03 1751055

No4noylis дать тебе скин этот?

kindza811 11-09-2011 22:19 1751063

Пожалуйста помогите мне сделать из этого скрипта http://rghost.ru/21259011
Сделать это

заранее спасибо

Devils Night 11-09-2011 22:20 1751064

Вложений: 1
Цитата:

Цитата nik1967
3 различных примера »

Второй вариант "Music2" самое оно, только там выдаёт ошибку.

Devils Night 12-09-2011 09:45 1751231

Вложений: 1
Цитата:

Цитата No4noylis
insombia, неплохо, какой скин добавлял? »


No4noylis 12-09-2011 10:19 1751245

Цитата:

Цитата Devils Night
Второй вариант "Music2" самое оно, только там выдаёт ошибку. »

Devils Night,
читать дальше »

В [_code] добавь эту процедуру:
Код:

procedure gdipShutdown; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';
И в самом конце, в DeinitializeSetup; добавь:
Код:

gdipShutDown;

insombia 12-09-2011 10:36 1751253

как сделать чтобы в Isdone не писалось тестовый прогон? вот скрин http://i32.fastpic.ru/big/2011/0912/...084129faa2.jpg

No4noylis 12-09-2011 13:54 1751395

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

Ты можешь открыть файл russian.ini, найти там "TIME_TEST"="Тестовый прогон", и написать вместо него, "TIME_TEST"="", и естественно сохранить изменения, тогда надписи тестовый прогон не будет в том месте где отмечено на скриншоте. ИЛИ ты можешь провести этот самый тестовый прогон, затем прикрутить к инсталлу records.inf, и тогда там где отмечено на скриншоте будет указано время до окончания установки. ИЛИ на крайний случай ты можешь вручную расставить проценты для распаковки и тогда, у тебя опять же там будет написано время до окончания установки.

Sollar 12-09-2011 17:42 1751550

как в поле Name: прописать функцию {code:gets|{#l}}, либо каким образом это можно обойти?

[Types]

#define l

#sub AddDescription
Name: {code:gets|{#l}}; Description: {code:gets|{#l}}
#endsub

#for {l = 1; l < 3; l++} AddDescription

[Components]
Name: n1; Description: gdsgdg Types: {code:gets1};
Name: n2; Description: dsfgsg Types: {code:gets2};

xXDx 12-09-2011 18:20 1751576

insombia, шрифт мелковат, а так нормально

kindza811 12-09-2011 18:26 1751578

Может поможете? :cry2:

insombia 12-09-2011 18:44 1751588

kindza811 http://rghost.ru/21349331 на,только музыки здесь нету можешь сам попробовать вставить

А как сделать чтобы проценты шли не до 300 а до 100? в исдоне

Kizekil 12-09-2011 19:28 1751624

insombia,
читать дальше »
Автоматическая расстановка процентных соотношений в операциях. При автоматической расстановке необходим тестовый проход для определения времени выполнения каждой операции относительно других. Для включения данного режима необходимо заполнить вторые значения всех функций извлечения архивов нулями. Краткая инструкция: а) первым делом убедитесь, что в начале скрипта закомментирована строка #define records (т.е. необходимо поставить точку с запятой в начале этой строки); б) компилим проект и запускаем на установку. Это и будет нашим тестовым проходом. Все операции должны дойти до конца и завершиться удачно. Прогрессбар будет зашкаливать и все компоненты будут извлечены вне зависимости от того выбраны они, или нет. Все так и должно быть! в) после тестового прогона в указанной папке создастся файл records.inf (имя и путь назначается в процедуре инициализации. О ней см. "подробное описание функций" ниже), его необходимо добавить в проект, раскомметировав, или добавив в начале скрипта строку: #define records Так же стоит отметить, что если сам скрипт находится в папке отличной от той, в которую компилится проект (например в скрипте NFS:Undercover откомпиленный файл сохраняется в Output\setup.exe), то records.inf создастся в папке с setup.exe и его необходимо будет перенести непосредственно к скрипту, или же подправить в секции [Files] его истинное расположение, например: #ifdef records Source: Output\records.inf; DestDir: {tmp}; Flags: dontcopy #endif г) снова откомпилить проект. После этого инсталлер готов к работе. При запуске процесс выполнения операций будет равномерно и корректно отображаться на прогрессбаре.

insombia 12-09-2011 19:35 1751635

Kizekil ну его нафиг кароче мне кажеться это из-за того что я использую для распаковки 3 архива вот и получается 300%

Gnom_aka_Lexander 12-09-2011 19:55 1751655

insombia, блин, тебе привели выдержку из справки, где очень-очень подробно, и, по моему, вполне себе по русски написано, как сделать правильно проценты, при использовании ISdone.dll Или почитать, и то уже лень?

kindza811 12-09-2011 20:14 1751670

insombia, спасибо :Beer:

Kizekil 12-09-2011 20:49 1751694

Ещё после компиляции когда выбираешь язык установки надо долго ждать пока запустится инсталл.Окно активное,но не идёт установка

okril 13-09-2011 18:23 1752226

ребята все привет.

сегодня познакомился с этим софтом. но есть ряд вопросов. с помощью мастера все понятно как сее работает НО:
как вы понимаете я в этом новичок.

1. хочу завернуть в один инсталлер по мимо папки с рядом файлов еще 3 софта которые надо установить.
пример

1сначало копирования папок в нужную деррикторию - ну это просто (среди них настройка.xml)
2затем запуск файла установки программы "софт для сканера" - в фоновом режиме
3затем запуск файла установки программы "Хфсп Драйве" - в фоновом режиме.
4затем открыть окно где будет возможность ввода параметров которые обновят ранне скопированный файл настройка.xml
вывод значков на раб стол.




помогите. есть скайп, агент. аська.

El Sanchez 13-09-2011 18:37 1752238

Цитата:

Цитата Sollar
как в поле Name: прописать функцию {code:gets|{#l}}, либо каким образом это можно обойти? »

Sollar, пардон за {} в имени типов/компонентов, не работает из-за двоеточия. Набросал пример, допустим ваш ini-файл
имеет следующий вид:
Код:

[org1]
ex1=1
org=ttt1
[org2]
ex2=1
org=ttt2

, лежит рядом со скриптом и называется test.ini, тогда
Код:

[Types]
#define l
#sub AddDescription
    Name: {#ReadIni(SourcePath + "\test.ini", "org" + Str(l), "org")}; Description: {#ReadIni(SourcePath + "\test.ini", "org" + Str(l), "org")}
#endsub

#for {l = 1; l < 3; l++} AddDescription

[Components]
Name: n1; Description: n1; Types: {#ReadIni(SourcePath + "\test.ini", "org1", "org")}; Check: gets(ExpandConstant('{#ReadIni(SourcePath + "\test.ini", "org1", "ex1")}'))
Name: n2; Description: n2; Types: {#ReadIni(SourcePath + "\test.ini", "org2", "org")}; Check: gets(ExpandConstant('{#ReadIni(SourcePath + "\test.ini", "org2", "ex2")}'))

[code]
function gets(Param: String): Boolean;
begin
    Result := Param = '1';
end;


Kizekil 13-09-2011 19:54 1752274

okril, Готовые ответы

Roman_-82 14-09-2011 03:52 1752503

Всем привет. :) Пишу скрипт установки игры, нужно сделать два задания (или больше) - Установка русской озвучки и Установка русского текста и так далее. Подскажите пожалуйста как правильно указать пути. Возможно ли вскрыть уже готовый инсталлятор и посмотреть как он сделан (интересует скрипт)? Заранее благодарю.
Вот по такому примеру -

valyok666 14-09-2011 16:15 1752892

Roman_-82, посмотри справку components

R.i.m.s.k.y. 14-09-2011 17:55 1752980

Roman_-82, тезка, вскрытие скрипта тебе мало поможет, тк ты даже не удосужился а) прочитать справку про Components; и б) скачать из шапки примеры

Roman_-82 14-09-2011 17:55 1752981

valyok666
Наполовину разобрался. Но как указать нужный путь установки файлов? Например, мне нужно чтобы папка с русской озвучкой скопировалась по определенному пути (C:\Games\Game\System\Sound)?

R.i.m.s.k.y. 14-09-2011 17:58 1752984

Roman_-82, не стараешься, в секции Files DestDir; читай про {app} и что буте рядом

Roman_-82 14-09-2011 18:04 1752990

R.i.m.s.k.y.
Большое спасибо. Я в этом деле новичок, голова идет кругом от всего этого.

Dark_Delphin 14-09-2011 20:07 1753070

Всем добрый вечер!

У меня вот такая штука получается.
Все кнопке на стекле нормально смотрятся,



а вот эта кнопка плохо(.



Подскажите как поправить.
Заранее спасибо.

R.i.m.s.k.y. 14-09-2011 20:34 1753078

Roman_-82, да не за что, если хочешь сам начать - качни примеры в шапке, разбери что непонятно, там же переведенный хелп от инно
человека который сам делает, но не понимает, отличает от халявщика постановка вопроса

ntrx, я в оформлении нубс, но тот кто захочет тебе помочь - попросит скрипт, положи заранее

Rikill 14-09-2011 23:43 1753212

ntrx, добавь кнопку в прозрачную область. В библиотеке есть специальные для этого функции. С помощью них ты добавлял кнопку "Вперёд", "Назад".

T3X 15-09-2011 17:08 1753645

Люди, помогите плиз :(
Есть 2 скрипта
скрипт1.iss
скрипт2.iss - button

Кручу-верчу, а в скрипт1 не могу добавить button'ы

Компилятор что в шапке не помогает...
Заранее благодарю.

insombia 15-09-2011 17:28 1753666

Подскажите как сделать в исдоне чтобы был выбор компонентов именно куда указать где находятся файлы для распаковки?

Kizekil 15-09-2011 18:13 1753704

Как сделать цветным прогресс установки и такой серебристый инстал и лого в углу

No4noylis 15-09-2011 19:19 1753743

insombia, читай справку!!!
читать дальше »

Пример 2 : распаковка архивов, учитывая выбранные компоненты.
Код:

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive;
Name: text\eng; Description: Английский; Flags: exclusive;
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive;
Name: voice\eng; Description: Английский; Flags: exclusive;

....

Comps1:=0; Comps2:=0; Comps3:=0;
TmpValue:=1;
if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //компонент 2
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 4

....

ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
  repeat
    if not FileSearchInit(false) then break;
    if not ISArcExtract ( 0, 0, ExpandConstant('{src}\BasicData.arc'), ExpandConstant('{app}\'), '', false, '', '', '', notPCFonFLY) then break;
    if not ISArcExtract ( 1, 0, ExpandConstant('{src}\rustext.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
    if not ISArcExtract ( 2, 0, ExpandConstant('{src}\engtext.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
    if not ISArcExtract ( 3, 0, ExpandConstant('{src}\rusvoice.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
    if not ISArcExtract ( 4, 0, ExpandConstant('{src}\engvoice.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
    ISDoneError:=false;
  until true;
  ISDoneStop;
end;

в данном примере имеется 4 действующих компонента. Перед инициализацией бибилиотеки состояния чекбоксов компонентов загружаются в переменную Comps1.
Сначала при любом выборе компонентов распаковывается архив BasicData.arc, у которого нет к ним привязки (первый параметр равен 0);
далее уже в зависимости от выбранных пользователем чекбоксов будет распаковываться:
rustext.arc, если был выбран компонент 'text\rus';
engtext.arc, если был выбран компонент 'text\eng';
rusvoice.arc, если был выбран компонент 'voice\rus';
engvoice.arc, если был выбран компонент 'voice\eng';
Вне зависимости от выбора пользователя, прогрессбар автоматически подстраивается под выбранные компоненты, чтобы отображение было без равков и граничным состоянием было 100%. Это достигается тем, что после тестового прохода вся информация о времени выполнения каждого компонента сохраняется в файл records.inf и перед началом реальной установки уже известно какие компоненты не были выбраны и, соответственно, их время будет интерполироваться на все остальные операции, которые точно будут выполнены в процессе установки.

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

Для такого цвета инсталла и прогрессбара нужно добавлять скин, а как лого добавить вот:
Код:

[Files]
Source: Button.bmp; Flags: dontcopy

[_code]
procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
ShellExec('', 'http://www.forum.ru-board.com', '' , '', SW_SHOW, ewNoWait, ResCode) ///////////// Адрес сайта////////////
end;

procedure InitializeWizard();
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin
ExtractTemporaryFile('Button.bmp')

BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=20
Top:=318
Width:=138
Height:=46
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
Parent:=BtnPanel
end
end;


T3X, Вроде так:
читать дальше »

Код:

[Setup]
AppName=RAGE.su patch
AppVerName=RAGE.su patch v 0.1b
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
WizardImageFile=D:\Desktop\4.bmp
SetupIconFile=D:\Games\Lineage II-Freya\icon.ico


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

[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy

[Run]
Filename: {app}\MyProg.exe; Description: ????????? Lineage II Freya?; Flags: postinstall nowait skipifsilent

[_Code]
const
Color = clblack;
ButtonWidth = 80;    //Указываем размер кнопок
ButtonHeight = 23;

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

var
  ButtonPanel: array [0..4] of TPanel;
  ButtonImage: array [0..4] of TBitmapImage;
  ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
  Button: TButton;
begin
  ButtonImage[TLabel(Sender).Tag].Left:=0
  case TLabel(Sender).Tag of
    bidBack: Button:=WizardForm.BackButton
    bidNext: Button:=WizardForm.NextButton
    bidCancel: Button:=WizardForm.CancelButton
    bidDirBrowse: Button:=WizardForm.DirBrowseButton
    bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
  else
    Exit
  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
end;

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

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
  Image: TBitmapImage;
  Panel: TPanel;
  Labl: TLabel;

begin
  Panel:=TPanel.Create(WizardForm)
  Panel.Left:=AButton.Left
  Panel.Top:=AButton.Top
  Panel.Width:=AButton.Width
  Panel.Height:=AButton.Height
  Panel.Tag:=AButtonIndex
  Panel.Parent:=AButton.Parent
  ButtonPanel[AButtonIndex]:=Panel

  Image:=TBitmapImage.Create(WizardForm)    //Рисунок который ложится на кнопку
  Image.Width:=160                          //Обязательно прописать оригинальный размер рисунка
  Image.Height:=23
  Image.Enabled:=False
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
  Image.Parent:=Panel
  ButtonImage[AButtonIndex]:=Image

  with TLabel.Create(WizardForm) do begin
    Tag:=AButtonIndex
    Parent:=Panel
    Width:=Panel.Width
    Height:=Panel.Height
    Transparent:=True
    OnClick:=@ButtonLabelClick
    OnDblClick:=@ButtonLabelClick
    OnMouseDown:=@ButtonLabelMouseDown
    OnMouseUp:=@ButtonLabelMouseUp
  end

  Labl:=TLabel.Create(WizardForm)        //Текст кнопок
  Labl.Left:=23                          //Указываем положение текста
  Labl.Top:=5
  Labl.Autosize:=True
  Labl.Alignment:=taCenter
  Labl.Tag:=AButtonIndex
  Labl.Transparent:=True
  Labl.Font.Color:=clWhite              //Цвет текста
  Labl.Caption:=AButton.Caption
  Labl.OnClick:=@ButtonLabelClick
  Labl.OnDblClick:=@ButtonLabelClick
  Labl.OnMouseDown:=@ButtonLabelMouseDown
  Labl.OnMouseUp:=@ButtonLabelMouseUp
  Labl.Parent:=Panel
  ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
  ButtonLabel[AButtonIndex].Caption:=AButton.Caption
  ButtonPanel[AButtonIndex].Visible:=AButton.Visible
  ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
  ButtonLabel[bidNext].Enabled:=False
end;

procedure InitializeWizard();
begin
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:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)


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.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.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;
WizardForm.PageNameLabel.Font.Color:=clWhite;
WizardForm.LicenseAcceptedRadio.Font.Color:= clWhite;
WizardForm.LicenseNotAcceptedRadio.Font.Color:= clWhite;
end;

var
  pnl: TPanel;

///////////////////////WelcomePage//////////////////////////////////////
procedure WelcomePage;
begin
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
      SetBounds(16,WizardForm.WelcomeLabel1.Top,
                464,WizardForm.WelcomeLabel1.Height);
      WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
      Caption:= WizardForm.WelcomeLabel1.Caption;
      with Font do
        begin
          Color:= clWhite;//WizardForm.WelcomeLabel1.Font.Color;
          Style:= WizardForm.WelcomeLabel1.Font.Style;
          Name:= WizardForm.WelcomeLabel1.Font.Name;
          Size:= WizardForm.WelcomeLabel1.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
      SetBounds(16,WizardForm.WelcomeLabel2.Top,
                464,WizardForm.WelcomeLabel2.Height);
      WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
      Caption:= WizardForm.WelcomeLabel2.Caption;
      with Font do
        begin
          Color:= WizardForm.WelcomeLabel2.Font.Color;
          Style:= WizardForm.WelcomeLabel2.Font.Style;
          Name:= WizardForm.WelcomeLabel2.Font.Name;
          Size:= WizardForm.WelcomeLabel2.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////SelectDirPage//////////////////////////////////////
procedure SelectDirPage;
begin
  with WizardForm do
    begin
      with DirEdit do
        begin
          Left:= 40;
          Top:= 137;
          Parent:= pnl;
        end;
      with DirBrowseButton do
        begin
          Left:= WizardForm.DirEdit.Left + WizardForm.DirEdit.Width + 10;
          Top:= WizardForm.DirEdit.Top - 1;
          Parent:= pnl;
        end;
      with SelectDirBitmapImage do
        begin
          Left:= WizardForm.DirEdit.Left;
          Top:= WizardForm.DirEdit.Top - 62;
          Visible:= false;
          Stretch:= true;
          Parent:= pnl;
        end;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.SelectDirBrowseLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.DirEdit.Top - 30,
                WizardForm.SelectDirBrowseLabel.Width, WizardForm.SelectDirBrowseLabel.Height);
      WordWrap:= WizardForm.SelectDirBrowseLabel.WordWrap;
      Caption:= WizardForm.SelectDirBrowseLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirBrowseLabel.Font.Color;
          Style:= WizardForm.SelectDirBrowseLabel.Font.Style;
          Name:= WizardForm.SelectDirBrowseLabel.Font.Name;
          Size:= WizardForm.SelectDirBrowseLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.SelectDirLabel.AutoSize;
      SetBounds(WizardForm.SelectDirBitmapImage.Left,WizardForm.SelectDirBitmapImage.Top + 10,
                WizardForm.SelectDirLabel.Width,WizardForm.SelectDirLabel.Height);
      WordWrap:= WizardForm.SelectDirLabel.WordWrap;
      Caption:= WizardForm.SelectDirLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.SelectDirLabel.Font.Color;
          Style:= WizardForm.SelectDirLabel.Font.Style;
          Name:= WizardForm.SelectDirLabel.Font.Name;
          Size:= WizardForm.SelectDirLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.DiskSpaceLabel.AutoSize;
      SetBounds(WizardForm.DirEdit.Left,WizardForm.Bevel.Top - 25,
                WizardForm.DiskSpaceLabel.Width,WizardForm.DiskSpaceLabel.Height);
      WordWrap:= WizardForm.DiskSpaceLabel.WordWrap;
      Caption:= WizardForm.DiskSpaceLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.DiskSpaceLabel.Font.Color;
          Style:= WizardForm.DiskSpaceLabel.Font.Style;
          Name:= WizardForm.DiskSpaceLabel.Font.Name;
          Size:= WizardForm.DiskSpaceLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////ReadyPage//////////////////////////////////////
procedure ReadyPage;
var
  ready_str: string;
begin
  ready_str:= WizardForm.ReadyMemo.Text;
  with TLabel.Create(pnl) do
    begin
      SetBounds(45,115,WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Caption:= ready_str;
      with Font do
        begin
          Color:= WizardForm.ReadyLabel.Font.Color;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TBevel.Create(WizardForm) do
    begin
      SetBounds(40,110, WizardForm.ReadyMemo.Width, WizardForm.ReadyMemo.Height);
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.ReadyLabel.AutoSize;
      SetBounds(40,70, WizardForm.ReadyLabel.Width, WizardForm.ReadyLabel.Height);
      WordWrap:= WizardForm.ReadyLabel.WordWrap;
      Caption:= WizardForm.ReadyLabel.Caption;
      with Font do
        begin
          Color:= clWhite;
          Style:= WizardForm.ReadyLabel.Font.Style;
          Name:= WizardForm.ReadyLabel.Font.Name;
          Size:= WizardForm.ReadyLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////InstallingPage//////////////////////////////////////
procedure InstallingPage;
begin
  with WizardForm.ProgressGauge do
    begin
      Left:= 40;
      Top:= 115;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FilenameLabel.AutoSize;
      SetBounds(WizardForm.ProgressGauge.Left,WizardForm.ProgressGauge.Top-20,
                WizardForm.FilenameLabel.Width,WizardForm.FilenameLabel.Height);
      WordWrap:= WizardForm.FilenameLabel.WordWrap;
      Caption:= WizardForm.FilenameLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FilenameLabel.Font.Color;
          Style:= WizardForm.FilenameLabel.Font.Style;
          Name:= WizardForm.FilenameLabel.Font.Name;
          Size:= WizardForm.FilenameLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.StatusLabel.AutoSize;
      SetBounds(WizardForm.StatusLabel.Left,WizardForm.StatusLabel.Top,
                WizardForm.StatusLabel.Width,WizardForm.StatusLabel.Height);
      WordWrap:= WizardForm.StatusLabel.WordWrap;
      Caption:= WizardForm.StatusLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.StatusLabel.Font.Color;
          Style:= WizardForm.StatusLabel.Font.Style;
          Name:= WizardForm.StatusLabel.Font.Name;
          Size:= WizardForm.StatusLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

///////////////////////FinishedPage//////////////////////////////////////
var
  CheckBox: array of TNewCheckBox;

procedure CheckBoxClick(Sender: TObject);
begin
  if TNewCheckBox(Sender).Checked then
    WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= True
  else WizardForm.RunList.Checked[TNewCheckBox(Sender).Tag]:= False;
end;

procedure LabelClick(Sender: TObject);
begin
  if CheckBox[TLabel(Sender).Tag].Checked then
    begin
      WizardForm.RunList.Checked[TLabel(Sender).Tag]:= False;
      CheckBox[TLabel(Sender).Tag].Checked:= False;
    end
  else
    begin
      WizardForm.RunList.Checked[TLabel(Sender).Tag]:= True;
      CheckBox[TLabel(Sender).Tag].Checked:= True;
    end;
end;

procedure HideRunList(Control: TWinControl);
var
  i, t: Integer;
  str: string;
begin
  if WizardForm.RunList.Items.Count > 0 then
    begin
      WizardForm.RunList.Hide;
      SetArrayLength(CheckBox, SizeOf(WizardForm.RunList.Items.Count));
      for i:= 0 to WizardForm.RunList.Items.Count-1 do
        begin
          CheckBox[i]:= TNewCheckBox.Create(Control);
          with CheckBox[i] do
            begin
              SetBounds(ScaleX(18),ScaleY(WizardForm.RunList.Top+2+t),14,14);
              Tag:= i;
              Checked:= WizardForm.RunList.Checked[i];
              Caption:= WizardForm.RunList.Items.Strings[i];
              OnClick:= @CheckBoxClick;
              Color:= clWhite;
              Parent:= Control;
            end;
          str:= WizardForm.RunList.Items.Strings[i];
          with TLabel.Create(WizardForm) do
            begin
              SetBounds(ScaleX(36),ScaleY(WizardForm.RunList.Top+2+t),
                        WizardForm.RunList.Width,14);
              Caption:= str;
              Tag:= i;
              OnClick:= @LabelClick;
              Transparent:= True;
              Parent:= Control;
            end;
          t:= t + 20;
        end;
    end;
end;

procedure FinishedPage;
begin
  HideRunList(pnl);
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FinishedHeadingLabel.AutoSize;
      SetBounds(20,WizardForm.FinishedHeadingLabel.Top,
                464,WizardForm.FinishedHeadingLabel.Height);
      WordWrap:= WizardForm.FinishedHeadingLabel.WordWrap;
      Caption:= WizardForm.FinishedHeadingLabel.Caption;
      with Font do
        begin
          Color:= clwhite;//WizardForm.FinishedHeadingLabel.Font.Color;
          Style:= WizardForm.FinishedHeadingLabel.Font.Style;
          Name:= WizardForm.FinishedHeadingLabel.Font.Name;
          Size:= WizardForm.FinishedHeadingLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  with TLabel.Create(pnl) do
    begin
      AutoSize:= WizardForm.FinishedLabel.AutoSize;
      SetBounds(16,WizardForm.FinishedLabel.Top,
                464,WizardForm.FinishedLabel.Height);
      WordWrap:= WizardForm.FinishedLabel.WordWrap;
      Caption:= WizardForm.FinishedLabel.Caption;
      with Font do
        begin
          Color:= WizardForm.FinishedLabel.Font.Color;
          Style:= WizardForm.FinishedLabel.Font.Style;
          Name:= WizardForm.FinishedLabel.Font.Name;
          Size:= WizardForm.FinishedLabel.Font.Size;
        end;
      Transparent:= True;
      Parent:= pnl;
    end;
  pnl.Repaint;
end;
/////////////////////////////////////////////////////////////////

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
 
  pnl:= TPanel.Create(WizardForm);
  with pnl do
    begin
      Align:= alClient;
      Parent:= WizardForm;
    end;
  with WizardForm do
    begin
      with WizardBitmapImage do
        begin
          Align:= alClient;
          Stretch:= True;
          Parent:= pnl;
        end;
      NextButton.Parent:= pnl;
      CancelButton.Parent:= pnl;
      BackButton.Parent:= pnl;
      //Bevel.Parent:= pnl;
      pnl.Repaint;
    end;

  if (CurPageID > wpWelcome) and (CurPageID < wpFinished) then
    begin
      //WizardForm.Bevel1.Parent:= pnl;
      with TLabel.Create(pnl) do
        begin
          AutoSize:= WizardForm.PageNameLabel.AutoSize;
          SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,
                    WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
          Caption:= WizardForm.PageNameLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageNameLabel.Font.Color;
              Style:= WizardForm.PageNameLabel.Font.Style;
              Name:= WizardForm.PageNameLabel.Font.Name;
              Size:= WizardForm.PageNameLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      with TLabel.Create(pnl) do
        begin
          AutoSize:= WizardForm.PageDescriptionLabel.AutoSize;
          SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,
                    WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
          Caption:= WizardForm.PageDescriptionLabel.Caption;
          with Font do
            begin
              Color:= WizardForm.PageDescriptionLabel.Font.Color;
              Style:= WizardForm.PageDescriptionLabel.Font.Style;
              Name:= WizardForm.PageDescriptionLabel.Font.Name;
              Size:= WizardForm.PageDescriptionLabel.Font.Size;
            end;
          Transparent:= True;
          Parent:= pnl;
        end;
      pnl.Repaint;
    end;

  if CurPageID = wpWelcome then WelcomePage;
  if CurPageID = wpSelectDir then SelectDirPage;
  if CurPageID = wpReady then ReadyPage;
  if CurPageID = wpInstalling then InstallingPage;
  if CurPageID = wpFinished then FinishedPage;
end;


insombia 15-09-2011 19:39 1753752

No4noylis оо спасибо а то я не знал куда паять компоненты

T3X 15-09-2011 19:50 1753753

No4noylis, спасибо но не работает)
тот же результат что и у меня... скрипт запустился, а кнопки стандартные.

Gnom_aka_Lexander 15-09-2011 20:53 1753788

T3X, И не будет работать. если-бы посмотрел форум, то нашел-бы, я несколько десятков страниц объяснял уже, что нельзя именно эти два скрипта объединить.

T3X 15-09-2011 20:58 1753791

Лександер, а альтернатива есть???

Gnom_aka_Lexander 15-09-2011 21:01 1753792

Цитата:

Цитата T3X
а альтернатива есть??? »

Есть. Сейчас переписываю его, будет намного короче и понятнее.

T3X 15-09-2011 22:01 1753833

Лександер
Цитата:

---------------------------
Compiler Error
---------------------------
File: D:\Desktop\installer\ISS\PicEX.iss

Line 25:

Column 17:

Unknown type 'TTimer'
У меня версия не та или что?)

insombia 15-09-2011 22:05 1753836

T3X может у тебя уже 'TTimer' есть в скрипте?

T3X 15-09-2011 22:08 1753843

insombia, может я дурак, но я пытаюсь запустить скрипт что дал Лександер

Или я что то не так делаю?)

Gnom_aka_Lexander 15-09-2011 22:13 1753852

T3X, Там написано - работает только на расширенной версии. Иначе пришлось-бы еще и длл-ку InnoCallBaк тащить за собой.

T3X 15-09-2011 22:15 1753853

Лександер, а где скачать эту Inno Setup 5.4.2.ее2 ???)))
=-=-=
Спасибо нашел :)

insombia 15-09-2011 22:25 1753865

ЛександерInnoUltra будешь ещё какими то интересными скриптами наполнять? :)

insombia 15-09-2011 22:42 1753875

Как сделать чтобы картинка была на всех страницах инсталятора(Пример здесь не подойдет там не на всех страницах)

valyok666 15-09-2011 22:49 1753880

insombia, попробуй библиотеку IsPicture_0.01b

insombia 15-09-2011 22:50 1753882

valyok666 где её взять?

valyok666 15-09-2011 22:53 1753884

лови

T3X 15-09-2011 23:09 1753891

Скрипт от Лександер работает, но вот тыкать по кнопках немного сложно) надо наодить ровно на текст.

insombia 15-09-2011 23:12 1753895

valyok666блин чето у меня не получается соединить этот скрипт с моим поможешь?

Vitalli 16-09-2011 00:54 1753946

Здравствуйте!

Windows 7

Столкнулся с проблемой установки ярлыка в меню пуск. На предыдущих версиях Windows это была директория {userappdata}\Microsoft\Internet Explorer\Quick Launch. В Windows 7 все по другому, теперь это ярлык в директории "{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\", добавить сам ярлык проблем нет, еще нужно внести информацию в реестр HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband; ValueType: binary; ValueName: Favorites; ValueData:. А тут уже черт ногу сломит. В данном ключе имеется инфа о всех ярлыках закрепленных в панели задач, получается нужно вигрузить информацию из данного ключа, добавить свою инфу о ярлыке и все скопом внести на место. И тут я столкнулся с проблемой, как это сделать? Может есть способ проще, прошу помогите.

valyok666 16-09-2011 17:52 1754416

insombia, ok токо сегодня не смогу завтра сделаю=)просто сейчас в гостях
а библиотека то что ты искал?

insombia 16-09-2011 17:57 1754421

valyok666 я про неё первый раз вообще слышу :happy:

Alloc 16-09-2011 18:46 1754456

Привет всем! Ответьте пожалуйста на такой вот, простой вопрос: как сделать так, что на странице установки в FilenameLabel отображалось только название файлов без полного пути?

Заранее спасибо

insombia 16-09-2011 21:31 1754544

Alloc наверно никак проще через исдоне сделать чтобы вообще не писалось название файлов а просто распаковка шла

El Sanchez 16-09-2011 21:57 1754564

Цитата:

Цитата Vitalli
И тут я столкнулся с проблемой, как это сделать? »

Vitalli,
Код:

[code]
const
    LOAD_LIBRARY_AS_DATAFILE = $2;

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryExA@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Byte; nBufferMax: Integer): Integer; external 'LoadStringA@user32.dll stdcall';

//
function PinToTaskbarWin7(Filename: String): Boolean;
var
    hInst: THandle;
    buf: array [0..255] of byte;
    i: byte;
    strVerb, s: String;
    objShell, colverbs: Variant;
begin
    if not FileExists(Filename) then Exit;
    if (GetWindowsVersion shr 24 = 6) and ((GetWindowsVersion shr 16) and $FF = 1) then
    begin
        hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
        for i := 0 to LoadString(hInst, 5386, buf[0], 255)-1 do strVerb := strVerb + Chr(Buf[i]);
        FreeDLL(hInst);
        try
            objShell := CreateOleObject('Shell.Application');
        except
            ShowExceptionMessage;
            Exit;
        end;
        colVerbs := objShell.Namespace(ExtractFileDir(Filename)).ParseName(ExtractFileName(Filename)).Verbs;
        for i := colVerbs.Count downto 1 do if colVerbs.Item[i].Name = strVerb then
        begin
            colVerbs.Item[i].DoIt;
            Result := True;
        end;
    end;
end;

procedure InitializeWizard();
begin
  //Присобачим Блокнот на панель задач
  if PinToTaskbarWin7('c:\windows\notepad.exe') then
    MsgBox('ok', mbInformation, MB_OK)
  else
    MsgBox('no', mbInformation, MB_OK);
end;


VASYAKRN 17-09-2011 09:46 1754721

Название: WHEELMAN
Автор: Vasyakrn
Описание: Разние изображение на всех страницах инсталятора + IsDone0.6
Скриншоты:

Ссылки:
Скачать


Название: Assassins Creed Revelations+ ISDone 0.6b
Автор: Vasyakrn
Описание: Отсуствует
Скриншоты:

Ссылки:
Скачать

Название: Assassins Creed Revelations+ ISDone 0.6b
Автор: Vasyakrn
Описание: Отсуствует
Скриншоты:

Ссылки:
Скачать

Название: Assasins Creed Brotherhood 1.2 ISDone 0.6
Автор: Vasyakrn
Описание: Закос под Stargame
Скриншоты:

Ссылки:
Скачать

GARID 17-09-2011 10:44 1754735

Название: BlackGOLD
Автор: GARID

Внутри exe архива: bass.dll + Sound, ISSkin.dll + 2 cjstyles, + BlackGOLD.iss, ICO, MusicButton.bmp

Скриншот:


Скачать

VASYAKRN
Очень полезная сайт, я иногда захожу :) удачи

insombia 17-09-2011 11:31 1754749

VASYAKRN GARID не флудите и не кидайде сюда чужие скрипты!!!

GARID ты хоть бы подумал про людей у которых плоховатое зрение зачем инсталятор такой яркий?Что сложно обычний черный у кого то скопипастить?

R.i.m.s.k.y. 17-09-2011 11:31 1754750

Цитата:

Цитата Vitalli
Столкнулся с проблемой установки ярлыка в меню пуск. На предыдущих версиях Windows это была директория {userappdata}\Microsoft\Internet Explorer\Quick Launch. В Windows 7 все по другому, теперь это ярлык в директории "{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\", добавить сам ярлык проблем нет, еще нужно внести информацию в реестр HKCU; SubKey: Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband; ValueType: binary; ValueName: Favorites; ValueData:. А тут уже черт ногу сломит. В данном ключе имеется инфа о всех ярлыках закрепленных в панели задач, получается нужно вигрузить информацию из данного ключа, добавить свою инфу о ярлыке и все скопом внести на место. И тут я столкнулся с проблемой, как это сделать? Может есть способ проще, прошу помогите. »

глянь в шапке
Цитата:

Стандартные папкам Windows - пример скрипта, позволяющий получить путь к стандартным папкам Windows

Vitalli 17-09-2011 12:00 1754762

El Sanchez

Большое спасибо! Работает.

VASYAKRN 17-09-2011 13:25 1754793

Цитата:

Цитата insombia
VASYAKRN GARID не флудите и не кидайде сюда чужие скрипты!!! »


Все ети 4 скрипта 100 процентов мои

Dark_Delphin 17-09-2011 15:54 1754875

Всем привет)

У кого есть пример скрипта , что-бы сделать такое дерево выбора директории?


insombia 17-09-2011 16:01 1754878

ntrx

читать дальше »
var
TDV: TFolderTreeView;
TFV: TStartMenuFolderTreeView;

procedure TDVOnChange(Sender: TObject);
begin
WizardForm.DirEdit.Text:= AddBackslash(TDV.Directory)+'MyApp';
end;

procedure TFVOnChange(Sender: TObject);
begin
WizardForm.GroupEdit.Text:= AddBackslash(TFV.Directory)+'MyApp';
end;

procedure InitializeWizard();
begin
TDV:= TFolderTreeView.Create(WizardForm);
TDV.Top:= WizardForm.DirEdit.Top+28;
TDV.Width:= 417;
TDV.Height:= 100;
TDV.OnChange:= @TDVOnChange;
TDV.Parent:= WizardForm.SelectDirPage;


TFV:= TStartMenuFolderTreeView.Create(WizardForm);
TFV.Top:= WizardForm.GroupEdit.Top+28;
TFV.Width:= 417;
TFV.Height:= 100;
TFV.SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{us erstartup}'),ExpandConstant('{commonstartup}'));
TFV.OnChange:= @TFVOnChange;
TFV.Parent:= WizardForm.SelectProgramGroupPage;
end;

Dark_Delphin 17-09-2011 16:09 1754883

Ага. Спасибо.

Gnom_aka_Lexander 17-09-2011 16:24 1754894

Цитата:

Цитата VASYAKRN
Все ети 4 скрипта 100 процентов мои »

Assassins Creed Revelations+ ISDone 0.6b -Юршата,
Assasins Creed Brotherhood 1.2 ISDone 0.6 - обрезок скрипта от SJWrec,
WHEELMAN - не помню чей, но тоже не твой.

valyok666 17-09-2011 17:22 1754919

Лександер, +1,плохо присваивать не своё себе!

VASYAKRN 17-09-2011 17:42 1754925

Assassins Creed Revelations+ ISDone 0.6b я начинл из скрипта Юршата но отуда я взял тока gdipDrawImage бо неумею ним пользуватса и он бил глюченной а Assasins Creed Brotherhood 1.2 ISDone 0.6 полностю мой. Кстати пото из нево я сделал WHEELMAN


Кстате как пользуватса gdipDrawImage

insombia 17-09-2011 17:42 1754926

valyok666 что там насчет вставки изображения?

VASYAKRNзачем ты оправдываешься все прекрасно знают чьи это скрипты

ntrx не спасибо в Полезное сообщение :)

VASYAKRN 17-09-2011 17:49 1754931

Цитата:

Цитата insombia
VASYAKRNзачем ты оправдываешься все прекрасно знают чьи это скрипты »

спросите у Юршата и SJWrec чи найшли они там свои коди :read:

insombia 17-09-2011 17:52 1754934

VASYAKRN да и чем же ты создавал коды(какой прогой)?щас то мы и узнаем твои ли это скрипты а если не будешь отвечать то будет сразу видно кто ты есть на самом деле

VASYAKRN 17-09-2011 17:55 1754935

пишу скрипти в INNOIDE

Dark_Delphin 17-09-2011 18:32 1754953

У кого есть пример скрипта, что-бы создать в инсталляторе кнопку Информация о РеПаке?

serhio 17-09-2011 23:11 1755136

Всем доброй ночи!
Подскажите пожалуйста как максимум можно сжать игру?
Есть FreeArc, precomp, rep, srep15, tornado04.
Чем и в какой последовательности надо работать, и что прописывать в батнике?

Alloc 18-09-2011 00:11 1755180

Уважаемые, подскажите такую вещь... При установке программы, на странице инсталляции высвечиваются файлы которые распаковываются в данный момент (в FileNameLabel) с полными путями. мне нужно, что б высвечивалось только название файлов без путей... как это можно реализовать, скажите пожалуйста?

сам разобрался, оказалось все довольно просто...

Код:

procedure ProgressExt();
begin
FilenameLabel.Caption:= ExtractFilename(CurrentFilename);
end;


valyok666 18-09-2011 00:48 1755195

ntrx,
читать дальше »
#define RePack "Особенности RePack:'#13' --- Ничего не вырезано/ неперекадировано[Lossless]'#13' --- Таблетка[RELOADED]'#13' --- Автор Репака DarKk"

[code]
var
NewButton1: TNewButton;

procedure NewButton1Click(Sender: TObject); forward;

procedure AboutButton;
begin
NewButton1 := TNewButton.Create(WizardForm);
with NewButton1 do
begin
Name := 'NewButton1';
Parent := WizardForm;
Left := ScaleX(16);
Top := ScaleY(327);
Width := ScaleX(81);
Height := ScaleY(17);
Caption := 'RePacK';
OnClick := @NewButton1Click;
end;

NewButton1.TabOrder := 5;
end;

procedure NewButton1Click(Sender: TObject);
begin
MsgBox('{#RePaCK}', mbInformation, mb_Ok);
end;

procedure InitializeWizard();
begin
AboutButton;
end;

El Sanchez 18-09-2011 12:36 1755351

Цитата:

Цитата Alloc
оказалось все довольно просто... »

Функция CurrentFilename вызывается в Check, BeforeInstall или AfterInstall, т.е. для каждой строки секции Files нужно в данном случае дописывать ...; BeforeInstall: ProgressExt(), что утомительно прописывать, если строк много, да и Label нужно создавать. Можно поступить проще:
Код:

procedure ProgressExt(Sender: TObject);
begin
    with WizardForm.FilenameLabel do Caption := ExtractFileName(Caption);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
    if CurPageID = wpInstalling then
    with TTimer.Create(WizardForm) do
    begin
        Interval := 10;
        OnTimer := @ProgressExt;
    end;
end;


insombia 18-09-2011 13:17 1755374

Создаю свой скрипт с ноля:Подскажите как сделать чтобы не было белого фона а просто написан текст


P.S.Скрипт только в ЛС даю

Alloc 18-09-2011 17:13 1755499

El Sanchez, спасибо! действительно так намного удобнее

insombia, дело в том, что у TNewStaticText, нет функции как Transparent, придется вместо него создать TLabel. Спрятать

Код:

WelcomeLabel1.Hide;
WelcomeLabel2.Hide;

и создать вместо них:

Код:

WelcomeLabel1:=TLabel.Create(WizardForm);
  with WelcomeLabel1 do
  begin
    Left:= WizardForm.WelcomeLabel1.Left;
    Top := WizardForm.WelcomeLabel1.Top;
    Width := WizardForm.WelcomeLabel1.Width;
    Height := WizardForm.WelcomeLabel1.Height;
    AutoSize := False;
    WordWrap := True;
    Font.Color := clBlack;
    Font.Style := [fsBold];
    Font.Name:='MS Sans Serif';
    Font.Size := 13;
    Transparent := True;
    Parent := WizardForm.WelcomePage;
  end;
 
  WelcomeLabel2:=TLabel.Create(WizardForm);
  with WelcomeLabel2 do
  begin
    Left:= WizardForm.WelcomeLabel2.Left;
    Top := WizardForm.WelcomeLabel2.Top;
    Width := WizardForm.WelcomeLabel2.Width;
    Height := WizardForm.WelcomeLabel2.Height;
    AutoSize := False;
    WordWrap := True;
    Font.Color := clBlack;
    Font.Name:='MS Sans Serif';
    Font.Size := 8;
    Transparent := True;
    Parent := WizardForm.WelcomePage;
  end;


valyok666 18-09-2011 18:11 1755530

Alloc, там было намного проще с использованием модуля TransparentStatic

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

#include "TransparentStatic.iss"

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

[code]
procedure InitializeWizard();
begin
StaticSetTransparent;
end;

procedure DeinitializeSetup;
begin
StaticSetDefault;
end;

Alloc 18-09-2011 19:15 1755566

valyok666, я просто то же не особо разбираюсь во всем этом, просто показал как я это делаю. Как оказалась можно намного проще все устроить) Подскажите, а откуда эти дополнительные модули брать?

insombia 18-09-2011 19:50 1755584

http://i32.fastpic.ru/big/2011/0918/...2af6f70a71.png
Как вместо галочек вставить чекбоксы?

serhio 18-09-2011 20:02 1755590

Народ ну подскажите пожалуйста кто шарит как максимум можно сжать игру?
Есть FreeArc, precomp, rep, srep15, tornado04.
Чем и в какой последовательности надо работать, и что прописывать в батнике?

Заранее Огромное спасибо!!!!

insombia 18-09-2011 20:48 1755616

serhioсмотря какая игра например дюк нюкем жмется отлично как и Worms Reloaded дюк с 6 гб до 2х с лишним жмется в вормс с 2х гб до 200 мб с лишним

serhio 18-09-2011 21:07 1755628

insombia, Да не важно какая! Просто скинул репак чужой, а на такой же размер не могу сжать....
А так вообще Red Orchestra 2.Heroes Of Stalingrad.(1C-СофтКлаб).(2011).Repack. 4,67Гб
А мой получается 5,96Гб! Время в расспаковке меня не интересует, долго ли или быстро. Меня интересует как по максимуму сжать можно.......

Devils Night 19-09-2011 00:14 1755763

serhio, Сударь, а не соблаговолите проследовать до этого места.

Rikill 19-09-2011 00:16 1755764

А ну-ка прекратили тут флудить :)

Raf-9600 19-09-2011 00:41 1755776

Мне интересно, почему файл с компонентом
Код:

GameDiablo2\Text\Russian\Fargus and GameDiablo2\VoiceD2\Russian\TheBest
Не установился? Существуют какието особые правила, касательно родственных компонентов? Потому что, к примеру, вот этот
Код:

GameDiablo2\Text\Russian\Fargus and GameLoD\VoiceLoD\Russian\TheBest
Сработал безупречно.

valyok666 19-09-2011 18:43 1756298

Лександер, ок буду выкладывать всё в следующий раз=)
и ещё твоя библиотека IsPicture разрабатывается дальше или нет???
мне она понравилась просто=)

Gnom_aka_Lexander 19-09-2011 18:49 1756304

Цитата:

Цитата valyok666
и ещё твоя библиотека IsPicture разрабатывается дальше или нет??? »

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

Цитата:

Цитата Devils Night
Script Maker 5.1.6.9 »

В шапке более новая версия программы, назявается Inno Script Generator, почитай внимательней. Прект мертв.
Inno Setup Script Includes Проект так-же давно заброшен, в свое время ковырялся я в нем - ничего очсобо полезного, сплошное неудобство.

InnoTools Downloader - это да, в шапку добавить можно. Но и ссылку на родной сайт нужно указывать. Большинство проектов мрут именно изза того, что распростаранители проявляют полное неуважение к авторам проектов и "забывают" указать сайт проекта.

valyok666 19-09-2011 19:13 1756324

Лександер, посмотри скрипт макер другой там
кстати как там у picture взаимодействие в ботвой?там вроде похожие функции имеются

insombia 19-09-2011 19:18 1756327

Как сделать чтобы при нажатии на компоненты открывалось окно новое как здесь http://rghost.ru/22232271?

Gnom_aka_Lexander 19-09-2011 19:20 1756329

Цитата:

Цитата valyok666
посмотри скрипт макер другой там »

Конечно, другой, там старая версия. 2006-го года.
Цитата:

Цитата valyok666
кстати как там у picture взаимодействие в ботвой?там вроде похожие функции имеются »

Ни одной похожей функции нет. (вроде) И принцип работы не просто отличается, общая реализация вставки изображений вообще по другому сделано. В качестве родителя изображений берется фоновое окно инно - MainForm, что позволяет использовать на страницах инсталлятора iSslideShow, а также вставить видеофайл в качестве фона - такая возможность предусмотрена в самой IsPicture.

Gnom_aka_Lexander 19-09-2011 21:44 1756421

Цитата:

Цитата insombia
Как сделать чтобы при нажатии на компоненты открывалось окно новое как здесь http://rghost.ru/22232271? »

insombia

Можно так:
читать дальше »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
var
NewButton1: TNewButton;
Panel1: TPanel;

procedure NewButton1Click(Sender: TObject);
var
i:integer;
begin
i:=Panel1.Left;
If i= -Panel1.Width then
begin
WizardForm.CancelButton.Enabled:=False;
WizardForm.NextButton.Enabled:=False;
WizardForm.BackButton.Enabled:=False;
WizardForm.DirBrowseButton.Enabled:=False;
while True do
begin
Panel1.Left:= ScaleX(i);
WizardForm.SelectDirPage.Repaint;
if i=0 then Break;
i:=i+1;
end;
end else
begin
while True do
begin
Panel1.Left:= ScaleX(i);
WizardForm.SelectDirPage.Repaint;
if i=-Panel1.Width then Break;
i:=i-1;
end;
WizardForm.CancelButton.Enabled:=True;
WizardForm.NextButton.Enabled:=True;
WizardForm.BackButton.Enabled:=True;
WizardForm.DirBrowseButton.Enabled:=True;
end;
end;

procedure InitializeWizard();
begin
{ Panel1 }
Panel1 := TPanel.Create(WizardForm);
with Panel1 do
begin
Parent := WizardForm.SelectDirPage;
Top := ScaleY(0);
Width := WizardForm.SelectDirPage.Width;
Height := WizardForm.SelectDirPage.Height;
Left := -Panel1.Width;
end;

WizardForm.ComponentsDiskSpaceLabel.Parent := Panel1;
WizardForm.ComponentsList.Parent := Panel1;
WizardForm.TypesCombo.Parent := Panel1;
WizardForm.SelectComponentsLabel.Parent := Panel1;

NewButton1 := TNewButton.Create(WizardForm);
with NewButton1 do
begin
Parent := WizardForm;
Left := ScaleX(32);
Top := ScaleY(327);
Width := ScaleX(75);
Height := ScaleY(25);
Caption := 'Компоненты';
OnClick := @NewButton1Click;
end;
end;

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

insombia 19-09-2011 21:51 1756428

Лександер а можно ли сделать чтобы оно быстрей открывалось? а то смотреть на слайд-шоу не очень хочется

Gnom_aka_Lexander 19-09-2011 22:13 1756439

Цитата:

Цитата insombia
а можно ли сделать чтобы оно быстрей открывалось? »

Можно:
читать дальше »
while True do
begin
if i>0 then i:=0;
Panel1.Left:= ScaleX(i);
WizardForm.SelectDirPage.Repaint;
if i=0 then Break;
i:=i+10;
end;
end else
begin
while True do
begin
if i<-Panel1.Width then i:=-Panel1.Width;
Panel1.Left:= ScaleX(i);
WizardForm.SelectDirPage.Repaint;
if i=-Panel1.Width then Break;
i:=i-10;
end;

меняеш эти циферки, пока резульат тебя не удовлетворит. Поправил второй пример

valyok666 19-09-2011 22:18 1756443

Лександер, а если попробовать сделать не панель а NewChecklistbox?

Gnom_aka_Lexander 19-09-2011 22:23 1756448

valyok666, Без разницы.
Цитата:

Цитата insombia
как только окно закрылось инстал начал мерихтеть и не отвечать »

Смотри мой пост выше, я поправил пример

insombia 19-09-2011 22:24 1756450

Лександер как только окно закрылось инстал начал мерихтеть и не отвечать

VASYAKRN 19-09-2011 23:13 1756482

Nik1967 Как ти сделал такие переходи между страницами в свойом скрипте darksiders и prince of persia через ботву

nik1967 19-09-2011 23:21 1756485

VASYAKRN, ну "prince of persia" не мой скрипт, а в "darksiders" смена страниц была реализована Shegorat'ом по мотивам скрипта BlackSelf'а.

Devils Night 20-09-2011 04:33 1756551

Цитата:

Цитата Лександер
Но и ссылку на родной сайт нужно указывать »

Я их скидывал с одного ресурса а не с офф. сайта, потому ссылку и не указал, да и на офф. сайт я ссылок не знаю, случайно подвернулись. Вобщем оставил пост здесь, где ему собственно и место.

valyok666 20-09-2011 12:34 1756700

Лександер, у меня ещё вопрос по IsPicture.dll будет ли она поддерживать другие форматы кроме .bmp???или пользоваться старой доброй ботвой=)

Gnom_aka_Lexander 20-09-2011 13:46 1756732

Цитата:

Цитата valyok666
будет ли она поддерживать другие форматы кроме .bmp »

А чем плохо ботва? написана грамотным программистом, великолепно оптимизирована работа, глюки давно все вылечены. единственное, при использовании ботвы вместе с испикчур, родителем изображений, нужно указывать MainForm а не WizardForm.

valyok666 20-09-2011 16:11 1756807

Лександер, да ни чем она не плоха)просто узнать хотел

newmangor 20-09-2011 17:22 1756846

Есть вопрос, упаковывал данные фриарком с параметрами -max -ld1024m, использую IsDone скрипт для распаковки, версия 0.6, при инсталяции инстал выдает следующее сообщение: "ERROR_ISARC_INVALID_COMPRESSOR"="Произошла ошибка при распаковке: Неизвестный метод сжатия архива!%nUnarc.dll вернул код ошибки: -2%n%s" Помогите кто сможет плз )))

insombia 20-09-2011 17:28 1756851

newmangor я когда-то тоже так делал оно просто не распознает этот метод поэтому выбирай такой метод -mx -ld800m

newmangor 20-09-2011 19:22 1756942

нет я согласен, но сжатие max гораздо лучше чем mx вот в чем дело и раз оно есть значит как то можно распаковать...

insombia 20-09-2011 19:43 1756952

newmangor возможно оно не предусмотрено для исдона

Rikill 20-09-2011 22:10 1757044

newmangor, -max не предусмотрена ISDone и это факт.
А ещё мне кажется что ошибка кроется в arc.ini... Попробуй этот файл скопировать в папу исдона из папки фриарка или посмотреть справку.

Devil Mehanik 21-09-2011 13:19 1757341

Новый сайт по InnoiSetup
http://innosetup.ucoz.net/

Rikill 21-09-2011 15:47 1757419

Devil Mehanik, не спамим пожалуйста.

insombia 21-09-2011 17:08 1757462

Devil Mehanik Вы задолбали уже со своими говно-сайтами об инно.На юкозе любой может создать сайт а от сделать так как Лексантер никто не может чтобы наполнять не просто уже готовыми свороваными скриптами а ещё и свои придумать и впалять туда
P.S.Уже одного хватает спамера

Raf-9600 21-09-2011 18:18 1757521

А возможно ли сделать, чтоб юзер смог поставить "птичку" напротив компонентов Version\107 и Version\108 только в случае если выбран компонент "GameLoD"?
Грубо говоря, нужно связать не дочерние компоненты.

Gnom_aka_Lexander 21-09-2011 18:58 1757545

Raf-9600
Только в коде (компоненты невозможно сделать зависимыми друг от друга)
Вариант:
читать дальше »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application


[Components]
Name: text; Description: Язык субтитров; Types: full;
Name: text\rus; Description: Русский; Flags: exclusive;
Name: text\eng; Description: Английский; Flags: exclusive;
Name: voice; Description: Язык озвучки;
Name: voice\rus; Description: Русский; Flags: exclusive;
Name: voice\eng; Description: Английский; Flags: exclusive;

[code]
var
OldEvent_ComponentsListClickCheck: TNotifyEvent;

procedure ComponentsListClickCheck(Sender: TObject);
begin
If IsComponentSelected('text') then
WizardForm.ComponentsList.ItemEnabled[3]:=False
else
WizardForm.ComponentsList.ItemEnabled[3]:=True;
OldEvent_ComponentsListClickCheck(Sender);
end;

procedure InitializeWizard();
begin
with WizardForm.ComponentsList do
begin
OldEvent_ComponentsListClickCheck := OnClickCheck;
OnClickCheck := @ComponentsListClickCheck;
ItemEnabled[3]:=False;
end;
end;

Raf-9600 21-09-2011 20:04 1757592

Лександер, Спасибо, а вы могли бы подсказать, как сделать чтоб правило действовало не только на третий, но и на четвертый компонент? :)

Адаптированная версия вашего примера:
читать дальше »
[Components]
Name: "GameDiablo2"; Description: Diablo 2; Flags: fixed; Types: full compact custom;

Name: GameLoD; Description: Lord of Destruction; Types: full;

Name: Version; Description: Версия; Flags: fixed; Types: full compact custom;
Name: Version\107; Description: 1.07; Flags: exclusive;
Name: Version\108; Description: 1.08; Flags: exclusive;
Name: Version\109; Description: 1.09; Flags: exclusive; Types: full;

[code]
var
OldEvent_ComponentsListClickCheck: TNotifyEvent;

procedure ComponentsListClickCheck(Sender: TObject);
begin
If IsComponentSelected('GameLoD') then
WizardForm.ComponentsList.ItemEnabled[3]:=True
else
WizardForm.ComponentsList.ItemEnabled[3]:=False;
OldEvent_ComponentsListClickCheck(Sender);
end;

procedure InitializeWizard();
begin
with WizardForm.ComponentsList do
begin
OldEvent_ComponentsListClickCheck := OnClickCheck;
OnClickCheck := @ComponentsListClickCheck;
ItemEnabled[3]:=True;
end;
end;

Gnom_aka_Lexander 21-09-2011 20:08 1757595

Цитата:

Цитата Raf-9600
Спасибо, а вы могли бы подсказать, как сделать чтоб правило действовало не только на третий, но и на четвертый компонент? »

Логично:

читать дальше »
procedure ComponentsListClickCheck(Sender: TObject);
begin
If IsComponentSelected('GameLoD') then begin
WizardForm.ComponentsList.ItemEnabled[3]:=True;
WizardForm.ComponentsList.ItemEnabled[4]:=True;
end else begin
WizardForm.ComponentsList.ItemEnabled[3]:=False;
WizardForm.ComponentsList.ItemEnabled[4]:=False;
OldEvent_ComponentsListClickCheck(Sender);
end;
end;

VinTagE 21-09-2011 20:18 1757599

ISFont.dll
Библиотека позволяет загрузить свой шрифт в формате .ttf
P.S.: Облекчил работу загрузки шрифта =)
Скачать

leha---83 21-09-2011 20:19 1757601

Всем привет.
Есть вопрос. можно ли сделать так что бы в конце установки сделать поля:
Введите ваш никнейм:
Введите ваш клан-тег:
Выбрите язык клиента: Русский, Английский.
Все эти параметры содержатся в текстовом файле (rev.ini)
rev.ini
[Emulator]

# CacheEnabled set to true to enable loading apps from GCF.
# If it is true, and a clientregistry.blob file is not supplied,
# then you must supply revApps.ini file with the correct cache requirements.
# See the example revApps.ini, however it is highly recommended that you use
# a clientregistry.blob file for maximum compatibility
#
# Default = False
#
CacheEnabled = false

# CachePath - set to the folder where your GCF files are located
#
# Default = (n/a)
#
CachePath = E:\Steam\SteamApps

# Language - rev emu will automagically load the correct language files.
# This can be English, French, Italian, German, Spanish, sChinese,
# Korean, Koreana, tChinese, Japanese, Russian, Thai, or Portugeuse
#
# revEmu will try to set the Language key in the following order:
# Use the Language key in the this rev.ini if it is present
# Use the Steam Language key in the registry if it is present
# Default the Language to English
#
#Language = English
Language = Russian

# Change Logging to True to enable/disable log file output for steam.dll
#
# Default = False
#
Logging=False

# Change SteamDll to point to your official Steam client DLL.
# This setting is required for Steam UserID Validation functions
# to support legit Steam IDs. Otherwise, all clients would get
# IDs generated from their IP addresses.
# Also make sure you uncomment the line below (remove "#")
# if you want to use this setting!
# Note that this setting only applies to games using SteamGameServer
# up to version 003. (e.g. CS: Source, Team Fortess 2, Garry's Mod)
#
# Default = (n/a)
#
SteamDll=.\bin\Steam\Steam.dll

# Change SteamClient to True if you want to use the steamclient emulator.
# This setting is recommended to be true for both clients \ game servers
# and for all games, except games which use SteamClient006 interface
# (e.g. CS: Source, Half-Life 2: Deathmatch)
# To see if the game is using this old interface, enable SteamClient,
# enable Logging and you will notice a log line "Using SteamClientXXX".
# If 007, leave the option ON, otherwise, it is recommended not to use it.
#
# Default = False
#
SteamClient = True

# Change SteamUser to the steam username that you wish to use with revEmu
# Defaults to revCrew if not specified
#
SteamUser = SteamPlayer

[Log]

# If Logging is set to True, choose which functions would you like to log.
#
# Default = False
#
FileSystem=False
Account=False
UserID=False

[steamclient]

################################### NOTE ####################################
# These settings may apply even if you don't choose to use steamclient.dll! #
#############################################################################
#
# Change the setting below to set your PlayerName (used in src2007 engine)
# not use ""
#
# Default = REVOLUTiON
#
PlayerName=


# Change the setting below to enable/disable log file output for steamclient.dll
#
# Default = False
#
Logging=False

# Change ClientDLL to point to the original steamclient.dll
# This setting will enable VAC for your server and your server will be listed
# on Valve master server! Also, Steam clients will have their regular Steam IDs
# Please use the steamclient.dll from Steam folder!
#
# Default = (n/a)
#
#ClientDLL=.\bin\Steam\steamclient.dll

#
#
#SteamExe=E:\Steam\Steam.exe

# DisableUnlockedItems enables you to choose whether to use the new weapons in
# Team Fortress 2. This setting applies to you only if you are a regular player,
# or to all your clients if you are a server hoster.
#
# Default = False
#
#DisableUnlockedItems = True

# If you use in Ultimate SSDK change the setting below to True
# use only Ultimate SSDK enable else disable.
# Default = False
#
#EnableSDK = True

#Change the setting to set masterserver, from where serverlist will be got.
#No support Setti masterserver.....
#Default = 72.165.61.136:27015 only for HL2
#Friends tab in serverbrowser shows another masterserver for VIP server ($)
#
#HL1 servers
#MasterServer = 188.40.40.201:27010
#MasterServer = 69.28.158.131:27010
#MasterServer = 209.197.20.34:27010
#MasterServer = 69.28.140.247:27010
#
#HL2 servers
#
MasterServer = 72.165.61.153:27015
#MasterServer = 63.234.149.83:27011
#MasterServer = 63.234.149.90:27011
#
#rdkf
#MasterServer = 68.142.72.250:27012

#Search game version in MasterServer.
#Default search all version.
#
#GameVersion = 1.0.0.64

#Add rename ClanTag maximum 12 symbol UTF-8 or 24 symbol ANSI
#ex. ClanTag = revcrev
ClanTag=[No-Steam]

[GameServer]

# GameServer policy rules
# Allow (v9.73 < revEmu < 9.83) clients to join your server
#
# Default = True
#
AllowOldRev74=False

# Allow revEmu v9.63 ~ 9.73 clients to join your server
# revEmu v9.62 and below will be rejected nevertheless
#
# Default = True
#
AllowOldRev=False

# Allow unknown clients to join your server
#
# Default = True
#
AllowUnknown=False

# Allow cracked Steam clients to join your server
#
# Default = True
#
AllowCracked=False

# Allow legitimate Steam clients to join your server
#
# Default = True
#
#AllowLegit=False

#Allowed any count connect Unknown client with one IP (25 Unknown clients 1 IP default true)
#
AllowedAnyCountConnectUnknownClientWithOneIP = false

[GameServerNSNet]
#EnableNSNetSvc = [False/UDP/TCP/BOTH]
#NSNetDedicatedPort = Порт(Только для Slave серевров)
#AdditionalSlaveServer = IP:PORT
#AdditionalSlaveServer = IP:PORT
#AdditionalSlaveServer = IP:PORT
#AdditionalSlaveServer = IP:PORT

Raf-9600 21-09-2011 20:21 1757602

Лександер,

insombia 21-09-2011 20:40 1757612

leha---83 если захотеть можно все найти :cool:
вот
Цитата:

Выбрите язык клиента: Русский, Английский.
только через компоненты

leha---83 21-09-2011 20:57 1757624

insombia, Спасибо огромное, но хотелось бы немного не так!
Нужно в самом окне завершения установки

insombia 21-09-2011 21:00 1757626

leha---83 блин когда-то делали что есть выбор ника нормальный код но нигде не могу найти

Gnom_aka_Lexander 21-09-2011 21:06 1757634

ссылка Пример сложной работы с *.ini-файлами, с созданием файла полностью и вводом множества данных из окна инсталлятора, а также создание подпапки по имени одного из параметров, на примере инсталлятора клиента чата Коммфорт.
Может, комуто этот пример поможет избежать множества мучений. Огромное спасибо Shegoratу за помощ на последнем этапе. Делал давно, можно сделать короче и проще, Все руки не дойдут переделать, никак :)

leha---83 21-09-2011 21:11 1757642

Вот и тоже видал где то но .....

Gnom_aka_Lexander 21-09-2011 21:44 1757669

Цитата:

Цитата leha---83
Есть вопрос. можно ли сделать так что бы в конце установки сделать поля: »

Как-то так:
читать дальше »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
var
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
NewEdit1: TNewEdit;
NewEdit2: TNewEdit;
Lang: TNewComboBox;

procedure InitializeWizard();
begin
{ Label1 }
Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Name := 'Label1';
Parent := WizardForm.FinishedPage;
Caption := 'Введите ваш никнейм:';
Transparent := False;
Left := ScaleX(24);
Top := ScaleY(136);
Width := ScaleX(115);
Height := ScaleY(13);
end;

{ Label2 }
Label2 := TLabel.Create(WizardForm);
with Label2 do
begin
Name := 'Label2';
Parent := WizardForm.FinishedPage;
Caption := 'Введите ваш клан-тег:';
Transparent := False;
Left := ScaleX(24);
Top := ScaleY(192);
Width := ScaleX(118);
Height := ScaleY(13);
end;

{ Label3 }
Label3 := TLabel.Create(WizardForm);
with Label3 do
begin
Name := 'Label3';
Parent := WizardForm.FinishedPage;
Caption := 'Выбрите язык клиента:';
Transparent := False;
Left := ScaleX(24);
Top := ScaleY(240);
Width := ScaleX(121);
Height := ScaleY(13);
end;

{ NewEdit1 }
NewEdit1 := TNewEdit.Create(WizardForm);
with NewEdit1 do
begin
Name := 'NewEdit1';
Parent := WizardForm.FinishedPage;
Left := ScaleX(24);
Top := ScaleY(152);
Width := ScaleX(121);
Height := ScaleY(21);
end;

{ NewEdit2 }
NewEdit2 := TNewEdit.Create(WizardForm);
with NewEdit2 do
begin
Name := 'NewEdit2';
Parent := WizardForm.FinishedPage;
Left := ScaleX(24);
Top := ScaleY(208);
Width := ScaleX(121);
Height := ScaleY(21);
end;

{ Lang }
Lang := TNewComboBox.Create(WizardForm);
with Lang do
begin
Name := 'Lang';
Parent := WizardForm.FinishedPage;
Left := ScaleX(24);
Top := ScaleY(256);
Width := ScaleX(121);
Height := ScaleY(21);
DropDownCount := 2;
MaxLength := 2;
ParentColor := True;
Text := 'Русский';
Items.Text := 'Русский' + #13#10 +
'Английский';
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
s1,s2:String;
begin
If CurPageID=wpFinished Then
Begin
If Lang.Text = 'Русский' Then s1:=Russian else s1:=English;
SetIniString('Emulator', 'Language', s1, ExpandConstant('{app}\rev.ini'));
SetIniString('steamclient', 'PlayerName', s2, ExpandConstant('{app}\rev.ini'));
end;
Result:True;
end;

Времени нет на проверить-отладить да покорасивше сделать, но думаю, смысл понятен :)

leha---83 21-09-2011 22:06 1757683

Лександер, Извени я новичек ругается на
PHP код:

s1,s2:String


insombia 21-09-2011 22:07 1757685

leha---83 а что именно пишет?может просто это уже есть в скрипте

No4noylis 21-09-2011 22:13 1757689

leha---83, напиши var над ними.

leha---83 21-09-2011 22:14 1757690


leha---83 21-09-2011 22:17 1757693

Написал var результат


insombia 21-09-2011 22:39 1757711

leha---83 там же написано английский а ты туда русский паяешь

Gugle 22-09-2011 13:12 1758093

Доброго времени суток!

Та же проблема с ethernet adapter, но с новой интерпретацией. Мне надо вытащить список адаптеров, но с использованием winpcap.
Проблема в том, что мне необходим порядок и название, в котором их выводит wpcap.

Сам я не силен в delphi/pascal, а посему мне не хватает мозгов переварить мануалы для написания проги. Не могу догнаться как инициализировать *.h для использования структур библиотеки. Примеры с использованием функций сторонных библиотек нашел, но как юзать структуры, которые есть в библиотеке не могу понять.
Прошу помощи гуру в реализации примерчика.

Ссылка на исходники и доки winpcap:
http://www.winpcap.org/docs/default.htm

Qu@dr0 22-09-2011 16:06 1758196

Приветствую! Помогите пожалуйста!

Есть игра, запакованная в программу установки. Необходимо, чтобы перед последним окном (в котором есть единственная кнопка - "Завершить", и в которое через секцию [Run] можно вписать пункт запуска программы) в окне инсталлятора (не в отдельном окне!) появлялась форма ввода имени с надписью "Введите желаемое имя", и чтобы кнопка "Далее" не была доступна, пока не будет введёт хотя бы один символ, а введенное имя вписывалось в файл .ini секции [steamclient], параметр PlayerName=, т.е. введёшь в форму слово "Призрак" - и в файле .ini вписалось PlayerName=Призрак.

На прошлых страницах выкладывался скрипт, в котором я чуть подредактировал сообщения и файл, в который имя должно быть записано, однако он не подходит потому, что окно появляется уже после последнего окна установщика (о котором я писал в прошлом абзаце), а нужно, чтобы оно появлялось перед ним, и чтобы его размеры и оформление было такое же, как и у остальных окон установщика.
Кусок скрипта, секция [code]:
читать дальше »
[code]
var
Form: TSetupForm;

procedure ButtonClick(Sender: TObject);
begin
Form.Close;
end;

function GetNickName: string;
var
edt: TEdit;
begin
try
Form := CreateCustomForm;
with Form do
begin
ClientWidth := ScaleX(200);
ClientHeight := ScaleY(100);
Center;
Caption := 'Выбор имени игрока';
end;
with TLabel.Create(Form) do
begin
Parent := Form;
AutoSize := True;
Left := ScaleX(12);
Top := ScaleY(12);
Font.Size := 9;
Caption := 'Введите желаемое имя:';
end;
edt := TEdit.Create(Form);
with edt do
begin
Parent := Form;
SetBounds(ScaleX(10), ScaleY(35), Form.ClientWidth - ScaleX(20), ScaleY(17));
end;
with TButton.Create(Form) do
begin
Parent := Form;
SetBounds((Form.Width - Width) div 2, ScaleY(65), ScaleX(75), ScaleY(23));
Caption := 'OK';
OnClick := @ButtonClick;
end;
Form.ShowModal;
finally
Result := edt.Text;
Form.Free;
Form := nil;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
SetIniString('steamclient', 'PlayerName', GetNickName, ExpandConstant('{app}\rev.ini'))
end;


Также, если это возможно, то пусть под формой ввода имени будет пункт "Сохранить в UTF-8", на котором можно было бы поставить галочку, и если он выбран, то пусть введённое имя сохраняется в файл INI в кодировке UTF-8, не меняя при этом общую кодировку файла (ANSI).

Буду признателен за помощь!

insombia 22-09-2011 17:22 1758253

как убрать выделенную область чтобы осталось только закрыть и свернуть?

VinTagE 22-09-2011 18:11 1758286

insombia, так
читать дальше »
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[code]
const
GWL_STYLE = -16;

WS_MINIMIZEBOX = $20000;
WS_MAXIMIZEBOX = $10000;

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

procedure initializeWizard();
begin
SetWindowLong(WizardForm.handle, GWL_STYLE, GetWindowLong(WizardForm.handle, GWL_STYLE)and(not WS_MINIMIZEBOX)and(not WS_MAXIMIZEBOX));
end;

insombia 22-09-2011 18:32 1758304

Qu@dr0
[Icons]
читать дальше »
Name: "{group}\delphi"; Filename: "{app}\DeadIslandGame.exe"; WorkingDir: "{app}";

[Run]
Description: "{cm:LaunchProgram, delphi}"; Filename: "{app}\DeadIslandGame.exe"; WorkingDir: "{app}"; Flags: nowait postinstall skipifsilent unchecked
насчет ввода ника учись пользоваться поисковиком вчера был вопрос и на него был ответ так что ищи

insombia 22-09-2011 19:00 1758326

Какая то фигня с исоде не распаковывает архивы хоть они указаны если что скрипт только в ЛС

Qu@dr0 22-09-2011 19:35 1758343

insombia,
Compile Error!
Line: 140
Error: Column 35:
Unknown identifier 'Russian'
Чё вместо 'Russian' вписать? 0_о

А вообще, мне не нужны ни клан тег, ни выбор языка, как их выкорчевать из скрипта? Нужно только окно с формой ввода, введённые данные прописываются в файл .ini, потом идёт последнее окно с кнопкой "Завершить" и пунктом из секции [Run] и всё. Help.

Gnom_aka_Lexander 22-09-2011 19:52 1758346

Qu@dr0, Вот так все работает, проверил. Лучше, если ини-файл будет в папке, где ему положено быть. В выделенной строке нужно указать путь к нему. оставил никэдит и выбор яззыка. Там был косячек, исправил.

читать дальше »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
var
{ NicEdit } Label1: TLabel; { NicEdit }
{ Lang } Label2: TLabel;{ Lang }
{ NicEdit } NicEdit: TNewEdit; { NicEdit }
{ Lang } Lang: TNewComboBox; { Lang }

procedure InitializeWizard();
begin
{ NicEdit }
Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Parent := WizardForm.FinishedPage;
Caption := 'Введите ваш никнейм:';
Transparent := False;
Left := ScaleX(24);
Top := ScaleY(192);
Width := ScaleX(118);
Height := ScaleY(13);
end;
{ NicEdit }

{ Lang }
Label2 := TLabel.Create(WizardForm);
with Label3 do
begin
Parent := WizardForm.FinishedPage;
Caption := 'Выбрите язык клиента:';
Transparent := False;
Left := ScaleX(24);
Top := ScaleY(240);
Width := ScaleX(121);
Height := ScaleY(13);
end;
{ Lang }

{ NicEdit }
NicEdit := TNewEdit.Create(WizardForm);
with NicEdit do
begin
Parent := WizardForm.FinishedPage;
Left := ScaleX(24);
Top := ScaleY(208);
Width := ScaleX(121);
Height := ScaleY(21);
end;
{ NicEdit }

{ Lang }
Lang := TNewComboBox.Create(WizardForm);
with Lang do
begin
Parent := WizardForm.FinishedPage;
Left := ScaleX(24);
Top := ScaleY(256);
Width := ScaleX(121);
Height := ScaleY(21);
DropDownCount := 2;
MaxLength := 2;
ParentColor := True;
Text := 'Русский';
Items.Text := 'Русский' + #13#10 +
'Английский';
end;
{ Lang }
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var s1,s2:String;
begin
If CurPageID=wpFinished Then
Begin

{ Lang } If Lang.Text = 'Русский' Then s1:='Russian' else s1:='English'; { Lang }

{ NicEdit } s2:=NicEdit.Text; { NicEdit }
{ Lang } SetIniString('Emulator', 'Language', s1, ExpandConstant('{app}\rev.ini'));{ Lang }
{ NicEdit } SetIniString('steamclient', 'PlayerName', s2, ExpandConstant('{app}\rev.ini')); { NicEdit }
end;
Result:=True;
end;
куски заключенные между { NicEdit } и { Lang } овечают за понятное, думаю, действие :)

Qu@dr0 22-09-2011 21:54 1758398

Лександер,
получается такое:

Зная наших пользователей, 90% просто не заметят форму ввода ника.

Как сделать, чтобы перед окном "Завершение мастера установки" появилось такое окно:

Это намного удобнее, и пользователь точно не пропустит его.
Желательно, чтобы кнопка "Далее" была недоступна, пока в форму не введен хотя бы один символ (или чтобы при нажатии "Далее" появлялось окно "Введите имя игрока"), и чтобы текст над и под формой ввода выравнивался по ширине.
Это было бы идеально.

А окно выбора языка мне не нужно, т.к. моя аудитория - только русскоговорящие пользователи.

Буду благодарен за помощь.

murlakatamenka 23-09-2011 00:03 1758470

такой вопрос.
DisableAppendDir кануло в лету, чем его заменили ?
как сделать так, чтобы в конец пути установки не добавлялось DefaultDirName ?

nik1967 23-09-2011 00:44 1758478

murlakatamenka, AppendDefaultDirName=false

El Sanchez 23-09-2011 08:33 1758553

Qu@dr0,
Код:

[code]
const
    CP_ACP = 0;
    CP_UTF8 = 65001;

var
    RevEmuPage: TInputQueryWizardPage;
    ConvertCheckBox: TCheckBox;

function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: PAnsiChar; cbMultiByte: Integer; lpWideCharStr: PAnsiChar; cchWideChar: Integer): Longint;
external 'MultiByteToWideChar@kernel32.dll stdcall';
function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: PAnsiChar; cchWideChar: Integer; lpMultiByteStr: PAnsiChar; cbMultiByte, lpDefaultChar, lpUsedDefaultChar: Integer): Longint;
external 'WideCharToMultiByte@kernel32.dll stdcall';

function StringToWideString(const aStr: String; codePage: Word): String;
var
    len: Integer;
begin
    len := MultiByteToWideChar(codePage, 0, aStr, -1, '', 0);
    if len > 0 then
    begin
        SetLength(Result, (len*2)-2);
        MultiByteToWideChar(codePage, 0, aStr, -1, Result, Length(Result));
    end;
end;

function WideStringToString(const wStr: String; codePage: Word): String;
var
    len: Integer;
begin
    len := WideCharToMultiByte(codePage, 0, wStr, -1, '', 0, 0, 0);
    if len > 0 then
    begin
        SetLength(Result, len-1);
        WideCharToMultiByte(codePage, 0, wStr, -1, Result, Length(Result), 0, 0);
    end;
end;

function SetNickname(Nickname: String; IsConvert: Boolean): String;
begin
    Result := Nickname;
    if IsConvert then Result := WideStringToString(StringToWideString(Result, CP_ACP), CP_UTF8);
end;

procedure NicknameOnChange(Sender: TObject);
begin
    WizardForm.NextButton.Enabled := RevEmuPage.Values[0] <> '';
end;

//
procedure InitializeWizard();
begin
    RevEmuPage := CreateInputQueryPage(wpInfoAfter, 'Настройка RevEmu', '', 'Пожалуйста, введите данные профиля и нажмите Далее.');
    with RevEmuPage do
    begin
        Add('Ник:', False);
        Edits[0].OnChange := @NicknameOnChange;
    end;
    ConvertCheckBox := TCheckBox.Create(WizardForm);
    with ConvertCheckBox do
    begin
        Parent := RevEmuPage.Surface;
        SetBounds(RevEmuPage.Edits[0].Left, RevEmuPage.Edits[0].Top + ScaleY(40), ScaleX(200), ScaleY(17));
        Caption := 'Сохранить в UTF-8';
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
    if CurPageID = RevEmuPage.ID then WizardForm.NextButton.Enabled := RevEmuPage.Values[0] <> '';
    if CurPageID = wpFinished then SetIniString('steamclient', 'PlayerName', SetNickname(RevEmuPage.Values[0], ConvertCheckBox.Checked), ExpandConstant('{app}\rev.ini'));
end;


Qu@dr0 23-09-2011 13:08 1758716

El Sanchez
Хоть программированием я никогда не занимался и уровень знаний в этой области нулевой, но ошибку (спасибо, что была она не очень сложной) в скрипте я нашёл и даже исправил))) Правда, интуиции хватило только на это, да ещё на изменение имеющихся текстов в окне...
Пока получилось такое:


Вопросы:
1) Как сделать, чтобы строка с галочкой (про сохранение в UTF-8) не была так далеко от формы ввода имени, а располагалась прямо под ней вплотную?
2) Как добавить под этой строкой про UTF-8 (не прямо под ней, а на 3 пробела ниже) информацию следующего содержания:
"Вы в любое время сможете сменить никнейм, для этого войдите в папку игры, откройте Блокнотом файл rev.ini, найдите строчку PlayerName и после знака "=" впишите желаемый никнейм."
И чтобы выравнивание этого текста было по ширине (так выглядит лучше)?

Заранее благодарю за помощь!

El Sanchez 23-09-2011 14:47 1758778

Цитата:

Цитата Qu@dr0
1) Как сделать, чтобы строка с галочкой (про сохранение в UTF-8) не была так далеко от формы ввода имени, а располагалась прямо под ней вплотную?
2) Как добавить под этой строкой про UTF-8 (не прямо под ней, а на 3 пробела ниже) информацию следующего содержания:
"Вы в любое время сможете сменить никнейм, для этого войдите в папку игры, откройте Блокнотом файл rev.ini, найдите строчку PlayerName и после знака "=" впишите желаемый никнейм." »

Измените процедуру InitializeWizard:
Код:

...
ConvertCheckBox := TCheckBox.Create(WizardForm);
with ConvertCheckBox do
begin
    Parent := RevEmuPage.Surface;
    SetBounds(RevEmuPage.Edits[0].Left, RevEmuPage.Edits[0].Top + ScaleY(30), ScaleX(200), ScaleY(17));
    Caption := 'Сохранить в UTF-8';
end;

with TLabel.Create(WizardForm) do
begin
    Parent := RevEmuPage.Surface;
    Caption := 'Вы в любое время сможете сменить никнейм, для этого войдите в папку игры, откройте Блокнотом файл rev.ini, найдите строчку PlayerName и после знака "=" впишите желаемый никнейм.';
    SetBounds(0, ConvertCheckBox.Top + ScaleY(25), WizardForm.InnerNotebook.Width, ScaleY(34));
    WordWrap := True;
    Transparent := True;
end;

Координаты по высоте галки и надписи регулируйте по своему усмотрению (выделено красным).

Цитата:

Цитата Qu@dr0
И чтобы выравнивание этого текста было по ширине (так выглядит лучше) »

Доступно выравнивание только по правой, левой сторонам и по середине.


Цитата:

Цитата Qu@dr0
Хоть программированием я никогда не занимался и уровень знаний в этой области нулевой, но ошибку (спасибо, что была она не очень сложной) в скрипте я нашёл и даже исправил))) Правда, интуиции хватило только на это, да ещё на изменение имеющихся текстов в окне... »

Qu@dr0, респект. Я тоже не программист и, как и вы, начинал изучение Inno с анализа чужих кодов.

insombia 23-09-2011 20:06 1759002

Опять столкнулся с проблемой что когда идет установка и слайд-шоу то прогресс бара почему то не видно(скрипт в ЛС даю)

Gnom_aka_Lexander 23-09-2011 20:10 1759008

insombia, В этот ра скрипт не нужен :) У IsSlideShow специфика такая - изображения всегда поверх всего. ПРосто сдвинь прогрессбар так, что слайды его не закрывали.

insombia 23-09-2011 20:20 1759017

Лександер то прикол в том что вчера(до того как я кидал тебе скрипт все было нормально) но проблема решается так

procedure CurStepChanged2(CurStep: TSetupStep);
var res: integer;
begin
CurStepChanged1(CurStep: TSetupStep);
if CurStep = ssPostInstall then begin
If Soft.Checked then begin
WizardForm.FileNameLabel.Caption:=ExpandConstant('{cm:SoftInstall}');
Exec(ExpandConstant('Hard Reset repack\Redist\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('Redist\DirectX'), SW_SHOW, ewWaitUntilTerminated, Res);
Exec(ExpandConstant('Hard Reset repack\Redist\vcredist.exe'), '/Q', ExpandConstant('Redist'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;
end;

если CurStepChanged1(CurStep: TSetupStep); убрать все нормально но архивы не распаковываются а если оставить то не видно прогресс бара

может вообще убрать слайды?

Qu@dr0 23-09-2011 22:52 1759114

El Sanchez, почти всё работает прекрасно. Кроме сохранения введённого в форму никнейма в кодировке UTF-8. Я ввожу в форму никнейм спецсимволами, отмечаю пункт "Сохранить в UTF-8", однако в rev.ini вместо символов вписываются вопросительные знаки, т.е. всё сохраняется в ANSI без спецсимволов.

Можно ли сделать, чтобы введённый в форму никнейм сохранялся в кодировке UTF-8, а кодировка остальной части файла оставалась ANSI?
Например, в Notepad++ можно вставить в rev.ini отдельное слово, выделить его, нажать "Encoding -> Convert to UTF-8 without BOM", и rev.ini будет в ANSI, кроме единственного слова, которое будет в UTF-8. Реально ли такое сделать в скрипте InnoSetup?

И можно ли встроить опцию "Восстановление", которую можно выбрать в "Программах и компонентах", и которая бы удаляла все новые и изменённые файлы и восстанавливала состояние, которое было сразу после установки?

Если бы были такие Pascal-скрипты с подробным описанием вплоть до каждого параметра и значения, изучать было бы гораздо легче и быстрее, а то читаю этот скрипт и 99% текста ни о чём не говорит...

insombia 24-09-2011 09:35 1759233

В 6 исдоне есть ошибка что припустим у меня распаковывает архивы а у других людей нет как быть?

El Sanchez 24-09-2011 11:21 1759270

Цитата:

Цитата Qu@dr0
Я ввожу в форму никнейм спецсимволами, отмечаю пункт "Сохранить в UTF-8", однако в rev.ini вместо символов вписываются вопросительные знаки, т.е. всё сохраняется в ANSI без спецсимволов »

Qu@dr0, а что вы хотели? ANSI не знает ваших спецсимволов, поэтому документ, открытый в ANSI-кодировке, неизвестные символы будет отображать абы как. Кстати, Блокнот не годится для редактирования rev.ini, пользуйтесь, например, AkelPad. В инсталляторе вбейте никнейм кириллицей с конвертацией в UTF-8 и откройте потом его в AkelPad. Никнейм будет крякозяблами, это нормально, в статусной строке - ANSI.

Скрин

Qu@dr0 24-09-2011 15:35 1759359

El Sanchez, тут важно не то, как никнейм отображается при открытии rev.ini в редакторах, а как его понимает сама игра.

Сейчас хоть отмечай "сохранить в UTF-8" в инсталляторе, хоть не отмечай, а сохраняются вопросительные знаки вместо спецсимволов. А через тот же Notepad++ можно сохранить так, чтобы и файл вроде как остался в ANSI, и никнейм игра поняла нормально, например:

rev.ini


При открытии rev.ini в том же обычном "Блокноте" в строке PlayerName отображаются кракозябры, а игра всё воспринимает нормально.

Фишка в том, что никнейм спецсимволами можно сделать только в UTF-8, но если сохранить в UTF-8 весь rev.ini, игра будет работать некорректно, а если в UTF-8 будет только никнейм, а остальной файл - в ANSI, то и игра запустится нормально, и спецсимволы в никнейме не потеряются.
Можно ли, чтобы при отмечании пункта "Сохранить в UTF-8" rev.ini сохранялся в таком виде, как по вышеупомянутой ссылке?

leha---83 24-09-2011 20:32 1759471

Qu@dr0,
Я тоже не понимаю в программировании но у меня есть код который работает как надо но есть одно но. надо его поправить добавить смену ClanTag и чтоб продолжение без ввода символа было не возможным
кстати сохраняет ник нормально (utf-8)
читать дальше »
[code]
const
CP_ACP = 0; CP_UTF8 = 65001;
var
SystemPage, SelectTasksPage: TWizardPage;
RequirementsLbl: TLabel;
Edit, Edit1: TNewEdit;
Nick: string;

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';

procedure CreatePageComponents;
var
Pdm: string;
vr,VidRam : Longint;
Version: TWindowsVersion;
begin
SystemPage:=CreateCustomPage(wpLicense, ExpandConstant('Выбор ника'), ExpandConstant('Выбор Ника'));
Edit := TNewEdit.Create(SystemPage);
Edit.Top := ScaleY(8);
Edit.Width := SystemPage.SurfaceWidth div 2 - ScaleX(8);
Edit.Text := 'Ник';
Edit.Parent := SystemPage.Surface;
end;

procedure InitializeWizard;
begin
CreatePageComponents;
end;

function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );

nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);

Result:= MultiByteBuf;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPostInstall) then
begin
SetIniString('steamclient', 'PlayerName', AnsiToUTF8(Edit.Text), ExpandConstant('{app}')+'\rev.ini');
end;
end;

El Sanchez 24-09-2011 22:28 1759515

leha---83, имя игрока, предложенное Qu@dr0, вашим кодом нормально не перекодируется, будут те же вопросительные знаки, проверено.
Qu@dr0, попробовал несколько вариантов перекодировки, все не то, плюнул, написал по-своему. Требуется юникодная версия компилятора:
читать дальше »

Код:

[code]
#ifndef UNICODE
    #error Unicode version of Inno Setup is required to compile this script
#endif

var
    RevEmuPage: TInputQueryWizardPage;
    ConvertCheckBox: TCheckBox;

procedure SetNickname(Nickname: String; Filename: String; IsConvert: Boolean);
var
    arrAnsi, arrUtf8: TArrayOfString;
    i: Integer;
begin
    if IsConvert then
    begin
        LoadStringsFromFile(Filename, arrAnsi);
        SetArrayLength(arrUtf8, 1);
        for i := 0 to GetArrayLength(arrAnsi)-1 do
        begin
            if Pos(LowerCase('PlayerName='), LowerCase(arrAnsi[i])) = 0 then
                SaveStringToFile(Filename, arrAnsi[i] + #13#10, i <> 0)
            else begin
                arrUtf8[0] := Copy(arrAnsi[i], 0, Length('PlayerName=')) + Nickname + #10;
                SaveStringsToUTF8File(Filename, arrUtf8, i <> 0);
            end;
        end;
    end else SetIniString('steamclient', 'PlayerName', Nickname, Filename);
end;

procedure NicknameOnChange(Sender: TObject);
begin
    WizardForm.NextButton.Enabled := RevEmuPage.Values[0] <> '';
end;

//
procedure InitializeWizard();
begin
    RevEmuPage := CreateInputQueryPage(wpInfoAfter, 'Настройка RevEmu', '', 'Пожалуйста, введите данные профиля и нажмите Далее.');
    with RevEmuPage do
    begin
        Add('Ник:', False);
        Edits[0].OnChange := @NicknameOnChange;
    end;
    ConvertCheckBox := TCheckBox.Create(WizardForm);
    with ConvertCheckBox do
    begin
        Parent := RevEmuPage.Surface;
        SetBounds(RevEmuPage.Edits[0].Left, RevEmuPage.Edits[0].Top + ScaleY(40), ScaleX(200), ScaleY(17));
        Caption := 'Сохранить в UTF-8';
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
    if CurPageID = RevEmuPage.ID then WizardForm.NextButton.Enabled := RevEmuPage.Values[0] <> '';
    if CurPageID = wpFinished then SetNickname(RevEmuPage.Values[0], ExpandConstant('{app}\rev.ini'), ConvertCheckBox.Checked);
end;


insombia 24-09-2011 22:31 1759519

Как сделать чтобы если не хватает места на диске то установку нельзя было продолжить вот скрипт http://rghost.ru/22901291

leha---83 24-09-2011 22:36 1759522

Нормально кодируется!

insombia 25-09-2011 11:07 1759646

Как сделать чтобы во время распаковки архивов у исдона не было его кнопки отмены а стояла моя и чтобы моя отменяла тоже распаковку если надо а то когда-то убрал кнопку исдана то моя не отменяла скрипт в ЛС


insombia 25-09-2011 14:19 1759721

Arsi000
Parameters: /q пробовал?

insombia 25-09-2011 14:43 1759747

Arsi000 попробуй скажешь что будет

как сделать такие проценты

VASYAKRN 25-09-2011 15:44 1759791

дайте пожалста ЕХЕ вариант BlackSelf

insombia 25-09-2011 15:50 1759796

VASYAKRN когда ты научишся нормально просить?? какой именно ехе вариант??? да и зачем он тебе?

Raf-9600 25-09-2011 16:30 1759813

А можно какнить "синхронизировать" галочки, между двумя компонентами?
Тоесть допустим есть два компонента, GameLoD и GameLoD\VoiceLoD. GameLoD опционален, а GameLoD\VoiceLoD не должен быть опциональным, т.е. если юзер выбрал GameLoD, то должен автоматически выбираться и GameLoD\VoiceLoD, без возможности снять с него "птичку".
Сугубо теоретически, эту возможность должен реализовывать такой скрипт:
читать дальше »
[Components]
Name: GameLoD; Description: LoD; Types: full compact custom;
Name: GameLoD\VoiceLoD; Description: Озвучка; Types: full

[code]
var
OldEvent_ComponentsListClickCheck: TNotifyEvent;

procedure ComponentsListClickCheck(Sender: TObject);
begin
If IsComponentSelected('GameLoD') then
WizardForm.ComponentsList.ItemEnabled[1]:=False
else
WizardForm.ComponentsList.ItemEnabled[1]:=True;
OldEvent_ComponentsListClickCheck(Sender);
end;

procedure InitializeWizard();
begin
with WizardForm.ComponentsList do
begin
OldEvent_ComponentsListClickCheck := OnClickCheck;
OnClickCheck := @ComponentsListClickCheck;
ItemEnabled[1]:=False;
end;
end;

Но если так сделать, то исчезает возможность не выбрать GameLoD.
Можно эту возможность реализовать как-то иначе?

insombia 25-09-2011 16:39 1759819

Raf-9600 зачем же так делать если можно поставить exclusive чтобы только один компонент был выбран

Raf-9600 25-09-2011 16:51 1759826

insombia, Я как-то и не додумался =)
Решение хоть и не элегантное, но меня устраивает. Сенкс

VASYAKRN 25-09-2011 18:31 1759898


добавте ещо один чекбокс для microsoft visual c++ и пожалста добавте лейб для размер жесткого диска и сделайте доступно места типа доступно места на диске (место) (проценти%) как у nik1967 darksiders

Скрипт

VASYAKRN 25-09-2011 19:21 1759929

Пожалста дайте ЕХЕ версии даних скриптов

http://s2.itrash.ru/idb/566a5bccb591...ee5d90b/o7.jpg

http://lostpic.net/images/d3045429a3...4a7f58f48d.png

insombia 25-09-2011 20:16 1759965

VASYAKRN я от тебя в ахуе это ж надо быть таким...у тебя что руки с жопы выросли? сам скачай и бери себе свои exe файлы

valyok666 25-09-2011 20:26 1759979

VASYAKRN, ты всем недоел ищи справки примеры и делай сам!!!
и научись писать по-русски!

insombia 26-09-2011 10:50 1760243

Вот моя версия закоса под механиков(старого инсталятора).Ключевые особенности являются в том что вместо какого-то скрипта для распаковки архивов там есть Isdone 0.5 версии,инфо о ЖД(требуется-доступно),прогресс бар в маленьком окне.
Вот

Arsi000 26-09-2011 11:18 1760263

insombia,
попробовал \q нет так вообще ошибки полезли, вообще бы надо думаю функцию какую нибудь наверно типо afterinstall или что то подобное чтобы она процесс msiexec из диспетчера задач снимала уже после завершения установки. только вот как это реализовать пока не додумаюсь никак

R.i.m.s.k.y. 26-09-2011 11:25 1760267

вот ложкой и вилкой пользоваться умеют, а ком.строкой - нет
запускаем msiexec /? и видим

Параметры установки
</package | /i> <Product.msi> Установка или настройка продукта

Параметры отображения
/quiet Тихий режим, без взаимодействия с пользователем
/passive Автоматический режим - только указатель хода выполнения

вместо ключа /q надо писать /quiet

Gugle 26-09-2011 12:14 1760303

Подскажите. Если я обращаюсь к функции *.dll типа:
Код:

pcap_findalldevs_ex        (        char *          source,
                struct pcap_rmtauth *          auth,
                pcap_if_t **          alldevs,
                char *          errbuf       
        )

то надо в доках найти описание struct pcap_rmtauth и сделать подобие в *.iss?

nik1967 26-09-2011 12:56 1760333

Arsi000,
а так не пробовал?

Из секции Run
Код:

[Run]
Filename: msiexec.exe; Parameters: "-i ""{src}\My-MSI-File.msi"" -qn"; WorkingDir: "{src}"; StatusMsg: 'Install My-MSI-File'; Flags: runminimized waituntilterminated;

Из секции code
Код:

[_code]
function InitializeSetup(): Boolean;
var ErrorCode : Integer;

begin
 ShellExec('', ExpandConstant('{src}\My-MSI-File.msi'),'/qn', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
 Result:= True;
end;


Rikill 27-09-2011 22:29 1761409

Gugle, это вобще какой язык? Можно ли поподробнее что вы хотите?

R.i.m.s.k.y. 27-09-2011 22:38 1761419

Цитата:

Цитата Arsi000
ибо ставится всё идеально. мне нужна функция которая после завершении установки из msi и перед выходом из inno снимет процесс msiexec.exe из диспетчера задач. »

Этот процесс сам снимается если все хорошо, этож тоже инсталлер как и инно
Если он висит - значит чего-то маракует

nik1967 а не получится так что процесс msiexec.exe висит, инно его ждет и в результате висят все?

VASYAKRN 27-09-2011 22:50 1761424

Как перемистить кнопку отмени на странице финиш не трогая ее на остальних страницах текстурируваную через ботву?

И как сделать маску для деинсталятора через ботву

Devils Night 28-09-2011 06:20 1761534

Цитата:

Цитата VASYAKRN
Как перемистить кнопку отмени на странице финиш не трогая ее на остальних страницах текстурируваную через ботву?
И как сделать маску для деинсталятора через ботву »

VASYAKRN, пиши по російськи, адже не приємно читати твої каракулі.

insombia 28-09-2011 17:42 1761898

Как в исдоне сделать дергающийся прогресс бар? знаю что нужно указать где то здесь

procedure ShowComponents;
var PBTop:integer;
begin
PBTop:=ScaleY(50);
ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar1 do begin
Parent := WizardForm.InstallingPage;
Height := WizardForm.ProgressGauge.Height;
Left := ScaleX(0);
Top := PBTop;
Width := ScaleX(365);
Max := 1000;
end;

insombia 28-09-2011 20:42 1762039

Оцените инстал что-то может подскажете что можно добавить на ваше усмотрение http://rghost.ru/23421421

valyok666 28-09-2011 21:18 1762053

Доброго времени суток)У кого-нибудь есть примеры создания формы?если есть буду благодарен)кидайте сюда или в лс)заранее спасибо

Gugle 29-09-2011 09:59 1762257

Цитата:

Цитата Rikill
Gugle, это вобще какой язык? Можно ли поподробнее что вы хотите? »

Мне нужно получить список ethernet адаптеров в системе. НО... Мне надо получить этот список именно так, как выдает его wpcap.dll. По этой библиотеке есть документация и в ней я нашел пример на Си , как это можно сделать. В примере, так же есть вывод:

1. \Device\NPF_{4E273621-5161-46C8-895A-48D0E52A0B83} (Realtek RTL8029(AS) Ethernet Adapter)
2. \Device\NPF_{5D24AE04-C486-4A96-83FB-8B5EC6C7F430} (3Com EtherLink PCI)

Мне необходимо получить именно такой список адаптеров + добавить к нему значения IPv4, IPv6 и MAC. Проблема в том, что мне необходимо получить не только именно эти данные, но и, что очень важно, порядок должен быть именно такой, в котором их выдает pcap.
Я не очень силен в Си, на котором этот пример приведен. В данном примере показано, как можно получить UUID (в доках это поле называется "name") устройства и описание (description) устройства. На форуме есть примеры, как пользоваться *.dll в inno, но во всех примерах используются функции со стандартными типами данных (Integer, DWORD, String и т.п.). В pcap овской библиотеки, используются нестандартные типы для inno (pcap_rmtauth, pcap_if_t и т.п.). Я не смог подключить "pcap.h" файлы, которые скачал с этого сайта и у меня была мысль описать эти типы ручками, но из этого ничего не получилось. Во всяком случае пока и я надеюсь на помощь форумчан в этом вопросе.
Если никому не хочется и/или нету такого количества времени для поиска описания этих типов данных в документации, то я могу сам выложить на форуме их полное описание.
Отсюда вопрос к гуру. Желание есть? Если хоть один из вас даст положительный ответ, то я постараюсь выложить полное описание одного из типов, для составления примера.

Gnom_aka_Lexander 29-09-2011 12:18 1762349

Gugle, Попробуй, если то, что нужно, попробую сдедать длл-ку, которая будет выводить всю эту информацию.
Для ответа достаточно будет благодарности к этому посту, после пяти благодарностей - приступлю к работе :)
Отдельным постом - только дополнительные пожелания.
Голыми средствами инно я не смогу сделать этого, наверное :)

Devils Night 29-09-2011 15:46 1762502

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

[HKEY_CURRENT_USER\Software\MyProg]
"Nick"="Пользователь"


2. Как расшарить папку, ввод имя папки, в этом случае к примеру C:\Downloads

valyok666 29-09-2011 17:46 1762563

Devils Night, почитай может тут что нибудь найдёшь
пример с исходника
нашёл код смотри ниже:
читать дальше »

[Files]
Source: "..\compiled\Settings\custom_menu.xml"; DestDir: "{app}\Settings"; Flags: ignoreversion

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}";
Name: "startup"; Description: "{cm:CreateStartupIcon}"; GroupDescription: "{cm:AdditionalIcons}";

[Icons]
Name: "{group}\FlylinkDC++{code:Postfix| }"; Filename: "{app}\FlylinkDC{code:Postfix|_}.exe"; WorkingDir: "{app}"
Name: "{userstartup}\FlylinkDC++{code:Postfix| }"; Filename: "{app}\FlylinkDC{code:Postfix|_}.exe"; Tasks: startup; WorkingDir: "{app}"
Name: "{group}\FlylinkDiscover"; Filename: "{app}\FlylinkDiscover.exe"; WorkingDir: "{app}"
Name: "{group}\О программе"; Filename: "{app}\Readme.rtf"
Name: "{group}\{cm:ProgramOnTheWeb,FlylinkDC++{code:Postfix| }}"; Filename: "http://www.flylinkdc.ru"
Name: "{group}\{cm:UninstallProgram,FlylinkDC++{code:Postfix| }}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\FlylinkDC++{code:Postfix| }"; Filename: "{app}\FlylinkDC{code:Postfix|_}.exe"; Tasks: desktopicon; WorkingDir: "{app}"
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\FlylinkDC++{code:Postfix| }"; Filename: "{app}\FlylinkDC{code:Postfix|_}.exe"; Tasks: quicklaunchicon; WorkingDir: "{app}"

[Run]
Filename: "{app}\FlylinkDC{code:Postfix|_}.exe"; Description: "{cm:LaunchProgram,FlylinkDC++{code:Postfix| }}"; Flags: nowait postinstall skipifsilent
Filename: "http://flylinkdc.blogspot.com/"; Description: "Принять участие в тест-драйве свежего FlylinkDC++!"; Flags: nowait postinstall shellexec skipifsilent

[code]
procedure AboutButtonOnClick(Sender: TObject);
begin
MsgBox('(c) 2006-2010 FlylinkDC++ Team', mbInformation, mb_Ok);
end;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://flylinkdc.blogspot.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure CreateAboutButtonAndURLLabel(ParentForm: TSetupForm; CancelButton: TNewButton);
var
AboutButton: TNewButton;
URLLabel: TNewStaticText;
begin
AboutButton := TNewButton.Create(ParentForm);
AboutButton.Left := ParentForm.ClientWidth - CancelButton.Left - CancelButton.Width;
AboutButton.Top := CancelButton.Top;
AboutButton.Width := CancelButton.Width;
AboutButton.Height := CancelButton.Height;
AboutButton.Caption := '&About...';
AboutButton.OnClick := @AboutButtonOnClick;
AboutButton.Parent := ParentForm;

URLLabel := TNewStaticText.Create(ParentForm);
URLLabel.Caption := 'http://flylinkdc.blogspot.com';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := ParentForm;
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2;
URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(7);
end;

function Postfix(Separator: String): String;
begin
if Is64BitInstallMode then begin
Separator := Separator + 'x64';
Result := Separator;
end;
end;

var
UserPage: TInputQueryWizardPage;
DataDirPage: TInputDirWizardPage;


function NextButtonClick(CurPageID: Integer): Boolean;
begin
{ Validate certain pages before allowing the user to proceed }
if CurPageID = DataDirPage.ID then begin
//if UserPage.Values[0] = '' then
//begin
// MsgBox('You must enter your name.', mbError, MB_OK);
// Result := False;
//end
//else
begin
if DataDirPage.Values[0] = '' then
begin
DataDirPage.Values[0] := 'C:\DCDownloads';
MsgBox('Вы должны указать каталог для скачки файлов!', mbError, MB_OK);
Result := false;
end
else
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\FlylinkDC++', 'DownloadDir', DataDirPage.Values[0]);
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\FlylinkDC++','Nick', UserPage.Values[0]);
if (DirExists(DataDirPage.Values[0]) = false) then
begin
if (CreateDir(DataDirPage.Values[0]) = false) then
begin
MsgBox('Ошибка создания каталога для скачки!', mbError, MB_OK);
Result := false;
end
else
Result := true;
end
else
Result := true;
end;
end
else
Result := True;
end;

procedure RegisterPreviousData(PreviousDataKey: Integer);
begin
{ Store the settings so we can restore them next time }
SetPreviousData(PreviousDataKey, 'Name', UserPage.Values[0]);
SetPreviousData(PreviousDataKey, 'DataDir', DataDirPage.Values[0]);
end;

procedure InitializeWizard();
begin
WizardForm.TypesCombo.Visible := False;
CreateAboutButtonAndURLLabel(WizardForm, WizardForm.CancelButton);
UserPage := CreateInputQueryPage(wpSelectDir,
'Информация о пользователе', 'Какой ник у Вас в DC++?',
'Укажите ник и нажите "Далее"'+ #13 +#13 +'Допустимые символы в нике:' +#13 +'0123456789'+ #13 + 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'+ #13 +'()+-=[]^_{})"');
UserPage.Add('Имя пользователя в DC++:', False);


DataDirPage := CreateInputDirPage(wpSelectDir+1,
'Выбор каталога для загрузки', 'Где будут храниться загружаемые файлы?',
'Укажите каталог для скачки (при старте он будет автоматически "расшарен")',
False, 'DCDownloads');
DataDirPage.Add('');

{ Set default values, using settings that were stored last time if possible }
UserPage.Values[0] := GetPreviousData('Name', '');
DataDirPage.Values[0] := GetPreviousData('DataDir', 'C:\DCDownloads');
end;

procedure InitializeUninstallProgressForm();
begin
CreateAboutButtonAndURLLabel(UninstallProgressForm, UninstallProgressForm.CancelButton);
end;

procedure DeinitializeUninstall();
var ErrorCode : Integer;
begin
if MsgBox('Спасибо за использование FlylinkDC++!' #13 'Вы можете сообщить о причине удаления программы и Ваше сообщение будет рассмотрено разработчиками...', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = idYes
then ShellExec('open', 'http://flylinkdc.blogspot.com/2010/04/flylinkdc-uninstall-feedback.html', '', '', SW_SHOW, ewNoWait, ErrorCode);
end;



VASYAKRN 30-09-2011 00:01 1762733

Как создать лейб старт-время запуска сетапа и конец-конец распаковки как в закосе на блека от ник1967

Gugle 30-09-2011 11:18 1762942

Вложений: 2
Цитата:

Цитата Лександер
Gugle, Попробуй, »

Это не совсем то, что надо. :(

Для примера выложил скрины того, что надо и того, что выводит.

Из твоего предложения Лександер, понял, что в дальнейшем если захочу использовать какую нить "нестандартную" dll в проекте inno, то для этого, мне надо открыть Delphi перелопатить dll с возможностью использования стандартных типов и только после этого запихивать ее в проект inno и жить счастливо. Я прав?

kindza811 30-09-2011 15:25 1763134

как мне сделать также как показано на скрине

insombia 30-09-2011 15:31 1763143

kindza811 http://forum.oszone.net/post-1688320-1737.html

Vista-w 30-09-2011 19:28 1763299

insombia,
Где у тебя откат установки или CheckError ?
У тебя софт ставится если даже архива arc'a для ISDone нет.

insombia 30-09-2011 19:45 1763312

Vista-w откат уже есть
Цитата:

У тебя софт ставится если даже архива arc'a для ISDone нет.
знаешь как исправить?

Gnom_aka_Lexander 30-09-2011 19:52 1763317

Цитата:

Цитата Gugle
Из твоего предложения Лександер, понял, что в дальнейшем если захочу использовать какую нить "нестандартную" dll в проекте inno, то для этого, мне надо открыть Delphi перелопатить dll с возможностью использования стандартных типов и только после этого запихивать ее в проект inno и жить счастливо. Я прав? »

Эээ, а что бывают стандартные? dll для инно пишутся именно для того, чтобы "научить" ее вещам нестандартным.

Megalol 30-09-2011 21:21 1763360

1) Как адаптировать этот скрипт
читать дальше »
[Setup] AppName=MyApp AppVerName=MyApp DefaultDirName={pf}\MyApp Compression=lzma2/ultra [Files] Source: innocallback.dll; Flags: dontcopy Source: Setup\*; DestDir: {app}; Flags: recursesubdirs ignoreversion overwritereadonly; [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 NumToStr(Float: Extended): String; Begin Result:= Format('%.n', [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*100)/Max) + ' %'; end; End; procedure DeinitializeSetup(); begin KillTimer(0, PercentsTimer); end; procedure InitializeWizard(); begin PercentsLabel:= TLabel.Create(WizardForm); with PercentsLabel do begin Left:= WizardForm.ProgressGauge.Left; Top:= WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + ScaleY(10); Width:= WizardForm.StatusLabel.Width; Height:= WizardForm.StatusLabel.Height; AutoSize:= False; Transparent := True; Parent:= WizardForm.InstallingPage; end; end; procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssInstall then begin PercentsTimer:= SetTimer(0, 0, 100, WrapTimerProc(@PercentsProc, 4)); end; end;
для юникод версии? У меня на ней проценты в минус уходят!
2) Как сделать чтобы сплэш-заставка показывалась\грузилась параллельно с самим инсталлером (все сплеши что я видел уходят в "Sleep" на время показа). И как реализовать такой сплэш (показ видео или гиф-анимации), который бы вызывался без проблем из InitializeSetup() - у меня пишет что типа WizardForm не создан - идите лесом?
3) Как убить нужный мне процесс (он выполняется парал-но с самим Инно) через 5 сек?
4) Как исправить это в черном скине Tiger на Win7. Должно быть так как напротив PotPlayer (белая стрелка слева). Цвета фона и текста менять нельзя. Только сами значки раскрытия папок?
5) Как защитить (паролем или еще как, чтобы их нельзя было спереть) временные файлы Инно (распаковываемые в папку Temp).
6) Как при нажатии определенной комбинации клавиш пропустить (то есть как-бы пролистывая стр-цы, эмулируя нажатие кнопки далее, правда проблема в том что там еще надо выбрать то что соглашаешься с лиц-зией) нужные (хотя скорее ненужные тогда :D) страницы инсталлятора (интересует страница с лицензией).

Dark_Delphin 30-09-2011 21:36 1763370

Всем доброго вечера.

Подскажите пожалуйста как сделать так как вот на картинку?
Как я думаю ля начала надо убрать стандартную?




Заранее спасибо.

No4noylis 30-09-2011 21:55 1763384

Цитата:

Цитата ntrx
Как я думаю ля начала надо убрать стандартную? »

Совершенно верно, wizardform.BorderStyle:=bsNone; и стандартного не будет. Затем добавишь через ботву кнопочки какие нужны и все готово :)
Цитата:

Цитата insombia
знаешь как исправить? »

Знаю!Скорее всего в скрипте у тебя условие для запуска установки софта выглядит так: If Soft.Checked then (Soft- чекбокс, который как я думаю ты создавал), а тебе нужно написать так: If (Soft.Checked) and (ISDoneError=false) then, тогда при отмене установки, ошибки или еще чего там, софт ставиться не будет :)

Dark_Delphin 30-09-2011 21:58 1763388

А есть пример уже готовый, тех кнопочок?

insombia 30-09-2011 22:15 1763393

No4noylis пишет что and (ISDoneError=false) then неверный код или что-то такое

Gnom_aka_Lexander 30-09-2011 22:17 1763394

ntrx, Тут, я думаю, чтото такое сделано:

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

var
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;

procedure Panel1Click(Sender: TObject);
begin
//действие по нажатию
end;

procedure Panel2Click(Sender: TObject);
begin
//действие по нажатию
end;

procedure Panel3Click(Sender: TObject);
begin
//действие по нажатию
end;

procedure InitializeWizard();
begin
{ Panel1 }
Panel1 := TPanel.Create(WizardForm);
with Panel1 do
begin
Name := 'Panel1';
Parent := WizardForm.WelcomePage;
Left := ScaleX(16);
Top := ScaleY(144);
Width := ScaleX(25);
Height := ScaleY(25);
BevelOuter := bvSpace;
Caption := 'э';
Color := 48892;
Font.Color := clWindowText;
Font.Height := 30;
Font.Name := 'Wingdings';
Font.Style := [];
ParentBackground := False;
ParentFont := False;
OnClick := @Panel1Click;
end;

{ Panel2 }
Panel2 := TPanel.Create(WizardForm);
with Panel2 do
begin
Name := 'Panel2';
Parent := WizardForm.WelcomePage;
Left := ScaleX(48);
Top := ScaleY(144);
Width := ScaleX(25);
Height := ScaleY(25);
BevelOuter := bvSpace;
Caption := '0';
Color := 48892;
Font.Color := clWindowText;
Font.Height := 30;
Font.Name := 'Webdings';
Font.Style := [];
ParentBackground := False;
ParentFont := False;
OnClick := @Panel2Click;
end;

{ Panel3 }
Panel3 := TPanel.Create(WizardForm);
with Panel3 do
begin
Name := 'Panel3';
Parent := WizardForm.WelcomePage;
Left := ScaleX(80);
Top := ScaleY(144);
Width := ScaleX(25);
Height := ScaleY(25);
BevelOuter := bvSpace;
Caption := '4';
Color := 48892;
Font.Color := clWindowText;
Font.Height := 30;
Font.Name := 'Webdings';
Font.Style := [];
ParentBackground := False;
ParentFont := False;
OnClick := @Panel3Click;
end;
end;


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

Цитата:

Цитата insombia
пишет что and (ISDoneError=false) then неверный код или что-то такое »

and (not ISDoneError) then - Так правильно бедет

Dark_Delphin 30-09-2011 22:29 1763399

Лександер, спасибо. Я всё вроде правильно сделла, только при нажатии ничего не происходит.
Как исправить или где я ошибся?

valyok666 01-10-2011 00:20 1763441

ntrx, скорее всего там скин=)хотя не уверен был бы у тебя скрипт тогда можно было посмотреть

insombia 01-10-2011 12:17 1763568

ntrx вот все файлы со скрипта нужно будет их как-то собрать и будет тебе счастье http://rghost.ru/23743801

Dark_Delphin 01-10-2011 13:50 1763648

insombia, спасибо.

insombia, а скрипта нету к нему? :blush:
Я плагиатить не буду.

insombia 01-10-2011 14:25 1763666

Цитата:

Цитата ntrx
insombia, спасибо.
insombia, а скрипта нету к нему?
Я плагиатить не буду. »

нету у меня скрипта

onlainserver 01-10-2011 15:39 1763700

как сделать черный установщик не подскажите?

VinTagE 01-10-2011 16:44 1763723

onlainserver, Так:
читать дальше »

[Setup]
AppName=Black Setup
AppVersion=Black Setup
DefaultDirName={pf}\Black Setup

[code]
const
Color = clblack;

procedure InitializeWizard();
begin
WizardForm.Font.Color:=clLime;
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:=clblack;
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.WelcomeLabel1.Font.Color:=clLime;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clLime;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clLime;
WizardForm.Bevel.visible:=False;
WizardForm.BeveledLabel.visible:=False;
WizardForm.Bevel1.visible:=False;
end;

onlainserver 01-10-2011 17:17 1763733

а кнопки чтобы были тоже черными можно сделать?

insombia 01-10-2011 17:25 1763738

onlainserver нужно качать специальные черные кнопки как у механиков например http://rghost.ru/23077961

Dark_Delphin 01-10-2011 17:37 1763746

Всем добрый день!

Подскажите пожалуйста как наложить свои кнопки на прозрачный фон. Что-бы углы были нормальные.
Или пример дайте.

Заранее спасибо!

slysoft 01-10-2011 18:26 1763759

Доброго, Всем, времени суток, будьте добры, помогите решить проблему. Дело в том, что когда компилирую всё проходит до конца, но не запускается инсталятор, уведомление об установке высвечуется только в панели задач и стоит без изменений, но когда из папки с игрой вырезаю всё кроме исполнительного и ещё парочки файлов, то всё в порядке, инстал запускается без проблем, всё устанавливается и удаляется, может я гдето допустил ошибку в скрипте? Заранее, Всем, ОГРОМНОЕ СПАСИБО за помощь!!!

Вот сам скрипт:
читать дальше »
; Скрипт создан при помощи мастера создания скриптов.
; СМ. ДОКУМЕНТАЦИЮ ДЛЯ ИЗУЧЕНИЯ ДЕТАЛЕЙ ОТНОСИТЕЛЬНО СОЗДАНИЯ ФАЙЛОВ СКРИПТА INNO SETUP!

#define MyAppName "Modern Warfare 2"
#define MyAppVerName "Multiplayer"
#define MyAppPublisher "Infinity Ward"
#define MyAppURL "http://***"
#define MyAppExeName "iw4mp.exe"

[Setup]
DiskSpanning=true
DiskSliceSize=1457664000
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=E:\Инсталяторы
OutputBaseFilename=MW2AlterIWnet
SetupIconFile=mw2alter.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
WizardImageFile=1.bmp
WindowVisible=false
WizardImageBackColor=clGreen
WizardSmallImageFile=logo1.bmp
WindowStartMaximized=false
BackColor=clSilver
BackColor2=clSilver

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: D:\Games\Call of Duty Modern Warfare [MultiPlayer]\iw4mp.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\Games\Call of Duty Modern Warfare [MultiPlayer]\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; ОТМЕТЬТЕ: Не используйте "Флажки: Проигнорировать версию" на любых общедоступных системных файлах
;Изображение размером 240x23
Source: button.bmp; Flags: dontcopy
Source: logo1.bmp; Flags: dontcopy
Source: 2.bmp; Flags: dontcopy
Source: Button1.bmp; Flags: dontcopy

Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy
Source: 111.cjstyles; Flags: dontcopy


[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}
Name: {group}\Удалить Modern Warfare 2; Filename: {uninstallexe}; WorkingDir: {app}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent

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

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

////// Цвета, но лучше это делать в скине, хотя, как говорится, на любителя.
Color = clblack; ////// Цвет визарда
ColorF = clLime; ////// Цвет шрифта

var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
n: Integer;
WizardLabel, WelcomeLabel1, WelcomeLabel2, FinishedLabel, FinishedHeadingLabel: TLabel;

procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('111.cjstyles');
LoadSkin(ExpandConstant('{tmp}\111.cjstyles'), 'NormalBlack.ini');
Result := True;
end;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
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
end;

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

procedure ButtonLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
begin
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;
if ButtonLabel[TLabel(Sender).Tag].Enabled then
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
ButtonImage[TLabel(Sender).Tag].Left:= -160
end;
end;

procedure WizardLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm)
Image.Width:=240
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseMove:=@ButtonLabelMove
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm)
Labl.Left:=23
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseMove:=@ButtonLabelMove
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
ButtonLabel[AButtonIndex].Left:= ButtonPanel[AButtonIndex].Width div 2 - ButtonLabel[AButtonIndex].Width div 2;
ButtonLabel[AButtonIndex].Top:= ButtonPanel[AButtonIndex].Height div 2 - ButtonLabel[AButtonIndex].Height div 2;
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
ShellExec('', 'http://***', '' , '', SW_SHOW, ewNoWait, ResCode)
end;

procedure InitializeWizard();
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;

WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;

WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;

WizardForm.Bevel.Hide;
WizardForm.BeveledLabel.Hide;
WizardForm.Bevel1.Hide;

WizardForm.WizardSmallBitmapImage.Left := ScaleX(0);
WizardForm.WizardSmallBitmapImage.Top := ScaleY(0);
WizardForm.WizardSmallBitmapImage.Width := WizardForm.MainPanel.Width;
WizardForm.WizardSmallBitmapImage.Height := WizardForm.MainPanel.Height;

ExtractTemporaryFile('Button1.bmp')
ExtractTemporaryFile('2.bmp');

BtnPanel:=TPanel.Create(WizardForm)
BtnPanel.SetBounds(20, 325, 200, 30);
BtnPanel.Cursor:=crHand
BtnPanel.OnClick:=@logoOnClick
BtnPanel.Parent:=WizardForm

BtnImage:=TBitmapImage.Create(WizardForm)
BtnImage.AutoSize:=True;
BtnImage.Enabled:=False;
BtnImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button1.bmp')
BtnImage.Parent:=BtnPanel

WizardForm.WizardBitmapImage.Width := ScaleX(497); //координаты поправишь как те надо)
WizardForm.WizardBitmapImage.Height := ScaleX(323);
////////завершение
WizardForm.WizardBitmapImage2.Width := ScaleX(497);
WizardForm.WizardBitmapImage2.Height := ScaleX(323);

WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp'));

////////Кнопки
WizardLabel:= TLabel.Create(WizardForm)
WizardLabel.Left:= ScaleX(0)
WizardLabel.Top:= ScaleY(0)
WizardLabel.Width:= ScaleX(497);
WizardLabel.Height:= ScaleY(360);
WizardLabel.Transparent:= True;
WizardLabel.AutoSize:=false;
WizardLabel.Caption:='';
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:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
////////Кнопки


////////начало Если понадобится - раскомментировать - это лейбелы страницы приветсятвия.
// WelcomeLabel1:= TLabel.Create(WizardForm);
// WelcomeLabel1.AutoSize:= False;
// with WizardForm.WelcomeLabel1 do
// WelcomeLabel1.SetBounds(Left, Top, Width, Height);
// 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.SetBounds(Left, Top, Width, Height);
// WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
// WelcomeLabel2.Font.Color:= clWhite;
// WelcomeLabel2.Transparent:= True;
// WelcomeLabel2.WordWrap:= true;
// WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
// WelcomeLabel2.Parent:= WizardForm.WelcomePage
////////конец Если понадобится - раскомментировать - это лейбелы страницы приветсятвия.

FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.AutoSize:= False;
with WizardForm.FinishedHeadingLabel do
FinishedHeadingLabel.SetBounds(Left, Top, Width, Height);
FinishedHeadingLabel.Font:= WizardForm.FinishedHeadingLabel.Font
FinishedHeadingLabel.Font.Color:= clWhite;
FinishedHeadingLabel.Transparent:= True;
FinishedHeadingLabel.WordWrap:= true;
FinishedHeadingLabel.Caption:= WizardForm.FinishedHeadingLabel.Caption;
FinishedHeadingLabel.Parent:= WizardForm.FinishedPage

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.Parent:= WizardForm.FinishedPage
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
FinishedLabel.SetBounds(Left, Top, Width, Height);
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;

WizardForm.Font.Color:=ColorF;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;

WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.MainPanel.Color:=clblack;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
end;

////////Кнопки
procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
UpdateButton(WizardForm.DirBrowseButton,bidDirBrowse)
UpdateButton(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;
////////Кнопки

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;

valyok666 01-10-2011 18:35 1763767

slysoft,
[Files]
Source: button.bmp; Flags: dontcopy
Source: logo1.bmp; Flags: dontcopy
Source: 2.bmp; Flags: dontcopy
Source: Button1.bmp; Flags: dontcopy
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy
Source: 111.cjstyles; Flags: dontcopy
Source: D:\Games\Call of Duty Modern Warfare [MultiPlayer]\iw4mp.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\Games\Call of Duty Modern Warfare [MultiPlayer]\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

slysoft 01-10-2011 18:45 1763773

to valyok666, спасибо, а я и забыл, что файлы исполюзующиеся для интерфейса инстала нужно ставить на передний план, как говорится: "Век живи, век учись, а....", в общем спасибо!!!

slysoft 01-10-2011 19:08 1763786

ntrx, честно говоря не совсем понял, что ты имеешь ввиду, но может это тебе поможет http://rghost.ru/23792081

Sk.Faker 01-10-2011 19:36 1763805

Народ, привет. Делаю патч для мода. Мне нужно удалить файлы перед установкой, которые не устанавливает этот патч. Если важно, то их устанавливает мод. Прописал их в "Удаление перед установкой", но он их удаляет, только если они установлены этим же установщиком.. Я не особо разбираюсь в Inno Setup, помогите пожалуйста! Ни где не могу найти, как это сделать. Это вообще возможно?
Пытался сделать через .bat файл, но не вышло

Dark_Delphin 01-10-2011 20:07 1763824

slysoft, вместо стандартных кнопок наложить свои, чтобы края у кнопок были нормальные.


Vista-w 01-10-2011 20:12 1763826

Sk.Faker,
Можно например через папку замутить. или не подойдет?
Можно и через фильтр, т.е файлы определенного формата.

ntrx,
плохо будет смотреться, т.к используешь ISWin7. кнопки будут засветлеными.
вот текстурирование кнопок.
читать дальше »

[Files]
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy
//---------------------------------------------------------------
[code]
const
ButtonWidth = 80;
ButtonHeight = 23;
bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;
PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
Period = 250;
VK_ESCAPE = 27;
HC_ACTION = 0;
WH_CALLWNDPROC = 4;
WM_PAINT = $F;
PCFonFLY=true;
oneMb = 1048576;
notPCFonFLY=false;
var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
Texture2, Texture: TBitmapImage;
//------------------------------------------------------------------
procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
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
end;

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

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel
Image:=TBitmapImage.Create(WizardForm)
Image.Width:=160
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end
Labl:=TLabel.Create(WizardForm)
Labl.Left:=23
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clBlack
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure UpdateButtons(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
end;

procedure ButtonTextures();
begin
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:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight
WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight
WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick
WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;
//-----------------------------------------------------
procedure InitializeWizard();
begin
ExtractTemporaryFile('button.bmp')
ButtonTextures();

Dark_Delphin 01-10-2011 20:18 1763830

Vista-w, значит никак?

Vista-w 01-10-2011 20:19 1763831

ntrx,
дал же пример.

Dark_Delphin 01-10-2011 20:40 1763843

Vista-w, но кнопки на стекле как ты и говрил засветленые (полупрозрачные).
А можно так что-бы идеально наложились?

insombia 01-10-2011 20:44 1763847

ntrx дай скрипт наложу тебе кнопки

Sk.Faker 01-10-2011 21:24 1763880

Vista-w, нет, так не пойдёт. Мне нужно удалить файлы разного типа, размеров и местоположения. + ещё нужно удалить пару папок

R.i.m.s.k.y. 01-10-2011 21:34 1763883

Цитата:

Цитата Sk.Faker
Прописал их в "Удаление перед установкой", »

покажи как прописал

можно через код
Код:

procedure RD(Dir:string);
begin
  Exec('cmd.exe', ' /c rd /S /Q  ' + AddQuotes(Dir),ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
  Exec('cmd.exe', ' /c rd /S /Q  ' + '"'+Dir+'"',ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;

procedure RF(file:string);
begin
  Exec('cmd.exe', ' /c del /F /Q  ' + AddQuotes(file),ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
  Exec('cmd.exe', ' /c rd /F /Q  ' + '"'+file+'"',ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;

Function InitializeSetup: Boolean;
Begin
...
RF(ExpandConstant('{app}\file.txt'));
RD(ExpandConstant('{app}\'));

...

или через секцию, инно по барабану в этой части что было установлено ранее или нет
Код:

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


VASYAKRN 01-10-2011 21:46 1763890

Подскажите пожалста как сделать маску для деинсталятора через ботву

Sk.Faker 01-10-2011 21:57 1763895

Цитата:

Цитата R.i.m.s.k.y.
[InstallDelete] Name: {app}; Type: filesandordirs »

Так и прописывал, не работает

onlainserver 01-10-2011 22:07 1763911

insombia, спасибо за кнопки но не как не пойму как их скриптом установить вы не можете подсказать?

valyok666 01-10-2011 22:22 1763919

VASYAKRN, по подробнее что за маска нужна

Rikill 01-10-2011 23:13 1763954

valyok666, не отвечай.
VASYAKRN, всё есть в справке.

Sk.Faker 02-10-2011 01:31 1763992

Так поможет кто?
Код:

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

Не работает, он не удаляет ни одного файла

VASYAKRN 02-10-2011 08:07 1764022

рікіл
в какой справке

Wadia 02-10-2011 11:43 1764071

Подскажите пожалуйста, как переконвертировать текст в hex?
Пример: C:\Program Files\My Program -> 433A5C50726F6772616D2046696C65735C4D792050726F6772616D
C:\Program Files - путь может быть другой, поэтому и требуется конвертация.

insombia 02-10-2011 12:49 1764101

del

Dark_Delphin 02-10-2011 13:48 1764131

Всем привет!

Подскажите как изменить размер прогрессбара?

insombia 02-10-2011 14:00 1764134

ntrx где именно в исдоне?

Dark_Delphin 02-10-2011 14:07 1764137

insombia, да.

insombia 02-10-2011 14:27 1764150

ntrx
читать дальше »
procedure CreateControls;
var PBTop:integer;
begin
PBTop:=ScaleY(50);
ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar1 do begin
Parent := WizardForm.InstallingPage;
Height := WizardForm.ProgressGauge.Height;
Left := ScaleX(0);
Top := PBTop;
Width := ScaleX(365);
Max := 1000;
где то здесь по моему

Dark_Delphin 02-10-2011 16:11 1764221

Как сделать вместо чёрного фона в инсталляторе фоновой рисунок на все страницах?

Заранее спасибо.

Richter 02-10-2011 17:06 1764266

Всем доброго времени суток! Кто мог бы поделиться скриптами или сказать где можно найти скрипты (или закосы под них) R.G. Catalyst, Spieler ?

insombia 02-10-2011 17:25 1764278

ntrx http://rghost.ru/private/20901171/f2...3a7c2702b4f666

Richter Spieler catalyst

Dark_Delphin 02-10-2011 18:27 1764329

Подскажите как в этом скрипте сделать что-бы анимация была Transparent?



читать дальше »
[Setup]
AppName=gifctrl
AppVerName=gifctrl Ver 2.1
DefaultDirName={pf}\gifctrl
DefaultGroupName=gifctrl
OutputDir=.

[Files]
Source: gifctrl.dll; Flags: dontcopy solidbreak
Source: smile0.gif; Flags: dontcopy solidbreak

[code]
const
HALIGN_CENTER = 0;
HALIGN_LEFT = 1;
HALIGN_RIGHT = 2;

VALIGN_CENTER = 0;
VALIGN_TOP = 1;
VALIGN_BOTTOM = 2;

FIT_NONE = 0;
FIT_WIDTH = 1;
FIT_HEIGHT = 2;
FIT_BOTH = 3;

CLR_INVALID = $FFFFFFFF;


function NewGifbWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND; external 'newgifwnd@files:gifctrl.dll stdcall';
function FreeGifWnd(hWndGif: HWND): Boolean; external 'freegifwnd@files:gifctrl.dll stdcall';
function FreeAllGifWnd(): Boolean; external 'freeallgifwnd@files:gifctrl.dll stdcall';
function GifWndSetParent(hWndGif: HWND; hWndParent: HWND): Boolean; external 'gifwndsetparent@files:gifctrl.dll stdcall';
function GifWndSetBounds(hWndGif: HWND; X, Y, nWidth, nHeight: Integer): Boolean; external 'gifwndsetbounds@files:gifctrl.dll stdcall';
function GifWndLoadFromFile(hWndGif: HWND; HAlign, VAlign: Integer; BGColor: DWord; Fit: integer; GifFileName: PChar): Boolean; external 'gifwndloadfromfile@files:gifctrl.dll stdcall';

var
GIFHWND0: HWND;

function InitializeSetup(): Boolean;
begin
GIFHWND0 := 0;

Result := True;
end;

procedure DeinitializeSetup();
begin
FreeAllGifWnd();
end;


procedure InitializeWizard();
var
GifFileName: String;
Lbl: TNewStaticText;
begin
ExtractTemporaryFile('smile0.gif');


GIFHWND0 := NewGifbWnd(WizardForm.installingPage.Handle, ScaleX(5), ScaleY(120), 21, 21);
GifWndLoadFromFile(GIFHWND0, HALIGN_CENTER, VALIGN_CENTER, CLR_INVALID, FIT_NONE, ExpandConstant('{tmp}\Smile0.gif'));


end;

Vista-w 02-10-2011 18:48 1764350

ntrx, есть куча примеров скрипта, для наложения картинки на инсталл.
Поиском воспользуйся.
http://www.forum.oszone.ru/post-1242285-250.html

insombia 02-10-2011 19:12 1764367

Vista-w в том примере что ты дал картинка не на всех страницах

Dark_Delphin 02-10-2011 19:15 1764373

Я же дал скрипт и сказал что мне нужно.
Мне только на InstallingPage , только у меня не получается сделать транспарент.(

Vista-w 02-10-2011 19:28 1764380

ntrx,
Я не пойму, как ты картинки хочешь сделать Transarent ?

Dark_Delphin 02-10-2011 19:29 1764383

Vista-w, вот скрипт, и мне нужно что-бы эта анимация была как фон.

читать дальше »
[Setup]
AppName=gifctrl
AppVerName=gifctrl Ver 2.1
DefaultDirName={pf}\gifctrl
DefaultGroupName=gifctrl
OutputDir=.

[Files]
Source: gifctrl.dll; Flags: dontcopy solidbreak
Source: smile0.gif; Flags: dontcopy solidbreak

[code]
const
HALIGN_CENTER = 0;
HALIGN_LEFT = 1;
HALIGN_RIGHT = 2;

VALIGN_CENTER = 0;
VALIGN_TOP = 1;
VALIGN_BOTTOM = 2;

FIT_NONE = 0;
FIT_WIDTH = 1;
FIT_HEIGHT = 2;
FIT_BOTH = 3;

CLR_INVALID = $FFFFFFFF;


function NewGifbWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND; external 'newgifwnd@files:gifctrl.dll stdcall';
function FreeGifWnd(hWndGif: HWND): Boolean; external 'freegifwnd@files:gifctrl.dll stdcall';
function FreeAllGifWnd(): Boolean; external 'freeallgifwnd@files:gifctrl.dll stdcall';
function GifWndSetParent(hWndGif: HWND; hWndParent: HWND): Boolean; external 'gifwndsetparent@files:gifctrl.dll stdcall';
function GifWndSetBounds(hWndGif: HWND; X, Y, nWidth, nHeight: Integer): Boolean; external 'gifwndsetbounds@files:gifctrl.dll stdcall';
function GifWndLoadFromFile(hWndGif: HWND; HAlign, VAlign: Integer; BGColor: DWord; Fit: integer; GifFileName: PChar): Boolean; external 'gifwndloadfromfile@files:gifctrl.dll stdcall';

var
GIFHWND0: HWND;

function InitializeSetup(): Boolean;
begin
GIFHWND0 := 0;

Result := True;
end;

procedure DeinitializeSetup();
begin
FreeAllGifWnd();
end;


procedure InitializeWizard();
var
GifFileName: String;
Lbl: TNewStaticText;
begin
ExtractTemporaryFile('smile0.gif');


GIFHWND0 := NewGifbWnd(WizardForm.installingPage.Handle, ScaleX(5), ScaleY(120), 21, 21);
GifWndLoadFromFile(GIFHWND0, HALIGN_CENTER, VALIGN_CENTER, CLR_INVALID, FIT_NONE, ExpandConstant('{tmp}\Smile0.gif'));


end;

insombia 02-10-2011 19:33 1764385

ntrx так нельзя чтобы анимация была фоном нужно картинку в формате bmp вставлять

Dark_Delphin 02-10-2011 19:35 1764386

insombia, аа.. я не знал. Спасибо за инфу.
Тогда как наложить БМП на странице установки?

valyok666 02-10-2011 19:38 1764392

ntrx, не можно=)надо создавать на всех страницах ток наложение текста дерьмо будет

вот что получается

Dark_Delphin 02-10-2011 19:41 1764398

А на прогресс бар ИсДоне можно нормально изображения наложить?

insombia 02-10-2011 19:46 1764404

ntrx да

Dark_Delphin 02-10-2011 19:47 1764405

insombia, подскажеш?)

insombia 02-10-2011 19:50 1764406

ntrx щас Need for Speed™ Undercover.iss v 2.2 там есть пример

Dark_Delphin 02-10-2011 19:58 1764410

А есть голый примерчик?
Что-бы не вытаскивать из других скриптов?

insombia 02-10-2011 20:04 1764418

ntrx лови картинку брал со скрипта нфс если хочешь можешь сам в фотошопе что-то свое нарисовать

Dark_Delphin 02-10-2011 20:26 1764437

insombia, дак это для обычного бара, а мне для исДоне.

No4noylis 02-10-2011 20:38 1764446

ntrx, отЪ, переделал для ИСДона, вроде должно работать. И отЪ вариант как можно добавить картинку только на страницу установки, но если используешь ИСДоне, то нужно будет лейбелы ИСДона перенести на InnerPage.

Dark_Delphin 02-10-2011 21:08 1764473

No4noylis, картинка поставилась но прогрессбар пропал.(

Edison007 02-10-2011 21:16 1764484

Цитата:

Цитата ntrx
Что-бы не вытаскивать из других скриптов? »

воть накатал быстренько, через ботву
http://rghost.ru/23949041

Alloc 02-10-2011 21:19 1764491

уважаемые, будьте добры, подскажите мне одну вещь... я собираюсь создать небольшой Патч для игры... в папке с игрой есть запакованный в zip архив файл... каким образом можно добавить и заменить в этом архиве файлы при помощи Inno Setup? буду очень вам благодарен за помощь

No4noylis 02-10-2011 21:29 1764506

Цитата:

Цитата ntrx
No4noylis, картинка поставилась но прогрессбар пропал.( »

Я ж говорю, если картинку ставишь, надо компоненты страницы переносить на InnerPage, и добавлять их в процедуру CurPаgeChanged, чтоб они скрывались :)
Alloc, Возможно я ошибаюсь но помоему тебе подойдет ISDone, сначала в папке установки можно распаковать нужный архив, затем из инсталла добавить в папку необходимые файлы, и потом запаковать это дело обратно в архив.
Mafia_forever, Ну ясное дело, с помощью srep.exe . А вообще это :off:

Mafia_forever 02-10-2011 21:52 1764533

скажите плиз файли типа martin.srep как делать

Dark_Delphin 02-10-2011 23:33 1764620

Можно ли через fairy.dll сделать кликабельное лого через *.png.
Лого вставил , а как сделать кликабельным хз.

Заранее спасибо.

Raf-9600 03-10-2011 00:34 1764659

А возможно ли указать, чтоб один какой-то файл, сжимался не по тому алгоритму что указан в [Setup] Compression, а по другому? К примеру, чтоб все файлы сжимались по lzma/max, а какой-то отдельный файл, по zip.

valyok666 03-10-2011 01:36 1764677

ntrx, напишу завтра тебе его

Richter 03-10-2011 02:35 1764688

Цитата:

Цитата ntrx
Можно ли через fairy.dll сделать кликабельное лого через *.png. »

Не через png, но за неимением оного вот кликабельное bmp-лого:

[Setup]
AppName=Logo
AppVerName=Logo
DefaultDirName=C:\Logo

[Files]
Source: Button.bmp; Flags: dontcopy

[code]
procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
ShellExec('', 'http://www.forum.ru-board.com', '' , '', SW_SHOW, ewNoWait, ResCode)
end;

procedure InitializeWizard();
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin
ExtractTemporaryFile('Button.bmp')

BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=20
Top:=325
Width:=132
Height:=27
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
Parent:=BtnPanel
end
end;

Sotonisto 03-10-2011 07:49 1764726

insombia, я вот скачал твой скрипт инсталлятора Catalyst и у меня повился вопрос: что в скрипте отвечает за логтип? Я собственно только из-за этого и качал (ниразу не видел примера png лого), а в скрипте ничего найти не могу :(

Gugle 03-10-2011 09:38 1764773

Цитата:

Цитата Лександер
Эээ, а что бывают стандартные? dll для инно пишутся именно для того, чтобы "научить" ее вещам нестандартным. »

Ну, например, можно попробовать тупо описать эти типы ручками в inno. Или я ошибаюсь?

insombia 03-10-2011 10:23 1764801

Sotonistoскрипт делал не я а Лександер кажись

Gnom_aka_Lexander 03-10-2011 12:22 1764853

Цитата:

Цитата Gugle
Ну, например, можно попробовать тупо описать эти типы ручками в inno. Или я ошибаюсь? »

Отчего-же? можно, многое можно так сделать. Но опять-же, это относится к стандартным системным функциям, которые берутся из user23, kernel32, GDI, и т.п. системных библиотек. Но, в твоем случае, (и не только) стандартнаые функции - это wmi, которые у части пользователей отключены. Изза чего из репаков пропала страница системных требований - обращение к wmi крашило инсталл. Поэтому, в твоем случае, нужно искать пути нестандартные, что на инно сделать довольно сложно. Плюс, вынос функций в отдельную dll здорово снижает вычислительную нагрузку инсталлятора на систему, что, в свою очередь, здорово способствует благосклонности пользователей. Причина - толком я не понял. Что понял - инно не является компилятором языка, а всего лиш интерпретатор, как это влияет на производительность - думаю, подскажут товарищи более знающие.

Цитата:

Цитата insombia
скрипт делал не я а Лександер кажись »

Не, это не мой. Который я писал - его в точно нигде нет, есть скрипт, который я правил немного - писал его товарищ Мунлайт :) это я вообще не трогал. По стилю - похоже на Репачека.

insombia 03-10-2011 12:56 1764869

Лександер аа просто когда то один человек сделал скрипт а ты его доделал и давал ссылку

R.i.m.s.k.y. 03-10-2011 13:23 1764884

Цитата:

Цитата Лександер
стандартнаые функции - это wmi, которые у части пользователей отключены. Изза чего из репаков пропала страница системных требований - обращение к wmi крашило инсталл. »

это как в Ultimate Black из шапки чтоли?

Gnom_aka_Lexander 03-10-2011 13:26 1764887

Цитата:

Цитата R.i.m.s.k.y.
это как в Ultimate Black из шапки чтоли? »

Честно, в Ultimate Black не вдавался, но там, тоже wmi, вроде. Из своей сборки я убрал системные требования именно потому, что у некоторых инсталл вылетал с ошибкой. Потом знающие люди подсказали, что все дело именно в wmi. А именно эта служба дает простой доступ ко всей информации о системе.

R.i.m.s.k.y. 03-10-2011 13:28 1764890

Лександер,
что такое этот WMI, где он отключается и как проверить что он включен/отключен?
глянь, пожалуйста, в Ultimate Black в шапке WMI или нет, я из него использовал определение системы не только в своих сборках

Gnom_aka_Lexander 03-10-2011 13:39 1764899

Цитата:

Цитата R.i.m.s.k.y.
что такое этот WMI, где он отключается и как проверить что он включен/отключен? »

Тут эта проблема разбиралась, тестовый файл, к сожалению недоступен, нужно с Экспедитором связываться, либо сейчас попробую сам накидать проверочный ехе-шник. В Ultimate Black почти наверняка функции WMI, поскольку, к ним есть прямой доступ, и можно вызывать их прямо из скрипта. Что такое WMI. В общем, проверка системных требований ушла из инсталлов давно :) Подозреваю, что в основном проблемы на 7х64 - на ней уже несколько известных и очень нужных примеров не работае. Начиная с короны от Виктора Доброва. ExpeditorR последний раз проявлял активность в конце июля...
Цитата:

Цитата R.i.m.s.k.y.
я из него использовал определение системы не только в своих сборках »

В ультимейт Блэк, версия системы берется из реестра, эта запись, вроде, не должна зависеть от наличия-отсутствия внешних служб. Но тут я слабоват... Опять-же, ждем кого-то более знающего.

Gugle 03-10-2011 15:32 1764967

Лександер,
так как на счет примерчика (dll) по выводу ethernet adapter? Можно ожидать? У тебя время/возможность есть?

Gnom_aka_Lexander 03-10-2011 16:12 1764995

Цитата:

Цитата Gugle
так как на счет примерчика (dll) по выводу ethernet adapter? »

Возможность есть, помимо того примера, что я давал, есть пример Profager-а, там еще какието данные выводятся, нужно поискать. Возможность есть - по плечу, хоть и с натяжкой, задача :) а время - его сейчас вообще ни у кого нет :)

valyok666 03-10-2011 17:13 1765047

Sotonisto, используй библиотеку ISlogo

Вот

Tixo 03-10-2011 17:39 1765066

Народ а есть у кого нибудь такой скрипт??
http://s39.radikal.ru/i084/1002/b5/c13909f74b25.jpg

Dark_Delphin 03-10-2011 17:42 1765071

Цитата:

Можно ли через fairy.dll сделать кликабельное лого через *.png.
Лого вставил , а как сделать кликабельным хз.

Заранее спасибо.

Цитата:

Цитата valyok666
ntrx, напишу завтра тебе его »


Если можно давайте. Буду благодарен.

VinTagE 03-10-2011 17:54 1765079

ntrx, Вот держи
http://rghost.ru/13692981

Dark_Delphin 03-10-2011 18:01 1765084

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

Gugle 03-10-2011 18:19 1765101

Лександер,
судя по данному тобой исходнику пишешь на delphi.
Какая у тебя версия ПО? (Если угадал конечно язык) Постараюсь принять горячее участие в написании кода для dll. :)
Заранее благодарен в активной помощи. :)

R.i.m.s.k.y. 03-10-2011 18:53 1765121

Цитата:

Цитата Лександер
В Ultimate Black почти наверняка функции WMI, поскольку, к ним есть прямой доступ, и можно вызывать их прямо из скрипта. Что такое WMI. В общем, проверка системных требований ушла из инсталлов давно Подозреваю, что в основном проблемы на 7х64 - на ней уже несколько известных и очень нужных примеров не работае. »

отключил в вин7х64 службу WMI Performance Adapter - Ultimate Test работает
или я не то отключил?

valyok666 03-10-2011 19:11 1765137

Tixo, дай ещё скриншоты

Gnom_aka_Lexander 03-10-2011 19:15 1765139

Цитата:

Цитата R.i.m.s.k.y.
отключил в вин7х64 службу WMI Performance Adapter - Ultimate Test работает
или я не то отключил? »

Честно - уже сам теряюсь :) Или, возможно, в сборках ОС, на которых инсталл крашился, помимо отключения, не хватало какого-либо файла. У меня системные требования были реализованы с помощью get_hw_caps.dll, как она работает, я не знаю. В Ультимейт блек вызов напрямую из системных длл идет, две из них, есть в системе всегда - юзер32 и кернель32, но, там ошибка eadfade - грязная работа с памятью - возможно, что нужная длл-ка есть, но отсутствует какой-либо модуль для работы. Отключая службу из работающей системы, ты, ведь, не удаляеш никаких файлов? :) В общем, вопрос остается открытым...

Gugle, ответил в личку.

valyok666 03-10-2011 19:32 1765143

Лександер, не кинешь ссылку на Delphi просто стоко качал нихрена нормальную не находил(если не сложно заранее спс

insombia 03-10-2011 19:43 1765147

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

VinTagE 03-10-2011 19:48 1765152

ntrx, а что трудного?, создай лэбэл и наложи этот лэбэл на свою картинку, теже координаты расположения картинки.
Лэбэл.OnClick:= @site;

Dark_Delphin 03-10-2011 19:59 1765159

VinTagE, а можна подробнее? Не получется у меня( :blush:

Tixo 03-10-2011 20:19 1765174

valyok666, держи
http://i068.radikal.ru/1002/fc/d4d4b4fbf3f1.jpg
http://s003.radikal.ru/i204/1002/15/8e5f850319e3.jpg
http://s005.radikal.ru/i210/1002/67/8b8b6f726733.jpg
http://s39.radikal.ru/i084/1002/b5/c13909f74b25.jpg

insombia 03-10-2011 20:21 1765176

Tixo можно взять за основу закос под Fenixx и там чуть переделать могу попробовать если получится скину только такого как на этом http://s005.radikal.ru/i210/1002/67/8b8b6f726733.jpg скрине не будет типа распаковки

VinTagE 03-10-2011 20:28 1765181

ntrx, Держи
http://rghost.ru/24073331

Tixo 03-10-2011 20:28 1765183

insombia, а у тебя нет скрипта наподобие такого?
http://img204.imageshack.us/img204/717/96787221.png

insombia 03-10-2011 20:31 1765190

Tixo а что сложного в том чтобы его сделать?

Tixo 03-10-2011 20:42 1765197

так компоненты были не такие как везде
слева в рамочке компоненты а справа в рамочке их описание

Dark_Delphin 03-10-2011 21:03 1765209

VinTagE, спасибо, всё получилось.

Tixo 03-10-2011 21:15 1765218

insombia,
попробуешь переделать?

insombia 03-10-2011 21:23 1765225

Tixo да там и не нужно переделовать там и так все похожее

как сделать такую WizardSmallImage большую http://i29.fastpic.ru/big/2011/1003/...96c99b042a.png

Rikill 03-10-2011 22:21 1765276

insombia, это не смолл, это кастомная бмпшка.

Лександер,
1. На Memo кривая скроль, не по размеру. Слегка подрезана.
2. В начале не красивая картинка :)

insombia 03-10-2011 22:24 1765282

Rikill а ну перепутал но как его вставить туда?

Rikill 03-10-2011 22:41 1765288

insombia, ну это же чисто справка :( ну или гномовский сайтец
Код:


 var
 MyImage: TBitmapImage;
 
 procedure InitializeWizard;
 begin
 ExtractTemporaryFile('myimage.bmp');
 MyImage := TBitmapImage.Create(WizardForm);
 With MyImage do
 begin
  Top:=100; // сколько пикселей от правого края
  Left:=330; // сколько пикселей от левого края
  Width:=100; // ширина и
  Height:=30; // высота рисунка
  Parent:=WizardForm.SelectDirPage; // требуемая страничка
  Bitmap.LoadFromFile(ExpandConstant('{tmp}\myimage.bmp'));
 end;
 end;

полосы это bevel'ы

valyok666 03-10-2011 23:01 1765298

Rikill, ,в самую точку

insombia, придумай что нибудь своё=))

insombia 03-10-2011 23:13 1765306

valyok666 у меня есть много идей но нету реализации

Rikill 03-10-2011 23:15 1765307

insombia, с реализацией поможем мы. Но ты и сам старайся и читай справки.

Gnom_aka_Lexander 04-10-2011 08:47 1765428

Цитата:

Цитата Rikill
Top:=100; // сколько пикселей от правого края
Left:=330; // сколько пикселей от левого края
Width:=100; // ширина и
Height:=30; // высота рисунка »

Позволю себе поправить:
Left := ScaleX(100); // сколько пикселей от левого края
Top := ScaleY(330); // сколько пикселей от верхнего края
Width := ScaleX(100);// ширина
Height := ScaleY(30);// высота
ScaleX и ScaleY, иначе можно обнаружить, что у кого-то твоя картинка (и не только) совсем не там, где задумал.
Цитата:

Цитата Rikill
1. На Memo кривая скроль, не по размеру. Слегка подрезана. »

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

Цитата Rikill
2. В начале не красивая картинка »

По замыслу, в зоне отчуждения нет ничего красивого. Зато все очень символично. :)

GRiD555x 04-10-2011 09:20 1765445

Народ всем привет мне срочно нужна помощь у меня при компилировании вылетает ошибка в строке procedure InitializeWizard1();(ну дубликат) что мне делать их там несколько!!!!!???момогите прошу очень надо!!!

No4noylis 04-10-2011 09:25 1765447

GRiD555x, Значит надо объединить процедуры, чтоб не было дубликата.

GRiD555x 04-10-2011 09:30 1765451

[code]
Код:

procedure InitializeWizard1();
 begin
 WizardForm.InnerPage.Visible:=False;
 WizardForm.WelcomeLabel1.Visible:=False;
 WizardForm.WelcomeLabel2.Visible:=False;
 WizardForm.WizardSmallBitmapImage.left:=0;
 WizardForm.WizardSmallBitmapImage.Width:=WizardForm.Width;
 WizardForm.PageNameLabel.Visible:=False;
 WizardForm.PageDescriptionLabel.Visible:=False;
 WizardForm.WizardBitmapImage.Width:=WizardForm.ClientWidth;
 WizardForm.WizardBitmapImage.Height:=WizardForm.ClientHeight;
 WizardForm.WizardBitmapImage2.Width:=WizardForm.ClientWidth;
 WizardForm.OuterNotebook.Height:=WizardForm.ClientHeight;
 WizardForm.InnerNotebook.Height:=WizardForm.ClientHeight;
 WizardForm.WizardBitmapImage2.Height:=WizardForm.ClientHeight;
 WizardForm.NextButton.BringToFront;
 WizardForm.CancelButton.BringToFront;
 WizardForm.BackButton.BringToFront;
 WizardForm.FinishedHeadingLabel.Visible:=False;
 WizardForm.FinishedLabel.Visible:=False;
 end;

 const
 Color = clblack;      // цвет окна инстала

procedure InitializeWizard2();
 begin

WizardForm.Font.Color:=clWhite;      // цвет текста
 wizardForm.WelcomeLabel1.Font.Color:=clWhite;    // цвет текста
 WizardForm.FinishedHeadingLabel.Font.Color:=clWhite;      // цвет текста
 WizardForm.PageNameLabel.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.PageNameLabel.Color:=Color;
 WizardForm.PageDescriptionLabel.Color:=Color;
 WizardForm.ReadyLabel.Color:=Color;
 WizardForm.FinishedLabel.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.FinishedHeadingLabel.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;
 WizardForm.Bevel.visible:=false;
 WizardForm.Bevel1.visible:=false;
 end;

вот я сделал так но ещё я прочитал кое где что надо вставить после этого в конец скрипта вот
Код:

procedure InitializeWizard();
 begin
 procedure InitializeWizard1();
 procedure InitializeWizard2();
 end;

куда именно?>

Gnom_aka_Lexander 04-10-2011 09:41 1765456

GRiD555x, А ты сделай проще, чтоб голову не ломать:
читать дальше »
Код:

const
 Color = clblack;      // цвет окна инстала

procedure InitializeWizard();
begin
 WizardForm.InnerPage.Visible:=False;
 WizardForm.WelcomeLabel1.Visible:=False;
 WizardForm.WelcomeLabel2.Visible:=False;
 WizardForm.WizardSmallBitmapImage.left:=0;
 WizardForm.WizardSmallBitmapImage.Width:=WizardForm.Width;
 WizardForm.PageNameLabel.Visible:=False;
 WizardForm.PageDescriptionLabel.Visible:=False;
 WizardForm.WizardBitmapImage.Width:=WizardForm.ClientWidth;
 WizardForm.WizardBitmapImage.Height:=WizardForm.ClientHeight;
 WizardForm.WizardBitmapImage2.Width:=WizardForm.ClientWidth;
 WizardForm.OuterNotebook.Height:=WizardForm.ClientHeight;
 WizardForm.InnerNotebook.Height:=WizardForm.ClientHeight;
 WizardForm.WizardBitmapImage2.Height:=WizardForm.ClientHeight;
 WizardForm.NextButton.BringToFront;
 WizardForm.CancelButton.BringToFront;
 WizardForm.BackButton.BringToFront;
 WizardForm.FinishedHeadingLabel.Visible:=False;
 WizardForm.FinishedLabel.Visible:=False;

    WizardForm.Color := Color;
    WizardForm.Font.Color := clWhite;
    WizardForm.WelcomePage.Color := Color;
    WizardForm.InnerPage.Color := Color;
    WizardForm.LicenseMemo.Color := Color;
    WizardForm.PasswordEdit.Color := Color;
    WizardForm.InfoBeforeMemo.Color := Color;
    WizardForm.UserInfoSerialEdit.Color := Color;
    WizardForm.UserInfoOrgEdit. Color := Color;
    WizardForm.UserInfoNameEdit.Color := Color;
    WizardForm.SelectDirBitmapImage.BackColor := clNone;
    WizardForm.SelectDirBitmapImage.ReplaceColor := clBtnFace;
    WizardForm.DirEdit.Color := Color;
    WizardForm.ComponentsList.Color := Color;
    WizardForm.TypesCombo.Color := Color;
    WizardForm.SelectGroupBitmapImage.BackColor := clNone;
    WizardForm.SelectGroupBitmapImage.ReplaceColor := clBtnFace;
    WizardForm.GroupEdit.Color := Color;
    WizardForm.TasksList.Color := Color;
    WizardForm.ReadyMemo.Color := Color;
    WizardForm.InfoAfterMemo.Color := Color;
    WizardForm.MainPanel.Color := Color;
    WizardForm.FinishedPage.Color := Color;
 WizardForm.Bevel.visible:=false;
 WizardForm.Bevel1.visible:=false;
end;



кстати, в коде черного инсталла много лишнего. Вот этого будет достаточно:
читать дальше »
Код:

const
 Color = clblack; // цвет окна инстала
 
procedure InitializeWizard();
begin
    WizardForm.Color := Color;
    WizardForm.Font.Color := clWhite;
    WizardForm.WelcomePage.Color := Color;
    WizardForm.InnerPage.Color := Color;
    WizardForm.LicenseMemo.Color := Color;
    WizardForm.PasswordEdit.Color := Color;
    WizardForm.InfoBeforeMemo.Color := Color;
    WizardForm.UserInfoSerialEdit.Color := Color;
    WizardForm.UserInfoOrgEdit. Color := Color;
    WizardForm.UserInfoNameEdit.Color := Color;
    WizardForm.SelectDirBitmapImage.BackColor := clNone;
    WizardForm.SelectDirBitmapImage.ReplaceColor := clBtnFace;
    WizardForm.DirEdit.Color := Color;
    WizardForm.ComponentsList.Color := Color;
    WizardForm.TypesCombo.Color := Color;
    WizardForm.SelectGroupBitmapImage.BackColor := clNone;
    WizardForm.SelectGroupBitmapImage.ReplaceColor := clBtnFace;
    WizardForm.GroupEdit.Color := Color;
    WizardForm.TasksList.Color := Color;
    WizardForm.ReadyMemo.Color := Color;
    WizardForm.InfoAfterMemo.Color := Color;
    WizardForm.MainPanel.Color := Color;
    WizardForm.FinishedPage.Color := Color;
end;


GRiD555x 04-10-2011 10:06 1765466

Цитата:

Цитата Лександер
ну да а вот тут с музыкой как делать так не прокатит(
[code]
function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile(ExpandConstant('sound.wav')); //Извлекаем звуковой файл во временную папку
sndPlaySound(ExpandConstant('{tmp}\sound.wav'), $0001 or $0008); //Проигрываем файл. Здесь указаны параметры для повторного проигрывания. Если мы хотим проиграть файл единожды, удаляем параметр 'or $0008'
end;»


No4noylis 04-10-2011 10:14 1765471

GRiD555x, Как это не прокатит???
читать дальше »

Код:

const
Color = clblack; // цвет окна инстала

function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';

procedure InitializeWizard();
begin
WizardForm.InnerPage.Visible:=False;
WizardForm.WelcomeLabel1.Visible:=False;
WizardForm.WelcomeLabel2.Visible:=False;
WizardForm.WizardSmallBitmapImage.left:=0;
WizardForm.WizardSmallBitmapImage.Width:=WizardForm.Width;
WizardForm.PageNameLabel.Visible:=False;
WizardForm.PageDescriptionLabel.Visible:=False;
WizardForm.WizardBitmapImage.Width:=WizardForm.ClientWidth;
WizardForm.WizardBitmapImage.Height:=WizardForm.ClientHeight;
WizardForm.WizardBitmapImage2.Width:=WizardForm.ClientWidth;
WizardForm.OuterNotebook.Height:=WizardForm.ClientHeight;
WizardForm.InnerNotebook.Height:=WizardForm.ClientHeight;
WizardForm.WizardBitmapImage2.Height:=WizardForm.ClientHeight;
WizardForm.NextButton.BringToFront;
WizardForm.CancelButton.BringToFront;
WizardForm.BackButton.BringToFront;
WizardForm.FinishedHeadingLabel.Visible:=False;
WizardForm.FinishedLabel.Visible:=False;

WizardForm.Font.Color:=clWhite; // цвет текста
wizardForm.WelcomeLabel1.Font.Color:=clWhite; // цвет текста
WizardForm.FinishedHeadingLabel.Font.Color:=clWhite; // цвет текста
WizardForm.PageNameLabel.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.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.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;
WizardForm.Bevel.visible:=false;
WizardForm.Bevel1.visible:=false;

ExtractTemporaryFile(ExpandConstant('sound.wav')); //Извлекаем звуковой файл во временную папку
sndPlaySound(ExpandConstant('{tmp}\sound.wav'), $0001 or $0008); //Проигрываем файл. Здесь указаны параметры для повторного проигрывания. Если мы хотим проиграть файл единожды, удаляем параметр 'or $0008'
end;


отЪ, добавил тебе проигрывание музыки :)

Gnom_aka_Lexander 04-10-2011 10:19 1765474

Цитата:

Цитата GRiD555x
ну да а вот тут с музыкой как делать так не прокатит( »

Все просто - соединяя процедуры, ты все равно выполняеш их содержимое внутри одной общей. Дык, какая разница, как их объединять? ПРосто, если значально писать внутри одной процедуры, меньше шансов запутаться и наделать ошибок.

GRiD555x 04-10-2011 10:27 1765477

Спасибо очень большое ребята респект вам,спасибо спасибо и ещё раз спасибо:)

GRiD555x 04-10-2011 13:54 1765592

АА вот ещё один вопросик как убрать строчку в скрипте чтобы в конце установки токо было снизу написанно "Завершить" и не было запуска игры в инсталяторе?

R.i.m.s.k.y. 04-10-2011 14:01 1765603

GRiD555x
[натирая хрустальный шар]
найди строчку с именем экзешника запускаемой игры и удали/закомментируй ее

получается за тебя сделали полностью скрипт а ты даже не удосужился просмотреть его? Блеск!

GRiD555x 04-10-2011 14:11 1765613

какая именно строчка а то не то удалю вот скрипт
Код:

[Setup]
DiskSpanning=true
DiskSliceSize=1457664000
AppId={{C4EA8E81-A680-48BF-9D28-0A091DDD7BCB}
AppName=Driver San Francisco
AppVersion=Driver San Francisco 1.02
AppPublisher=GRiD555x
AppPublisherURL=http://gold-club.ixterm.ru/tracker/
AppSupportURL=http://gold-club.ixterm.ru/tracker/
AppUpdatesURL=http://gold-club.ixterm.ru/tracker/
DefaultDirName={pf}\Driver San Francisco
DefaultGroupName=Driver San Francisco
AllowNoIcons=yes
OutputDir=D:\Новая папка
OutputBaseFilename=setup
SetupIconFile=C:\Documents and Settings\GRID\Рабочий стол\favicon.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64


R.i.m.s.k.y. 04-10-2011 14:20 1765619

это не весь скрипт
скажи заодно запускной файл, шар я уже убрал на подзарядку :)

GRiD555x 04-10-2011 14:42 1765628

Цитата:

Цитата R.i.m.s.k.y.
Код:

[Setup]
BackColor=0
WizardImageFile=D:\2.bmp
WizardSmallImageFile=D:\1.bmp
DiskSpanning=true
DiskSliceSize=1457664000
AppId={{C4EA8E81-A680-48BF-9D28-0A091DDD7BCB}
AppName=Driver San Francisco
AppVersion=Driver San Francisco 1.02
AppPublisher=GRiD555x
AppPublisherURL=http://gold-club.ixterm.ru/tracker/
AppSupportURL=http://gold-club.ixterm.ru/tracker/
AppUpdatesURL=http://gold-club.ixterm.ru/tracker/
DefaultDirName={pf}\Driver San Francisco
DefaultGroupName=Driver San Francisco
AllowNoIcons=yes
OutputDir=D:\Новая папка
OutputBaseFilename=setup
SetupIconFile=C:\Documents and Settings\GRID\Рабочий стол\favicon.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: "D:\sound.wav"; DestDir: "{tmp}"; Flags: dontcopy

Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: D:\BackImage.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\1c.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\2c.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\3c.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\GAME\DriverSF\Driver.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\GAME\DriverSF\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
BackImage, SlideImage: TBitmapImage;
TimerID: LongWord;
s:string;
Width, Height:Integer;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';
 procedure InitializeWizard();
 begin
 WizardForm.InnerPage.Visible:=False;
 WizardForm.WelcomeLabel1.Visible:=False;
 WizardForm.WelcomeLabel2.Visible:=False;
 WizardForm.WizardSmallBitmapImage.left:=0;
 WizardForm.WizardSmallBitmapImage.Width:=WizardForm.Width;
 WizardForm.PageNameLabel.Visible:=False;
 WizardForm.PageDescriptionLabel.Visible:=False;
 WizardForm.WizardBitmapImage.Width:=WizardForm.ClientWidth;
 WizardForm.WizardBitmapImage.Height:=WizardForm.ClientHeight;
 WizardForm.WizardBitmapImage2.Width:=WizardForm.ClientWidth;
 WizardForm.OuterNotebook.Height:=WizardForm.ClientHeight;
 WizardForm.InnerNotebook.Height:=WizardForm.ClientHeight;
 WizardForm.WizardBitmapImage2.Height:=WizardForm.ClientHeight;
 WizardForm.NextButton.BringToFront;
 WizardForm.CancelButton.BringToFront;
 WizardForm.BackButton.BringToFront;
 WizardForm.FinishedHeadingLabel.Visible:=False;
 WizardForm.FinishedLabel.Visible:=False;
 WizardForm.Position:=poScreenCenter
 WizardForm.Position:=poScreenCenter
Width:=GetSystemMetrics(0)
Height:=GetSystemMetrics(1)
MainForm.BORDERSTYLE:=bsNone
MainForm.Left:=0
MainForm.Top:=0
MainForm.Width:=Width
MainForm.Height:=Height
ExtractTemporaryFile('BackImage.bmp')
s:=ExpandConstant('{tmp}')+'\BackImage.bmp '
BackImage:=TBitmapImage.Create(MainForm)
BackImage.Bitmap.LoadFromFile(s)
BackImage.Align:=alClient
BackImage.Parent:=MainForm
BackImage.Stretch:=True
MainForm.Visible:=True

ExtractTemporaryFile('BackImage.bmp')
ExtractTemporaryFile('1.bmp')
ExtractTemporaryFile('2.bmp')
ExtractTemporaryFile('3.bmp')
end;

function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do begin
Result:=(Position-Min)/((Max - Min)/100)
end
end; 
procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
percent: integer;
begin
percent:=PercentProgress
with SlideImage do begin
if ((percent>0) and (percent<10) and (Tag<>1)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\1.bmp')
Tag:=1
end else
if ((percent>11) and (percent<20) and (Tag<>2)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\2.bmp')
Tag:=2
end else
if ((percent>21) and (percent<100) and (Tag<>3)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\3.bmp')
Tag:=3
end
end
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
Width, Height: Integer;
begin
If CurPageID=wpInstalling
then
begin
pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 500, pfunc)
SlideImage:=TBitmapImage.Create(MainForm)
with SlideImage do begin
Stretch:=True
Align:=alClient
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\1.bmp')
Parent:=MainForm
Tag:=1
end
end
if CurPageID=wpFinished
then
begin
SlideImage.Hide
end
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID)
ExtractTemporaryFile(ExpandConstant('sound.wav')); //Извлекаем звуковой файл во временную папку
sndPlaySound(ExpandConstant('{tmp}\sound.wav'), $0001 or $0008); //Проигрываем файл. Здесь указаны параметры для повторного проигрывания. Если мы хотим проиграть файл единожды, удаляем параметр 'or $0008'
end; 

[Icons]
Name: {group}\Driver San Francisco; Filename: {app}\Driver.exe
Name: {group}\{cm:ProgramOnTheWeb,Driver San Francisco}; Filename: http://gold-club.ixterm.ru/tracker/
Name: {group}\{cm:UninstallProgram,Driver San Francisco}; Filename: {uninstallexe}
Name: {commondesktop}\Driver San Francisco; Filename: {app}\Driver.exe; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Driver San Francisco; Filename: {app}\Driver.exe; Tasks: quicklaunchicon

[Run]
Filename: {app}\Driver.exe; Description: {cm:LaunchProgram,Driver San Francisco}; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKLM; SubKey: SOFTWARE\UBISOFT\Driver San Francisco; ValueType: string; ValueName: launcherLanguage; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\UBISOFT\Driver San Francisco; ValueType: string; ValueName: GameLocation; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\UBISOFT\Driver San Francisco\GameUpdate; ValueType: string; ValueName: info; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\UBISOFT\Driver San Francisco\GameUpdate; ValueType: string; ValueName: language; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\UBISOFT\Driver San Francisco\GameUpdate; ValueType: string; ValueName: execPath; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\UBISOFT\Driver San Francisco\GameUpdate; ValueType: string; ValueName: installdir; ValueData: {app}; Flags: uninsdeletekey

»


R.i.m.s.k.y. 04-10-2011 14:48 1765633

GRiD555x, порвал монитор, такие простыни надо под кат прятать
Код:

[Run]
// Filename: {app}\Driver.exe; Description: {cm:LaunchProgram,Driver San Francisco}; Flags: nowait postinstall skipifsilent


GRiD555x 04-10-2011 14:51 1765635

Цитата:

Цитата R.i.m.s.k.y.
получается эту сроку надо полностью удалить да?и Run тоже?»


R.i.m.s.k.y. 04-10-2011 14:55 1765637

GRiD555x, я ее тебе закомментил ( символы // в начале строки*)
Можешь удалить секцию полностью тк в ней все равно одна строчка, можешь закомментить, как угодно.
Я сказал что сделать, я сказал где сделать, какие еще вопросы? Нет, я не знаю что будет с долларом, евро и Ливией.

-----
* так же символом комментария является ";" без кавык, но только не в секции Code. В секции Code комментарий "//"

Rikill 04-10-2011 14:56 1765638

Цитата:

Цитата Лександер
сколько пикселей от верхнего края »

да, я и не заметил. спасибо

GRiD555x 04-10-2011 14:58 1765641

Цитата:

Цитата R.i.m.s.k.y.
хех ну спасибо просто я пока не сильно в этом шарю вот и перезадал вопрос:)»


Gnom_aka_Lexander 04-10-2011 15:02 1765643

Я поражаюсь. И никто ничего не заметил? О_о...
Цитата:

Цитата GRiD555x
Код: »

Присмотритесь по внимательней - думаете это работает? Я имею в виду код целиком.

GRiD555x 04-10-2011 15:05 1765645

Кстати,а почему скорость компилирании в Inno Setup всегда падает,хотя в начале она достигает до 2000и больше?

R.i.m.s.k.y. 04-10-2011 15:05 1765646

GRiD555x, мы все учились понемногу чему-нибудь и как-нибудь.
Скрипт простой, прочитай его со справкой инно, в отличие от справки винды она толковая, даст ответы на простейшие вопросы - секции, порядок установки, флаги и прочие. Займет минут 30, не более, я гарантирую это :)
Не шпрехаешь по инглишу? в шапке переведенная справка, старовата, но для начала сгодится.

Заодно научись отвечать на форуме правильно - не помещай свой текст в цитаты.
Скорость падает - это нормально, жеский то медленная штуковина, если там еще и файлов много мелких - ваще труба

Лександер, я по заданному вопросу смотрел, но кажись с формами накосячено, вот с оформлением я не очень.

filehome 04-10-2011 15:14 1765650

Del

GRiD555x 04-10-2011 15:15 1765651

Цитата:

Цитата R.i.m.s.k.y.
Ну спасибки жди ещё вопросов:) »


R.i.m.s.k.y. 04-10-2011 15:18 1765655

GRiD555x,
жди еще ответов
чем смогу - помогу

балин, да не отвечай ты в тегах post!

GRiD555x 04-10-2011 15:22 1765657

Цитата:

Цитата R.i.m.s.k.y.
Да я первый раз на форуме и в этих тегах кодах и т.д. чайник:)


R.i.m.s.k.y. 04-10-2011 15:25 1765662

Цитата:

Цитата GRiD555x
Да я первый раз на форуме и в этих тегах кодах и т.д. чайник »

выделяешь сообщение, внизу появится синяя полоска "Цитировать" - давишь ее, в окне ответа появится ник и цитируемый текст, далее в окне ответа пиши там где чисто ниже всего - получится как у всех и как надо

и эта - не бойся экспериментировать! не в хирургическом отделении!!!

GRiD555x 04-10-2011 15:29 1765667

Цитата:

Цитата R.i.m.s.k.y.
выделяешь сообщение, внизу появится синяя полоска "Цитировать" - давишь ее, в окне ответа появится ник и цитируемый текст, далее в окне ответа пиши там где чисто ниже всего - получится как у всех и как надо »

Вот так правельно?:)

R.i.m.s.k.y. 04-10-2011 15:30 1765668

вуаля! сходи купи булочку :) :clapping:

Gnom_aka_Lexander 04-10-2011 15:34 1765677

GRiD555x, Как-то так должно все это выглядеть:
читать дальше »
Код:

[Setup]
BackColor=0
WizardImageFile=D:\2.bmp
WizardSmallImageFile=D:\1.bmp
DiskSpanning=true
DiskSliceSize=1457664000
AppId={{C4EA8E81-A680-48BF-9D28-0A091DDD7BCB}
AppName=Driver San Francisco
AppVersion=Driver San Francisco 1.02
AppPublisher=GRiD555x
AppPublisherURL=http://gold-club.ixterm.ru/tracker/
AppSupportURL=http://gold-club.ixterm.ru/tracker/
AppUpdatesURL=http://gold-club.ixterm.ru/tracker/
DefaultDirName={pf}\Driver San Francisco
DefaultGroupName=Driver San Francisco
AllowNoIcons=yes
OutputDir=D:\Новая папка
OutputBaseFilename=setup
SetupIconFile=C:\Documents and Settings\GRID\Рабочий стол\favicon.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64

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

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: "D:\sound.wav"; DestDir: "{tmp}"; Flags: dontcopy

Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: D:\BackImage.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\1c.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\2c.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\3c.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\GAME\DriverSF\Driver.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\GAME\DriverSF\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: {group}\Driver San Francisco; Filename: {app}\Driver.exe
Name: {group}\{cm:ProgramOnTheWeb,Driver San Francisco}; Filename: http://gold-club.ixterm.ru/tracker/
Name: {group}\{cm:UninstallProgram,Driver San Francisco}; Filename: {uninstallexe}
Name: {commondesktop}\Driver San Francisco; Filename: {app}\Driver.exe; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Driver San Francisco; Filename: {app}\Driver.exe; Tasks: quicklaunchicon

[Run]
Filename: {app}\Driver.exe; Description: {cm:LaunchProgram,Driver San Francisco}; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKLM; SubKey: SOFTWARE\UBISOFT\Driver San Francisco; ValueType: string; ValueName: launcherLanguage; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\UBISOFT\Driver San Francisco; ValueType: string; ValueName: GameLocation; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\UBISOFT\Driver San Francisco\GameUpdate; ValueType: string; ValueName: info; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\UBISOFT\Driver San Francisco\GameUpdate; ValueType: string; ValueName: language; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\UBISOFT\Driver San Francisco\GameUpdate; ValueType: string; ValueName: execPath; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\UBISOFT\Driver San Francisco\GameUpdate; ValueType: string; ValueName: installdir; ValueData: {app}; Flags: uninsdeletekey

[_Code] // тут убереш палочку перед Code обязательно.
function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;external 'sndPlaySoundA@winmm.dll stdcall';
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
BackImage, SlideImage: TBitmapImage;
TimerID: LongWord;
s:string;
Width, Height:Integer;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;external 'KillTimer@user32.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer;external 'GetSystemMetrics@user32.dll stdcall';

function PercentProgress(): Integer;
begin
  with WizardForm.ProgressGauge do begin
    Result:=(Position-Min)/((Max - Min)/100)
  end
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
percent: integer;
begin
  percent:=PercentProgress
  with SlideImage do
  begin
    if ((percent>0) and (percent<10) and (Tag<>1)) then
    begin
      Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\1.bmp')
      Tag:=1
    end else
      if ((percent>11) and (percent<20) and (Tag<>2)) then
      begin
      Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\2.bmp')
      Tag:=2
    end else
      if ((percent>21) and (percent<100) and (Tag<>3)) then
    begin
      Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\3.bmp')
      Tag:=3
    end
  end
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('BackImage.bmp')
  ExtractTemporaryFile('1.bmp')
  ExtractTemporaryFile('2.bmp')
  ExtractTemporaryFile('3.bmp')

  ExtractTemporaryFile(ExpandConstant('sound.wav')); //Извлекаем звуковой файл во временную папку
  sndPlaySound(ExpandConstant('{tmp}\sound.wav'), $0001 or $0008); //Проигрываем файл. Здесь указаны параметры для повторного проигрывания. Если мы хотим проиграть файл единожды, удаляем параметр 'or $0008'

  WizardForm.InnerPage.Visible:=False;
  WizardForm.WelcomeLabel1.Visible:=False;
  WizardForm.WelcomeLabel2.Visible:=False;
  WizardForm.WizardSmallBitmapImage.left:=0;
  WizardForm.WizardSmallBitmapImage.Width:=WizardForm.Width;
  WizardForm.PageNameLabel.Visible:=False;
  WizardForm.PageDescriptionLabel.Visible:=False;
  WizardForm.WizardBitmapImage.Width:=WizardForm.ClientWidth;
  WizardForm.WizardBitmapImage.Height:=WizardForm.ClientHeight;
  WizardForm.WizardBitmapImage2.Width:=WizardForm.ClientWidth;
  WizardForm.OuterNotebook.Height:=WizardForm.ClientHeight;
  WizardForm.InnerNotebook.Height:=WizardForm.ClientHeight;
  WizardForm.WizardBitmapImage2.Height:=WizardForm.ClientHeight;
  WizardForm.NextButton.BringToFront;
  WizardForm.CancelButton.BringToFront;
  WizardForm.BackButton.BringToFront;
  WizardForm.FinishedHeadingLabel.Visible:=False;
  WizardForm.FinishedLabel.Visible:=False;
  WizardForm.Position:=poScreenCenter
  WizardForm.Position:=poScreenCenter
  Width:=GetSystemMetrics(0)
  Height:=GetSystemMetrics(1)
  MainForm.BORDERSTYLE:=bsNone
  MainForm.Left:=0
  MainForm.Top:=0
  MainForm.Width:=Width
  MainForm.Height:=Height
  ExtractTemporaryFile('BackImage.bmp')
  s:=ExpandConstant('{tmp}')+'\BackImage.bmp '
  BackImage:=TBitmapImage.Create(MainForm)
  BackImage.Bitmap.LoadFromFile(s)
  BackImage.Align:=alClient
  BackImage.Parent:=MainForm
  BackImage.Stretch:=True
  MainForm.Visible:=True
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
Width, Height: Integer;
begin
  If CurPageID=wpInstalling then
  begin
    pfunc:=WrapTimerProc(@OnTimer, 4)
    TimerID:=SetTimer(0, 0, 500, pfunc)
    SlideImage:=TBitmapImage.Create(MainForm)
    with SlideImage do
    begin
      Stretch:=True
      Align:=alClient
      Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\1.bmp')
      Parent:=MainForm
      Tag:=1
    end
  end
  if CurPageID=wpFinished then
  begin
    SlideImage.Hide
  end
end;

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


GRiD555x 04-10-2011 15:51 1765688

А вот ещё один вопрос вот я делаю репак через Инно Сетап без FreeArc'a,у меня игра весит 9 гб я сделал репак и получилось 7 гб это так и должно быть или что то не так делаю??

R.i.m.s.k.y. 04-10-2011 15:53 1765690

GRiD555x,
Цитата:

Цитата Лександер
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64 »

такая компрессия максимальна, сильнее уже не сожмешь

GRiD555x 04-10-2011 16:11 1765699

Цитата:

Цитата R.i.m.s.k.y.
такая компрессия максимальна, сильнее уже не сожмешь »

Да у меня такая!!!

Я бы ещё хотел сделать слайдшоу на весь экран при установки!!!

Gnom_aka_Lexander 04-10-2011 16:37 1765731

Цитата:

Цитата R.i.m.s.k.y.
такая компрессия максимальна, сильнее уже не сожмешь »

да я не про компрессию, я скрипт в целом причесал малость. Ничего не трогая в нем.

R.i.m.s.k.y. 04-10-2011 17:14 1765756

Цитата:

Цитата GRiD555x
Я бы ещё хотел сделать слайдшоу на весь экран при установки »

см подпись - это не ко мне :)

Gnom_aka_Lexander 04-10-2011 17:26 1765762

Цитата:

Цитата GRiD555x
Я бы ещё хотел сделать слайдшоу на весь экран при установки!!! »

А я вот, вижу, что оно у тебя там у же есть :)
Название: S.T.A.L.K.E.R.- Народная солянка
Автор: Лександер
Описание: Простенький скрипт с IsDone 0.6e приятный глазу. Без революционных идей, но может, кому и понравится :)
Скачать
Перезалил - Версия 2 - вроде все мелкие ошибки поправил :)

insombia 05-10-2011 18:38 1766698

Вот для игры Rage чтобы вкл русские сабы нужно в параметре ярлыка ввести +set sys_lang "russian" как сделать чтобы при создании ярлыка на рабочем столе оно сразу было с этим параметром?

No4noylis 05-10-2011 18:52 1766708

insombia, В секции [Icons] там где прописано создание твоего ярлыка, добавь Parameters: set sys_lang "russian";
А если ярлык через чекбокс создаешь, то (конечно если я не ошибаюсь) вот здесь твой параметр написать надо:
Код:

    CreateShellLink(ExpandConstant('{userdesktop}\Ярлык.lnk'), 'set sys_lang "russian"', ExpandConstant('{app}\Ярлык.exe'), '', ExpandConstant('{app}'), ExpandConstant('{app}\Ярлык.exe'), 0, SW_SHOW);

VinTagE 05-10-2011 18:56 1766713

insombia, Так пробуй

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

GRiD555x 05-10-2011 19:27 1766740

какая строка нужна в скрипте чтобы расспоковался сам архив FreeArc,кагда жмёш на Setup?

insombia 05-10-2011 20:43 1766771

Цитата:

Цитата GRiD555x
какая строка нужна в скрипте чтобы расспоковался сам архив FreeArc,кагда жмёш на Setup? »

во первых когда идет речь о распаковке арков то жать самим инно не нужно
Цитата:

Цитата GRiD555x
какая строка нужна в скрипте чтобы расспоковался сам архив FreeArc »

смотря какой скрипт

GRiD555x 05-10-2011 21:20 1766791

insombia, ты можешь мне это рассказать подробнее?Через скай и т.д.?

Dark_Delphin 05-10-2011 23:20 1766873

Всем добрый вечер.

Какой скрипт нужно дописать что-бы картинка была на остальных страницах кроме первой и последней странице?

Заранее спасибо.

R.i.m.s.k.y. 06-10-2011 08:06 1766988

я хренею, дорогая редакция

такой вопрос возникает каждую пятую страницу

ntrx, поиск вверху, и пиши нормально, от жирного шрифта сообщения никто не подорвется внезапно хелпать

GRiD555x 06-10-2011 10:31 1767058

скажите какую строку убрать в скрипте при расспаковке там пишет,тестовый подсчёт времени,времени нету токо написанно тестовый подсчёт времени,какую строку надо убрать,и чтобы в конце не было в инсталяторе время установки тестовый подсчёт?самое главное что нету времени токо текст!!!

valyok666 06-10-2011 10:41 1767063

GRiD555x,прикрути к инсталлу records.inf, и тогда там где будет указано время до окончания установки. ИЛИ на крайний случай ты можешь вручную расставить проценты для распаковки и тогда, у тебя опять же там будет написано время до окончания установки.

GRiD555x 06-10-2011 10:43 1767064

Цитата:

Цитата valyok666
records.inf »

Это тупо вписать к инсталятору Setup?

No4noylis 06-10-2011 10:44 1767066

GRiD555x, :read:
читать дальше »

Для осуществения работоспособности библиотеки существует 2 вида определения процентных соотношений между операциями на всем прогрессбаре:

Автоматическая расстановка процентных соотношений в операциях.
При автоматической расстановке необходим тестовый проход для определения времени выполнения каждой операции относительно других.
Для включения данного режима необходимо заполнить вторые значения всех функций извлечения архивов нулями.
Краткая инструкция:
а) первым делом убедитесь, что в начале скрипта закомментирована строка

#define records
(т.е. необходимо поставить точку с запятой в начале этой строки);
б) компилим проект и запускаем на установку. Это и будет нашим тестовым проходом. Все операции должны дойти до конца и завершиться удачно. Прогрессбар будет зашкаливать и все компоненты будут извлечены вне зависимости от того выбраны они, или нет. Все так и должно быть!
в) после тестового прогона в указанной папке создастся файл records.inf (имя и путь назначается в процедуре инициализации. О ней см. "подробное описание функций" ниже), его необходимо добавить в проект, раскомметировав, или добавив в начале скрипта строку:

#define records

Так же стоит отметить, что если сам скрипт находится в папке отличной от той, в которую компилится проект (например в скрипте NFS:Undercover откомпиленный файл сохраняется в Output\setup.exe), то records.inf создастся в папке с setup.exe и его необходимо будет перенести непосредственно к скрипту, или же подправить в секции [Files] его истинное расположение, например:

#ifdef records
Source: Output\records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
г) снова откомпилить проект.
После этого инсталлер готов к работе.
При запуске процесс выполнения операций будет равномерно и корректно отображаться на прогрессбаре.

Ручная расстановка процентов на каждую операцию.
При ручной расстановке если в проекте множество операций, все расчеты необходимо производить вручную. Т.е. сумма процентов всех выполненных операций должна равняться 100%, иначе корректного отображения на прогрессбаре не будет.
Для включения данного режима необходимо заполнить вторые значения всех функций извлечения архивов значениями процентов, отличными от 0 (числа могут быть дробными).
При групповой распаковке архивов по маске (типа *.pcf) для операции задается общий процент на все распаковываемые файлы данной командой, а уж каждый из найденных файлов будет разбивать указанный кусок прогрессбара еще на части пропорциональные размерам файлов. Например строка:

if not ISArcExtract (0, 100, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), false, '', '', '') then break;
...
распакует все *.arc архивы из {src} в {app}, при чем весь прогрессбар будет поделен на кусочки пропрорциональные размерам архивов. В общем тут все так же как в скрипте распаковки FreeArc.iss и ему подобным. Таким образом при распаковке нескольких архивов одного типа проще пользоваться ручной расстановкой, т.к. отличие расперделения процентов от автоматической будет совсем небольшим, но за то не требуется тестовый проход.
Вот некоторые правила, которые неоходимо выполнять при ручной расстановке:
а) сумма процентов учитывая ветвления (использование компонентов, условий) в скрипте должна составлять 100;
б) у компонентов, для которых возможен выбор только одного из нескольких, должны быть одинаковые значения процентов;
в) НЕЛЬЗЯ использовать компоненты, которые можно выбирать одновременно с другими в одной группе (например несколько рядом стоящих компонент без флага exclusive), потому что сумма процентов при различном выборе пользователя может отличаться от 100.

valyok666 06-10-2011 10:46 1767071

GRiD555x, ну когда тестовый прогон сделан он автоматом всё расставил)

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

#define records

#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif


No4noylis, справка РулеЗ

GRiD555x 06-10-2011 15:10 1767368

Цитата:

Цитата valyok666
ну когда тестовый прогон сделан он автоматом всё расставил) »

Так спс,а как сделать чтобы в последнем завершающем окне не выскакивало окошко,время установки?

valyok666 06-10-2011 15:16 1767374

GRiD555x, кинь сюда скрипт я тебе отключу
там лейбл убрать надо)

GRiD555x 06-10-2011 15:22 1767380

valyok666,
Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define NeedSize "5000000000"

#define NeedMem 512

#define SecondProgressBar

;#define records
;#define precomp04
;#define precomp038
;#define unrar
;#define exe


[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{C6C85FA9-2B92-4A34-A7E2-FDEBA2D04DF8}
AppName=TrackMania 2
AppVersion=ПКВШ
;AppVerName=TrackMania 2 ПКВШ
AppPublisher=TrackMania 2
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\TrackMania 2
DefaultGroupName=TrackMania 2
OutputDir=D:\устанв
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[CustomMessages]
rus.ExtractedFile=Извлекается файл:
rus.Extracted=Распаковка архивов...
rus.CancelButton=Отменить распаковку
rus.Error=Ошибка распаковки!
rus.ElapsedTime=Прошло:
rus.RemainingTime=Осталось времени:
rus.EstimatedTime=Всего:
rus.AllElapsedTime=Время установки:


[Files]
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
;Source: Include\arc.ini; DestDir: {tmp}; Flags: dontcopy
;Source: Include\srep.exe; DestDir: {tmp}; Flags: dontcopy

#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp04
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\RTconsole.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp04.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp038
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\RTconsole.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef exe
Source: "D:\GAME\TrackMania 2\ManiaPlanetLauncher.exe"; DestDir: "{app}"; Flags: ignoreversion
#endif
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\TrackMania 2"; Filename: "{app}\ManiaPlanetLauncher.exe"
Name: "{commondesktop}\TrackMania 2"; Filename: "{app}\ManiaPlanetLauncher.exe"; Tasks: desktopicon

[Run]
Filename: "{app}\ManiaPlanetLauncher.exe"; Description: "{cm:LaunchProgram,TrackMania 2}"; Flags: nowait postinstall skipifsilent

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

[code  ]
const
  PCFonFLY=true;
  notPCFonFLY=false;
var
  LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;
  ISDoneProgressBar1: TNewProgressBar;
#ifdef SecondProgressBar
  LabelPct2: TLabel;
  ISDoneProgressBar2:TNewProgressBar;
#endif
  MyCancelButton: TButton;
  Cancel:integer;
  MyError:boolean;
  PCFVer:double;

type
  TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

function WrapMyCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall';

function ISArcExtract(CurComponent:longword; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: BOOL ):BOOL; external 'ISArcExtract@files:ISDone.dll stdcall';
function IS7ZipExtract(CurComponent:longword; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):BOOL; external 'IS7zipExtract@files:ISDone.dll stdcall';
function ISRarExtract(CurComponent:longword; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):BOOL; external 'ISRarExtract@files:ISDone.dll stdcall';
function ISPrecompExtract(CurComponent:longword; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):BOOL; external 'ISPrecompExtract@files:ISDone.dll stdcall';
function ISSRepExtract(CurComponent:longword; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):BOOL; external 'ISSrepExtract@files:ISDone.dll stdcall';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):BOOL; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall';
function ISDoneInitialize(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:longword; PrecompVers: double; RecursiveSubDir:boolean; WinHandle, NeededMem:longint; callback:TCallback):BOOL; external 'ISDoneInitialize@files:ISDone.dll stdcall';
function ISDoneStop:BOOL; external 'ISDoneStop@files:ISDone.dll stdcall';

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
  LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
#ifdef SecondProgressBar
  if CurrentPct<=1000 then
    ISDoneProgressBar2.Position := CurrentPct;
  LabelPct2.Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
#endif
  LabelCurrFileName.Caption:=MinimizePathName(ExpandConstant('{cm:ExtractedFile} ')+CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width);
  LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
  LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
  LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
  Result := Cancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
  if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then Cancel:=1;
end;

procedure HideComponents;
begin
  WizardForm.FileNamelabel.Hide;
  ISDoneProgressBar1.Hide;
  LabelPct1.Hide;
  LabelCurrFileName.Hide;
  LabelTime1.Hide;
  LabelTime2.Hide;
  MyCancelButton.Hide;
#ifdef SecondProgressBar
  ISDoneProgressBar2.Hide;
  LabelPct2.Hide;
#endif
end;

procedure ShowComponents;
var PBTop:integer;
begin
  PBTop:=ScaleY(50);
  ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar1 do begin
    Parent  := WizardForm.InstallingPage;
    Height  := WizardForm.ProgressGauge.Height;
    Left    := ScaleX(0);
    Top      := PBTop;
    Width    := ScaleX(365);
    Max      := 1000;
  end;
  LabelPct1 := TLabel.Create(WizardForm);
  with LabelPct1 do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Left      := ISDoneProgressBar1.Width+ScaleX(5);
    Top      := ISDoneProgressBar1.Top + ScaleY(2);
    Width    := ScaleX(80);
  end;
  LabelCurrFileName := TLabel.Create(WizardForm);
  with LabelCurrFileName do begin
    Parent  := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width+ScaleX(30);
    Left    := ScaleX(0);
    Top      := ScaleY(30);
  end;
#ifdef SecondProgressBar
  PBTop:=PBTop+ScaleY(25);
  ISDoneProgressBar2 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar2 do begin
    Parent  := WizardForm.InstallingPage;
    Left    := ScaleX(0);
    Top      := PBTop+ScaleY(8);
    Width    := ISDoneProgressBar1.Width;
    Max      := 1000;
    Height  := WizardForm.ProgressGauge.Height;
  end;
  LabelPct2 := TLabel.Create(WizardForm);
  with LabelPct2 do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Left      := ISDoneProgressBar2.Width+ScaleX(5);
    Top      := ISDoneProgressBar2.Top + ScaleY(2);
    Width    := ScaleX(80);
  end;
#endif
  LabelTime1 := TLabel.Create(WizardForm);
  with LabelTime1 do begin
    Parent  := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width div 2;
    Left    := ScaleX(0);
    Top      := PBTop + ScaleY(35);
  end;
  LabelTime2 := TLabel.Create(WizardForm);
  with LabelTime2 do begin
    Parent  := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := LabelTime1.Width+ScaleX(40);
    Left    := ISDoneProgressBar1.Width div 2;
    Top      := LabelTime1.Top;
  end;
  LabelTime3 := TLabel.Create(WizardForm);
  with LabelTime3 do begin
    Parent  := WizardForm.FinishedPage;
    AutoSize := False;
    Width    := 300;
    Left    := 180;
    Top      := 200;
  end;
  MyCancelButton:=TButton.Create(WizardForm);
  with MyCancelButton do begin
    Parent:=WizardForm;
    Width:=ScaleX(135);
    Caption:=ExpandConstant('{cm:CancelButton}');
    Left:=ScaleX(360);
    Top:=WizardForm.cancelbutton.top;
    OnClick:=@CancelButtonOnClick;
  end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  if (CurPageID = wpFinished) and MyError then
  begin
    LabelTime3.Hide;
    WizardForm.Caption:= ExpandConstant('{cm:Error}');
    WizardForm.FinishedLabel.Font.Color:= clRed;
    WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
  end;
end;

function CheckError:boolean;
begin
  result:= not MyError;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:longword;
    tmp:integer;
begin
  if CurStep = ssInstall then begin  //Если необходимо, можно поменять на ssPostInstall
    WizardForm.ProgressGauge.Hide;
    WizardForm.CancelButton.Hide;
    ShowComponents;
    WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
    Cancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

    ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
//    ExtractTemporaryFile('arc.ini');
//    ExtractTemporaryFile('srep.exe');

#ifdef records
    ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp04
    ExtractTemporaryFile('packjpg_dll.dll');
    ExtractTemporaryFile('RTconsole.exe');
    ExtractTemporaryFile('precomp04.exe');
#endif
#ifdef precomp038
    ExtractTemporaryFile('packjpg_dll.dll');
    ExtractTemporaryFile('RTconsole.exe');
    ExtractTemporaryFile('precomp038.exe');
    ExtractTemporaryFile('zlib1.dll');
#endif
#ifdef unrar
    ExtractTemporaryFile('Unrar.dll');
#endif

#ifdef precomp04
    PCFVer:=0.4;
#else
#ifdef precomp038
    PCFVer:=0.38;
#else
    PCFVer:=0;
#endif
#endif
    repeat
      MyError:=true;
      if not ISDoneInitialize(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, PCFVer, false, MainForm.Handle, {#NeedMem}, @ProgressCallback) then break;
      repeat

        if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'),  false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
       
        MyError:=false;
      until true;
      ISDoneStop;
    until true;
    HideComponents;
    WizardForm.CancelButton.Visible:=true;
    WizardForm.CancelButton.Enabled:=false;
  end;
  if (CurStep=ssPostInstall) and MyError then begin
    Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, tmp);
  end;
end;


valyok666 06-10-2011 15:27 1767384

GRiD555x,
читать дальше »
#define NeedSize "5000000000"

#define NeedMem 512

#define SecondProgressBar

;#define records
;#define precomp04
;#define precomp038
;#define unrar
;#define exe


[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{C6C85FA9-2B92-4A34-A7E2-FDEBA2D04DF8}
AppName=TrackMania 2
AppVersion=ПКВШ
;AppVerName=TrackMania 2 ПКВШ
AppPublisher=TrackMania 2
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\TrackMania 2
DefaultGroupName=TrackMania 2
OutputDir=D:\устанв
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[CustomMessages]
rus.ExtractedFile=Извлекается файл:
rus.Extracted=Распаковка архивов...
rus.CancelButton=Отменить распаковку
rus.Error=Ошибка распаковки!
rus.ElapsedTime=Прошло:
rus.RemainingTime=Осталось времени:
rus.EstimatedTime=Всего:


[Files]
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
;Source: Include\arc.ini; DestDir: {tmp}; Flags: dontcopy
;Source: Include\srep.exe; DestDir: {tmp}; Flags: dontcopy

#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp04
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\RTconsole.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp04.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp038
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\RTconsole.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef exe
Source: "D:\GAME\TrackMania 2\ManiaPlanetLauncher.exe"; DestDir: "{app}"; Flags: ignoreversion
#endif
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\TrackMania 2"; Filename: "{app}\ManiaPlanetLauncher.exe"
Name: "{commondesktop}\TrackMania 2"; Filename: "{app}\ManiaPlanetLauncher.exe"; Tasks: desktopicon

[Run]
Filename: "{app}\ManiaPlanetLauncher.exe"; Description: "{cm:LaunchProgram,TrackMania 2}"; Flags: nowait postinstall skipifsilent

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

[code ]
const
PCFonFLY=true;
notPCFonFLY=false;
var
LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2: TLabel;
ISDoneProgressBar1: TNewProgressBar;
#ifdef SecondProgressBar
LabelPct2: TLabel;
ISDoneProgressBar2:TNewProgressBar;
#endif
MyCancelButton: TButton;
Cancel:integer;
MyError:boolean;
PCFVer:double;

type
TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

function WrapMyCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall';

function ISArcExtract(CurComponent:longword; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: BOOL ):BOOL; external 'ISArcExtract@files:ISDone.dll stdcall';
function IS7ZipExtract(CurComponent:longword; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):BOOL; external 'IS7zipExtract@files:ISDone.dll stdcall';
function ISRarExtract(CurComponent:longword; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):BOOL; external 'ISRarExtract@files:ISDone.dll stdcall';
function ISPrecompExtract(CurComponent:longword; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):BOOL; external 'ISPrecompExtract@files:ISDone.dll stdcall';
function ISSRepExtract(CurComponent:longword; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):BOOL; external 'ISSrepExtract@files:ISDone.dll stdcall';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):BOOL; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall';
function ISDoneInitialize(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:longword; PrecompVers: double; RecursiveSubDir:boolean; WinHandle, NeededMem:longint; callback:TCallback):BOOL; external 'ISDoneInitialize@files:ISDone.dll stdcall';
function ISDoneStop:BOOL; external 'ISDoneStop@files:ISDone.dll stdcall';

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
#ifdef SecondProgressBar
if CurrentPct<=1000 then
ISDoneProgressBar2.Position := CurrentPct;
LabelPct2.Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
#endif
LabelCurrFileName.Caption:=MinimizePathName(ExpandConstant('{cm:ExtractedFile} ')+CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width);
LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
Result := Cancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then Cancel:=1;
end;

procedure HideComponents;
begin
WizardForm.FileNamelabel.Hide;
ISDoneProgressBar1.Hide;
LabelPct1.Hide;
LabelCurrFileName.Hide;
LabelTime1.Hide;
LabelTime2.Hide;
MyCancelButton.Hide;
#ifdef SecondProgressBar
ISDoneProgressBar2.Hide;
LabelPct2.Hide;
#endif
end;

procedure ShowComponents;
var PBTop:integer;
begin
PBTop:=ScaleY(50);
ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar1 do begin
Parent := WizardForm.InstallingPage;
Height := WizardForm.ProgressGauge.Height;
Left := ScaleX(0);
Top := PBTop;
Width := ScaleX(365);
Max := 1000;
end;
LabelPct1 := TLabel.Create(WizardForm);
with LabelPct1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Left := ISDoneProgressBar1.Width+ScaleX(5);
Top := ISDoneProgressBar1.Top + ScaleY(2);
Width := ScaleX(80);
end;
LabelCurrFileName := TLabel.Create(WizardForm);
with LabelCurrFileName do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width+ScaleX(30);
Left := ScaleX(0);
Top := ScaleY(30);
end;
#ifdef SecondProgressBar
PBTop:=PBTop+ScaleY(25);
ISDoneProgressBar2 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar2 do begin
Parent := WizardForm.InstallingPage;
Left := ScaleX(0);
Top := PBTop+ScaleY(8);
Width := ISDoneProgressBar1.Width;
Max := 1000;
Height := WizardForm.ProgressGauge.Height;
end;
LabelPct2 := TLabel.Create(WizardForm);
with LabelPct2 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Left := ISDoneProgressBar2.Width+ScaleX(5);
Top := ISDoneProgressBar2.Top + ScaleY(2);
Width := ScaleX(80);
end;
#endif
LabelTime1 := TLabel.Create(WizardForm);
with LabelTime1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width div 2;
Left := ScaleX(0);
Top := PBTop + ScaleY(35);
end;
LabelTime2 := TLabel.Create(WizardForm);
with LabelTime2 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := LabelTime1.Width+ScaleX(40);
Left := ISDoneProgressBar1.Width div 2;
Top := LabelTime1.Top;
end;
MyCancelButton:=TButton.Create(WizardForm);
with MyCancelButton do begin
Parent:=WizardForm;
Width:=ScaleX(135);
Caption:=ExpandConstant('{cm:CancelButton}');
Left:=ScaleX(360);
Top:=WizardForm.cancelbutton.top;
OnClick:=@CancelButtonOnClick;
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and MyError then
begin
WizardForm.Caption:= ExpandConstant('{cm:Error}');
WizardForm.FinishedLabel.Font.Color:= clRed;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
end;
end;

function CheckError:boolean;
begin
result:= not MyError;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:longword;
tmp:integer;
begin
if CurStep = ssInstall then begin //Если необходимо, можно поменять на ssPostInstall
WizardForm.ProgressGauge.Hide;
WizardForm.CancelButton.Hide;
ShowComponents;
WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
Cancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
// ExtractTemporaryFile('arc.ini');
// ExtractTemporaryFile('srep.exe');

#ifdef records
ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp04
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('RTconsole.exe');
ExtractTemporaryFile('precomp04.exe');
#endif
#ifdef precomp038
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('RTconsole.exe');
ExtractTemporaryFile('precomp038.exe');
ExtractTemporaryFile('zlib1.dll');
#endif
#ifdef unrar
ExtractTemporaryFile('Unrar.dll');
#endif

#ifdef precomp04
PCFVer:=0.4;
#else
#ifdef precomp038
PCFVer:=0.38;
#else
PCFVer:=0;
#endif
#endif
repeat
MyError:=true;
if not ISDoneInitialize(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, PCFVer, false, MainForm.Handle, {#NeedMem}, @ProgressCallback) then break;
repeat

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

MyError:=false;
until true;
ISDoneStop;
until true;
HideComponents;
WizardForm.CancelButton.Visible:=true;
WizardForm.CancelButton.Enabled:=false;
end;
if (CurStep=ssPostInstall) and MyError then begin
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, tmp);
end;
end;

терь норм должно быть

GRiD555x 06-10-2011 15:29 1767389

Цитата:

Цитата valyok666
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked »

ты эти строки добавил?

valyok666 06-10-2011 15:30 1767391

GRiD555x, я скопировал то что ты написал и убрал то что не нужно
остальное я не трогал

GRiD555x 06-10-2011 15:44 1767401

Так ещё вопрос,как сделать чтобы было в установке обновить DirectX?

valyok666 06-10-2011 15:54 1767419

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

[Setup]
ShowTasksTreeLines=true

[Tasks]
Name: Redist; Description: Дополнительное программное обеспечение:;
Name: Redist\directx; Description: Обновить Microsoft DirectX; Flags: unchecked;

[Run]
Filename: {src}\Redist\DirectX\DXSETUP.exe; WorkingDir: {src}\Redist\DirectX\; Parameters: /silent; Tasks: Redist\directx; Flags: waituntilterminated;


у кого есть примеры работы с ботвой?кроме стандартных

GRiD555x 06-10-2011 16:25 1767457

А вот можно скрипт примерно на токо установочник http://lostpic.net/images/20765b55d2...004d6ee18e.jpg ?

Gugle 06-10-2011 17:01 1767496

Доброго времени суток!

При попытке обратиться к dll

Код:

[*CODE]
function getListDevices(size: Integer):integer;
external 'getListDevices@MyPcapDLL.dll stdcall';

выдает такую ошибку:
Код:

Runtime Error (at -1:0):
Сannot Import dll:MyPcapDLL.dll.

Из за чего это может быть?

valyok666 06-10-2011 17:03 1767497

Gugle,
[*CODE]
function getListDevices(size: Integer):integer;
external 'getListDevices@MyPcapDLL.dll stdcall';

ты со звёздочкой пишешь?

Raf-9600 06-10-2011 17:23 1767510

Ктонить может объединить эти коды?

Отображение информации о винчестерах:
читать дальше »
var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel: TLabel;
n: Integer;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard();
begin
NeedSize := 78; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
ListBoxRefresh
end;
end;

Установка в D:\Games
читать дальше »
function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(lpRootPathName: PChar): Cardinal; external 'GetDriveTypeA@kernel32.dll stdcall';

const
DRIVE_FIXED = 3;

function NoSD(s: string): string;
var
x, bit, i: Integer;
tp: Cardinal;
sd: string;
begin
sd:= ExpandConstant('{sd}');
Result:= sd;
// Вызываем функцию WinAPI
// Функция возвращает битовую маску установленных логических дисков.
// Бит 0 определяет наличие диска А:, бит 1 - диска B и т.д.
x:= GetLogicalDrives;
if x <> 0 then
// цикл по полученным битам переменной X
for i:= 1 to 64 do
begin
// Накладываем битовую маску для выделения бита с поряковым номером 0
bit:= x and 1;
// нашли логический диск...
if bit = 1 then
begin
// определяем тип логического диска
tp:= GetDriveType(PChar(Chr(64 + i) + ':'));
if tp = DRIVE_FIXED then
// если диск не является системным
if Chr(64 + i) <> Copy(sd, 1, 1) then
begin
Result:= Chr(64 + i) + ':';
Break;
end;
end;
// побитовый сдвиг вправо
x:= x shr 1;
end;
end;

valyok666 06-10-2011 17:38 1767517

Raf-9600,

читать дальше »
const
DRIVE_FIXED = 3;

var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel: TLabel;
n: Integer;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Òðåáóåòñÿ êàê ìèíèìóì '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Ãá ñâîáîäíîãî äèñêîâîãî ïðîñòðàíñòâà.' else
NeedSpaceLabel.Caption := 'Òðåáóåòñÿ êàê ìèíèìóì '+ IntToStr(NeedSize)+ ' Ìá ñâîáîäíîãî äèñêîâîãî ïðîñòðàíñòâà.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Ïåðåâîä ÷èñëà â çíà÷åíèå áò/Êá/Ìá/Ãá/Òá (äî 3õ çíàêîâ ïîñëå çàïÿòîé)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Ìá' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Áò' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Êá' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Ìá' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Ãá' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Òá'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Óäàëåíèå íà÷àëüíûõ, êîíå÷íûõ è ïîâòîðíûõ ïðîáåëîâ }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Îáðåçàòü ñòðîêó äî çàäàííîãî êîë-âà ñèìâîëîâ}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='áåç ìåòêè';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // äèñê 'À' ïðîïóñòèòü
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { åñëè â íàêîïèòåëå íåò äèñêà, ïðîïóñòèòü îáíîâëåíèå }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' âñåãî -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' âñåãî| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% ñâîá|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end;
end;


procedure InitializeWizard();
begin
NeedSize := 78; //Çäåñü óêàçûâàåòñÿ ìåñòî äëÿ ïðèëîæåíèÿ
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

function NoSD(s: string): string;
var
x, bit, i: Integer;
tp: Cardinal;
sd: string;
begin
sd:= ExpandConstant('{sd}');
Result:= sd;
// Âûçûâàåì ôóíêöèþ WinAPI
// Ôóíêöèÿ âîçâðàùàåò áèòîâóþ ìàñêó óñòàíîâëåííûõ ëîãè÷åñêèõ äèñêîâ.
// Áèò 0 îïðåäåëÿåò íàëè÷èå äèñêà À:, áèò 1 - äèñêà B è ò.ä.
x:= GetLogicalDrives;
if x <> 0 then
// öèêë ïî ïîëó÷åííûì áèòàì ïåðåìåííîé X
for i:= 1 to 64 do
begin
// Íàêëàäûâàåì áèòîâóþ ìàñêó äëÿ âûäåëåíèÿ áèòà ñ ïîðÿêîâûì íîìåðîì 0
bit:= x and 1;
// íàøëè ëîãè÷åñêèé äèñê...
if bit = 1 then
begin
// îïðåäåëÿåì òèï ëîãè÷åñêîãî äèñêà
tp:= GetDriveType(PChar(Chr(64 + i) + ':'));
if tp = DRIVE_FIXED then
// åñëè äèñê íå ÿâëÿåòñÿ ñèñòåìíûì
if Chr(64 + i) <> Copy(sd, 1, 1) then
begin
Result:= Chr(64 + i) + ':';
Break;
end;
end;
// ïîáèòîâûé ñäâèã âïðàâî
x:= x shr 1;
end;
end;



procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
ListBoxRefresh
end;
end;


вроде бы так сорри за крякобразы=)

Raf-9600, получилось? всё? а что за код 2?

Gugle 06-10-2011 17:59 1767538

Цитата:

Цитата valyok666
ты со звёздочкой пишешь? »

Нет. Это показать в какой секции я это пишу.

P.S.
Пытаюсь создать сою dll на Си и ни одна из них не хочет грузиться в inno. Не могу понять почему.

El Sanchez 06-10-2011 18:08 1767542

Цитата:

Цитата Gugle
При попытке обратиться к dll »

А где лежит dll? При данном объявлении функции dll-ка должна лежать в одном из каталогов, перечисленных в системной переменной PATH. Либо включать в инсталлятор и правильно вызвать:
Код:

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

[code]
function getListDevices(size: Integer):integer;
external 'getListDevices@files:MyPcapDLL.dll stdcall';


valyok666 06-10-2011 18:11 1767544

El Sanchez, ты меня опередил

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

[code]
function getListDevices(size: Integer):integer;
external 'getListDevices@{tmp}\MyPcapDLL.dll stdcall delayload';

или можно так

Gugle 06-10-2011 18:36 1767558

dll загрузил, пробую общаться с ней, но ничего не получается.
В библиотеке простая функция инкремента:
Код:

int inc (int *d)
{
  return ++(*d);
}

Прописал библиотеку как было сказано выше:
Код:

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

[*code] // тут без * (как вставить прально незнаю)
function inc(size: integer):integer;
external 'inc@files:testDll.dll stdcall';

обращаюсь к функции
Код:

FUNCTION NextButtonClick(CurPageID: Integer): Boolean;
VAR
 i: integer;
 
BEGIN
  i := 10;
  i := inc(i);
  MsgBox('getListDevices = '+IntToStr(i), mbInformation, MB_OK);
  Result := True;
END;

при выполнении получаю:
Код:

Runtime Error (at 4:47):
Access violation at address 631C1205. Write of address 0000000A.


valyok666 07-10-2011 18:51 1768212

Gugle, подожди Лександра он лучше разбирается в dll=)

VinTagE 07-10-2011 20:01 1768266

Gugle, Скинь свою dll и скрипт использование твой библиотеке.
Посмотрю

El Sanchez 07-10-2011 20:55 1768299


Цитата:

Цитата Gugle
В библиотеке простая функция инкремента »

Gugle, она должна быть еще и экспортируемой.

VinTagE 07-10-2011 21:09 1768309

ISProcess.dll
Описание:
Библиотека предназначена для создания своего процесса в окне инсталляции.
Из ISProcess.dll сделал распаковку Arc - архивов с плавным прогресс баром. (Пример).
Так же идёт поиск архивов + идёт вычесления размера все архивов для распаковки.
Версия - 1.0.0b

P.S.: Всё подробное можно узнать в скрипте!

Скачать

Gnom_aka_Lexander 07-10-2011 21:11 1768310

Цитата:

Цитата El Sanchez
она должна быть еще и экспортируемой. »

Она у него экспортируется. Сегодня утром разбирались. Засада какаято с языками, но я остался при мнении, что чтото делалось неправильно. ПРосто оригинал был на Си, я накидал то-же самое на дельфи. Мой вариант оказался универсален, тот - только при пождключении к проекту на Си. В общем, я так и не понял разницы, поскольку эту Си не знаю совсем :)

insombia 07-10-2011 21:59 1768340

Есть идея но сам не могу реализовать вообщем может много кто знает такую штуку как Inno WaterCtrl v2.0 хотелось бы сделать похожее но чтобы шел снег

kindza811 08-10-2011 00:03 1768411

Здравствуйте,подскажите пожалуйста как убрать 5GB

valyok666 08-10-2011 00:13 1768415

kindza811, смотри скрипт #define

nik1967 08-10-2011 00:23 1768418

kindza811, по ходу придётся натирать хрустальный шар, как R.i.m.s.k.y.
Экстрасэнсы ушли на подзарядку...

VASYAKRN 08-10-2011 08:58 1768526

Соедините пожалста ети два скрипта

http://rghost.ru/24665331
http://rghost.ru/24665211

No4noylis 08-10-2011 12:01 1768594

VASYAKRN,
Я вообще в шоке!!! Продам скрипт, я думал продавать можно только то, что принадлежит тебе! Как же ты создал такой скрипт если не в состоянии даже объединить два кода??? Более того, здесь, автор:Vasyakrn, ну это просто смешно!!!!

Raf-9600 08-10-2011 13:01 1768623

А реально ли сделать чтоб и DescCtrl.dll работал (описание компонентов), и чтоб компоненты можно было сворачивать?

P.S.
Цитата:

Цитата No4noylis
Я вообще в шоке!!! Продам скрипт, я думал продавать можно только то, что принадлежит тебе! »

1. А симпатичный скрипт. Интересно, где он его достал?
2. Теперь если он когонить попросит помочь ему со скриптом, можно смело требовать с него оплату. =)

sergey3695 08-10-2011 14:19 1768672

Цитата:

Цитата Raf-9600
1. А симпатичный скрипт. Интересно, где он его достал?
2. Теперь если он когонить попросит помочь ему со скриптом, можно смело требовать с него оплату. »

Во-первых, это не его скрипт,а riperoc-а
Во-вторых у него нет этого скрипта, он просто скопиравал эту инфу с этого сайта

LinkOFF 08-10-2011 14:26 1768677

Подскажите пожалуйста как распаковывать архивы внешними dll'ками?\
И если у кого есть любой скрипт механиков дайте пожалуйста

Edison007 08-10-2011 14:52 1768692

LinkOFF
а поискать?
1. ISDone
2. ISFreeArcExtract
3. IsExec

Цитата:

Цитата LinkOFF
И если у кого есть любой скрипт механиков дайте пожалуйста »

http://rghost.ru/24692191

valyok666 08-10-2011 16:26 1768739

Raf-9600, +1
тырит чужие скрипты немного переделывает и выдаёт за свои

Raf-9600 08-10-2011 18:56 1768845

Цитата:

Цитата valyok666
тырит чужие скрипты немного переделывает и выдаёт за свои »

Самое худшее, что даже переделывает не он, а люди с этого форума, или ру-боарда

VASYAKRN 08-10-2011 19:03 1768852

1.Етот скрипт я делал сам
2.В категории продам скрипт на моем сайте я просто скопирувал с http://www.krinkels.ru/forum/ и забил написать автора
3. А ети два скрипти я пробивал соидинить но не получилось

No4noylis 08-10-2011 19:04 1768853

Цитата:

Цитата Raf-9600
А реально ли сделать чтоб и DescCtrl.dll работал (описание компонентов), и чтоб компоненты можно было сворачивать? »

Конечно, просто вместе с компонентами скрываешь и InfoPanel.:)
Цитата:

Цитата VASYAKRN
3. А ети два скрипти я пробивал соидинить но не получилось »

Не знаю, у меня все соединилось замечательно...

VASYAKRN 08-10-2011 19:06 1768855

А если ви думаете что етот скрипт чужой то найдите автора!!!!!

valyok666 08-10-2011 19:21 1768868

VASYAKRN,писать по русски научись сначало

VASYAKRN 08-10-2011 19:26 1768870

valyok666, Не спригивай с базара

valyok666 08-10-2011 19:29 1768874

VASYAKRN, пока по русски писать не научишься базара не будет=)

insombia 08-10-2011 19:34 1768878

VASYAKRN скрипт сделал VinTagE так что не пи***

Gnom_aka_Lexander 08-10-2011 19:35 1768881

Цитата:

Цитата insombia
скрипт сделал VinTagE так что не пи*** »

Я уже расписывал с десяток сираниц назад, где чей скрипт.

insombia 08-10-2011 19:42 1768888

Лександер у него на сайте так было написано
VASYAKRN хорошо если ты пишешь сам скрипты то скажи чем если не ответишь ты настоящее говно которое умеет только пи**деть

No4noylis 08-10-2011 19:49 1768894

Цитата:

Цитата insombia
VASYAKRN хорошо если ты пишешь сам скрипты то скажи чем если не ответишь ты настоящее говно которое умеет только пи**деть »

insombia, Это ни к чему, тут и так все понятно... Просто если я, например, сам пишу себе скрипты, то я смог легко объединить те два кода и исправить ошибки :)

valyok666 08-10-2011 19:53 1768898

тот скрипт создание формы и т.д как же ты всё там объединил если эти 2 кода объединить не можешь????

No4noylis 08-10-2011 19:55 1768900

Цитата:

Цитата valyok666
No4noylis, тот скрипт создание формы и т.д как же ты всё там объединил если эти 2 кода объединить не можешь???? »

О чем ты, по подробней, какие два кода я объединить не могу???
Цитата:

Цитата valyok666
No4noylis, я не про тебяа про VASYAKRN »

Тогда, если не сложно, исправь сообщение :)

insombia 08-10-2011 19:55 1768902

No4noylis я просто веду к тому что он вечно возьмет чужой скрипт и говорит что он его создал

valyok666 08-10-2011 19:56 1768905

No4noylis, я не про тебя=)а про VASYAKRN

VinTagE 08-10-2011 20:04 1768913

No4noylis,
valyok666,
insombia,
VASYAKRN,
Собирает с моего скрипта (CODBO v.1.0) и он как я видел написал вот это
Цитата:

// Cкрипт сделан из Call of Duty Black Ops (1.0) by VinTagE ;

// Причина не хотел писать скрипт с нуля поскольку ето занимает много времени

//Огромное спасиба:
//=== nik1967 за идею
//=== VinTagE за скрипт Call of Duty Black Ops (1.0)
//===
//===
//===
В скрипте Darksiders BlackSelf By Vasyakrn.7z
Так что не нагоняем на него!

Только это надпись убила меня:
Цитата:

//Скрипт мой ето закос под скрипт Nik1967 с одноименним названиям, которий в свою очередь делал ево под BlackSelf

insombia 08-10-2011 20:16 1768931

VinTagE понятно но если зайти на его сайт то там почти везде написано что он сделал скрипт из всех которых там есть

Raf-9600 08-10-2011 20:27 1768945

Цитата:

Цитата No4noylis
Цитата:

Цитата Raf-9600
А реально ли сделать чтоб и DescCtrl.dll работал (описание компонентов), и чтоб компоненты можно было сворачивать? »

Конечно, просто вместе с компонентами скрываешь и InfoPanel. »

А ты мог бы такой фокус сотворить, если не сложно? В благодарность, могу дать пригласительный на форум forum.0day.kiev.ua или поделиться бубликами на их трекере

Собстно скрипт, к которому хотелось бы приделать такую фичу:
читать дальше »
#define TIME_FOR_VIEW 10

[Setup]
AppName=StarCraft All in One
AppVerName=StarCraft All in One
DefaultDirName={code:NoSD}\Games\StarCraft
OutputBaseFilename=setup
;Compression=zip
Compression=lzma2/ultra64
SolidCompression=yes
DiskSpanning=yes
DiskSliceSize=730000000
;WizardImageFile=myimage.bmp
WizardImageStretch=yes
;WizardSmallImageFile=mysmallimage.bmp
DisableStartupPrompt=yes
DefaultGroupName=StarCraft
AppPublisher=Blizzard Entertainment
AppPublisherURL=http://eu.blizzard.com/ru-ru/games/sc/index.html
AppUpdatesURL=http://us.blizzard.com/support/article.xml?locale=en_US&articleId=21149
AppSupportURL=http://us.blizzard.com/support/index.xml?locale=en_US&gameId=3
ChangesAssociations=yes
AllowNoIcons=yes
AppendDefaultDirName=yes
AlwaysShowGroupOnReadyPage=yes
AlwaysShowDirOnReadyPage=yes
SlicesPerDisk=1
VersionInfoVersion=1.0.0.0
UninstallDisplayIcon={app}\StarCraft.exe
AppId=StarCraft All in One by Raf-9600
AllowRootDirectory=no
DirExistsWarning=yes
;InfoBeforeFile=InfoBefore_RU.rtf
SignedUninstallerDir={app}\Uninstaller StarCraft All in One




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


[Messages]
TranslatorNote=Installer created by Raf-9600%nRaf-9600@yandex.ru
BeveledLabel=Created by Raf-9600


[Components]
Name: "Game"; Description: "Тип установки:"; Flags: fixed; Types: full compact custom;
Name: "Game\Full"; Description: "Игра"; Flags: exclusive;
Name: "Game\Lokal"; Description: "Локализация"; Flags: exclusive;

Name: "SoundUnit"; Description: "Озвучка юнитов:"; Flags: fixed; Types: full compact custom;
Name: "SoundUnit\eng"; Description: "Английская"; Flags: exclusive;
Name: "SoundUnit\fra"; Description: "Французская"; Flags: exclusive; ExtraDiskSpaceRequired: 74772480
Name: "SoundUnit\deu"; Description: "Немецкая"; Flags: exclusive; ExtraDiskSpaceRequired: 76926976
Name: "SoundUnit\ita"; Description: "Итальянская"; Flags: exclusive; ExtraDiskSpaceRequired: 80142336
Name: "SoundUnit\spa"; Description: "Испанская"; Flags: exclusive; ExtraDiskSpaceRequired: 80470016
Name: "SoundUnit\ukr"; Description: "Украинская"; Flags: exclusive; ExtraDiskSpaceRequired: 87625728
Name: "SoundUnit\rus"; Description: "Русская от:"; Flags: exclusive;
Name: "SoundUnit\rus\Tycoon"; Description: "Tycoon"; Flags: exclusive; Types: full; ExtraDiskSpaceRequired: 72474624
Name: "SoundUnit\rus\Fargus1"; Description: "Фаргус v1"; Flags: exclusive; ExtraDiskSpaceRequired: 79585280
Name: "SoundUnit\rus\Fargus2"; Description: "Фаргус v2"; Flags: exclusive; ExtraDiskSpaceRequired: 76685312
Name: "SoundUnit\rus\SC2"; Description: "StarCraft 2"; Flags: exclusive; ExtraDiskSpaceRequired: 310125136
Name: "SoundUnit\rus\Ogon"; Description: "Надмозг"; Flags: exclusive; ExtraDiskSpaceRequired: 73920512
Name: "SoundUnit\rus\7Wolf"; Description: "7Wolf"; Flags: exclusive; ExtraDiskSpaceRequired: 70934528
Name: "SoundUnit\rus\Mordo"; Description: "Мордовия"; Flags: exclusive; ExtraDiskSpaceRequired: 73920512

Name: "StarCraft"; Description: StarCraft; Types: full compact custom;

Name: "StarCraft\Text"; Description: "Текст:"; Flags: fixed; Types: full compact custom;
Name: "StarCraft\Text\eng"; Description: "Английский"; Flags: exclusive;
Name: "StarCraft\Text\fra"; Description: "Французский"; Flags: exclusive;
Name: "StarCraft\Text\deu"; Description: "Немецкий"; Flags: exclusive;
Name: "StarCraft\Text\ita"; Description: "Итальянский"; Flags: exclusive;
Name: "StarCraft\Text\spa"; Description: "Испанский"; Flags: exclusive;
Name: "StarCraft\Text\ukr"; Description: "Украинский"; Flags: exclusive;
Name: "StarCraft\Text\rus"; Description: "Русский от:"; Flags: exclusive;
Name: "StarCraft\Text\rus\Freze"; Description: "Frezzze"; Flags: exclusive; Types: full
Name: "StarCraft\Text\rus\Tycoon"; Description: "Tycoon"; Flags: exclusive;
Name: "StarCraft\Text\rus\Fargus"; Description: "Фаргус"; Flags: exclusive;
Name: "StarCraft\Text\rus\Ogon"; Description: "Надмозг"; Flags: exclusive;

Name: "StarCraft\SoundCamp"; Description: "Озвучка брифингов:"; Types: full compact custom;
Name: "StarCraft\SoundCamp\eng"; Description: "Английская"; Flags: exclusive;
Name: "StarCraft\SoundCamp\fra"; Description: "Французская"; Flags: exclusive; ExtraDiskSpaceRequired: 177065984
Name: "StarCraft\SoundCamp\deu"; Description: "Немецкая"; Flags: exclusive; ExtraDiskSpaceRequired: 223875072
Name: "StarCraft\SoundCamp\ita"; Description: "Итальянская"; Flags: exclusive; ExtraDiskSpaceRequired: 177807360
Name: "StarCraft\SoundCamp\spa"; Description: "Испанская"; Flags: exclusive; ExtraDiskSpaceRequired: 176799744
Name: "StarCraft\SoundCamp\rus"; Description: "Русская от:"; Flags: exclusive;
Name: "StarCraft\SoundCamp\rus\Stream"; Description: "Stream"; Flags: exclusive; Types: full; ExtraDiskSpaceRequired: 182129976
Name: "StarCraft\SoundCamp\rus\RuKol"; Description: "Русская коллекция"; Flags: exclusive; ExtraDiskSpaceRequired: 93392896
Name: "StarCraft\SoundCamp\rus\Fargus"; Description: "Фаргус"; Types: full; Flags: exclusive; ExtraDiskSpaceRequired: 160055296
Name: "StarCraft\SoundCamp\rus\Ogon"; Description: "Надмозг"; Flags: exclusive; ExtraDiskSpaceRequired: 54247424



;[Types]
;Name: "full"; Description: "Полная установка"; Flags: iscustom




[Files]

;--=\=Технические=/=--


;-=Install=-
Source: compiler:descctrl.dll; DestDir: {tmp}; Flags: dontcopy noencryption nocompression solidbreak;
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy noencryption nocompression solidbreak;



[code]
//Ничего не отображающий прогресс-бар
procedure NeaProgress;
begin
WizardForm.ProgressGauge.Style:= npbstMarquee;
end;

const
n1=21; //количество слайдов
oneMB= 1024*1024;

type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N1] of byte;

function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

const
DRIVE_FIXED = 3;
var
Info, InfoCaption, StatusMessages: TNewStaticText;
InfoPanel: TPanel;

FreeMB, TotalMB: Cardinal;
NeedSpaceLabel: TLabel;
NeedSize, n, currTime: Integer;
VolumeName, FileSystemName, S: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;

Files: Array of String;
TimerID: LongWord;
SplashImage: TBitmapImage;
bmp: TRandNumbers;
z:byte;

procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
end;
function NoSD(s: string): string;
var
x, bit, i: Integer;
tp: Cardinal;
sd: string;
begin
sd:= ExpandConstant('{sd}');
Result:= sd;
// Вызываем функцию WinAPI
// Функция возвращает битовую маску установленных логических дисков.
// Бит 0 определяет наличие диска А:, бит 1 - диска B и т.д.
x:= GetLogicalDrives;
if x <> 0 then
// цикл по полученным битам переменной X
for i:= 1 to 64 do
begin
// Накладываем битовую маску для выделения бита с поряковым номером 0
bit:= x and 1;
// нашли логический диск...
if bit = 1 then
begin
// определяем тип логического диска
tp:= GetDriveType(PChar(Chr(64 + i) + ':'));
if tp = DRIVE_FIXED then
// если диск не является системным
if Chr(64 + i) <> Copy(sd, 1, 1) then
begin
Result:= Chr(64 + i) + ':';
Break;
end;
end;
// побитовый сдвиг вправо
x:= x shr 1;
end;
end;
Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k:= Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
End;
function NextButtonClick(CurPageID: Integer): Boolean;
var
i,j: integer;
s,c: string;
begin
Result := True;
if CurPageID = wpSelectDir then
begin
c := 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
for i:=1 to length(WizardForm.DirEdit.text) do
for j:=1 to length(c) do
begin
if WizardForm.DirEdit.text[i] = c[j] then
begin
s := 'В пути установки присутствуют русские буквы, что недопустимо.'#13#13'Пожалуйста, повторите ввод.';
MsgBox(s, mbError, mb_Ok);
Result := False ;
exit;
end
else Result := True;
end;
end;
end;



procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;

procedure RecodeOgg;
var ResultCode: integer; CurFile: String;
begin
WizardForm.ProgressGauge.Style:= npbstNormal;
FindFiles(ExpandConstant('{app}'), '*.ogg') //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов
WizardForm.ProgressGauge.Position:=0
for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}')), '')
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q '+AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files[n]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\oggdec.exe'))
end;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';
end;


Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard1();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;

procedure InitializeWizard2();
begin
NeedSize := 2500; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
ListBoxRefresh
end;
end;

procedure InitializeWizard3();
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(200);
InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := 'Описание';
InfoCaption.Left := ScaleX(224);
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 := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
Info.WordWrap := true;
//Впишыте описание компонентов
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'Выберите тип установки;'+ //Game\
'Произвести полную установку игры.;'+ //Game\Full
'Выберите этот пункт, если вы хотите не установить игру, а только локализировать уже установленную. Перед выбором этого пункта, убедитесь, что на предыдущей странице, вы выбрали папку, в которой уже содержится установленный StarCraft или BroodWar.;'+ //Game\Lokal

'Выберите язык озвучки монологов юнитов;'+ // SoundUnit
'Английская озвучка;'+ // SoundUnit\eng
'Французская озвучка;'+ // SoundUnit\fra
'Немецкая озвучка;'+ // SoundUnit\deu
'Итальянская озвучка;'+ // SoundUnit\ita
'Испанская озвучка;'+ // SoundUnit\spa
'Украинская, шуточная озвучка, с ненормативной лексикой;'+ // SoundUnit\ukr
'Выберите локализатора;'+ // SoundUnit\rus
'Качественная, русская озвучка от Tycoon, также издаваемая фирмой RP Collection;'+ // SoundUnit\rus\Tycoon
'Локализация от фирмы Фаргус, из классического StarCraft;'+ // SoundUnit\rus\Fargus1
'Локализация от фирмы Фаргус, из продолжения StarCraft - Brood War;'+ // SoundUnit\rus\Fargus2
'Локализация из StarCraft 2, выполненная фирмой СофтКлаб;'+ // SoundUnit\rus\SC2
'Шуточная локализация от неопознанной фирмы. Известна под народным названием "С огоньком";'+ // SoundUnit\rus\Ogon
'Локализация от фирмы 7Волк;'+ // SoundUnit\rus\7Wolf
'Созданная группой старкрафтеров-энтузиастов из Мордовии, нецензурная озвучка в стиле "Гоблина". Некоторые фразы юнитов, взяты из локализации 7Волк.;'+ // SoundUnit\rus\7Wolf

'Культовая компьютерная игра, в жанре стратегии в реальном времени, разработанная и изданная компанией Blizzard Entertainment в 1998 году.;'+ //StarCraft

'Выберите язык внутриигрового текста;'+ //Text
'Английский текст;'+ // Text\eng
'Французский текст;'+ // Text\fra
'Немецкий текст;'+ // Text\deu
'Итальянский текст;'+ // Text\ita
'Испанский текст;'+ // Text\spa
'Украинский, шуточный перевод;'+ // Text\ukr
'Выберите локализатора;'+ // Text\rus
'Качественная локализация от Frezzze, версии 1.5.2;'+ // Text\rus\Freze
'Локализация от фирмы Tycoon;'+ // Text\rus\Stream
'Локализация от фирмы Фаргус;'+ // Text\Fargus
'Шуточная локализация. Для StarCraft, выполнена локализация от неопознанной фирмы, которая известна под народным названием "С огоньком". Для BroodWar, включена локализация от 7Волк.;' // Text\Ogon

);
end;



function ShouldSkipPage(CurPage: Integer): Boolean;
begin
if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
case CurPage of
wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
Result := True;
end;
end;

const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;

procedure InitializeWizard4();
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
end;
end;

procedure CurPageChanged2(CurPageID: Integer);
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
end;


//Проверка на оставшыеся файлы
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
if DirExists(ExpandConstant('{app}')) then
if ExpandConstant('{language}') = 'ua' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
'"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
'"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
'"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

IDCANCEL:;
end
else
if ExpandConstant('{language}') = 'ru' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

IDCANCEL:;
end
else
case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
'"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
'"No" to open the directory with explorer to delete the files manually.'#13#13 +
'"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

IDCANCEL:;
end
end
end
end;


function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
For i:=1 to X do A:=A+chr(i);
B:='';
For i:=1 to X do begin
j:=Random(Length(A)-1)+1;
C:='';
B:=B + A[j];
for k:=1 to Length(A) do
if k<>j then C:=C+A[k];
A:=C;
end;
for i:=1 to X do Result[i]:=ord(B[i]);
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
then begin
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
if (currTime/{#TIME_FOR_VIEW} = N1) then currTime:=0;
end;
end;


procedure InitializeWizard5;
begin
bmp:=get_unique_random_number(N1);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;



procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов...';
for z:=2 to N1 do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
if CurStep = ssPostInstall then begin
if (IsComponentSelected('SoundUnit\fra') or IsComponentSelected('SoundUnit\deu') or IsComponentSelected('SoundUnit\ita') or IsComponentSelected('SoundUnit\spa') or IsComponentSelected('SoundUnit\ukr') or IsComponentSelected('SoundUnit\rus') ) then begin
ChangeCaption('Конвертация монологов юнитов...');
RecodeOgg;
end; //if IsComponentSelected
if CurStep = ssPostInstall then RecodeOgg;
end; //CurStep = ssPostInstall
end;

procedure CurPageChanged3(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;


procedure CurPageChanged4(CurPageID: Integer);
begin
if CurPageID = wpInstalling then
WizardForm.BeveledLabel.hide;
if CurPageID = wpInfoAfter then
WizardForm.BeveledLabel.show;
end;




procedure InitializeWizard;
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
end;


procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged2(CurPageID);
CurPageChanged3(CurPageID);
CurPageChanged4(CurPageID);
end;

procedure DeinitializeSetup();
begin
disabledesc();
KillTimer(0, TimerID);
end;

VASYAKRN 08-10-2011 20:29 1768947

Цитата:

Цитата insombia
VinTagE понятно но если зайти на его сайт то там почти везде написано что он сделал скрипт из всех которых там есть »

если так то дай ссилки етих материалов

insombia 08-10-2011 20:35 1768955

VASYAKRN легко

VASYAKRN
http://inno.at.ua/load/utility/game_...0_6b/9-1-0-177
http://inno.at.ua/load/utility/game_...akrn/9-1-0-160
http://inno.at.ua/load/utility/game_..._r_3/9-1-0-131
http://inno.at.ua/load/utility/game_...vil_3/9-1-0-76
+ спи**ил мой скрипт и не удаляешь со своего сайта

VASYAKRN 08-10-2011 20:43 1768963

да с етим я загнул
http://inno.at.ua/load/utility/game_..._r_3/9-1-0-131
но все остальни мои закоси

insombia 08-10-2011 20:45 1768965

VASYAKRN хорошо поверю
P.S. http://inno.at.ua/load/utility/game_...tion/9-1-0-172 удали от тудого

VASYAKRN 08-10-2011 20:46 1768968

Цитата:

Цитата insombia
+ спи**ил мой скрипт и не удаляешь со своего сайта »

какой?

Цитата:

Цитата insombia
VASYAKRN хорошо поверю
P.S. http://inno.at.ua/load/utility/game_...tion/9-1-0-172 удали от тудого »

сделано

Gnom_aka_Lexander 08-10-2011 20:51 1768974

Цитата:

Цитата VASYAKRN
сделано »

Все 4 моих тоже убирай. было-же сказано - я не хочу иметь ничего общего с твоим сайтом.
этот, этот, этот, и этот.

VASYAKRN 08-10-2011 21:03 1768979

услуга за услугу
Цитата:

Цитата VASYAKRN
Соедините пожалста ети два скрипта
http://rghost.ru/24665331
http://rghost.ru/24665211 »


Gnom_aka_Lexander 08-10-2011 21:04 1768980

Цитата:

Цитата VASYAKRN
услуга за услугу »

Это не просьба об услуге. Это просьба вернуть украденное.

VASYAKRN 08-10-2011 21:07 1768985

не хочешь, как хочешь

Gnom_aka_Lexander 08-10-2011 21:09 1768987

Цитата:

Цитата Raf-9600
А реально ли сделать чтоб и DescCtrl.dll работал (описание компонентов), и чтоб компоненты можно было сворачивать?

С DescCtrl.dll невозможно.

insombia 08-10-2011 21:09 1768988

VASYAKRN лучше убери его скрипты а то хрен потом кто подскажет тебе что-то

VASYAKRN 08-10-2011 21:13 1768992

Цитата:

Цитата insombia
VASYAKRN лучше убери его скрипты а то хрен потом кто подскажет тебе что-то »

подскажите сейчас и уберу а потом могу зогегистрируватса под другим именем

Gnom_aka_Lexander 08-10-2011 21:16 1768993

Цитата:

Цитата VASYAKRN
подскажите сейчас и уберу а потом могу зогегистрируватса под другим именем »

Ну, тебя легко узнать по любым именем. А помогать не буду в любом случае. Потерплю. Терпеть я умею. И за свои права бороться тоже.

VinTagE 08-10-2011 21:27 1769000

VASYAKRN,
Дам совет: выучи русский язык, ото читать больно.

Raf-9600 08-10-2011 21:40 1769007

Цитата:

Цитата Лександер
Цитата:

Цитата Raf-9600
А реально ли сделать чтоб и DescCtrl.dll работал (описание компонентов), и чтоб компоненты можно было сворачивать?»

С DescCtrl.dll невозможно. »

Тогда такой вопрос\просьба, ктонить может реализовать возможность вставки комментариев к компонентам, без использования DescCtrl.dll?
Мне раньше говорили, что такое возможно
Цитата:

Цитата sergey3695
Лови пример как это сделать без библиотеки (компилируется на последней версии (Inno Setup build 110319)). http://ifolder.ru/25414377 »

но самому, к сожалению, не хватает знаний переделать пример, под свои нужды.

P.S.
Если когонить заинтересовало предложение касательно инвайта на форум 0day.kiev.ua, или бублики с их трекера, то оно ещё активно. Больше, мне, наверно, нечего предложить.

Shegorat 09-10-2011 07:18 1769157

Цитата:

Цитата Raf-9600
Тогда такой вопрос\просьба, ктонить может реализовать возможность вставки комментариев к компонентам, без использования DescCtrl.dll?
Мне раньше говорили, что такое возможно »

Угу, такое возможно. Я такое уже делал. Вот код, требуется расширенная версия Inno Setup
читать дальше »
Код:

[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]
type
  TComponentDesc = record Description: String; Index: Integer; end;
 
var
  Descs: array of TComponentDesc;
  Info: TNewStaticText;
  InfoCaption: TNewStaticText;
  InfoPanel: TPanel;
  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 Info.Caption:= Descs[Indx].Description else Info.Caption:= 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
  WizardForm.TypesCombo.Visible:=False;
  WizardForm.ComponentsList.Height := ScaleY(181) - WizardForm.TypesCombo.Top;
  WizardForm.ComponentsList.Top := WizardForm.TypesCombo.Top;
  WizardForm.ComponentsList.Width := ScaleX(417);
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowDescription

  InfoPanel := TPanel.Create(WizardForm);
  InfoPanel.Parent := WizardForm.SelectComponentsPage;
  InfoPanel.Caption := '';
  InfoPanel.Top := ScaleY(190);
  InfoPanel.Left := ScaleX(0);
  InfoPanel.Width := ScaleX(417);
  InfoPanel.Height := ScaleY(40);
  InfoPanel.BevelInner := bvRaised;
  InfoPanel.BevelOuter := bvLowered;
  InfoCaption := TNewStaticText.Create(WizardForm);
  InfoCaption.Parent := WizardForm.SelectComponentsPage;
  InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
  InfoCaption.Left := ScaleX(7);
  InfoCaption.Top := InfoPanel.Top - ScaleY(6);
  InfoCaption.Font.Color := clActiveCaption;

  Info := TNewStaticText.Create(WizardForm);
  Info.Parent := InfoPanel;
  Info.AutoSize := False;
  Info.Left := ScaleX(6);
  Info.Width := ScaleX(403);
  Info.Top := ScaleY(12);
  Info.Height := ScaleY(24);
  Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
  Info.WordWrap := true;

  AddDescription(1, 'Справка'); //первый параметр - это номер компонента, идет последовательно от начала записи компонентов
  AddDescription(2, 'Английская справка'); //Второй параметр - это собственно описание компонента
  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;



VASYAKRN
Лучше послушай что тебе говорят. Ты может и зайдешь под другой учеткой, но тебя легко узнать. Да и удали те скрипты что ты скачал с форума http://www.forum.krinkels.ru

R.i.m.s.k.y. 09-10-2011 08:02 1769167

я смотрю тут есть несколько репакеров игр:
вот вы мучаетесь делаете скрипты с красивыми картинками, музыкой и прочим медиапр0ном, но не знаете чту нужно нам - игрофанам на самом деле, а нужно всего то найти папку d:\games и по-умолчанию предлагать ставить туда, а не с-програмфилесы
такая мелочь зарулит в минуса любую оформлялку, которая еще в половине случаев дает ошибки "Rage out of bounds"

VASYAKRN 09-10-2011 11:29 1769242

как сделать такии переходи в окне

VinTagE 09-10-2011 12:42 1769296

VASYAKRN
Цитата:

как сделать такии переходи в окне
Ручками - ручками и головой
:wink:

Rikill 09-10-2011 13:15 1769319

VASYAKRN, в слайд шоу от экспедитора есть варианты переходов.
VinTagE, тут я думаю уже ничего не поможет. У пациента последняя стадия ФГМ и переизбыток ЧСВ. Лечили убер-сортировщиками. Не помогло. Будем игнорировать пациента.
R.i.m.s.k.y., можешь пояснить. Что ты имеешь ввиду? Лично я люблю устанавливать в с-програмфайлзы :)
Лександер, сразу вспоминается shepards :boks:

Raf-9600 09-10-2011 13:32 1769327

Цитата:

Цитата Shegorat
Угу, такое возможно. Я такое уже делал. Вот код, требуется расширенная версия Inno Setup »

Скомпилировал, но описаний компонентов, я там не нахожу.


Rikill 09-10-2011 13:44 1769334

Raf-9600, значит не правильно сделал из простого инно в рестулз.
Специально для тебя скомпилировал.


Друзья, Shegorat работает над библиотекой для правильного отображения шрифта в инсталляторе. Просим протестировать. В архиве два инсталлятора. Простой и от Shegorat. Напишите о результатах работ обеих библиотек!
Прошу не игнорировать, а тестировать! Многие будут вам благодарны!

R.i.m.s.k.y. 09-10-2011 13:45 1769338

Rikill, если есть папка D:\games - по умолчанию предлагать туда устанавливать (путь в окне выбора папки уже D:\Games\Игра), нету папки - в програмфилесы

Шрифты в обоих двух случаях отображаются нормально

VinTagE 09-10-2011 14:01 1769351

Rikill, Эммм, Font_Classic.exe мой вариант ISFont.dll, да?
Протестировал всё работает нормально!

Rikill 09-10-2011 14:03 1769353

VinTagE, да. Это твой. Тебя указать в моём посте? Он не у всех работает.

VinTagE 09-10-2011 14:07 1769355

Rikill,
Цитата:

Тебя указать в моём посте?
Как хочешь =)
Цитата:

Он не у всех работает.
Хотя мне писали что "ISFont.dll" работает достаточно хорошо.

Raf-9600 09-10-2011 14:41 1769381

Цитата:

Цитата Rikill
значит не правильно сделал из простого инно в рестулз. »

Верно, все работает. Но проблема теперь в том, что комментариями, закрываются сведения, о необходимом месте на винчестере. Может ктонить сделать, чтоб комментарии отображались не снизу, а в виде боковушки, как при использовании DescCtrl.dll ?


Rikill 09-10-2011 14:48 1769385

Raf-9600, InfoPanel и пр просто подвинь

Edison007 09-10-2011 14:55 1769388

Цитата:

Цитата Rikill
Друзья, Shegorat работает над библиотекой для правильного отображения шрифта в инсталляторе. Просим протестировать. В архиве два инсталлятора. Простой и от Shegorat. Напишите о результатах работ обеих библиотек! »

мне интересно, почему ты здесь об этом пишешь?

Rikill 09-10-2011 14:55 1769389

Edison007, меня Gnom попросил распространить.

Raf-9600 09-10-2011 14:56 1769390

Цитата:

Цитата Rikill
InfoPanel и пр просто подвинь »

Да-да, все проще чем я думал. Нужно просто значения из скрипта для DescCtrl.dll, перенести в текущий

saha1010 09-10-2011 18:19 1769519

Помогите пожал уста вставить 2 слова
НАд двумя строчками которые получаются в этом скрипте.
Введите желаемый ник !!!ТОЛЬКО ЦИФРАМИ или ЛАТИНСКИМИ БУКВАМИ!!
Введите любой пароль !!!ТОЛЬКО ЦИФРАМИ или ЛАТИНСКИМИ БУКВАМИ!!!


Как на рисунке .

читать дальше »
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
var
ISCustomPage1: TWizardPage;
key1: TNewEdit;
key2: TNewEdit;
key3: TNewEdit;
key4: TNewEdit;
user: TNewEdit;

procedure InitializeWizard();
begin
{ Creates custom wizard page }
ISCustomPage1 := CreateCustomPage(wpWelcome, 'Информация о пользователе', 'Пожалуйста, введите данные о себе.');

{ key1 }
key1 := TNewEdit.Create(WizardForm);
with key1 do
begin
Name := 'key1';

Parent := ISCustomPage1.Surface;
Left := ScaleX(48);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);

Text := '';
MaxLength := 4; // количество знаков
end;

{ key2 }
key2 := TNewEdit.Create(WizardForm);
with key2 do
begin
Name := 'key2';
Parent := ISCustomPage1.Surface;
Left := ScaleX(136);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4;
end;

{ key3 }
key3 := TNewEdit.Create(WizardForm);
with key3 do
begin
Name := 'key3';
Parent := ISCustomPage1.Surface;
Left := ScaleX(224);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4;
end;

{ key4 }
key4 := TNewEdit.Create(WizardForm);
with key4 do
begin
Name := 'key4';
Parent := ISCustomPage1.Surface;
Left := ScaleX(312);
Top := ScaleY(136);
Width := ScaleX(65);
Height := ScaleY(21);
Text := '';
MaxLength := 4;
end;




{ user }
user := TNewEdit.Create(WizardForm);
with user do
begin
Name := 'user';
Parent := ISCustomPage1.Surface;
Left := ScaleX(48);
Top := ScaleY(56);
Width := ScaleX(329);
Height := ScaleY(21);
Text := '';
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
Var
S1, S2: String;
begin
result:=true;
if CurPageID = wpReady then begin//запись после страницы готовности.
S1 := ExpandConstant(key1.Text+'-'+key2.Text+'-'+key3.Text+'-'+key4.Text);
RegWriteStringValue(HKLM, 'Software\GSC Game World\STALKER-COP', 'InstallCDKEY', S1);
RegWriteStringValue(HKLM, 'SOFTWARE\Wow6432Node\GSC Game World\STALKER-COP', 'InstallCDKEY', S1);
S2 := user.Text;
RegWriteStringValue(HKLM, 'Software\GSC Game World\STALKER-COP', 'InstallUserName',S2);
RegWriteStringValue(HKLM, 'SOFTWARE\Wow6432Node\GSC Game World\STALKER-COP', 'InstallUserName',S2);
end;
end; "читать дальше"




valyok666 09-10-2011 18:31 1769525

saha1010, так что лейблы не создать новые?

Rikill 09-10-2011 18:35 1769529

valyok666, боюсь он слов таких не знает...

valyok666 09-10-2011 19:03 1769550

Rikill, ну я просто сказал стандартное слово=)

saha1010 09-10-2011 19:54 1769574

valyok666Нет я не знаю что это но догадываюсь что наверно надпись внутри которая будет исчезать при наведении на неё. Думаю вам веднее как сделать лечше.

Gnom_aka_Lexander 09-10-2011 20:41 1769608

Цитата:

Цитата saha1010
Помогите пожал уста вставить 2 слова
НАд двумя строчками которые получаются в этом скрипте. »

Держи.
читать дальше »
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[_code]
var
  NickPage: TWizardPage;
  key:  array[0..3]of TNewEdit;
  user: TNewEdit;

procedure InitializeWizard();
var
  i1,i2:Integer;
begin
  NickPage := CreateCustomPage(wpWelcome, 'Информация о пользователе', 'Пожалуйста, введите данные о себе.');

  { key }
  for i1:=0 to 3 do begin
    key[i1] := TNewEdit.Create(WizardForm);
    with key[i1] do begin
      Parent := NickPage.Surface;
      SetBounds(ScaleX(48+88*i1),ScaleY(136),ScaleX(65),ScaleY(21));
      MaxLength := 4; // количество знаков
    end;
  end;

  { user }
  user := TNewEdit.Create(WizardForm);
  with user do begin
    Parent := NickPage.Surface;
    SetBounds(ScaleX(48),ScaleY(56),ScaleX(329),ScaleY(21));
  end;

  for i2:=0 to 1 do
  begin
    with TLabel.Create(WizardForm) do begin
    Parent := NickPage.Surface;
    Transparent := True;
    SetBounds(ScaleX(48),ScaleY(20+80*i2),ScaleX(329),ScaleY(30));
      case i2 of
        0:Caption := 'Введите желаемый ник'+#13#10+'!!!ТОЛЬКО ЦИФРАМИ или ЛАТИНСКИМИ БУКВАМИ!!';
        1:Caption := 'Введите любой пароль'+#13#10+'!!!ТОЛЬКО ЦИФРАМИ или ЛАТИНСКИМИ БУКВАМИ!!!';
      end;
    Alignment := taCenter;
    end;
  end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
Var
  S1, S2: String;
begin
  result:=true;
  if CurPageID = wpReady then begin//запись после страницы готовности.
    S1 := ExpandConstant(key[0].Text+'-'+key[1].Text+'-'+key[2].Text+'-'+key[3].Text);

    RegWriteStringValue(HKLM, 'Software\GSC Game World\STALKER-COP', 'InstallCDKEY', S1);
    RegWriteStringValue(HKLM, 'SOFTWARE\Wow6432Node\GSC Game World\STALKER-COP', 'InstallCDKEY', S1);

    S2 := user.Text;

    RegWriteStringValue(HKLM, 'Software\GSC Game World\STALKER-COP', 'InstallUserName',S2);
    RegWriteStringValue(HKLM, 'SOFTWARE\Wow6432Node\GSC Game World\STALKER-COP', 'InstallUserName',S2);
  end;
end;


Photon9 09-10-2011 21:06 1769627

Хм, вобщем такой вопросец, как бы так написать скрипт чтобы по выбору устанавливалась нужная папка, тоесть имеем 2 папки имя у обеих base, но одна содержит файл zzpak_russian.pk4 который по сути является zip архивом, а другая содержимое этого файла 2 папки fonts и strings/ Иными словами нужно собрать так чтобы при установке был запрос ставить запакованые или распакованые ресурсы

Gnom_aka_Lexander 09-10-2011 21:11 1769631

Photon9, Содержимое одной из этих папок, должно быть установлено в {app}\base я так понял?
Можно так:
Код:

[Files]
Source: base_packed\*; DestDir: {app}\base; Flags: recursesubdirs createallsubdirs; Components: res\pack
Source: base_UNpacked\*; DestDir: {app}\base; Flags: recursesubdirs createallsubdirs; Components: res\UNpack
[Components]
Name: res; Description: Ресурсы программы; Types: full
Name: res\pack; Description: Упакованные; Flags: exclusive
Name: res\UNpack; Description: неупакованные; Flags: exclusive

Соответственно, в папку base_packed кладеш упакованные ресурсы (без подпапки base), а в папку base_UNpacked - неупакованные.

nik1967 10-10-2011 00:53 1769773

Цитата:

Цитата R.i.m.s.k.y.
я смотрю тут есть несколько репакеров игр:
вот вы мучаетесь делаете скрипты с красивыми картинками, музыкой и прочим медиапр0ном, но не знаете чту нужно нам - игрофанам на самом деле, а нужно всего то найти папку d:\games и по-умолчанию предлагать ставить туда, а не с-програмфилесы
такая мелочь зарулит в минуса любую оформлялку, которая еще в половине случаев дает ошибки "Rage out of bounds" »

Есть отличный скрипт от Serega
Скрипт, который определяет логические диски на компьютере и предлагает установить на первый логический диск не являющийся системным
Код:

; скрипт, который определяет логические диски на компьютере и предлагает установить на первый
; логический диск не являющийся системным (если их несколько, в противном случае будет предложен
; системный диск).
; Автор: Serega, http://forum.oszone.net/member.php?userid=88670

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={code:NoSD}\Games\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[_Code]
function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(lpRootPathName: PChar): Cardinal; external 'GetDriveTypeA@kernel32.dll stdcall';

const
  DRIVE_FIXED = 3;

function NoSD(s: string): string;
var
  x, bit, i: Integer;
  tp: Cardinal;
  sd: string;
begin
  sd:= ExpandConstant('{sd}');
  Result:= sd;
  // Вызываем функцию WinAPI
  // Функция возвращает битовую маску установленных логических дисков.
  // Бит 0 определяет наличие диска А:, бит 1 - диска B и т.д.
  x:= GetLogicalDrives;
  if x <> 0 then
  // цикл по полученным битам переменной X
  for i:= 1 to 64 do
    begin
      // Накладываем битовую маску для выделения бита с поряковым номером 0
      bit:= x and 1;
      // нашли логический диск...
      if bit = 1 then
        begin
          // определяем тип логического диска
          tp:= GetDriveType(PChar(Chr(64 + i) + ':'));
          if tp = DRIVE_FIXED then
          // если диск не является системным
          if Chr(64 + i) <> Copy(sd, 1, 1) then
            begin
              Result:= Chr(64 + i) + ':';
              Break;
            end;
        end;
      // побитовый сдвиг вправо
      x:= x shr 1;
    end;
end;


R.i.m.s.k.y. 10-10-2011 07:22 1769822

nik1967, спасибо, но я не для себя, я внес предложение репакерам

Rikill 10-10-2011 14:18 1770060

R.i.m.s.k.y., странное предложение :) мне на цэ нравится ставить

R.i.m.s.k.y. 10-10-2011 14:20 1770062

Rikill, и заслонять системный диск? это не есть гут

valyok666 10-10-2011 14:55 1770093

R.i.m.s.k.y., а если нет диска D и он ставит просто на диск???

dracosha 10-10-2011 14:58 1770096

valyok666, если нет других дисков то выбирается системный

R.i.m.s.k.y. 10-10-2011 15:21 1770113

если есть папка D:\Games - предлагать туда, если есть C:\Games - туда, иначе - в програмфилесы

filehome 10-10-2011 17:33 1770228

А как вот это чудо сделать виде скрипта



#define FindHandle
#define FindResult
#define Mask "F:\p2p на E\Games\Preferans\*.hlp"
#sub ProcessFoundFile
#define fn FindGetFileName(FindHandle)
CheckListBox.AddCheckBox('{#fn}', '', 0, True, True, False, True, nil);
#endsub

// где в секции [code]

CheckListBox := TNewCheckListBox.Create(Page);
CheckListBox.Width := Page.SurfaceWidth;
CheckListBox.Height := ScaleY(97);
CheckListBox.Flat := True;
CheckListBox.Parent := Page.Surface;
#for {FindHandle = FindResult = FindFirst(Mask, 0); FindResult; FindResult = FindNext(FindHandle)} ProcessFoundFile

И еще такой вопрос?
В инсталляторе создаю новую страницу с TNewCheckListBox на ней. Вопрос, можно ли как-то заполнить его именами файлов из определенного каталога?

А можно пример работающего скрипта?

valyok666 10-10-2011 18:06 1770266

filehome,сформулируй нормально что тебе надо=)экстрасенсы в отпуске :shocked:

Devils Night 10-10-2011 18:38 1770293

Интересует вопрос:
Как сделать вот что, идёт запуск инсталятора, инсталятор проверяет наличие трёх файлов 1.exe, 2.dll, 3.ocx в папке C:\Program Files\MyProg и наличие ключа в реестре HKEY_LOCAL_MACHINE\SOFTWARE\MyProg (в этом ключе есть ещё ветки, ну это не важно, главное HKEY_LOCAL_MACHINE\SOFTWARE\MyProg), суть в том что, если инсталятор это всё обнаруживает, то продолжаются дальнейшие действия, если нет, то выводит окно с сообщением типа "не найдены необходимые компоненты", и при нажатии ОК инсталятор закрывается, возможно ли такое сделать?

Raf-9600 10-10-2011 21:33 1770412

Devils Night, есть вот такая крутотень http://forum.ru-board.com/topic.cgi/...38&limit=1&m=1

Правда более гуманная, если не находит строчки в реестре, то всеголишь высвечивает сообщение. Но предполагаю, что это, можно изменить.

insombia 10-10-2011 21:48 1770429

Как сделать чтобы в инсталяторе вместо воды как в WaterCtrl v2.0 был снег?

R.i.m.s.k.y. 10-10-2011 22:20 1770461

вот у людей то проблем больше нету - снег в инсталлере :o шопятакжыл! :)

Devils Night 10-10-2011 23:53 1770521

Цитата:

Цитата Raf-9600
есть вот такая крутотень »

Что-то не то.
Цитата:

Цитата Raf-9600
Правда более гуманная, если не находит строчки в реестре »

Нужно обязательно наличие трёх или более файлов, и наличие ключа в реестре, и не важно что там в ключе находится и какие внутри ключа ветки и другие параметроы, главное ключ и файлы, и самое главное, без наличия в системе файлов, выводилось окно с сообщением и установка в любом случае на продолжалась.

Флуд по теме

Цитата:

Цитата R.i.m.s.k.y.
спасибо, но я не для себя, я внес предложение репакерам »

Хм, я например так и делаю, использую скрипт c поста

Цитата:

Цитата Rikill
странное предложение мне на цэ нравится ставить »

Ничего странного, и на диск [C] устанавливать например игры не лучший вариант.

Цитата:

Цитата R.i.m.s.k.y.
и заслонять системный диск? это не есть гут »

Поддерживаю.

Цитата:

Цитата R.i.m.s.k.y.
если есть папка D:\Games - предлагать туда, если есть C:\Games - туда, иначе - в програмфилесы »

А идея хорошая, было бы здорово, если б инсталятор определял наличие папки Games в корне диска, например если есть X:\Games, то собственно устанавливал туда, если нет то в C:\Program Files\Папка игры, отличное дополнение к посту.
Цитата:

Цитата insombia
Как сделать чтобы в инсталяторе вместо воды как в WaterCtrl v2.0 был снег? »

А нафига это нужно :o, может ещё и рыбок запустить :lol:?

valyok666 11-10-2011 00:06 1770534

Devils Night, Зимний инсталл под новый год :mrgreen:

nik1967 11-10-2011 09:51 1770667

Цитата:

Цитата Devils Night
Интересует вопрос:
Как сделать вот что, идёт запуск инсталятора, инсталятор проверяет наличие трёх файлов 1.exe, 2.dll, 3.ocx в папке C:\Program Files\MyProg и наличие ключа в реестре HKEY_LOCAL_MACHINE\SOFTWARE\MyProg (в этом ключе есть ещё ветки, ну это не важно, главное HKEY_LOCAL_MACHINE\SOFTWARE\MyProg), суть в том что, если инсталятор это всё обнаруживает, то продолжаются дальнейшие действия, если нет, то выводит окно с сообщением типа "не найдены необходимые компоненты", и при нажатии ОК инсталятор закрывается, возможно ли такое сделать? »

А почему нет?
Код:

[Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={pf}\MyProg

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

[_Code]
function InitializeSetup: Boolean;
begin
    Result:=true;
  if not ((RegKeyExists(HKLM, 'SOFTWARE\MyProg'))
    and (FileExists('C:\Program Files\MyProg\1.exe'))
    and (FileExists('C:\Program Files\MyProg\2.dll'))
    and (FileExists('C:\Program Files\MyProg\3.ocx')))
then
begin
    MsgBox('Не найдены необходимые компоненты.', mbInformation, MB_OK);
    Result:=false;
  end;
end;


Только этот пример будет работать, если точно известно местонахождение MyProg и ветки реестра HKEY_LOCAL_MACHINE\SOFTWARE\MyProg.
Если MyProg установлено в другом месте и если используется х64 винда, нужен другой пример :)

Gnom_aka_Lexander 11-10-2011 13:42 1770844

Цитата:

Цитата nik1967
и если используется х64 винда, нужен другой пример »

Вовсе нет. Инно сама определит разрядность и подставит подключ в проверке, это она умеет :)

Sotonisto 11-10-2011 14:00 1770860

Всем доброго времени суток!
Мне нужен простенький скрип (можно и с доп. dll), котрый при нажатии (не при наведении, а именно нажатии) на кнопку в обычном инсталляторе воспроизводил указаный звук (например, какой-то click.wav и пр.) и больше ничего. Как я уже говорил, хочется простой (насколько это можно) скрипт. Заранее благодарен.

nik1967 11-10-2011 14:42 1770891

Лександер, Саша, я про C:\Program Files (х86) и просто C:\Program Files в х64 :)

Gnom_aka_Lexander 11-10-2011 15:05 1770907

Цитата:

Цитата nik1967
Саша, я про C:\Program Files (х86) и просто C:\Program Files в х64 »

Это инно, тоже умеет :) Хотя - идеальны вариант - сделать классически - проверять ветку реестра, брать из нее путь до папки установки, и проверять в ней наличие нужных файлов. В скрипте Юршата так и сделано.

valyok666 11-10-2011 15:13 1770913

Sotonisto, Вот держи там пример

R.i.m.s.k.y. 11-10-2011 15:17 1770916

Devils Night
Цитата:

Цитата nik1967
Только этот пример будет работать, если точно известно местонахождение MyProg и ветки реестра HKEY_LOCAL_MACHINE\SOFTWARE\MyProg.
Если MyProg установлено в другом месте и если используется х64 винда, нужен другой пример »

там не другой пример, там проверка isWin64 и ключи реестра разные могут быть, надо смотреть конкретную прогу, ключи могут быть в 64-х разрядном разделе HKLM64, или в подразделе syswow64, см пример пониже. Но одновременно hklm64\syswow64 быть не может, это я для затравки написал

Код:

[Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={pf}\MyProg

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

[_Code]
function InitializeSetup: Boolean;
begin
    Result:=true;
if not iswin64 the begin
  if not ((RegKeyExists(HKLM, 'SOFTWARE\MyProg'))
    and (FileExists('C:\Program Files\MyProg\1.exe'))
    and (FileExists('C:\Program Files\MyProg\2.dll'))
    and (FileExists('C:\Program Files\MyProg\3.ocx')))
then
begin
    MsgBox('Не найдены необходимые компоненты.', mbInformation, MB_OK);
    Result:=false;
  end;
end; //not iswin64
if iswin64 the begin
  if not ((RegKeyExists(HKLM64, 'SOFTWARE\SYSWOW64\MyProg'))
    and (FileExists('C:\Program Files\MyProg\1.exe'))
    and (FileExists('C:\Program Files\MyProg\2.dll'))
    and (FileExists('C:\Program Files\MyProg\3.ocx')))
then
begin
    MsgBox('Не найдены необходимые компоненты.', mbInformation, MB_OK);
    Result:=false;
  end;
end; //iswin64
end;


nik1967 11-10-2011 16:04 1770958

Да знаю я, парни. Я про ЭТО: FileExists('C:\Program Files\MyProg\1.exe')
А если прога установлена в D:\Program Files\MyProg?
На счёт этого Саша верно писал:
Цитата:

Хотя - идеальны вариант - сделать классически - проверять ветку реестра, брать из нее путь до папки установки, и проверять в ней наличие нужных файлов.
Цитата:

брать из нее путь до папки установки
А еже ли нет пути установки?

Devils Night 11-10-2011 17:04 1771065

Цитата:

Цитата nik1967
А почему нет?
Только этот пример будет работать, если точно известно местонахождение MyProg и ветки реестра HKEY_LOCAL_MACHINE\SOFTWARE\MyProg. »

Да, именно так и должно быть.
R.i.m.s.k.y., ну вобще мне на X86 было нужно. Но это даже лучше.
nik1967, R.i.m.s.k.y., Спасибо вам огромное ребят :yahoo: .

Цитата:

Цитата nik1967
А если прога установлена в D:\Program Files\MyProg? »

Да всё равно где она установлена, главное чтобы находились файлы 1.exe, 2.dll, 3.ocx, хотя файлы могут быть другими и наличие пути с файлами может быть C:\WINDOWS\system32.

Цитата:

Цитата nik1967
Хотя - идеальны вариант - сделать классически - проверять ветку реестра, брать из нее путь до папки установки »

Вот это как раз и ненужно, проверка только ключа, даже если он пуст, т.е в HKEY_LOCAL_MACHINE\SOFTWARE\MyProg нет не каких параметров и дополнительных веток, самое главное только наличие HKEY_LOCAL_MACHINE\SOFTWARE\MyProg.

P.S Проверил, работает так как нужно, т.е если отсутствует хотя бы один компонент, то установка не продолжается.
В общем вопрос решён.

Dark_Delphin 11-10-2011 17:09 1771074

Всем привет!

Подскажите можно ли привёязать скин формата msstyles?
Или только cjstyles?

Или можно переконвертить ms в cj?

Заранее спасибо.

Gnom_aka_Lexander 11-10-2011 17:15 1771082

Цитата:

Цитата ntrx
Или можно переконвертить ms в cj? »

Это одно и тоже. Вариантов два - либо указываешь при инициализации скина файл msstyles, либо меняеш файлу скина расширение на cjstyles.

Dark_Delphin 11-10-2011 17:19 1771091

Из винды можно взять лбой *.msstyles?

Gnom_aka_Lexander 11-10-2011 17:24 1771098

Да. Только не из любой винды :) Только ХР

Megalol 11-10-2011 17:25 1771102

Как сделать так чтобы файлы с флагом External тоже были связаны с прогресс-баром? То есть у меня прогресс-бар доходит до 100% и начинает потом их уже обрабатывать. Распаковка и запаковка происходит средствами Инно без взяких исданов и пр...

Dark_Delphin 11-10-2011 17:28 1771108

Цитата:

Да. Только не из любой винды Только ХР
я из 7 хотел, никак нельзя?

Vista-w 11-10-2011 18:18 1771165

ntrx, \
нет, тебе же русским языком сказали.

Rikill 11-10-2011 21:48 1771349

Vista-w, если очень захотеть, можно в космос улететь.
ntrx, библиотеку надо будет писать ;)

valyok666 11-10-2011 23:03 1771413

доброго времени суток)кто подскажет какие функции при нажатии выполняет кнопка "Обзор"?просто делаю панель она скрывает кнопку решил сделать новую

BigBoo 12-10-2011 00:40 1771482

Помогите пожалуйста, как заставить скрипт напечатать пустую строку, то есть чтобы при выборе ярлыков вместо этого:
Код:

Добавить иконку на Рабочий стол
Добавить иконку на Панель быстрого запуска
Ассоциировать .iso файл с UltraISO
Установить ISO CD/DVD эмулятор (ISODrive)

стало так:
Код:

Добавить иконку на Рабочий стол
Добавить иконку на Панель быстрого запуска

Ассоциировать .iso файл с UltraISO
Установить ISO CD/DVD эмулятор (ISODrive)


filehome 12-10-2011 03:46 1771526

Помогите пожалуйста!
Есть файл set.ini(он идет в комплект с инсталлятором) -> его содержимое
[files]

a1=название файла.exe
a2=название файла.exe
a3=название файла.exe
так до 30.

Задача нужно название всех фалов вывести в ComponentSelected + сделать чтобы можно было выбрать один или несколько файлов из списка и установить т.к неудобно постоянна изменять и собирать инсталлятор.
Спасибо за помощь!
Как это сделать не знаю.

No4noylis 12-10-2011 09:24 1771582

valyok666, А нельзя ли для этой твоей новой кнопочки поставить выполнение такой процедуры:
Код:

procedure DirBrowsebuttonClick(Sender: TObject);
begin
WizardForm.DirBrowseButton.Click;
end;

BigBoo, это в таск-листе как я понимаю? Возможно поможет, если к этим задачам добавить GroupDescription: " " с пустым именем???

BigBoo 12-10-2011 10:33 1771604

No4noylis, спасибо, помогло. Так работает:
Код:

[Tasks]
Name: "desktopicon"; Description: "Добавить иконку на &Рабочий стол"; GroupDescription: " "; MinVersion: 4.1,4.0;
Name: "quicklaunchicon"; Description: "Добавить иконку на &Панель быстрого запуска"; GroupDescription: " "; MinVersion: 4.1,4.0; Flags: unchecked
Name: "associate"; Description: "&Ассоциировать .iso файл с UltraISO"; MinVersion: 4.1,4.0;
Name: "isodrive"; Description: "Установить ISO CD/DVD эмулятор (ISODrive)"; MinVersion: 4.1,4.0; Flags: unchecked


BigBoo 12-10-2011 12:57 1771689

Можно ли сделать так, чтобы окно финиша установки с кнопкой "Завершить" автозакрывалось, скажем через 10с., к примеру, как в 7z SFX с помощью префикса "fm10:"?

Gugle 12-10-2011 16:22 1771863

Есть библиотка, которая зависит от установленной в системе WinPcap.exe. Winpcap копирует 4 библиотеки + устанавливает драйвер.

Мой код:
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

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

[*code] //тут нет звездочки
type
  mas = record
  num: Integer;
  name: PAnsiChar;
  IPv4: PAnsiChar;
  IPv6: PAnsiChar;
  description: PAnsiChar;
 
end;

function getT(): Integer;
  external 'getT@files:ifList.dll stdcall';
function getV(d: Integer): mas;
  external 'getV@files:ifList.dll stdcall';

PROCEDURE InitializeWizard;
BEGIN
 
END;

FUNCTION NextButtonClick(CurPageID: Integer): Boolean;
VAR
 m: mas;
 i: Byte;
 
BEGIN
  for i := 1 to getT() do
  begin
    m := getV(i);
    MsgBox('num= ' + IntToStr(m.num) + #13#10
        + 'name= ' + String(m.name) + #13#10
        + 'IPv4= ' + String(m.IPv4) + #13#10
        + 'IPv6= ' + String(m.IPv6) + #13#10
        + 'description= ' + String(m.description) + #13#10
        , mbInformation, MB_OK);
  end;
       
  Result := True;
END;


Ничего необычного. Если winpcap установлена в системе, то установщик работает коректно, если нет, то выдает ошибку:
Код:

Runtime Error (at -1:0):
Cannot Import dll: C:\...бла...\ifList.dll

Не импортируется моя библиотека. Как можно отловить эту ошибку и при ее срабатывании запустить тихую установку winpcap?

volk1234 12-10-2011 16:26 1771865

Цитата:

Цитата VASYAKRN
подскажите сейчас и уберу а потом могу зогегистрируватса под другим именем »

И получите бан. А также мое персональное внимание к Вам.
Изучите правила конференции.

valyok666 12-10-2011 16:32 1771872

Gugle, кинь на ргхост я посмотрю

El Sanchez 12-10-2011 18:03 1771935

Цитата:

Цитата Gugle
Не импортируется моя библиотека »

Gugle, ваша библиотека зависит от wpcap.dll/packet.dll, которые должны находиться в месте, где система сможет их обнаружить (например, при установке wpcap они копируются в system32). При вызове функции из вашей библиотеки система не находит зависимые dll и вот так грязно выругается. Кстати, попробуйте вручную скопировать wpcap.dll/packet.dll в system32, не устанавливая wpcap, и запустить скрипт. Если все гуд, то попробуйте объявить функции так:
читать дальше »

Код:

[Files]
Source: ifList.dll; Flags: dontcopy
Source: wpcap.dll; Flags: dontcopy
Source: packet.dll; Flags: dontcopy

[code]
function getT(): Integer;
  external 'getT@files:ifList.dll,wpcap.dll stdcall loadwithalteredsearchpath';
function getV(d: Integer): mas;
  external 'getV@files:ifList.dll,wpcap.dll stdcall loadwithalteredsearchpath';


Если нет, то измените функцию NextButtonClick:
читать дальше »

Код:

[code]
Function NextButtonClick(CurPageID: Integer): Boolean;
Var
 m: mas;
 i: Byte;
 
begin
  Result := True;
  if CurPageID = какая-нибудь страница then
  try
    for i := 1 to getT() do
    begin
      m := getV(i);
      MsgBox('num= ' + IntToStr(m.num) + #13#10
        + 'name= ' + String(m.name) + #13#10
        + 'IPv4= ' + String(m.IPv4) + #13#10
        + 'IPv6= ' + String(m.IPv6) + #13#10
        + 'description= ' + String(m.description) + #13#10
        , mbInformation, MB_OK);
    end;
  except
    тут установка wpcap
    Result := False;
  end;
end;


Gugle 13-10-2011 11:02 1772328

Цитата:

Цитата El Sanchez
Gugle, ваша библиотека зависит от wpcap.dll/packet.dll, которые должны находиться в месте, где система сможет их обнаружить (например, при установке wpcap они копируются в system32). »

Там еще драйвер нужен, поэтому первый вариант не прокатывает. Нужна установка.
Цитата:

Цитата El Sanchez
Если нет, то измените функцию NextButtonClick: »

блок:
Код:

try
//...
except
//...
end;

Не помогает. Ощущение, что до него даже не доходит выполнение скрипта.

El Sanchez 13-10-2011 14:55 1772487

Цитата:

Цитата Gugle
Там еще драйвер нужен, поэтому первый вариант не прокатывает. Нужна установка »

Gugle, да, нужен. Устанавливаю драйвер вручную - dll-ка интерфейсы не выдает. Пробуйте так:
читать дальше »

Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

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

[code]
const
        SERVICE_QUERY_CONFIG = $1;
        SC_MANAGER_ALL_ACCESS = $f003f;

type
    mas = record
        num: Integer;
        name,IPv4,IPv6,description: PAnsiChar;
    end;
    HANDLE = Cardinal;

function getT(): Integer; external 'getT@files:ifList.dll stdcall delayload';
function getV(d: Integer): mas; external 'getV@files:ifList.dll stdcall delayload';

function OpenSCManager(lpMachineName, lpDatabaseName: String; dwDesiredAccess: Cardinal): HANDLE;
external 'OpenSCManagerA@advapi32.dll stdcall';

function OpenService(hSCManager: HANDLE; lpServiceName: String; dwDesiredAccess: Cardinal): HANDLE;
external 'OpenServiceA@advapi32.dll stdcall';

function CloseServiceHandle(hSCObject: HANDLE): Boolean;
external 'CloseServiceHandle@advapi32.dll stdcall';


function OpenServiceManager(): HANDLE;
begin
        Result := OpenSCManager('', 'ServicesActive', SC_MANAGER_ALL_ACCESS);
end;

function IsServiceInstalled(ServiceName: String): Boolean;
var
        hSCM: HANDLE;
        hService: HANDLE;
begin
        hSCM := OpenServiceManager();
        if hSCM <> 0 then
        begin
                hService := OpenService(hSCM, ServiceName, SERVICE_QUERY_CONFIG);
                if hService <> 0 then
                begin
                        Result := hService <> 0;
                        CloseServiceHandle(hService);
                end;
                CloseServiceHandle(hSCM);
        end;
end;

function InitializeSetup(): Boolean;
begin
    Result := IsServiceInstalled('npf');
    if not Result then MsgBox('Установите WinPcap.', mbError, MB_OK);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
    m: mas;
    i: Byte;
begin
    Result := True;
    if CurPageID = wpWelcome then
    begin
        for i := 1 to getT() do
        begin
            m := getV(i);
            MsgBox('num= ' + IntToStr(m.num) + #13#10
                + 'name= ' + String(m.name) + #13#10
                + 'IPv4= ' + String(m.IPv4) + #13#10
                + 'IPv6= ' + String(m.IPv6) + #13#10
                + 'description= ' + string(m.description) + #13#10
                , mbInformation, MB_OK);
        end;
    end;
end;


Gugle 13-10-2011 15:41 1772507

Как при определении позиции в строке сказать, что бы искал спец символы?
Например:
int i := Pos(''', str); // Символ верхняя кавычка

Родилось еще 2 вопроса.
Как включить горизонтальный скролинг у CheckListBox?
Как сделать, что бы одна из папок, которая входит в дистр, копировалась в том случае, если локальная переменная = 1 и не копировалась, если эта переменная = 2?

Damaks 14-10-2011 11:46 1773072

День добрый. Не получается сделать работающее выпадающее меню для выбора нужного пункта.

Макет кода такой:
Код:

var
        Change: Integer;

procedure CustomizeChange;
begin
        if not ..... then
        begin
                ..........;
                Change := CustomizePage_ChangeCombo.ItemIndex;
                ..........;
        end;
end;

function GetChange(Param : String) : String;
var
        i, k: Integer;
begin
        k := 2;
        Result := '';
        case Change of
        begin
                1 : Result := '.....';
                ..........;
                for i := 1 to ..... do
                begin
                        ..........;
                        if ..... then
                        begin
                                if ..... then
                                        k : Result := .....;
                                        k := k+1;
                        end;
                end;
        end;
end;

procedure CreateTheWizardPages;
var
        ChangeCombo: TNewComboBox;
        i: Integer;
begin
        CustomizePage := CreateCustomPage(wpSelectDir, 'Страница', 'Страница');
        ChangeCombo := TNewComboBox.Create(CustomizePage);
        ChangeCombo.Top := ScaleY(3);
        ChangeCombo.Left :=  ScaleX(50);
        ChangeCombo.Width := ScaleX(200);
        ChangeCombo.Style := csDropDownList;
        ChangeCombo.Parent := CustomizePage.Surface;
        ChangeCombo.Items.Add('.....');
        begin
                ..........;
                ..........;
                for i := 1 to ..... do
                begin
                        ..........;
                        if ..... then
                        begin
                                if ..... then
                                        ChangeCombo.Items.Add(.....)
                        end;
                end;
        end;
        ChangeCombo.ItemIndex := 0;
        CustomizePage_ChangeCombo := ChangeCombo;
end;


Постарался убрать всё лишнее, чтобы осталась только нужная структура, мог сделать опечатку. Общий смысл кода таков. В выпадающем меню должно быть определённое количество пунктов, на каждом компьютере разное. Значение и количество генерируется с помощью цикла "for i := 1 to ..... do". Значение строковое. С выбранным значением потом проводятся другие манипуляции.

На данный момент у меня проблема в функции GetChange, а конкретно синтаксическая ошибка в строке 22 "1 : Result := '.....';". Общая конструкция должна быть правильной. Само меню создаётся правильно.

El Sanchez 14-10-2011 16:32 1773309

Цитата:

Цитата Gugle
Символ верхняя кавычка »

Gugle, удвоить кавычку, т.е. первый аргумент Pos будет 4 кавычки.
Цитата:

Цитата Gugle
Как включить горизонтальный скролинг у CheckListBox? »

Gugle, хоть у ListBox-ов есть стиль горизонтального скролла врубить пока не удалось.
Цитата:

Цитата Gugle
Как сделать, что бы одна из папок, которая входит в дистр, копировалась в том случае, если локальная переменная = 1 и не копировалась, если эта переменная = 2? »

Gugle, нужен пример.
Цитата:

Цитата Damaks
проблема в функции GetChange »

Damaks, конструкция case не начинается с begin и должна выглядеть, например, так:
Код:

case Param of
  0: Result := '0';
  1: Result := '1';
  2: begin  //несколько команд заключаем в begin-end
        команда 1
        команда 2 и т.д.
        Result := '2';
    end;
  3: Result := '3';
else
  Result := 'nothing';  //если Param не равен 0,1,2,3.
end;


Dark_Delphin 14-10-2011 17:43 1773366

Всем привет)

Подскажите пожалуйста как исправить вот это:

Первая страница нормально..




А вторая вот позначил знаками вопросами.



Нужно что-бы картинка закрыла чорный фон, а не фон картинку.


Заранее спасибо.

insombia 14-10-2011 18:08 1773384

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

Цитата:

Вас приветствует R.G.Trend игры F1 2011
Как то не очень красиво,проще написать Вас приветствует R.G.Trend

Dark_Delphin 14-10-2011 19:34 1773454

Кто может помочь сделать картинку на всех страницах?

Перемучался и не получается..

Заранее спасибо.

Tixo 14-10-2011 19:46 1773465

ntrx,
скинь скрипт посмотрю

valyok666 14-10-2011 21:41 1773549

ntrx, скорее всего неправильно указан размер в коде Растяжки изображения

valyok666 14-10-2011 23:07 1773602

ntrx, ты имеешь ввиду на всех страницах разная или одна?

Dark_Delphin 14-10-2011 23:31 1773609

valyok666, мне всё ровно как, но что-бы на всех страницах, поможеш?

Rikill 14-10-2011 23:55 1773623

Надо организовать секту гадальщиков. Кручу верчууууууу! :wizard:
R.i.m.s.k.y., не мог бы одолжить хрустальный шар? Мой разбился. :cry:

VASYAKRN 15-10-2011 10:05 1773745

Как создать тень для текста

VASYAKRN 15-10-2011 10:23 1773750

ntrx, Изображение через ботву наносил
Если да то дай ету часть
mgLoad(WizardForm.Handle,ExpandConstant('{tmp}\I2.jpg'),ScaleX(49), ScaleY(20),ScaleX(530), ScaleY(313),false,True);

insombia 15-10-2011 11:21 1773773

Цитата:

Цитата VASYAKRN
Как создать тень для текста »

В фотошопе

VASYAKRN 15-10-2011 11:56 1773782

insombia, А через лейби никак

VASYAKRN 15-10-2011 12:17 1773788

как убрать етот остаток текста из кнопки папки

insombia 15-10-2011 12:21 1773793

VASYAKRN научись правильно писать! там я заметил что при наведении курсора на ту область оно все стает нормально

Dark_Delphin 15-10-2011 13:04 1773817

Всем добрый день!

У кого есть пример скрипта добавления страници компоннетов, комноненты запакованы у АРК архивы.

Заранее спасибо.

insombia 15-10-2011 13:42 1773830

ntrx скачай любой isdone там есть пример

Rikill 15-10-2011 14:32 1773853

insombia, вобще-то можно сделать тень текста. В самом Inno Setup. Просто надо чутка подумать (совсем чучуть), а реализация просто смешна. Создаём лейб белого цвета, на второй план чёрного. Чёрный текст ставим вправо на один пиксель от белого. Вуаля.

VASYAKRN, надо сказать "абракадабра" и сфотографироваться на фоне компа! Ещё
прислать нам свой адрес. Мы тебе на дом привезём скриптов пачку.

ntrx, ничего не давай!

sergey3695 15-10-2011 16:04 1773911

Цитата:

Цитата VASYAKRN
Как создать тень для текста »

Это два лейбла, один поверх другого.

Edison007 15-10-2011 16:27 1773916

Цитата:

Цитата sergey3695
Это два лейбла, один поверх другого. »

не обязательно ;)

Damaks 15-10-2011 16:31 1773917

Цитата:

Цитата El Sanchez
Damaks, конструкция case не начинается с begin и должна выглядеть, например, так:
Код:

case Param of
 0: Result := '0';
 1: Result := '1';
 2: begin //несколько команд заключаем в begin-end
 команда 1
 команда 2 и т.д.
 Result := '2';
 end;
 3: Result := '3';
else
 Result := 'nothing'; //если Param не равен 0,1,2,3.
end;

»

Нет, необходимо сделать другое.
Эти пункты (0: 1: 2: 3: и т.д.) генерирует как раз цикл for, поэтому я не знаю заранее не их количество, не их значение, в этом и сложность.

insombia 15-10-2011 18:51 1773983

del

VASYAKRN 15-10-2011 18:56 1773988

Devils Night, Нет типа так

Dark_Delphin 15-10-2011 21:32 1774070

VASYAKRN, не учат.

Подскажите пожалуйста , почему на странице компоннетов нет выбора компонентов?




Вот скрипт
читать дальше »
#define Components

// Навания игры ;;
#define MyAppName "Call of Duty - Black Ops"
#define AppName "Call of Duty - Black Ops"
#define CompanyName "Activision"
#define Version "1.3"
#define Publisher "Dark"
// Навания игры ;;

// Создаем запуск игры ;;
#define EXE "Chernobyl.exe"
// Создаем запуск игры ;;



// Форма инсталлятора ;;
#define FormPic "form.png"
// Форма инсталлятора ;;

// Место на диске в (МБ)
#define Size "7500"
// Место на диске в (МБ)

// ExtraDiskSpaceRequired ;;
#define NeedSize "5000000000"
// ExtraDiskSpaceRequired ;;

// Количество свободной оперативной памяти нужное для распаковки ;;
#define NeedMem 512
// Количество свободной оперативной памяти нужное для распаковки ;;

// Раскоментируем после первой установки и компилим проект заново. ;;
//#define records
// Раскоментируем после первой установки и компилим проект заново. ;;
#define precomp04
//#define precomp038
//#define unrar

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
AppVersion={#Version}
AppPublisher={#Publisher}
DefaultDirName={pf}\{#CompanyName}\{#MyAppName}
DefaultGroupName={#Publisher}\{#MyAppName}
AllowNoIcons=yes
OutputDir=Out
OutputBaseFilename=setup
ShowLanguageDialog=no
DirExistsWarning=no
MinVersion=0,5.01
VersionInfoDescription={#MyAppName}
ShowTasksTreeLines=True
DisableReadyPage=True
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif

#include "ISS\Messages.iss"

#ifdef Components
[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: text\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
Name: voice\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 600000000
Name: redist; Description: Дополнительное ПО; Types: full; Flags: fixed
Name: redist\VCRedist; Description: Установить библиотеки Microsoft Visual C ++ ; Flags:checkablealone;
Name: redist\DirectX; Description: Обновить Microsoft DirectX; Flags: checkablealone;
#endif



[Files]
Source: "Files\*"; Flags: dontcopy;
Source: "ISDone\*"; Flags: dontcopy;

Source: "Files\InnoCallback.dll"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
//Source: "Files\ISSkin.dll"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;
//Source: "Files\skin.cjstyles"; DestDir: "{app}"; Flags: ignoreversion; Attribs: hidden system;

#ifdef records
Source: "ISDone\records.inf"; DestDir: "{tmp}"; Flags: dontcopy
#endif
#ifdef precomp04
Source: "ISDone\packjpg_dll.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "ISDone\RTconsole.exe"; DestDir: "{tmp}"; Flags: dontcopy
Source: "ISDone\precomp04.exe"; DestDir: "{tmp}"; Flags: dontcopy
#endif
#ifdef precomp038
Source: "ISDone\packjpg_dll.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "ISDone\RTconsole.exe"; DestDir: "{tmp}"; Flags: dontcopy
Source: "ISDone\precomp038.exe"; DestDir: "{tmp}"; Flags: dontcopy
Source: "ISDone\zlib1.dll"; DestDir: "{tmp}"; Flags: dontcopy
#endif
#ifdef unrar
Source: "ISDone\Unrar.dll"; DestDir: "{tmp}"; Flags: dontcopy
#endif

[Icons]
Name: {userdesktop}\{#MyAppName}; Filename: "{app}\{#EXE}"; WorkingDir: "{app}"; Check: Desktop and not InstallRedist;
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; IconFilename: "{app}\5.ico"; Comment: {cm:Deletegame}; Check: NoIcons and not InstallRedist;
Name: {group}\{#MyAppName}; Filename: "{app}\{#EXE}"; WorkingDir: "{app}"; Comment: {cm:Launchgame}; Check: NoIcons and not InstallRedist;

[Registry]
Root: HKLM; Subkey: "SOFTWARE\{#CompanyName}\{#MyAppName}"; ValueName: "InstallDir"; ValueType: String; ValueData: "{app}"; Flags: uninsdeletekey; Check: not InstallRedist;
Root: HKLM; Subkey: "SOFTWARE\{#CompanyName}\{#MyAppName}"; ValueName: "Language"; ValueType: String; ValueData: "rus"; Flags: uninsdeletekey; Check: not InstallRedist;
Root: HKLM; Subkey: "SOFTWARE\{#CompanyName}\{#MyAppName}"; ValueName: "execPath"; ValueType: String; ValueData: "{app}\{#EXE}"; Flags: uninsdeletekey; Check: not InstallRedist;
Root: HKLM; Subkey: "SOFTWARE\{#CompanyName}\{#MyAppName}"; ValueName: "info"; ValueType: String; ValueData: "adab76f30e304e148dd119624ee27b07"; Flags: uninsdeletekey; Check: not InstallRedist;
Root: HKLM; Subkey: "SOFTWARE\{#CompanyName}\{#MyAppName}"; ValueName: "installdir"; ValueType: String; ValueData: "{app}"; Flags: uninsdeletekey; Check: not InstallRedist;
Root: HKLM; Subkey: "SOFTWARE\{#CompanyName}\{#MyAppName}"; ValueName: "language"; ValueType: String; ValueData: "us"; Flags: uninsdeletekey; Check: not InstallRedist;

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

[code]
const
WFDiskTimerID = 1;
WFSysReqTimerID = 2;
ARTitleTimerID = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;

type
TPBProc = function (h:hWnd;Msg,wParam,lParam:Longint):Longint;// Для прогресс бара
TTimerProc = procedure (h: Longword; msg: Longword; idevent: Longword; dwTime: Longword);
TSystemTime = record wYear, wMonth, wDayOfWeek, wDay, wHour, wMinute, wSecond, wMilliseconds: Word; end;

var
SelectTasksPage: TWizardPage; // Создаем страницу с ДОП. ПО

Image, Workspace, TextWorkspace,
Logo, Edit, HDD: Longint;

Welcome1, Welcome2, PageNameLabel, PageDescriptionLabel,
SelectDirBrowseLabel, DirEditLabel,
SelectStartMenuFolderBrowseLabel, GroupEditLabel, NoIconsLabel,
SelectTasksLabel, DesktopLabel, DirectXLabel, Finish1, Finish2: TLabel;

NoIconsCheck, DesktopCheck, DirectXCheck: HWND;

StatusLabel, FilenameLabel: TLabel;

mp3Name: string;
MusicButton,mp3Handle: HWND;

NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel, FreeSpaceLabel: TLabel;

/////////////////////////////////////////////////////////////////////
function ReleaseCapture(): Longint; external 'ReleaseCapture@user32.dll stdcall';
function SetLayeredWindowAttributes(hwnd: hWnd; crKey: TColor; bAlpha: byte; dwFlags: DWORD): Boolean; external 'SetLayeredWindowAttributes@user32.dll stdcall';
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';

//Процедура для подвижности инсталлятора
procedure LabelOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(WizardForm.Handle,$0112,$F012,0);
end;

function GetLocalTime(var lpSystemTime: TSystemTime): Boolean; external 'GetLocalTime@kernel32.dll stdcall';
function SystemTimeToFileTime(const lpSystemTime: TSystemTime; var lpFileTime: TFileTime): Boolean; external 'SystemTimeToFileTime@kernel32.dll stdcall';
function FileTimeToSystemTime(const lpFileTime: TFileTime; var lpSystemTime: TSystemTime): Boolean; external 'FileTimeToSystemTime@kernel32.dll stdcall';
function WrapTimerProc(callback:TTimerProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
// Подключаем botva2
#include "ISS\botva2.iss"
// Подключаем кнопки
#include "ISS\Button.iss"
// Подключаем музыку
#include "ISS\BASS.iss"
// Подключаем сис требования
//#include "ISS\System.iss"
// Подключаем прогресс бар(Для прогресс бара)
#include "ISS\ProgressBar.iss"
// Подключаем распаковщик ISDone
#include "ISS\ISDone.iss"
// Подключаем сам прогресс бар
#include "ISS\ProgresStep.iss"
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
procedure InitializeWizard2;
begin


with WizardForm do begin
ComponentsDiskSpaceLabel.Hide;
SelectComponentsLabel.Hide;
//WizardForm.ComponentsList.Hide;
//WizardForm.ComponentsList.Show;
Bevel.Hide;// Убераем стандартною линию
BorderStyle:=bsNone;// Убераем заголовок(Стандартную тему)
InnerNotebook.Hide;// Убераем всё стандартное
OuterNotebook.Hide;// Убераем всё стандартное
ClientWidth:=ScaleX(606);// Размер инсталлятора(Ширина)
ClientHeight:=ScaleY(384);// Размер инсталлятора(Высота)
Color:=$282828;// Цвет всего инсталлятора
end;
with TLabel.Create(WizardForm) do begin
Parent:=WizardForm;
AutoSize:=False;
Top:=14;
Left:=-10;
Width:=WizardForm.ClientWidth
Height:=WizardForm.ClientHeight
Transparent:=True;
Alignment := taCenter;
Font.Name:= 'Comic Sans MS'
Font.Color:=$FFFFFF;
Caption:=WizardForm.Caption;
OnMouseDown:=@LabelOnMouseDown;
end;
ExtractTemporaryFile('Skin.png');
ExtractTemporaryFile('Img.jpg');
ExtractTemporaryFile('Workspace.png');
ExtractTemporaryFile('Textspace.png');
ExtractTemporaryFile('Logo.png');
ExtractTemporaryFile('Edit.png');
ExtractTemporaryFile('hard-drive.png');
ExtractTemporaryFile('CheckBox.png');

//Skin - Тема инсталлятора Skin:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Skin.png'),ScaleX(0), ScaleY(0),WizardForm.ClientWidth,WizardForm.ClientHeight,True,True);
//Image и Worspace - Картинка Инсталлятора
Image:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Img.jpg'),ScaleX(15), ScaleY(34),ScaleX(578), ScaleY(335),True,True);
Workspace:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Workspace.png'),ScaleX(15), ScaleY(34),ScaleX(578), ScaleY(335),True,True);
//TextWorckspace - Для того чтобы, текст можно было различить
TextWorkspace:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Textspace.png'),ScaleX(30), ScaleY(80),ScaleX(546), ScaleY(240),True,True);
//Logo - Инфо о создателя этой программы или RePack`a
Logo:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Logo.png'),ScaleX(35), ScaleY(345),ScaleX(171), ScaleY(13),True,True);
//Edit - полоса которая отображает путь установки
Edit:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Edit.png'),ScaleX(125), ScaleY(185),ScaleX(280),ScaleY(20),True,True);
//HDD - Просто картинка (Папка)
HDD:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\hard-drive.png'),ScaleX(60), ScaleY(147),ScaleX(60), ScaleY(60),True,True);

ImgApplyChanges(WizardForm.Handle);
SetWindowLong(WizardForm.Handle,-20,GetWindowLong(WizardForm.Handle,-20) or $80000);
SetLayeredWindowAttributes(WizardForm.Handle,$00FF00,0,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:FreeSpace} ')+ FloatToStr(round(FreeMB/1024*100)/100) + ' Гб' else
FreeSpaceLabel.Caption := ExpandConstant('{cm:FreeSpace} ')+ IntToStr(FreeMB)+ ' Мб';

if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaptionFlashing(h: Longword; msg: Longword; idevent: Longword; dwTime: Longword);
begin
if FreeSpaceLabel.Font.Color=$FFFFFF then FreeSpaceLabel.Font.Color:=$0000FF else FreeSpaceLabel.Font.Color:=$FFFFFF;
end;

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

if (FreeMB<NeedSize) then
SetTimer(WizardForm.Handle,WFDiskTimerID,1000,WrapTimerProc(@GetNeedSpaceCaptionFlashing,4));
end;

procedure CurPageChanged3(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then begin
GetNeedSpaceCaption;

if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
end;
end;
////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////
//Не создавать папку в меню Пуск
function InstallRedist: Boolean;
begin
if MyError then
Result:= True;
end;

function NoIcons: Boolean;
begin
Result:= BtnGetEnabled(hGroupBrowseBtn);
end;

procedure NoIconsClick(hBtn:HWND);
var
Check:boolean;
begin
sndPlaySound(ExpandConstant('{tmp}\Check.wav'), $0001);
Check:=BtnGetChecked(hBtn);
BtnSetEnabled(hGroupBrowseBtn, not Check);
GroupEditLabel.Enabled:=not Check;
if Check then NoIconsLabel.Font.Color:=$B6B6B6 else NoIconsLabel.Font.Color:=$FFFFFF;
end;

procedure NoIconsLabelClick(Sender:TObject);
begin
BtnSetChecked(NoIconsCheck, not BtnGetChecked(NoIconsCheck));
NoIconsClick(NoIconsCheck);
end;
//=====================================

//Создать ярлык на Рабочем столе
function Desktop: Boolean;
begin
Result:= BtnGetChecked(DesktopCheck);
end;

procedure DesktopClick(hBtn:HWND);
begin
sndPlaySound(ExpandConstant('{tmp}\Check.wav'), $0001);
if BtnGetChecked(hBtn) then DesktopLabel.Font.Color:=$B6B6B6 else DesktopLabel.Font.Color:=$FFFFFF;
end;

procedure DesktopLabelClick(Sender:TObject);
begin
BtnSetChecked(DesktopCheck, not BtnGetChecked(DesktopCheck));
DesktopClick(DesktopCheck);
end;
//=====================================

//Установить Microsoft DirectX
function DirectX: Boolean;
begin
Result:= BtnGetChecked(DirectXCheck);
end;

procedure DirectXClick(hBtn:HWND);
begin
sndPlaySound(ExpandConstant('{tmp}\Check.wav'),$0001);
if BtnGetChecked(hBtn) then DirectXLabel.Font.Color:=$B6B6B6 else DirectXLabel.Font.Color:=$FFFFFF;
end;

procedure DirectXLabelClick(Sender:TObject);
begin
BtnSetChecked(DirectXCheck, not BtnGetChecked(DirectXCheck));
DirectXClick(DirectXCheck);
end;

//=====================================
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
procedure InitializeWizard3;
begin
PageNameLabel:=TLabel.Create(WizardForm);
with PageNameLabel do begin
AutoSize:= False;
WordWrap:= True;
SetBounds(ScaleX(45), ScaleY(90), ScaleX(400), ScaleY(50));
Transparent:=True;
Font.Name:= 'Verdana';
Font.Size:= 9;
Font.Color:=$FFFFFF;
// Font.Style:=[fsBold, fsItalic];
OnMouseDown:=@LabelOnMouseDown;
Parent:=WizardForm;
end;
PageDescriptionLabel:=TLabel.Create(WizardForm);
with PageDescriptionLabel do begin
AutoSize:= False;
WordWrap:= True;
SetBounds(ScaleX(80), ScaleY(110), ScaleX(400), ScaleY(50));
Transparent:=True;
Font.Name:= 'Verdana';
Font.Size:= 8;
Font.Color:=$FFFFFF;
// Font.Style:=[fsBold, fsItalic];
OnMouseDown:=@LabelOnMouseDown;
Parent:=WizardForm;
end;
///////////////////////////////
Welcome1:= TLabel.Create(WizardForm);
with Welcome1 do begin
AutoSize:=False
SetBounds(ScaleX(118), ScaleY(127), ScaleX(350), ScaleY(65));
WordWrap:=True
Alignment := taCenter;
Transparent:=True
Font.Name:='Verdana';
Font.Size:= 10;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold]
Caption:= ExpandConstant('{cm:Welcome1}')+#13#10+('{#MyAppName}');
OnMouseDown:=@LabelOnMouseDown;
Parent:=WizardForm;
end;

Welcome2:=TLabel.Create(WizardForm);
with Welcome2 do begin
AutoSize:=False
SetBounds(ScaleX(50), ScaleY(170), ScaleX(500), ScaleY(500));
WordWrap:=True
Alignment := taCenter;
Transparent:=True
Font.Name:='Verdana';
Font.Size:= 8;
Font.Color:=$FFFFFF;
//Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Welcome2}');
OnMouseDown:=@LabelOnMouseDown;
Parent:=WizardForm;
end;
///////////////////////////////
SelectDirBrowseLabel := TLabel.Create(WizardForm);
with SelectDirBrowseLabel do begin
AutoSize:=False;
SetBounds(ScaleX(125), ScaleY(150), ScaleX(400), ScaleY(50));
WordWrap:= True;
Transparent:=True;
Font.Name:= 'Verdana';
Font.Size:= 8;
Font.Color:=$FFFFFF;
// Font.Style := [fsBold]//, fsItalic];
OnMouseDown:=@LabelOnMouseDown;
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
Parent := WizardForm;
end;

DirEditLabel := TLabel.Create(WizardForm);
with DirEditLabel do begin
AutoSize:=False;
SetBounds(ScaleX(130), ScaleY(188), ScaleX(275), ScaleY(15));
WordWrap:= True;
ShowAccelChar := False;
Transparent:=True;
Font.Name:= 'Arial'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
Caption := MinimizePathName(WizardForm.DirEdit.Text, DirEditLabel.Font, DirEditLabel.Width);
OnMouseDown:=@LabelOnMouseDown;
Parent := WizardForm;
end;

NeedSize := {#Size};
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do begin
Parent := WizardForm;
AutoSize:=False;
Left := ScaleX(165);
Top := ScaleY(235);
Width := ScaleX(209);
Height := ScaleY(13);
WordWrap:= True;
Transparent:=True;
Alignment := taCenter;
Font.Name:= 'Verdana';
Font.Size:= 8;
Font.Color:=$FFFFFF;
//Font.Style:=[fsItalic];
OnMouseDown:=@LabelOnMouseDown;
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do begin
Parent := WizardForm;
AutoSize:=False;
Left := ScaleX(165);
Top := ScaleY(213);
Width := ScaleX(209);
Height := ScaleY(13);
WordWrap:= True;
Transparent:=True;
Alignment := taCenter;
Font.Name:= 'Verdana';
Font.Size:= 8;
Font.Color:=$FFFFFF;
//Font.Style:=[fsItalic];
OnMouseDown:=@LabelOnMouseDown;
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
WizardForm.DiskSpaceLabel.Hide;
///////////////////////////////
SelectStartMenuFolderBrowseLabel := TLabel.Create(WizardForm);
with SelectStartMenuFolderBrowseLabel do begin
AutoSize:=False;
SetBounds(ScaleX(125), ScaleY(150), ScaleX(400), ScaleY(50));
WordWrap:= True;
Transparent:=True;
Font.Name:= 'Verdana';
Font.Size:= 8;
Font.Color:=$FFFFFF;
// Font.Style := [fsBold]//, fsItalic];
OnMouseDown:=@LabelOnMouseDown;
Caption:= WizardForm.SelectStartMenuFolderBrowseLabel.Caption;
Parent := WizardForm;
end;

GroupEditLabel := TLabel.Create(WizardForm);
with GroupEditLabel do begin
AutoSize:=False;
SetBounds(ScaleX(130), ScaleY(188), ScaleX(275), ScaleY(15));
WordWrap:= True;
ShowAccelChar := False;
Transparent:=True;
Font.Name:= 'Arial'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
Caption := MinimizePathName(WizardForm.GroupEdit.Text, GroupEditLabel.Font, GroupEditLabel.Width);
OnMouseDown:=@LabelOnMouseDown;
Parent := WizardForm;
end;

//Не создавать папку в меню Пуск
NoIconsCheck:=BtnCreate(WizardForm.Handle,ScaleX(122),ScaleY(213),ScaleX(20),ScaleY(20),ExpandConsta nt('{tmp}\CheckBox.png'),2,True);
BtnSetEvent(NoIconsCheck,BtnClickEventID,WrapBtnCallback(@NoIconsClick,1));
BtnSetEvent(NoIconsCheck,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(NoIconsCheck,GetSysCursorHandle(32649));

NoIconsLabel := TLabel.Create(WizardForm);
with NoIconsLabel do begin
AutoSize:=False;
SetBounds(ScaleX(147), ScaleY(215), ScaleX(275), ScaleY(17));
OnClick:= @NoIconsLabelClick;
Cursor:= CrHand;
Transparent:=True;
Font.Name:= 'Verdana';
Font.Size:= 8;
Font.Color:=$FFFFFF;
//Font.Style:=[fsBold, fsItalic];
Caption := WizardForm.NoIconsCheck.Caption;
Parent := WizardForm;
end;
///////////////////////////////
SelectTasksPage := CreateCustomPage(wpSelectProgramGroup, ExpandConstant('{cm:TasksName}'), ExpandConstant('{cm:TasksDescription}'));
SelectTasksLabel := TLabel.Create(WizardForm);
with SelectTasksLabel do begin
AutoSize:=False;
SetBounds(ScaleX(90), ScaleY(150), ScaleX(400), ScaleY(50));
WordWrap:= True;
Transparent:=True;
Font.Name:= 'Verdana';
Font.Size:= 8;
Font.Color:=$FFFFFF;
//Font.Style:=[fsBold, fsItalic];
Caption:= ExpandConstant('{cm:SelectTasksLabel}');
OnMouseDown:=@LabelOnMouseDown;
Parent := WizardForm;
end;

//Создать ярлык на Рабочем столе
DesktopCheck:=BtnCreate(WizardForm.Handle,ScaleX(87),ScaleY(196),ScaleX(20),ScaleY(20),ExpandConstan t('{tmp}\CheckBox.png'),2,True);
BtnSetEvent(DesktopCheck,BtnClickEventID,WrapBtnCallback(@DesktopClick,1));
BtnSetEvent(DesktopCheck,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(DesktopCheck,GetSysCursorHandle(32649));

DesktopLabel := TLabel.Create(WizardForm);
with DesktopLabel do begin
AutoSize:=False;
SetBounds(ScaleX(112), ScaleY(198), ScaleX(400), ScaleY(20));
OnClick:= @DesktopLabelClick;
Cursor:= CrHand;
Transparent:=True;
Font.Name:= 'Verdana';
Font.Size:= 8;
Font.Color:=$FFFFFF;
//Font.Style:=[fsBold, fsItalic];
Caption := ExpandConstant('{cm:Desktop}');
Parent := WizardForm;
end;

//Установить Microsoft DirectX
DirectXCheck:=BtnCreate(WizardForm.Handle,ScaleX(87),ScaleY(220),ScaleX(20),ScaleY(20),ExpandConstan t('{tmp}\CheckBox.png'),2,True);
BtnSetEvent(DirectXCheck,BtnClickEventID,WrapBtnCallback(@DirectXClick,1));
BtnSetEvent(DirectXCheck,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(DirectXCheck,GetSysCursorHandle(32649));

DirectXLabel := TLabel.Create(WizardForm);
with DirectXLabel do begin
AutoSize:=False;
SetBounds(ScaleX(112), ScaleY(222), ScaleX(400), ScaleY(20));
OnClick:= @DirectXLabelClick;
Cursor:= CrHand;
Transparent:=True;
Font.Name:= 'Verdana';
Font.Size:= 8;
Font.Color:=$FFFFFF;
//Font.Style:=[fsBold, fsItalic];
Caption := ExpandConstant('{cm:DirectX}');
Parent := WizardForm;
end;
///////////////////////////////
StatusLabel := TLabel.Create(WizardForm);
with StatusLabel do begin
AutoSize:=False;
SetBounds(ScaleX(95), ScaleY(166), ScaleX(400), ScaleY(17));
Transparent:=True;
Font.Name:= 'Verdana';
Font.Size:= 8;
Font.Color:=$FFFFFF;
//Font.Style:=[fsBold,fsItalic];
OnMouseDown:=@LabelOnMouseDown;
Parent := WizardForm;
end;

FilenameLabel := TLabel.Create(WizardForm);
with FilenameLabel do begin
AutoSize:=False;
SetBounds(ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0));
Transparent:=True;
Font.Name:= 'Verdana';
Font.Size:= 8;
Font.Color:=$FFFFFF;
//Font.Style:=[fsItalic];
OnMouseDown:=@LabelOnMouseDown;
end;
///////////////////////////////
Finish1:= TLabel.Create(WizardForm);
with Finish1 do begin
AutoSize:=False
SetBounds(ScaleX(118), ScaleY(127), ScaleX(350), ScaleY(65));
WordWrap:=True
Alignment := taCenter;
Transparent:=True
Font.Name:='Verdana';
Font.Size:= 10;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold]
Caption:= ExpandConstant('{cm:Finish1}');
OnMouseDown:=@LabelOnMouseDown;
Parent:=WizardForm;
end;

Finish2:=TLabel.Create(WizardForm);
with Finish2 do begin
AutoSize:=False
SetBounds(ScaleX(50), ScaleY(170), ScaleX(500), ScaleY(500));
WordWrap:=True
Alignment := taCenter;
Transparent:=True
Font.Name:='Verdana';
Font.Size:= 8;
Font.Color:=$FFFFFF;
//Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Finish2}');
OnMouseDown:=@LabelOnMouseDown;
Parent:=WizardForm;
end;
end;
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
procedure HideComponents;
begin
Welcome1.Hide;
Welcome2.Hide;

SelectDirBrowseLabel.Hide;
DirEditLabel.Hide;
NeedSpaceLabel.Hide;
FreeSpaceLabel.Hide;

SelectStartMenuFolderBrowseLabel.Hide;
GroupEditLabel.Hide;
NoIconsLabel.Hide;

SelectTasksLabel.Hide;
DesktopLabel.Hide;
DirectXLabel.Hide;

StatusLabel.Hide;
FilenameLabel.Hide;

Finish1.Hide;
Finish2.Hide;
end;

procedure ShowComponents(CurPageID: Integer);
begin
PageNameLabel.Caption:=WizardForm.PageNameLabel.Caption
PageDescriptionLabel.Caption:=WizardForm.PageDescriptionLabel.Caption
case CurPageID of
wpWelcome: begin
Welcome1.Show
Welcome2.Show
end;

wpSelectDir: begin
ImgSetVisibility(Edit,True);
ImgSetVisibility(HDD,True);
ImgSetVisibility(DirBrowse,True);
BtnSetVisibility(hDirBrowseBtn,True);
SelectDirBrowseLabel.Show
DirEditLabel.Show
NeedSpaceLabel.Show
FreeSpaceLabel.Show
end;

wpSelectProgramGroup: begin
ImgSetVisibility(Edit,True);
ImgSetVisibility(HDD,True);
ImgSetVisibility(GroupBrowse,True);
BtnSetVisibility(hGroupBrowseBtn,True);
BtnSetVisibility(NoIconsCheck,True);
SelectStartMenuFolderBrowseLabel.Show
GroupEditLabel.Show
NoIconsLabel.Show;
end;

SelectTasksPage.ID: begin
BtnSetVisibility(DesktopCheck,True);
BtnSetVisibility(DirectXCheck,True);
SelectTasksLabel.Show;
DesktopLabel.Show;
DirectXLabel.Show;
WizardForm.NextButton.Caption:=SetupMessage(msgButtonInstall);
end;

wpInstalling: begin
BtnSetVisibility(hNextBtn,False);
BtnSetVisibility(hNextBtn,True);
BtnSetEnabled(hNextBtn,false);
StatusLabel.Show;
FilenameLabel.Show;
end;

wpFinished: begin
BtnSetVisibility(CancelUnpackingBtn,False);
BtnSetVisibility(CancelUnpackingBtn,True);
BtnSetEnabled(CancelUnpackingBtn,false);

BtnSetVisibility(hNextBtn,True);
BtnSetEnabled(hNextBtn,false);

Finish1.Show;
Finish2.Show;
end;
end;
end;
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
procedure InitializeWizard;
begin
InitializeWizard2; // Для изображения инсталлятора
CreateWizardImage; // Для изображения кнопок
InitializeWizard3; // Для надписей
ButtonsTextures; // Для кнопок
ProgresStepWizard; // Для прогресс бара
InsertMusic; // Для музыки
// SystemWizardImage; // Для сис требований
// SystemPageComponents; // Для сис требований
end;

// Для работы с botva2 и innocallback
function InitializeSetup: Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');// Botva2
if not FileExists(ExpandConstant('{tmp}\innocallback.dll')) then ExtractTemporaryFile('innocallback.dll');// innocallback
// if not FileExists(ExpandConstant('{tmp}\skin.cjstyles')) then ExtractTemporaryFile('skin.cjstyles');
if not FileExists(ExpandConstant('{tmp}\BASS.dll')) then ExtractTemporaryFile('BASS.dll');
if not FileExists(ExpandConstant('{tmp}\MusicButton.png')) then ExtractTemporaryFile('MusicButton.png');
if not FileExists(ExpandConstant('{tmp}\Music.mp3')) then ExtractTemporaryFile('Music.mp3');
// LoadSkin(ExpandConstant('{tmp}\skin.cjstyles'), '');
Result:=True;
end;
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
procedure CurPageChanged(CurPageID: Integer);
begin
SetStateNewButtons; // Для кнопок
HideComponents;

ImgSetVisibility(Edit,False);
ImgSetVisibility(HDD,False);
ImgSetVisibility(DirBrowse,False);
ImgSetVisibility(GroupBrowse,False);

BtnSetVisibility(hDirBrowseBtn,False);
BtnSetVisibility(hGroupBrowseBtn,False);
BtnSetVisibility(NoIconsCheck,False);
BtnSetVisibility(DesktopCheck,False);
BtnSetVisibility(DirectXCheck,False);

ShowComponents(CurPageID);
ISDonePageChanged(CurPageID);
CurPageChanged3(CurPageID);
// SystemCurPageChanged(CurPageID); // Для сис требований

ImgApplyChanges(WizardForm.Handle);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
ISDoneStepChanged(CurStep); // Для распаковщика ISDone
PBStepChanged(CurStep); // Для прогресс бара
end;
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
procedure DeInitializeSetup();
begin
gdipShutdown;// Для botva2
BASS_Stop;
BASS_Free;
WFButtonFont.Free; // Для кнопок (Надписи)
end;

//function InitializeUninstall(): Boolean; // Скин для деинсталлятора







Заранее спасибо.

VinTagE 15-10-2011 21:37 1774075

ntrx, Потому что инсталл был задуман без выбора компонентов!

VinTagE 15-10-2011 21:54 1774085

ntrx, Пример есть!
Спасибо nik1967 за пример.
http://rghost.ru/4010498
Реализовано в Need for Speed™ Undercover.iss v 2.4c [Final]
Пример только на ботве, если хочешь без ботвы то вот:
WizardForm.ComponentsList.Parent:=WizardForm;
WizardForm.ComponentsList.SetBounds(10, 108, 380, 53);
Дальше сам.

Damaks 15-10-2011 22:14 1774097

По моему вопросу отбой. Нашёл решение.

Dark_Delphin 15-10-2011 22:14 1774098

VinTagE, тепреь у меня выбор компонентов на всех страницах)))
Как это исправить?


VinTagE 15-10-2011 22:24 1774102

ntrx,
На нужной странице ставь...
WizardForm.ComponentsList.Show;
Не не нужной странице ставь
WizardForm.ComponentsList.Hide;

Dark_Delphin 15-10-2011 22:36 1774110

Что-то не получается.. Либо на всех либо нигде..(((

Кто может помочь?

http://rghost.ru/25728291

Но уже замучался..(

Помогите пожалуйста.

valyok666 16-10-2011 00:03 1774177

ntrx, чет не понимаю смысл этого компонентлиста создай лучше радиобутон для субтитров и озвучки вроде лучше будет
+ у тебя уже есть установка доп ПО смысл ещё на компонентлисте???

Dark_Delphin 16-10-2011 00:06 1774178

valyok666, Ну как Вы считаете лучше?
Давайте как сделали..

Damaks 16-10-2011 13:17 1774426

Inno Setup умеет подсчитывать MD5-хэш файлов. Поэтому есть возможность проверять контрольные суммы определённых файлов при обновлении и прекращать установку, ели файлы не оригинальные.

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

Blid 16-10-2011 14:43 1774481

Помогите пожалуйста.

Мне надо:
1. Чтобы блок где текст стал чёрным, а текст в нём белым.
2. И внизу (то что серое) надо залить чёрным.
3. Как поменять кнопки ?
Заранее ОГРОМНОЕ СПАСИБО !

Dark_Delphin 16-10-2011 14:47 1774484

Blid,

читать дальше »
[Setup]
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
OutputDir=userdocs:Test.

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

[Files]
;Изображение размером 240х23
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy

[Code_]

const
ButtonWidth = 80;
ButtonHeight = 23;

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

var
WizardLabel: TLabel;
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
n: Integer;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
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
end;

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

procedure ButtonLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
begin
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;
if ButtonLabel[TLabel(Sender).Tag].Enabled then
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
ButtonImage[TLabel(Sender).Tag].Left:= -160
end;
end;

procedure WizardLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm)
Image.Width:=240
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseMove:=@ButtonLabelMove
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm)
Labl.Left:=23
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseMove:=@ButtonLabelMove
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
ButtonLabel[AButtonIndex].Left:= ButtonPanel[AButtonIndex].Width div 2 - ButtonLabel[AButtonIndex].Width div 2;
ButtonLabel[AButtonIndex].Top:= ButtonPanel[AButtonIndex].Height div 2 - ButtonLabel[AButtonIndex].Height div 2;
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure InitializeWizard();
begin
WizardLabel:= TLabel.Create(WizardForm)
WizardLabel.Left:= ScaleX(0)
WizardLabel.Top:= ScaleY(0)
WizardLabel.Width:= ScaleX(497);
WizardLabel.Height:= ScaleY(360);
WizardLabel.Transparent:= True;
WizardLabel.AutoSize:=false;
WizardLabel.Caption:='';
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:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
UpdateButton(WizardForm.DirBrowseButton,bidDirBrowse)
UpdateButton(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;


Кнопки

_______________
WizardForm.WelcomePage.Color:=clBlack; //// Чорный

insombia 16-10-2011 14:54 1774486

Blid http://rghost.ru/25795891
Цитата:

Чтобы блок где текст стал чёрным

Blid 16-10-2011 15:03 1774492

ntrx
С кнопками всё удалось, а вот с чёрным цветом не получается он строчку (WizardForm.WelcomePage.Color:=clBlack;) выделяет красным.

insombia
не рубит. Выделил красным (function DrawText(hDC: LongWord; lpString: PAnsiChar; nCount: Integer; var lpRect: TRect; uFormat: UINT): Integer; external 'DrawTextA@user32.dll stdcall';)

Dark_Delphin 16-10-2011 15:10 1774498

Blid, вот так можно сделать черным инсталлятор. =)

читать дальше »
[Setup]
AppName=Black Setup
AppVersion=Black Setup
DefaultDirName={pf}\Black Setup

[code]
const
Color = clblack;

procedure InitializeWizard();
begin
WizardForm.Font.Color:=clLime;
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:=clblack;
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.WelcomeLabel1.Font.Color:=clLime;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clLime;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clLime;
WizardForm.Bevel.visible:=False;
WizardForm.BeveledLabel.visible:=False;
WizardForm.Bevel1.visible:=False;
end;

insombia 16-10-2011 15:29 1774508

Blid может оно у тебя уже в скрипте значит есть просто удали его

Dark_Delphin 16-10-2011 15:38 1774511

То кто-то может помочь? Пожалуйста..
Что-бы как-то хоть можна было выбирать компоненты.
Вот скрипт из всеми файлами http://rghost.ru/25728291

Blid 16-10-2011 16:26 1774549

У меня ещё два вопросика.
1. Какие цвета поддерживает inno setup
2. Именно у этой галочки нет текста.

Dark_Delphin 16-10-2011 16:34 1774558

Blid, 1) //clBlack, clMaroon, clGreen, clOlive, clNavy, clPurple, clTeal, clGray, clSilver, clRed, clLime, clYellow, clBlue, clFuchsia, clAqua, clWhite
2) Текст значит черный, сделай его белым.

Blid 16-10-2011 16:42 1774569

ntrx

Я понял что текст чёрный, а вот как его поменять не могу найти.
Вроде везде поменял White на Lime, а у этой галки текста нет.

No4noylis 16-10-2011 16:44 1774572

ntrx, Держи, теперь вроде все нормально с компонент листом :)

Rikill 16-10-2011 16:45 1774574

Blid, инно поддерживает все Web цвета. Если что-то не получается, проштудируй код.

Dark_Delphin 16-10-2011 16:51 1774581

No4noylis, спасибо.

А что это за строка? :
Код:

WizardForm.ComponentsList.LoadBGBmpFromFile(BGImgFile, WizardForm.ComponentsList.Left+BorderWidth+8, WizardForm.ComponentsList.Top+BorderWidth+22);
Просто эта строка выбивает ошибку LoadBGBmpFromFile

ПС: я закоментировал строку всё норм.

Спасибо большое!)

Blid 16-10-2011 16:56 1774590

Ну все web цвета он не поддерживает (Я проверял)



А вот код
читать дальше »

const
Color = clblack;

var
PageNameLabel, PageDescriptionLabel: TLabel;
MainImage : TBitmapImage;
FinishedImage: TBitmapImage;

const
ButtonWidth = 80;
ButtonHeight = 23;

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

var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
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
end;

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

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm) //Ðèñóíîê êîòîðûé ëîæèòñÿ íà êíîïêó
Image.Width:=160 //Îáÿçàòåëüíî ïðîïèñàòü îðèãèíàëüíûé ðàçìåð ðèñóíêà
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm)
Labl.Left:=23
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite //Öâåò òåêñòà
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
end;

procedure InitializeWizard();
var
BtnPanel: TPanel;
Logo: TBitmapImage;
begin
ExtractTemporaryFile('Logo.bmp')

BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=0
Top:=315
Width:=497
Height:=35
Parent:=WizardForm
end
Logo:=TBitmapImage.Create(WizardForm)
with Logo do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Logo.bmp')
Parent:=BtnPanel
with WizardForm do begin
with WizardBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with WizardBitmapImage2 do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with MainPanel do begin
with WizardSmallBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= Mainpanel.Width;
Height:= MainPanel.Height;
end;
end;
end;
end

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:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)

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;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.PageNameLabel.Hide;

ExtractTemporaryFile('papka.bmp');
ExtractTemporaryFile('papka1.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=True;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka1.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=True;

WizardForm.Font.Color:=clLime;
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.WelcomeLabel1.Font.Color:=cllime;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clLime;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clLime;
WizardForm.ReadyMemo.ScrollBars:= ssNone
WizardForm.Bevel.visible:=False;
WizardForm.BeveledLabel.visible:=False;
WizardForm.Bevel1.visible:=False;
begin
ExtractTemporaryFile('img1.bmp');
MainImage := TBitmapImage.Create(WizardForm);
with MainImage do
begin
Parent := WizardForm;
Left := 0;
Top := 0;
Width := 500;
Height := 313;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\img1.bmp'));
end;

ExtractTemporaryFile('img2.bmp');
FinishedImage := TBitmapImage.Create(WizardForm);
with FinishedImage do
begin
Parent := WizardForm;
Left := 0;
Top := 0;
Width := 500;
Height := 313;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\img2.bmp'));
end;
end;
end;

Dark_Delphin 16-10-2011 17:11 1774611

Вот так пробуй.

читать дальше »
const
Color = clblack;

var
PageNameLabel, PageDescriptionLabel: TLabel;
MainImage : TBitmapImage;
FinishedImage: TBitmapImage;

const
ButtonWidth = 80;
ButtonHeight = 23;

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

var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
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
end;

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

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm) //Ðèñóíîê êîòîðûé ëîæèòñÿ íà êíîïêó
Image.Width:=160 //Îáÿçàòåëüíî ïðîïèñàòü îðèãèíàëüíûé ðàçìåð ðèñóíêà
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end

Labl:=TLabel.Create(WizardForm)
Labl.Left:=23
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite //Öâåò òåêñòà
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
end;

procedure InitializeWizard();
var
BtnPanel: TPanel;
Logo: TBitmapImage;
begin
ExtractTemporaryFile('Logo.bmp')

BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=0
Top:=315
Width:=497
Height:=35
Parent:=WizardForm
end
Logo:=TBitmapImage.Create(WizardForm)
with Logo do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Logo.bmp')
Parent:=BtnPanel
with WizardForm do begin
with WizardBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with WizardBitmapImage2 do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= ScaleX(497);
Height:= ScaleY(313);
Stretch:= true;
end;
with MainPanel do begin
with WizardSmallBitmapImage do begin
Top:= ScaleY(0);
Left:= ScaleX(0);
Width:= Mainpanel.Width;
Height:= MainPanel.Height;
end;
end;
end;
end

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:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)

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;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.PageNameLabel.Hide;

ExtractTemporaryFile('papka.bmp');
ExtractTemporaryFile('papka1.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=True;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka1.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=True;

WizardForm.Font.Color:=clLime;
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:=ClWhite;
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.WelcomeLabel1.Font.Color:=cllime;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.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.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clLime;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clLime;
WizardForm.ReadyMemo.ScrollBars:= ssNone
WizardForm.Bevel.visible:=False;
WizardForm.BeveledLabel.visible:=False;
WizardForm.Bevel1.visible:=False;
begin
ExtractTemporaryFile('img1.bmp');
MainImage := TBitmapImage.Create(WizardForm);
with MainImage do
begin
Parent := WizardForm;
Left := 0;
Top := 0;
Width := 500;
Height := 313;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\img1.bmp'));
end;

ExtractTemporaryFile('img2.bmp');
FinishedImage := TBitmapImage.Create(WizardForm);
with FinishedImage do
begin
Parent := WizardForm;
Left := 0;
Top := 0;
Width := 500;
Height := 313;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\img2.bmp'));
end;
end;
end;

Blid 16-10-2011 17:15 1774616

ntrx
Не работает.

Blid 16-10-2011 17:30 1774635

А за что отвечают эти две строчки:
WizardForm.FinishedHeadingLabel.Font.Color:=clWhite;
WizardForm.PageNameLabel.Font.Color:=clWhite;

valyok666 16-10-2011 17:44 1774651

Blid,
WizardForm.FinishedHeadingLabel.Font.Color:=clWhite; лейбл на финишной странице "Завершение Мастера Установки"
WizardForm.PageNameLabel.Font.Color:=clWhite; лейбл - название страницы

Rikill 16-10-2011 17:48 1774655

valyok666, o_O
PageNameLabel - название страницы.
тссс, не материмся :)

valyok666 16-10-2011 17:50 1774658

Rikill, описался сор

Dark_Delphin 16-10-2011 18:05 1774677

Подскажите, какие строки отвечают зща это?)


Rikill 16-10-2011 18:06 1774678

ntrx, ISDone, records. Справку к исдону смотри.

Dark_Delphin 16-10-2011 18:16 1774686

Rikill, я так и не понял в справке что нужно изменить, что-бы 4 архива поделить по 25%.. Перерыл скрипт не нашёл строчек.

Опа.. всё спасибо. понял.

VASYAKRN 16-10-2011 18:30 1774700

Цитата:

Цитата Rikill

Rikill, tnf информация устарела

Dark_Delphin 16-10-2011 18:58 1774726

Подскажите возможно ли сделать прозрачным, а не черным?


No4noylis 16-10-2011 19:18 1774744

Цитата:

Цитата ntrx
А что это за строка? :
Код:
WizardForm.ComponentsList.LoadBGBmpFromFile(BGImgFile, WizardForm.ComponentsList.Left+BorderWidt »

ntrx, именно эта строка ставит картиночку, чтобы компонент-лист был как-бы прозрачным. У меня все отлично компилировалось...
Ошибка, должно помочь если добавить это в скрипт:
Код:

procedure LoadBGBmpFromFile(FileName: String; OffsetX, OffsetY: Integer);

Dark_Delphin 16-10-2011 19:29 1774760

No4noylis, вот такое выбивает эта строка((((


VASYAKRN 16-10-2011 19:37 1774766


Пожалста подскажите как сделать деинсталятор похож на инсталятор(добавить маску маска и сделать 3 странице:Приветствие,Деинсталяция и готово)
ссилка

Gnom_aka_Lexander 16-10-2011 20:52 1774811

Цитата:

Цитата ntrx
вот такое выбивает эта строка(((( »

Потому, что в стандартной версии нет такой функции. ставь расширенную.

Blid 16-10-2011 20:52 1774812

Подскажите как сделать такую фиху

valyok666 16-10-2011 20:56 1774819

Blid, ты имеешь ввиду рамку или что?

Gnom_aka_Lexander 16-10-2011 21:00 1774824

Цитата:

Цитата Blid
Подскажите как сделать такую фиху »

читать дальше »
Код:

#define NeedSize 4380
#define NeedInstallSize 7890

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[_code]
var
  SpaceLabel:array[0..3]of TLabel;
  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;

function MbOrTb(Float: Extended): String;
begin
  if Float < 1024 then Result:= NumToStr(Float)+' Мб' else
    if Float/1024 < 1024 then Result:= NumToStr(Float/1024)+' Гб' else
      Result:= NumToStr(Float/(1024*1024))+' Тб';
end;

procedure DirEditOnChange(Sender: TObject);
var Drive: String;
begin
  Drive:= ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Drive, True, FreeMB, TotalMB);
  SpaceLabel[0].Caption:= 'Всего места на диске: '+MbOrTb(TotalMB);
  SpaceLabel[1].Caption:= 'Доступно места на диске: '+MbOrTb(FreeMB)+' ('+IntToStr(round(FreeMB*100/TotalMB))+'%)';
  SpaceLabel[2].Caption:= 'Требуется места для установки: '+MbOrTb({#NeedInstallSize});
  SpaceLabel[3].Caption:= 'Требуется места на диске: '+MbOrTb({#NeedSize});
  WizardForm.NextButton.Enabled:= (FreeMB>{#NeedInstallSize})and(FreeMB>{#NeedSize});
  WizardForm.SelectDirPage.Repaint;
end;

procedure InitializeWizard();
var i:integer;
begin
  { SpaceLabel }
  for i:=0 to 3 do
  begin
  SpaceLabel[i]:= TLabel.Create(WizardForm);
    with SpaceLabel[i] do
    begin
      Transparent:=True;
      Parent:= WizardForm.SelectDirpage;
      SetBounds(ScaleX(7),ScaleY(115+i*20),ScaleX(300),ScaleY(17));
    end;
  end;
  WizardForm.DirEdit.OnChange:=@DirEditOnChange;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpSelectDir then begin
    DirEditOnChange(nil)
  end;
end;

Подредактировал пример - сделал покороче

Blid 16-10-2011 21:13 1774836

Лександер

У меня эти строки красного цвета и при запуске выдаёт ошибку.

#define NeedSize
#define NeedInstallSize 7890

Gnom_aka_Lexander 16-10-2011 21:15 1774837

Цитата:

Цитата Blid
У меня эти строки красного цвета и при запуске выдаёт ошибку. »

Они и должны быть красного цвета. А ошибка говорит о отм, что нет, почему-то, препроцессора в компиляторе.
Цитата:

Цитата ntrx
вот такое выбивает эта строка(((( »

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

Blid 16-10-2011 21:20 1774842

Лександер,
Как понять нет препроцессора в компиляторе ?

Gnom_aka_Lexander 16-10-2011 21:21 1774843

Цитата:

Цитата Blid
Как понять нет препроцессора в компиляторе ? »

Препроцессор Инно

Dark_Delphin 16-10-2011 21:23 1774846

Лександер, спасибо, я уже поставил твою сборку.

Gnom_aka_Lexander 16-10-2011 21:25 1774847

Цитата:

Цитата ntrx
спасибо, я уже поставил твою сборку. »

Если эта ошибка, значит ставил стандартную версию. для получения доступа к куче дополнительных функций и свойств элементов, нужно выбирать расширенную. Для новичков - лучше АНСИ (сам на ней работаю, хоть и не совсем новичек уже)

Blid 16-10-2011 21:51 1774865

Люди HELP!
Почему когда я обновил версию с 5.2 до 5.4
У меня эта строчка стала выдавать ошибку
Код:

bidNext: Button:=WizardForm.NextButton

Rikill 16-10-2011 21:56 1774869

Лександер, можешь дать для одного примера два кода. Один для АНСИ. Другой на ЮНИКОД.
Думаю было бы для многих полезно узнать.

Edison007 16-10-2011 23:42 1774926

Цитата:

Цитата Blid
Люди HELP!
Почему когда я обновил версию с 5.2 до 5.4
У меня эта строчка стала выдавать ошибку »

телепаты в отпуске. какая именно ошибка?

Devils Night 17-10-2011 00:04 1774938

Цитата:

Цитата Blid
Люди HELP!
Почему когда я обновил версию с 5.2 до 5.4
У меня эта строчка стала выдавать ошибку »

Удаляй своё 5.2 до 5.4 через Revo Uninstaller и ставь сборку от Лександра

volk1234 17-10-2011 09:44 1775099

Удалил с полсотни сообщений в ветке.
Большая просьба - если Вы считаете, что кто либо нарушает правила - пишите с конкретными ссылками мне.
А превращать ветку в отстойник- чем Вы тогда лучше нарушающего правила ?
Rikill, ntrx, valyok666 почитайте ОПК 3.7.

Dark_Delphin 17-10-2011 19:36 1775521

Всем привет.

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


Заранее спасибо.

No4noylis 17-10-2011 19:39 1775527

ntrx, Скрипт давай

Dark_Delphin 17-10-2011 19:44 1775534

No4noylis, Скрипт

No4noylis 17-10-2011 19:56 1775545

ntrx, Держи, :)

Dark_Delphin 17-10-2011 20:02 1775554

No4noylis, спасибо большое.
А мож сказать что сделал? Просто на старнице ДИРГРУП та же проблемка)

No4noylis 17-10-2011 20:30 1775581

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

Это DirEditLabel.Caption := MinimizePathName(WizardForm.DirEdit.Text, DirEditLabel.Font, DirEditLabel.Width); я перенес в процедуру вычисления свободного места, для того, чтоб путь обновлялся при каждом изменении DirEdit. Для GroupEdit нужно сделать подобное:
Код:

procedure GroupEditCaption(Sender: TObject);
begin
GroupEditLabel.Caption := MinimizePathName(WizardForm.GroupEdit.Text, GroupEditLabel.Font, GroupEditLabel.Width);
end;
procedure InitializeWizard();
begin
wizardform.GroupEdit.OnChange:=@GroupEditCaption;
end;


insombia 17-10-2011 21:11 1775621

Вот есть проблема что кнопка обзор не такая по длинe как остальные как исправить?
http://i29.fastpic.ru/big/2011/1017/...bcc668eb18.jpg

valyok666 17-10-2011 21:29 1775637

insombia, размеры смотри что ещё то

Dark_Delphin 17-10-2011 23:04 1775721

Подскажите пожалуйста, что это за ошибку выбило после установки?



Заранее спасибо.

Edison007 17-10-2011 23:42 1775736

ntrx, Давай скрипт посмотрю

Rikill 17-10-2011 23:48 1775742

ntrx, бывает такое просто так, не зависимо от скрипта. Ты сначала перезагрузись, перекомпилируй. У меня тоже такое было)


Не мог бы кто написать, что это ПОДРОБНО значит. Ясно, что с оперативой. Но как это там происходит?

murlakatamenka 18-10-2011 02:19 1775801

ребята, такой вопрос.
для лого на стекле использую Fairy. Логотип появляется раньше формы. как можно сделать, чтобы логотип появлялся вместе с формой, как это реализовано у R.G. Catalyst.
Подскажите логику работы инсталлятора для реализации задуманного. Стекло и fairy идут своими процедурами в InitializeWizard, процедура fairy идёт самой последней. Посмотрев функции и процедуры Fairy, можно понять, что надо как-то юзать HideFairy/ShowFairy или StopFairy/ResumeFairy, пробовать прятать WizardForm. В общем, помогите разобраться, я идею реализую.
--------------------------
второй вопрос связан с установкой доп по при использовании ISDone
как красиво это реализовать? вопрос в том, что ISDone распаковывает архивы на этапе ssInsatll, затем прячется его кнопка отмены установки и все котролы (прогрессбар, лейблы времени), показывается и делается неактивной родная кнопка отмены. т.е. если я захочу прервать установку, то уже не смогу. насколько знаю, можно установку доп по и вовсе реализовать через секцию кода. примерно так (очень примерно): IfIsComponentSelected('имя_компонента') then begin ShellExec(...) end; + в случае VCR делается Check: IsWin64 для установки vcredist_x32/64
--------------------------
третий вопрос про ISDone. когда не нужно время установки, я просто не создаю лэйблытаймы и закомменчиваю records.inf. но в этом случае при установке отображается имя превьюшки windows 7 - Установка: тестовый прогон. Как убрать это ? Если что под превью имел ввиду:
Цитата:

Наведите указатель мыши на кнопку панели задач — отобразится эскиз предварительного просмотра (в том числе и для воспроизводимого видео). Затем наведите его на эскиз — он преобразуется в режим полноэкранного просмотра.

Gnom_aka_Lexander 18-10-2011 08:19 1775858

Цитата:

Цитата murlakatamenka
как это реализовано у R.G. Catalyst. »

R.G. Catalyst используют свою длл-ку для этого, которая специально для них была написана. Делай лого побольше размером, это единственный способ борьбы с запозданием окна WizardForm.
Цитата:

Цитата murlakatamenka
как красиво это реализовать? »

Через сам ISDone. Тогда и по будет на прогрессбаре плавно отображаться, и отмена останется.

читать дальше »
Код:

[Tasks]
Name: po; Description: Установить дополнительное ПО
Name: po\Runtime; Description: Microsoft Visual C++
Name: po\PhysX; Description: NVIDIA PhysX
Name: po\DX9; Description: Microsoft DirectX
...............................
// Подготавливаем переменную, содержащую всю информацию о выделенных задачах для ISDone.dll
// максимум 96 компонентов.
    Comps1:=0; Comps2:=0; Comps3:=0;
    TmpValue:=1;
    if IsTaskSelected('po\Runtime') then Comps1:=Comps1+TmpValue;    //компонент 1
    TmpValue:=TmpValue*2;
    if IsTaskSelected('po\PhysX') then Comps1:=Comps1+TmpValue;    //компонент 2
    TmpValue:=TmpValue*2;
    if IsTaskSelected('po\DX9') then Comps1:=Comps1+TmpValue;    //компонент 3

.........................................
        if not ISExec          ( 1, 0, 0, ExpandConstant('{src}\Redist\DirectX.exe'), '', ExpandConstant('{src}'),'Microsoft DirectX',false) then break;

        if not ISExec          ( 2, 0, 0, ExpandConstant('{src}\Redist\PhysX.exe'), '', ExpandConstant('{src}'),'Nvidia PhysX',false) then break;

        if not ISExec          ( 3, 0, 0, ExpandConstant('{src}\Redist\VCR_Ext_x86_x64.exe'), '/S', ExpandConstant('{src}\Redist'), 'Microsoft Visual C++',false) then break;

Цитата:

Цитата murlakatamenka
третий вопрос про ISDone »

WizardForm.Caption:='Твоя надпись'; - найди эту строчку и забей там то, что тебе нужно.

murlakatamenka 18-10-2011 14:16 1776092

Цитата:

Цитата Лександер
Цитата:

как красиво это реализовать?
Через сам ISDone. Тогда и по будет на прогрессбаре плавно отображаться, и отмена останется. »

а это как?

кажется, понял, через ISExec + связь с компонентами (как и в случае установки, например, разных языков озвучки).

valyok666 18-10-2011 15:28 1776149

Лександер, можно узнать насчёт isPicture есть ли новая версия???

Sollar 18-10-2011 18:17 1776267

как обратиться к массиву #org[i] из кода?

нужно что-то типа

function GetWizardSetupType (Default:String):Integer;
begin
for i := 0 to {#CountSection} do
begin
if ('{#org[i]}' = WizardSetupType(false)) then
msgbox(inttostr(i),mbInformation, MB_OK);
Result:= i;

end
end;

как передать индекс переменной в коде?

Sotonisto 18-10-2011 22:18 1776438

Возможно, просьба прозвучит нагло, но кто может с этого скрипта Catalyst (его выкладывали ранее):
а) Убрать слайдшоу и распаковку FreeArc, 7zip и пр. (делаю инсталл для себя, так что эти функции мне не интересны)
б) Добавить прогресс бар (мождо даже стандартный)
Сколько бы раз я своими кривыми ручонками не лез в скрип - результат всегда один... х_х
Прошу помочь и заранее благодарен.
P.S.: Знаю, что обычно все наоборот просят добавить FA и т.д., но меня больше привлекает визуальная сторона инсталла, нежели функциональность :)

murlakatamenka 18-10-2011 22:39 1776448

Sotonisto, в этом скрипте слайдшоу идёт на этапе ssInstall с помощью ISSlideshow, его убрать легко
стандарнтый прорессбар скрывается и вместо него создаётся новый (вместе с другими кастомными контролами; смотрите функции CreateControls и HideControls)
распаковка идёт через ISDone, посмотрите скрипт, который с ним идёт и легко уберёте всё исдонное из скрипта.
и от фриарка грех отказываться, и жмёт хорошо, и репаки удобнее делать: дизайн инсталла отдельно, упаковка отдельно. легче тестировать и компилить только сетапку надо. простой пример. сделали инсталлятор, всё готово и проверено, скомпилили, а потом посмотрели, что, например, текст неправильный (например Battlefeild 3, а не Battlefield 3 :)). казалось бы мелочь, но заново компилить 20 минут.
Цитата:

Цитата Sotonisto
P.S.: Знаю, что обычно все наоборот просят добавить FA и т.д., но меня больше привлекает визуальная сторона инсталла, нежели функциональность »

isdone никак визуальную сторону не ухудшает ведь, а делать удобнее.
---------------
убрал слайдшоу и всё, что с ним связано (т.е. dll и слайды) - http://rghost.ru/26167341

6apakyda 19-10-2011 02:08 1776542

Здраствуйте
Меня попросили сделать установщик:
Запускаем установку >появляется окно где предлагается поменять стартовую страницу > после чего запускается установка exe файла (именно файла а не набора файлов) и всё.
Очень нужно, помогите пожалуйста, я в этом ничего не понимаю и готов оплатить труды за написание такого кода.
Заранее спасибо

murlakatamenka 19-10-2011 03:38 1776552

Лександер, только сейчас заметил "читать дальше" с кодом :shuffle:
-------------------------------------------------------------------------------
Цитата:

появляется окно где предлагается поменять стартовую страницу
домашнюю страницу браузера, это имеется ввиду?
типа появляется окошко с надписью "Домашняя страница будет изменена на "адрес_новой_homepage"" с кнопками OK и Cancel и вне зависимости от выбора пользователя начинается установка программы.
---------------------------------------
для смены homepage IE (при компиляции [_Code] заменить на [code])
читать дальше »
Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{12C06398-3F34-4DDE-BD66-6D263C0FC8FA}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Ultra\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: nowait postinstall skipifsilent

[_Code]
procedure InitializeWizard();
begin
  if MsgBox('Сменить домашнюю страницу на {#MyAppURL} ?',mbconfirmation, mb_yesno) = IDYES then
    begin
      RegWriteStringValue(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Internet Explorer\Main',
    'Start Page', ExpandConstant('{#MyAppURL}'));
    end;
end;


6apakyda 19-10-2011 10:53 1776683

Да, всё верно, домашнюю страницу поменять, но с предложением (галочка) Поменять стартовую страницу на www_ru?
Спасибо за код. Только вот хотелось бы чтобы без предложения запустить программу, а чтобы сразу после распаковки файла, exe сразу запускалась. Вечером продолжу танцевать с бубном
-------------------
С помощью команды DisableFinishedPage=yes убрал последнее окно, после чего запускается exe без запроса.
Галочки с предложением заменить страницу нету, но и страница не меняется =(
И ещё я не пойму, почему когда я заменил DefaultDirName={pf}\{#MyAppName} на .....={tmp}\{#MyAppName} ничего не изменилось
-------------------
Поставил DefaultDirName=no и поменял в разделе [Files] DestDir {app} на DestDir {tmp} и также в [Run], заработало.
С заменой стартовой страницы "разобрался", изначально пропустил фразу
Цитата:

Цитата murlakatamenka
(при компиляции [_Code] заменить на [code]) »

Спасибо огромное за помощь! На самом деле я понял что по чуть чуть и можно многому научиться, главное читать по больше

murlakatamenka 19-10-2011 13:46 1776838

6apakyda, а чего в {tmp} прога ставится?
Цитата:

Цитата 6apakyda
С помощью команды DisableFinishedPage=yes убрал последнее окно, после чего запускается exe без запроса. »

дурной тон это, обязательно надо спрашивать у пользователя, нужно ли запускать программу после установки или нет.
вот с галочкой код (ещё раз повторю, он только для Internet Explorer)

читать дальше »
Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{12C06398-3F34-4DDE-BD66-6D263C0FC8FA}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";
Name: "homepage"; Description: "Ñäåëàòü {#MyAppURL} ñòàðòîâîé ñòðàíèöåé"; GroupDescription: "{cm:AdditionalIcons}";

[Files]
Source: "C:\Program Files (x86)\Inno Ultra\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Registry]
Root: HKCU; Subkey: "SOFTWARE\Microsoft\Internet Explorer\Main"; ValueName: "Start Page"; ValueType: String; ValueData: {#MyAppName}; Tasks: "homepage"; Flags: noerror

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: nowait postinstall skipifsilent



вот рекомендую почитать - Inno Setup (Инструкция по Inno Setup - Инструкция по Inno Setup в формате PDF для начинающих от sjwrec.)

valyok666 19-10-2011 15:43 1776952

Почитать лучше это
Русская справка к версии 5.4.2, автор перевода BagIra, bugron формат Chm версия

Sollar 19-10-2011 18:05 1777126

объясните почему эта функция не срабатывает только на logPage ???

причем судя по мессаджбоксам в условие входит
Код:

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  { Skip pages that shouldn't be shown }
 
  if (not IsTaskSelected('OCS')) and (PageID = TAGPage.ID) then
      Result := True
  else if (not IsTaskSelected('LogMeIn')) and ((PageID = logmeinPage.ID) or (PageID = logPage.ID)) then
      Result := True
  else
  begin
      if (PageID = wpSelectTasks) then   
      begin
          ocsTAG := GetIniString('Org'+inttostr(GetWizardSetupType()+1), 'ocsTAG', 'Error', 'C:\временная\example.ini');
          LogmeinTAG := GetIniString('Org'+inttostr(GetWizardSetupType()+1), 'LogmeinTAG', 'Error', 'C:\временная\example.ini');
      end;
      if (PageID = logPage.ID) and (LogmeinTAG <> '' ) then
      begin
          login := '/c msiexec /i {tmp}{\logmein.msi /q ACCOUNTEMAIL=' + logmeinTAG + ' USERPASSWORD=' + logmeinPage.Values[0] + ' USERVERIFYPWD=' + logmeinPage.Values[0] + ' USEREMAIL=' + logmeinTAG + ' USERWEBPASSWORD=' + logmeinPage.Values[0] + ' LicenseType=free'     
       
          Result := True
      end
      else
      begin   
          login := '/c msiexec /i {tmp}{\logmein.msi /q ACCOUNTEMAIL=' + logPage.Values[0] + ' USERPASSWORD=' + logmeinPage.Values[0] + ' USERVERIFYPWD=' + logmeinPage.Values[0] + ' USEREMAIL=' + logPage.Values[0] + ' USERWEBPASSWORD=' + logmeinPage.Values[0] + ' LicenseType=free'     
          Result := False;
      end;
      if ((PageID = TAGPage.ID) and (ocsTAG <> '' )) then
      begin
          s := 'install /S /UPGRADE /NOSPASH /SERVER:svc.ru /NP /DEBUG /NOW /TAG:' + ocsTAG;
          Result := True
          msgbox('ocs не срабатывает', mbInformation, MB_OK);
          msgbox(s + '  ' + ocsTAG, mbInformation, MB_OK);
      end
      else
      begin
          s := 'install /S /UPGRADE /NOSPASH /SERVER:svc.ru /NP /DEBUG /NOW /TAG:' + TAGPage.Values[0];
          Result := False
      end;
    end;
end;


6apakyda 19-10-2011 18:33 1777150

Подскажите пожалуйста, какой флаг надо вбить чтобы распаковывался только выбранный exe файл
Вообще сдесь ли это делать надо:
Код:

[Components]
Name: XP; Description: Adobe Reader для Windows XP; Flags: exclusive
Name: Vista; Description: Adobe Reader для Windows Vista; Flags: exclusive
Name: Seven; Description: Adobe Reader для Windows 7; Flags: exclusive


insombia 19-10-2011 21:22 1777290

6apakyda у тебя вроде все правильно выбрано

Sotonisto 19-10-2011 22:35 1777345

murlakatamenka, спасибо за скрипт :) Но все же вопрос остался открытым :) Я вообще не использую FreeArc и не понимаю как ним пользоваться (юзаю только Inno).

valyok666 19-10-2011 22:39 1777348

Sotonisto, юзай Isdone проще по моему

Sotonisto 19-10-2011 22:53 1777361

Я вот только что скачал репак RE4 и там такой инсталлятор:

Кто может поделиться таким же/максимально похожим? :happy:
---
valyok666, вот есть немного подчищеный скрипт (он с ISDone) http://rghost.ru/26167341 (спасибо за это murlakatamenka).
Как туда вернуть стандартный прогресс бар (нынешний видит только распаковку FreeArc, 7-Zip... короче все, но только не Inno)? Если упаковать, например, игру средствами Inno - прогресс бар не будет реагировать (хотя установка будет идти) :(

valyok666 19-10-2011 23:54 1777398

Sotonisto, там создание формы через ботву или я ошибаюсь????

valyok666 20-10-2011 00:09 1777408

У кого нить есть пример создания формы с нуля очень нужно можно в пм)

Rikill 20-10-2011 00:12 1777410

valyok666, какая форма интересует? Типо такого? Если что, просто вешаешь на кнопку и видишь результат.
Form := CreateCustomForm();
with Form do
begin
Position := poScreenCenter;
ClientWidth := ScaleX(WizardForm.Width);
ClientHeight := ScaleY(230) div 2;
Caption := 'form';
Color := clBlack;

В var сам допишешь.

valyok666 20-10-2011 00:16 1777411

Rikill,сорри не уточнил)через ботву
просто есть примеры разные но вот именно с нуля нет

Edison007 20-10-2011 00:25 1777420

valyok666, Что имеется ввиду под фразой: "с нуля"?

valyok666 20-10-2011 00:31 1777423

Edison007, какбы с комментариями пошагово так сказать.Чтобы знать как создаёться и т.д)и редактировать под как себе угодно :help:

6apakyda 20-10-2011 02:47 1777470

Цитата:

Цитата insombia
Подскажите пожалуйста, какой флаг надо вбить чтобы распаковывался только выбранный exe файл
Вообще сдесь ли это делать надо:
Код:

[Components]
Name: XP; Description: Adobe Reader для Windows XP; Flags: exclusive
Name: Vista; Description: Adobe Reader для Windows Vista; Flags: exclusive
Name: Seven; Description: Adobe Reader для Windows 7; Flags: exclusive

6apakyda у тебя вроде все правильно выбрано »

Извините, я понимаю что всё выбрано правильно, но хотелось бы чтобы из этих 3-х приложений распаковывалось одно, а не все сразу. Вот мой скрипт, помогите пожалуйста(я ничего не скрываю, а только жду критики):
HTML код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Установка Adobe Reader 10"
#define MyAppVersion "10"
#define MyAppPublisher "Сделаем-ПК"
#define MyAppURL "http://www.sdelaem-pc.ru/"
#define MyAppExeName "AdbeRdr1010_ru_RU.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{2641D155-412E-4264-ABE8-4010C59393B0}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\Adobe\Reader 10.0\
DisableDirPage=yes
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableFinishedPage=yes
Uninstallable=no

[Types]
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: XP; Description: Adobe Reader для Windows XP; Flags: exclusive
Name: Vista; Description: Adobe Reader для Windows Vista; Flags: exclusive
Name: Seven; Description: Adobe Reader для Windows 7; Flags: exclusive

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

[Files]
;Source: "C:\Documents and Settings\Администратор\Рабочий стол\сделаем пк\установка программ\adobe reader\1.txt"; DestDir: "{tmp}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
;Source: "C:\Documents and Settings\Администратор\Рабочий стол\сделаем пк\установка программ\adobe reader\2.txt"; DestDir: {tmp}; Flags: ignoreversion
;Source: "C:\Documents and Settings\Администратор\Рабочий стол\сделаем пк\установка программ\adobe reader\3.txt"; DestDir: {tmp}; Flags: ignoreversion
Source: C:\Documents and Settings\Администратор\Рабочий стол\сделаем пк\установка программ\adobe reader\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs


[Run]
;Filename: "{tmp}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: nowait postinstall skipifsilent
;Filename: {pf}\Adobe\Reader 10.0\AdbeRdr1010_ru_RU(XP).exe; Components: XP; StatusMsg: Идёт установка...; Flags: waituntilterminated
;Filename: {pf}\Adobe\Reader 10.0\AdbeRdr1010_ru_RU(Vista).exe; Components: Vista; StatusMsg: Идёт установка...; Flags: waituntilterminated
;Filename: {pf}\Adobe\Reader 10.0\AdbeRdr1010_ru_RU(7).exe; Components: Seven; StatusMsg: Идёт установка...; Flags: waituntilterminated

Filename: {pf}\Adobe\Reader 10.0\1.txt; Components: XP; StatusMsg: Идёт установка...; Flags: waituntilterminated
Filename: {pf}\Adobe\Reader 10.0\2.txt; Components: Vista; StatusMsg: Идёт установка...; Flags: waituntilterminated
Filename: {pf}\Adobe\Reader 10.0\3.txt; Components: Seven; StatusMsg: Идёт установка...; Flags: waituntilterminated

[code]
procedure InitializeWizard();
begin
  if MsgBox('Сменить домашнюю страницу на {#MyAppURL} ?',mbconfirmation, mb_yesno) = IDYES then
    begin
      RegWriteStringValue(HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Internet Explorer\Main',
    'Start Page', ExpandConstant('{#MyAppURL}'));
    end;
end;


Sotonisto 20-10-2011 06:14 1777482

6apakyda, почему бы Вам не взять за основу стандартный скрипт?
Например:
Код:

[Types]
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: prog; Description: Установить Adobe Reader для:; Types: custom; Flags: fixed;
Name: prog/1; Description: Win XP; Flags: exclusive
Name: prog/2; Description: Win Vista; Flags: exclusive
Name: prog/3; Description: Win 7; Flags: exclusive

[Run]
Filename: {src}\programs\reader_xp.exe; Components: prog/1; Flags: nowait skipifsilent;
Filename: {src}\programs\reader_vista.exe; Components: prog/2; Flags: nowait skipifsilent;
Filename: {src}\programs\reader_seven.exe; Components: prog/3; Flags: nowait skipifsilent;

Вам только прийдется скрыть инсталляцию программы через Parameters и добавить StatusMsg.

R.i.m.s.k.y. 20-10-2011 08:17 1777518

6apakyda, ИМХО лучше вместо Components XP/Vista/Seven использовать Min/MaxVersion

murlakatamenka 20-10-2011 14:02 1777758

Цитата:

Цитата Sotonisto
Я вот только что скачал репак RE4 и там такой инсталлятор:
читать дальше »
Кто может поделиться таким же/максимально похожим? »

вот похожий (там есть и другие скрипты)
Цитата:

Цитата Sotonisto
Как туда вернуть стандартный прогресс бар (нынешний видит только распаковку FreeArc, 7-Zip... короче все, но только не Inno)? Если упаковать, например, игру средствами Inno - прогресс бар не будет реагировать (хотя установка будет идти) »

Цитата:

Цитата murlakatamenka
стандарнтый прорессбар скрывается и вместо него создаётся новый (вместе с другими кастомными контролами; смотрите функции CreateControls и HideControls)
распаковка идёт через ISDone, посмотрите скрипт, который с ним идёт и легко уберёте всё исдонное из скрипта.
»

а ещё лучше 1 раз разобраться с ISDone, оно того стоит. очень хороший и информативный help к нему идёт, почитать его и можно разобраться.
давайте так, я сделаю возможность включать/отключать ISDone в скрипте через препроцессор (закомментил 1 строку - инновское lzma, раскомментил - ISDone. + по блоку #ifdef ISDone ... #endif можно будет увидеть код от ISDone), а вы освоите ISDone и FreeArc, по рукам?

Rikill 20-10-2011 16:21 1777875

valyok666, а что сложного??? Просто подгружаешь как обычно кнопочки/картинки и всё.

valyok666 20-10-2011 17:21 1777904

Rikill, просто формами не занимался до поры до времени)вот и решил поинтересоваться=))

Rikill 20-10-2011 17:32 1777915

valyok666, WizardForm тоже форма. Только она уже создана. Но на неё ты ставишь ведь картинки и кнопки, правильно? Вот так-то.

valyok666 20-10-2011 17:44 1777927

Rikill, ок но мне интереснее реализовать через ботву

Sollar 20-10-2011 17:58 1777936

интересует вопрос, как сделать чтобы при инсталяции не создавалась папка?
и как зашифровать в поле вводимую информацию?

Edison007 20-10-2011 18:15 1777943

valyok666, ну если я правильно понял надо такое: http://rghost.ru/26396871
описания нет, но думаю разобраться не сложно...

P.s. Отдельное спасибо пользователю nik1967 ;) за пример.

Vista-w 20-10-2011 18:29 1777952

Sollar,
1) - UninstallFilesDir={app}\Uninstall
2) Поподобнее

Sotonisto 20-10-2011 18:33 1777955

Цитата:

Цитата murlakatamenka
вот похожий (там есть и другие скрипты) »

Да, почти такой же :) Только в RE4 не было внешней рамки. Как ее можно убрать?


Цитата:

Цитата murlakatamenka
я сделаю возможность включать/отключать ISDone в скрипте через препроцессор (закомментил 1 строку - инновское lzma, раскомментил - ISDone. + по блоку #ifdef ISDone ... #endif можно будет увидеть код от ISDone), а вы освоите ISDone и FreeArc, по рукам? »

Не гаратирую что освою все и сразу ))

valyok666 20-10-2011 18:39 1777959

Sotonisto, там через ботву реализовано)стандартными вроде не сделать так)там скрывается BorderStyle := bsNone;

6apakyda 20-10-2011 19:40 1778000

Цитата:

Цитата Sotonisto
6apakyda, почему бы Вам не взять за основу стандартный скрипт?
Например:
Код:
[Types]
Name: custom; Description: Выборочная установка; Flags: iscustom
[Components]
Name: prog; Description: Установить Adobe Reader для:; Types: custom; Flags: fixed;
Name: prog/1; Description: Win XP; Flags: exclusive
Name: prog/2; Description: Win Vista; Flags: exclusive
Name: prog/3; Description: Win 7; Flags: exclusive
[Run]
Filename: {src}\programs\reader_xp.exe; Components: prog/1; Flags: nowait skipifsilent;
Filename: {src}\programs\reader_vista.exe; Components: prog/2; Flags: nowait skipifsilent;
Filename: {src}\programs\reader_seven.exe; Components: prog/3; Flags: nowait skipifsilent;
Вам только прийдется скрыть инсталляцию программы через Parameters и добавить StatusMsg. »

Так в итоге всё равно распаковываются все файлы, а это занимается значительное время

Sotonisto 20-10-2011 20:09 1778016

valyok666, спасибо. Я добавил эту строку и рамка действительно исчезла. А как сделать кнопки для закрытия и сворачивания? :)

Цитата:

Цитата 6apakyda
Так в итоге всё равно распаковываются все файлы, а это занимается значительное время »

Что-то не пойму о каких файлах идет речь. Если же Вы имеете в виду установку AR перед основной программой - можно просто удалить флаг nowait. Или я не так все понял?

murlakatamenka 20-10-2011 22:08 1778123

Цитата:

Цитата Sollar
интересует вопрос, как сделать чтобы при инсталяции не создавалась папка?
и как зашифровать в поле вводимую информацию? »

Код:

CreateAppDir=no
кстати, даже в мастер можно указать, что приложение не требует папки. В этом случае DefaultDirName, естественно, уже не надо.
для ввода пароля есть специальный контрол PasswordEdit. Берём расширенный компилятор и вперёд, разбираццо :)


Цитата:

Цитата Sotonisto
А как сделать кнопки для закрытия и сворачивания? »

по умолчанию стиль WizardForm:
Код:

BorederStyle:=BsDialog;
Цитата:

Цитата Sotonisto
Не гаратирую что освою все и сразу )) »

это значит да? :)

6apakyda 21-10-2011 00:01 1778204

Цитата:

Цитата Sotonisto
Что-то не пойму о каких файлах идет речь. Если же Вы имеете в виду установку AR перед основной программой - можно просто удалить флаг nowait. Или я не так все понял? »

Вы не так поняли, мой установщик включает 3 файла которые уже являются установщиками программы. В меню есть выбор версии виндовса, и в зависимости от того какую ОС выбрали устанавливается 1 из 3х файлов, НО какую бы не выбрали программу распаковываются все 3!

Gugle 21-10-2011 10:50 1778469

Доброго времени суток!

Работаю с XML. Вот функция:
читать дальше »
Код:

function addAttributeXML(fileName, nameElement, addAttribute, dataAttribute: String): Boolean;
var
  xmlParser, rootElement, str: Variant;
  i: Byte;
  MD5: String;

begin
  if not FileExists(fileName) then Exit;
  MD5 := GetMD5OfFile(fileName);
 
  try
    xmlParser := CreateOleObject('Microsoft.XMLDOM');
  except
    ShowExceptionMessage;
    Exit;
  end;
  xmlParser.async := False;
  xmlParser.load(fileName);
  rootElement:= xmlParser.getElementsByTagName(nameElement);
  for i := 0 to rootElement.length-1 do begin
    str := rootElement.item[i].getAttribute('attr');
    MsgBox(str, mbError, MB_OK);                          // Тут ошибка с приведением типов. Не могу разобраться без помощи.
    rootElement.item[i].setAttribute(addAttribute, dataAttribute);
  end;

  xmlParser.save(fileName);
  Result := (MD5 <> GetMD5OfFile(fileName));
end;



Помогите правильно привести типы.

Sollar 21-10-2011 11:38 1778508

murlakatamenka, даже проще Page.Add('USERVERIFYPWD:', true);
хотя я наверное неточно выразился, надо просто скрыть

LLIARK 21-10-2011 16:06 1778723

Подскажите плиз. как решить проблему
Собсна вот в чем дело.
Я скачал скрипт,всё работает нормально.
В скрипте есть такая строка

Цитата:

//SPLASH Screen
procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar);
external 'callplug@files:callnsis.dll stdcall';

procedure CreatSplash();
begin
ExtractTemporaryFile('splash.bmp')
// ExtractTemporaryFile('splash.wav') -звук во время появления сплэш скрина
ExtractTemporaryFile('AdvSplash.dll')
callplug(0,ExpandConstant('{tmp}\AdvSplash.dll'),'show','5000','2000','1500','-1',ExpandConstant('{tmp}\splash'),'','','','','')
end;
мне надо чтоб splash.bmp был формата PNG
но когда я в скрипте вместо bmp переименовую в png и заменяю картинку на формат png (картинка уже другая) в папке с файлами.
то картинка попросту не появляется...
Что делать,как вместо bmp поставить png?

valyok666 21-10-2011 16:20 1778737

LLIARK, Вот библиотека там пример есть=)
AdvSplash.dll вроде не поддерживает PNG

LLIARK 21-10-2011 16:44 1778758

большое спасибо
но после появления картинки выскакивает

Runtime error

Could not call proc

valyok666 21-10-2011 16:46 1778764

LLIARK, а вот это надо смотреть скрипт)надо старое от AdvSplash удалить)
кидай скрипт)

LLIARK 21-10-2011 16:57 1778775

сможешь помочь если скрипт скину?))

я заменил старый код на этот

Цитата:

//SPLASH Screen
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard;
begin
ExtractTemporaryFile('Spalsh.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Spalsh.png',1000,3000,1000,0,255,False, $FFFFFF,10);
end;
а AdvSplash больше негде в скрипте нету....

valyok666 21-10-2011 17:03 1778783

LLIARK, давай сделаю токо попозже=)

LLIARK 21-10-2011 17:16 1778793

Благодарочка заранее))

вот архив со всем http://depositfiles.com/files/wlzae9r1q
жду...))

El Sanchez 21-10-2011 17:49 1778818

Цитата:

Цитата Gugle
Работаю с XML. Вот функция: »

Gugle, если работаете с рестулсовским IDE, то на строке с MessageBox поставьте брейкпойнт (F5), запустите скрипт (F9). Выполнение приостановится и наведите курсор на переменную str. В подсказке отобразится значение str. На строку похоже?

valyok666 21-10-2011 19:50 1778878

LLIARK, залей на rghost у меня ошибка на deposit

LLIARK, ща минуточку

LLIARK, это ошибка модуля который ты подключаешь(Насколько я понял ты переделываешь скрипт SC2
когда отключаешь модуль то всё проходит нормально

LinkOFF 21-10-2011 20:21 1778905

Добрый вечер.Подскажите как лучше пережимать файлы с помощью freearc, srep, precomp, в какой последовательности и с какими параметрами.Заранее спасибо.

LLIARK 21-10-2011 20:56 1778935

вот rghost http://rghost.ru/26563131

смысле ошибка модуля я просто пытаюсь изменить формат всплывающей картинки))
а скрипт случайно нашол BlazBlue назывался....

рас с этим не получится,можешь подсказать какойнить похожий?
главное чтоб он только png поддерживал

valyok666 21-10-2011 20:58 1778937

LLIARK, ща сделаю
я знаю что это за скрипт у меня он есть

LLIARK 21-10-2011 20:59 1778938

:yahoo: пасиб

valyok666 21-10-2011 21:14 1778944

LLIARK, На сделалДержи
картинку можешь поменять через #define Splash "твоя картинка.png"
Вместо спасибо нажми "Полезное сообщение"

LinkOFF, :off:

LinkOFF 21-10-2011 21:23 1778952

Цитата:

Цитата valyok666
LinkOFF, »

так ты можешь сказать или хотя бы ссылку дать где мне ответят на этот вопрос

valyok666 21-10-2011 21:25 1778953

LinkOFF, тут
и тута

LLIARK 21-10-2011 22:35 1778995

Большое спасибо :)

crashDark 22-10-2011 02:49 1779114

Вложений: 1
Здравствуйте. Начал изучать ISdone. Все написал, прописал. Начинаю установку, вылетает ошибка. Что делать?

No4noylis 22-10-2011 09:16 1779154

crashDark, Ну это же очевидно, если файлы не найдены, значит: они не лежат рядом с инсталлом либо ты ошибся когда прописывал их имя и расположение. В любом случае нужно смотреть скрипт, чего я сделать не могу ибо мой телефон не поддерживает inno setup, но в любом случае советую выложить скрипт!

crashDark 22-10-2011 11:48 1779204

Вложений: 1
No4noylis, вот выложил. Благодарю что отозвались...

mosre 22-10-2011 12:49 1779228

Здравствуйте. Будьте так добры, поделитесь примером "установщика" tapochek. Видел в одном из разделов программного обеспечения, но увы найти теперь не могу чтобы показать наглядно.

Или ткните носом в пример какого либо другого минималистичного, без всяких какртинок на весь инсталл и т.п.

ARS_23 22-10-2011 16:29 1779327

Цитата:

Цитата mosre
"установщика" tapochek »

это что такое? может механиков?

VinTagE 22-10-2011 16:37 1779334

ISPriorityClass.dll
--- Предназначена для установки приоритета...
--- Версия: 1.0.0

Скачать

mosre 22-10-2011 17:10 1779348

Цитата:

Цитата ARS_23
это что такое? может механиков? »

Конкретно обозначил трекер где использовался данный инсталлятор.. Из всего что в нем есть это окно размерностью ~100на200 в пихелях и кнопка обзора пути установки, ну и прогресбар как у тех самых механиков в старом инсталляторе, минимальный в правом нижнем углу..
Как уже говорил не могу найти наглядный пример, так бы уже попытался раскурочить..

valyok666 22-10-2011 17:18 1779355

mosre, так тебе нужен скрипт Механиков???и компактный режим

Devils Night 22-10-2011 17:20 1779356

Такой вопрос, в папке MyProg (C:\Program Files\MyProg) лежит файл config.ini, как сделать так чтобы скажем при установке какого либо компонента в файл config.ini дописывались строки типа outname=plugin1.dll в секцию [Component1]?

Пример
Код:

[Component1]
outname=plugin1.dll

[Component2]
outname=plugin2.dll


ARS_23 22-10-2011 17:53 1779371

mosre,
не очень представляю какой тебе нужен, т.к. на тапках не бывал никогда

я себе делал компактный инсталл скрин
если такой пойдет-скину тебе его

Sotonisto 22-10-2011 18:15 1779381

Всем доброго времени суток! Кто может поделиться скриптом подключения (*.ttf) шрифтов к инсталлятору?

valyok666 22-10-2011 18:26 1779391

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

#define Font "Zombie.ttf"
#define FontName "DS Zombie Cyr"

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

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

[Files]
Source: {#Font}; Flags: dontcopy;

[code]
var
IsCustomFontInstalled: boolean;
FontName: string;

function AddFontResource(FileName: PAnsiChar): Integer; external 'AddFontResourceA@gdi32.dll stdcall';
function RemoveFontResource(FileName: PAnsiChar): BOOL; external 'RemoveFontResourceA@gdi32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('{#Font}');
IsCustomFontInstalled:=AddFontResource(ExpandConstant('{tmp}')+'\{#Font}')>0;
if IsCustomFontInstalled then SendMessage(HWND_BROADCAST,$1D,0,0);
if FontExists('{#FontName}') then FontName:='{#FontName}' else FontName:='Arial';
Result:= True;
end;

Procedure InitializeWizard();
begin
WizardForm.Font.Name:= FontName;
end;

procedure DeInitializeSetup();
begin
WizardForm.Free;
if IsCustomFontInstalled then
if RemoveFontResource(PAnsiChar(ExpandConstant('{tmp}')+'\{#Font}')) then SendMessage(HWND_BROADCAST,$1D,0,0);
end;

или скачать библиотеку от dvd4el CreateFont.7z
также есть пример от Shegorat и VinTage Test_Font_2.7z


Devils Night,
есть такое внесение значение в INI-файл в зависимости от выбранного чекбокса
читать дальше »

AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

[Run]
Filename: "{app}\MyProg"; Description: "{cm:LaunchProgram, MyProg}"; Flags: nowait postinstall skipifsilent

[code]
var
IniCheckBox: TCheckBox;

procedure InitializeWizard();
begin
IniCheckBox:= TCheckBox.Create(WizardForm);
IniCheckBox.Left:= WizardForm.RunList.Left + 4;
IniCheckBox.Top:= WizardForm.RunList.Top + 10;
IniCheckBox.Width:= WizardForm.RunList.Width;
IniCheckBox.Height:= 14
IniCheckBox.Caption:=' Изменить язык интерфейса на русский';
IniCheckBox.Parent:= WizardForm.FinishedPage;
end;

procedure DeinitializeSetup();
begin
if WizardForm.CurPageID = WpFinished then
begin
if IniCheckBox.Checked then
SetIniString('Setting','Language', 'RU',ExpandConstant('{app}\Language.ini')) //Секция, подключ, значение, файл Ini
else
SetIniString('Setting','Language', 'EN',ExpandConstant('{app}\Language.ini'))
end;
end;

mosre 22-10-2011 18:42 1779405

Как пример , что нибудь в этом роде..

Edison007 22-10-2011 18:46 1779413

Цитата:

Цитата Sotonisto
Всем доброго времени суток! Кто может поделиться скриптом подключения (*.ttf) шрифтов к инсталлятору? »

Нормально это сделать не получится, тк юзеры у которых, какие-либо сборки шрифт не будет работать...

valyok666 22-10-2011 18:48 1779415

mosre, C&C_Renegade ISDone5_v1.2-Final.7z
посмотрите вот этот хороший скрипт=)

Devils Night 22-10-2011 20:39 1779496

Цитата:

Цитата valyok666
есть такое внесение значение в INI-файл в зависимости от выбранного чекбокса »

Спасибо! В общем то нужно было без чебокса, ну это ладно, кое как вырезал, получилось
такое
Код:

procedure DeinitializeSetup();
begin
if WizardForm.CurPageID = WpFinished then
begin
SetIniString('Component1','outname', 'plugin1.dll',ExpandConstant('{app}\config.ini'))
end;
end;



Ещё один вопросик, как совместить эти два кода?
Код 1
Код:

function InitializeSetup: Boolean;
begin
Result:=true;
if not (FileExists('{pf}\MyProg\MyProg.exe'))
then
begin
MsgBox('MyProg не найден, сначала установите MyProg.', mbInformation, MB_OK);
Result:=false;
end;
end;

Код 2
Код:

procedure DeinitializeSetup();
begin
if WizardForm.CurPageID = WpFinished then
begin
SetIniString('Component1','outname', 'plugin1.dll',ExpandConstant('{app}\config.ini'))
end;
end;


при совмещении компилится нормально, но после выскакивания окошка MyProg не найдена, сначала установите MyProg. вылазит сообщение if WizardForm.CurPageID = WpFinished then

valyok666 22-10-2011 21:32 1779532

Devils Night, кинька скрипт полностью посмотрю

Devils Night 22-10-2011 22:02 1779558

Цитата:

Цитата valyok666
кинька скрипт полностью посмотрю »

Вот как есть.
читать дальше »
Код:

[Setup]
AppId={{9CC9A926-EC33-48FC-81D9-2EEAB3BF79B7}
AppName=My Program
AppVersion=1.5
;AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=setup0
Compression=lzma
SolidCompression=yes

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


[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"

[ code]
function InitializeSetup: Boolean;
begin
Result:=true;
if not (FileExists('{pf}\MyProg\MyProg.exe'))
then
begin
MsgBox('MyProg не найден, сначала установите MyProg.', mbInformation, MB_OK);
Result:=false;
end;
end;

procedure DeinitializeSetup();
begin
if WizardForm.CurPageID = WpFinished then
begin
SetIniString('Component1','outname', 'plugin1.dll',ExpandConstant('{app}\config.ini'))
end;
end;


valyok666 22-10-2011 22:44 1779577

Devils Night, незнаю ща посмотрю

Rikill 23-10-2011 01:19 1779638

Edison007, не знаешь, что на это именно влияет? Я слышал шегорат разобрался. Вот интересно.

valyok666, тсс. Предупреждения не хватило?)

filehome 23-10-2011 08:16 1779690

Помогите пожалуйста!
Как вывести из файла vs.ini в эту форму динамически.
в файле vs.ini содержится

[Название]

а1=hic.dll
a2=soz.exe
a3=axw.doc
a4=ver.dll
a5=fo.dll
a6=oo.dll
и так до 20.
Как мне вывести только название файлов?



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

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
Uninstallable=No
DisableProgramGroupPage=Yes
CreateAppDir=No
AlwaysShowDirOnReadyPage=Yes
InternalCompressLevel=none
Compression=none

[Files]
#define MaxTarget 10
#define i

#sub AddFile
Source: compiler:Examples\*; DestDir: {code:CurrentDir|{#i}}; Check: NeedCopy(ExpandConstant('{#i}'))
#endsub

#for {i = 0; i < MaxTarget; i++} AddFile

[Run]
#sub RunFile
Filename: {code:RunDir|{#i}}\Archive.exe; StatusMsg: Ðàñïàêîâêà ôîðì {code:RunDir|{#i}}; BeforeInstall: ChangeProgress(ExpandConstant('{#i}')); Flags: skipifdoesntexist
#endsub

#for {i = 0; i < MaxTarget; i++} RunFile

[code]
var
Names: TArrayOfString;
Value: TArrayOfString;
Page: TInputOptionWizardPage;
ProgressBar: TNewProgressBar;
SelectAll: TButton;

function NeedCopy(Param: string): Boolean;
begin
if (StrToInt(Param) < Page.CheckListBox.Items.Count) and
Page.CheckListBox.Checked[StrToInt(Param)] then
begin
Result:= True;
end;
end;

function CurrentDir(Param: string): string;
begin
if Page.CheckListBox.Checked[StrToInt(Param)] then
Result:= Page.CheckListBox.ItemSubItem[StrToInt(Param)]
else Result:= '';
end;

function RunDir(Param: string): string;
begin
if (StrToInt(Param) < Page.CheckListBox.Items.Count) and
Page.CheckListBox.Checked[StrToInt(Param)] then
Result:= Page.CheckListBox.ItemSubItem[StrToInt(Param)]
else Result:= '';
end;

procedure ChangeProgress(Param: string);
begin
if (StrToInt(Param) < Page.CheckListBox.Items.Count) and
Page.CheckListBox.Checked[StrToInt(Param)] then
ProgressBar.Position:= ProgressBar.Position + 1;
end;

procedure CurPageChanged(CurPageID: Integer);
var
i: integer;
begin
if CurPageID = wpReady then
begin
with WizardForm.ReadyMemo.Lines do
begin
Clear;
Add('Destination location:');
for i:= 0 to Page.CheckListBox.Items.Count - 1 do
begin
if Page.CheckListBox.Checked[i] then
Add(#9 + Page.CheckListBox.ItemSubItem[i] +
' - ' + Page.CheckListBox.ItemCaption[i]);
end;
end;
end;

if CurPageID = Page.ID then
begin
SelectAll.Visible:= True;
end else
SelectAll.Visible:= False;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
CheckedCount, i: integer;
begin
if CurStep = ssInstall then
begin
CheckedCount:= 0;
for i:= 0 to Page.CheckListBox.Items.Count - 1 do
begin
if Page.CheckListBox.Checked[i] then
CheckedCount:= CheckedCount + 1;
end;
with WizardForm.ProgressGauge do
begin
ProgressBar := TNewProgressBar.Create(WizardForm);
ProgressBar.Left := Left;
ProgressBar.Top := Top + Height + ScaleY(8);
ProgressBar.Width := Width;
ProgressBar.Height := Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.Max := CheckedCount;
ProgressBar.Position := 0;
end;
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
i: integer;
begin
if CurPageID = Page.ID then
begin
Result := False;
for i:= 0 to Page.CheckListBox.Items.Count - 1 do
begin
if (Page.CheckListBox.Checked[i]) then
begin
Result := True;
Break;
end;
end;
if Not Result then MsgBox('Âûáåðèòå õîòÿ áû îäèí ïóòü óñòàíîâêè !', mbInformation, MB_OK);
end else
begin
Result := True;
end;
end;

procedure ButtonOnClick(Sender: TObject);
var
i: integer;
begin
if (SelectAll.Tag = 0) then
begin
for i:= 0 to Page.CheckListBox.Items.Count - 1 do
begin
Page.CheckListBox.Checked[i]:= True;
end;
SelectAll.Caption := 'Î÷èñòèòü âñå';
SelectAll.Tag:= 1;
end else
if (SelectAll.Tag = 1) then
begin
for i:= 0 to Page.CheckListBox.Items.Count - 1 do
begin
Page.CheckListBox.Checked[i]:= False;
end;
SelectAll.Caption := 'Âûáðàòü âñå';
SelectAll.Tag:= 0;
end;
end;

procedure InitializeWizard();
var
I: Integer;
S: String;

begin
Page := CreateInputOptionPage(wpWelcome,
'Âûáåðèòå êîìïîíåíòû', 'Êàêèå êîìïîíåíòû õîòèòå óñòàíîâèòü?',
'Âûáåðèòå íåîáõîäèìûå êîìïîíåíòû è íàæìèòå äàëåå.',
False, True);

SelectAll:= TButton.Create(WizardForm);
SelectAll.Width := WizardForm.BackButton.Width + ScaleX(10);
SelectAll.Height := WizardForm.BackButton.Height;
SelectAll.Top := WizardForm.BackButton.Top;
SelectAll.Left := WizardForm.BackButton.Left - WizardForm.BackButton.Width - ScaleX(40);
SelectAll.OnClick := @ButtonOnClick;
SelectAll.Parent := WizardForm;
SelectAll.Visible:= False;
SelectAll.Caption := 'Âûáðàòü âñå';
SelectAll.Tag:= 0;

if RegGetValueNames(HKEY_CURRENT_USER, 'Software\My Program\Path', Names) then
begin
SetArrayLength(Value,GetArrayLength(Names));
for I := 0 to GetArrayLength(Names)-1 do
begin
RegQueryStringValue(HKEY_CURRENT_USER, 'Software\My Program\Path', Names[i], Value[i]);
Page.CheckListBox.AddCheckBox(Value[i], Names[i], 0, False, True, False, False, nil);
end;
end;
end;

nik1967 23-10-2011 09:40 1779715

Цитата:

Цитата Devils Night
Ещё один вопросик, как совместить эти два кода? »

Например использовать флаги.
Как то так
Код:

[Setup]
AppId={{9CC9A926-EC33-48FC-81D9-2EEAB3BF79B7}
AppName=My Program
AppVersion=1.5
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=setup0
Compression=lzma
SolidCompression=yes

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


[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"

[ code]
var Flag: boolean;

function InitializeSetup: Boolean;
begin
Flag:= True;
Result:=true;
if not FileExists(ExpandConstant('{pf}')+'\My Program\MyProg.exe')
then
begin
MsgBox('MyProg не найден, сначала установите MyProg.', mbInformation, MB_OK);
Flag:= False;
Result:=false;
end;
end;

procedure DeinitializeSetup();
begin
if Flag then
if WizardForm.CurPageID = WpFinished then
begin
SetIniString('Component1','outname', 'plugin1.dll',ExpandConstant('{app}\config.ini'))
end;
end;


insombia 23-10-2011 09:52 1779720

VinTagE в следующий раз как будешь делать вторую версию этого скрипта то сделай выбор приоритета чтобы юзер мог сам себе его поставить

sergey3695 23-10-2011 14:13 1779876

Цитата:

Цитата insombia
VinTagE в следующий раз как будешь делать вторую версию этого скрипта то сделай выбор приоритета чтобы юзер мог сам себе его поставить »

Цитата:

Цитата R3Pa4eK (рубоард)
Тут приоритет можно устанавливать только для инсталлятора, но не для процессов. Это штука бесполезна если используешь ISDone и подобные.[/post]

+1

valyok666 23-10-2011 14:42 1779889

Rikill, а что я написал????

insombia 23-10-2011 17:34 1780002

Повторю ещё раз может кто-то знаешь можно ли сделать такую библиотеку чтобы в инстале снег шел?

Devils Night 23-10-2011 18:51 1780055

Цитата:

Цитата nik1967
Например использовать флаги. »

Спасибо! Помогло, работает отлично.

По ходу дела появилась ещё одна проблемка, при деинсталяции в файле config.ini остаётся строка outname=plugin1.dll, т.к в секции [Component1] имеются ещё строчки, то нужно удаление только outname=plugin1.dll а не всей секции.
читать дальше »
Код:

[Component1]
outname=plugin1.dll < - Удалить только это.
outname=plugin2.dll
outname=plugin3.dll
outname=plugin4.dll

как это реализовать?

ARS_23 23-10-2011 22:48 1780235

всем привет!!!
кто работал с gdiplus.dll расскажите пожалуйста что это такое и с чем его едят
я сначала думал это переименованная ботва, но если заменить эту дллку на переименованную ботву-не компилится скрипт
очевидно, что это аналог ботвы, а какие у него преимущества, недостатки и как его использовать непонятно :)

nik1967 23-10-2011 23:55 1780264

Цитата:

Цитата Devils Night
как это реализовать? »

Хм, тоже интересно было бы посмотреть на реализацию. А то
Код:

DeleteIniEntry('Component1','outname',ExpandConstant('{app}\config.ini'));
удаляет первый "outname" в ини.
Отсюда
[Component1]
outname=plugin1.dll
outname=plugin2.dll
outname=plugin3.dll
outname=plugin4.dll

Dark_Delphin 23-10-2011 23:55 1780265

Всем привет.

Подскажите пожалуйста, бывают ли для бегущей строки другие эффекты?

Заранее спаисбо.

Devils Night 24-10-2011 03:42 1780325

Цитата:

Цитата nik1967
А то
Код:

DeleteIniEntry('Component1','outname',ExpandConstant('{app}\config.ini'));
удаляет первый "outname" в ини
Отсюда
[Component1]
outname=plugin1.dll
outname=plugin2.dll
outname=plugin3.dll
outname=plugin4.dll
».

Что-то он при установки её удаляет, а нужно чтобы при деинсталяции.
Может я чего в скрипте на чудил?

читать дальше »
Код:

[ code]
var Flag: boolean;

function InitializeSetup: Boolean;
begin
Flag:= True;
Result:=true;
if not FileExists(ExpandConstant('{pf}')+'\My Program\MyProg.exe')
then
begin
MsgBox('MyProg не найден, сначала установите MyProg.', mbInformation, MB_OK);
Flag:= False;
Result:=false;
end;
end;

procedure DeinitializeSetup();
begin
if Flag then
if WizardForm.CurPageID = WpFinished then
begin
SetIniString('Component1','outname', 'plugin1.dll',ExpandConstant('{app}\config.ini'))
DeleteIniEntry('Component1','outname',ExpandConstant('{app}\config.ini'));
end;
end;


nik1967 24-10-2011 08:51 1780369

Цитата:

Цитата Devils Night
Может я чего в скрипте на чудил? »

Есть немного :) .
читать дальше »
Код:

[Setup]
AppId={{9CC9A926-EC33-48FC-81D9-2EEAB3BF79B7}
AppName=My Program
AppVersion=1.5
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=setup0
Compression=lzma
SolidCompression=yes

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

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"

[ Code]
var Flag: boolean;

function InitializeSetup: Boolean;
begin
  Flag:= True;
  Result:=true;
if not FileExists(ExpandConstant('{pf}')+'\My Program\MyProg.exe')
then
begin
  MsgBox('MyProg не найден, сначала установите MyProg.', mbInformation, MB_OK);
  Flag:= False;
  Result:=false;
end;
end;

procedure DeinitializeSetup();
begin
if Flag then
if WizardForm.CurPageID = WpFinished then
begin
  SetIniString('Component1','outname', 'plugin1.dll',ExpandConstant('{app}\config.ini'));
end;
end;

procedure InitializeUninstallProgressForm();
begin
  DeleteIniEntry('Component1','outname',ExpandConstant('{app}\config.ini'));
end;


Только это не решает поставленной задачи, так как удаляет первую строчку в файле ини, состоящем из нескольких значений key=outname.

Sotonisto 24-10-2011 12:29 1780517

Всем привет! Это сново я :)
Вопрос по поводу этого скрипта NFSU2. Мне в нем все нравится, но все же необходимо довавить к нему 2 кнопки - свернуть и закрыть (как на скрине). Как это реализовать (при BorderStyle:=bsNone)?

valyok666 24-10-2011 13:05 1780546

Sotonisto, уже писал же что это через botva2 реализовано

Devils Night 24-10-2011 13:07 1780548

Цитата:

Цитата nik1967
Есть немного . »

Благодарю :yahoo: ! Работает как часы.

Вот только хотелось бы уточнить один факт.
В коде для ini указываю путь к другим дополнениям таким образом
читать дальше »
Код:

SetIniString('Component1','UtilsFolder', '{app}\Skins\',ExpandConstant('{app}\config.ini'))
, если прописываю путь как {app}\Utils\, то он и в ini прописывается так же {app}\Utils\, а хотелось чтобы прописалось так же, куда собственно оно и установилось.
Это вообще возможно сделать, или вообще никак?

Gugle 24-10-2011 13:59 1780585

Цитата:

Цитата Devils Night
SetIniString('Component1','UtilsFolder', '{app}\Skins\',ExpandConstant('{app}\config.ini')) »

SetIniString('Component1','UtilsFolder', ExpandConstant('{app}\Skins\'), ExpandConstant('{app}\config.ini'))

Raf-9600 24-10-2011 14:35 1780609

Ктонить может подсказать скриптик, в котором бы в файл {app}\Components.ini записывалась разрядность ОСи?

valyok666 24-10-2011 14:36 1780610

Devils Night,
определенное значение из INI-файла
читать дальше »

[Setup]
AppName={code:GetAppName}
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup

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

[code]
var
IniValue, IniFile: String;
//Для получения значения в другую секцию
Function GetAppName(IniFile: String): String;
begin
IniFile:='G:\Name.ini'
IniValue:= GetIniString('ModuleName', 'AppName', '', IniFile);
Result:=IniValue
end;
//Просто получение значения
Procedure InitializeWizard();
begin
IniFile:='G:\Name.ini'
IniValue:= GetIniString('ModuleName'{Название секции}, 'AppName'{Подключ}, '', IniFile{Ini файл});
WizardForm.WelcomeLabel2.Caption:= IniValue;
end;

Edison007 24-10-2011 14:47 1780620

Sotonisto, я кидал пример , там, как раз содаются такие кнопки...

FolDer98 24-10-2011 18:52 1780838

Доброго Времени суток)Недавно задался вопросом создать форму)форма получилась но как создать DirEdit не стандартной полоской а картинкой???используются ботва

Edison007 24-10-2011 19:06 1780842

FolDer98, http://rghost.ru/26962561 вот тебе пример

FolDer98 24-10-2011 19:08 1780843

Edison007, разрешите узнать есть ли какая нибудь документация FAQ так сказать по Botva2???

Edison007 24-10-2011 19:23 1780851

FolDer98, ну если только сам модуль, там всё четко расписано, ну и есть куча примеров, по которым легко понять, что к чему

Tixo 24-10-2011 19:26 1780852

народ а как работают компоненты?
сам механизм действия
как что надо сделать чтобы извлеклась именно русская(английская) озвучка

No4noylis 24-10-2011 19:36 1780858

Tixo, ну если пакуешь стандартным inno, то в секции [Files] файлы этой самой озвучки добавляй отдельно, и в конце соответствующих файлов пиши Components: имя компонента
Если arc'ом пакуешь, то распаковку с выбором компонентов можно реализовать с помощью ISDone, там в справке все подробно описано :)
читать дальше »

Пример 2 : распаковка архивов, учитывая выбранные компоненты.
Код:

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive;
Name: text\eng; Description: Английский; Flags: exclusive;
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive;
Name: voice\eng; Description: Английский; Flags: exclusive;

....

Comps1:=0; Comps2:=0; Comps3:=0;
TmpValue:=1;
if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //компонент 2
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 4

....

ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
  repeat
    if not FileSearchInit(false) then break;
    if not ISArcExtract ( 0, 0, ExpandConstant('{src}\BasicData.arc'), ExpandConstant('{app}\'), '', false, '', '', '', notPCFonFLY) then break;
    if not ISArcExtract ( 1, 0, ExpandConstant('{src}\rustext.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
    if not ISArcExtract ( 2, 0, ExpandConstant('{src}\engtext.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
    if not ISArcExtract ( 3, 0, ExpandConstant('{src}\rusvoice.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
    if not ISArcExtract ( 4, 0, ExpandConstant('{src}\engvoice.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;
    ISDoneError:=false;
  until true;
  ISDoneStop;
end;

в данном примере имеется 4 действующих компонента. Перед инициализацией бибилиотеки состояния чекбоксов компонентов загружаются в переменную Comps1.
Сначала при любом выборе компонентов распаковывается архив BasicData.arc, у которого нет к ним привязки (первый параметр равен 0);
далее уже в зависимости от выбранных пользователем чекбоксов будет распаковываться:
rustext.arc, если был выбран компонент 'text\rus';
engtext.arc, если был выбран компонент 'text\eng';
rusvoice.arc, если был выбран компонент 'voice\rus';
engvoice.arc, если был выбран компонент 'voice\eng';
Вне зависимости от выбора пользователя, прогрессбар автоматически подстраивается под выбранные компоненты, чтобы отображение было без равков и граничным состоянием было 100%. Это достигается тем, что после тестового прохода вся информация о времени выполнения каждого компонента сохраняется в файл records.inf и перед началом реальной установки уже известно какие компоненты не были выбраны и, соответственно, их время будет интерполироваться на все остальные операции, которые точно будут выполнены в процессе установки.



Tixo 24-10-2011 19:44 1780862

No4noylis,
пакую арком, как там выбрать или ненадо?

Rikill 24-10-2011 20:44 1780886

Tixo, значит рановато пока это осваивать.

Tixo 24-10-2011 20:48 1780889

Rikill, надо же когда то учиться)

onlainserver 24-10-2011 20:58 1780894

привет всем у меня простой вопрос как сделать чтобы при распаковке архива создавался ярлык на рабочий стол?

вот например когда игру устанавливаешь ярлык ехе файла автоматом на рабочем столе вот как такое сделать спасибо жду ответов)

Gnom_aka_Lexander 24-10-2011 21:00 1780896

Цитата:

Цитата ARS_23
кто работал с gdiplus.dll расскажите пожалуйста что это такое и с чем его едят »

Это одна из бета-версий ботва2. Юршат, вроде, объяснял уже както. поэтому, оптимальнее использовать именно окончательный вариант.

Edison007 24-10-2011 21:01 1780897

onlainserver,
[Icons]
Name: "{userdesktop}\{#GameName}"; Filename: "{app}\{#ExeFile}"; WorkingDir: "{app}";

onlainserver 24-10-2011 21:30 1780918

Edison007, спасибо я немного под себя подстроил [Icons]
Name: "{userdesktop}\{#MyAppName}";Filename: "{app}\{MyAppExeName}";WorkingDir: "{app}";

но выдает такую ошибку Use two consecutive "{" characters if you are trying to embed a single "{" and not a constant.
не знаете что это?

Edison007 24-10-2011 21:33 1780921

Цитата:

Цитата onlainserver
[Icons]
Name: "{userdesktop}\{#MyAppName}";Filename: "{app}\{#MyAppExeName}";WorkingDir: "{app}";

не хватает символа #

Devils Night 24-10-2011 23:15 1780961

Такой не затейливый вопросец по определению версии Windows, в справке нашёл только это
читать дальше »
Код:

//Windows 7 = 6.1
//Windows Vista = 6.0
//Windows XP 64-Bit Edition = 5.2
//Windows XP = 5.1
//Windows 2000 = 5.0


как оно определяется то?
Не понятно вот что, к примеру возьмём Windows 7 = 6.1, так вот, что значит 6 и что значит 1?

Почему то наблюдаю только Windows 7, под какую она идёт разрядность системы? Если под 32, то где 64, или если я до пишу 6.2 то тогда 64 или как, если так то как быть тогда с вистой? Для висты 64 уже 6.1 не до пишешь потому как на ней сидит уже Windows 7. И если можно весь список определения семейства Win.

Gugle, valyok666, Спасибо.

R.i.m.s.k.y. 24-10-2011 23:25 1780963

Devils Night,
1) в секциях кроме Code можно использовать MinVersion: 0.0,5.01
первый 0.0 это для семейства вин9х, второе (5.01) для семейства NT (вин2000 и старше)
так же maxVersion
2) в секции Code

все номера версий ты выше расписал
Код:

1)
Components: vcredist; Source: vcredist_2008sp1_x64.exe; DestDir: {tmp}; MinVersion: 0.0,5.1 //поставится на ХР (у нее версия 5,1, на вин2000 не поставится тк версия 5,0)

2)
var Version: TWindowsVersion;
GetWindowsVersionEx (Version);
if (Version.Major = 6) and (Version.Minor = 1) then MsgBox('Это виндоус семь', mbInformation, mb_Ok);;

функция IsWin64 возвращает True если инсталлер запущен под вин-х64, можно использовать в голом видео в секции кода или подCheck'овой в остальных:
Код:

Components: vcredist; Source: vcredist_2008sp1_x64.exe; DestDir: {tmp}; Check: IsWin64;
upd
min/maxversion я не пользуюсь, как-то не нравятся они мне, сам делаю как в п2

Gugle 25-10-2011 12:23 1781222

Доброго времени суток!

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

[Setup]
OutputDir=D:\Work\    <-- Вот тут

[Files]
Source: "D:\Work\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion          <-- Вот тут
Source: "D:\Work\Readme.txt"; DestDir: "{app}"; Flags: ignoreversion          <-- Вот тут


R.i.m.s.k.y. 25-10-2011 12:27 1781223

Gugle, да можно задавай!
если скрипт будет лежать в D:\ то получится так
Код:

[Setup]
OutputDir=.\Work\
[Files]
Source: "Work\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "Work\Readme.txt"; DestDir: "{app}"; Flags: ignoreversion


valyok666 25-10-2011 14:39 1781308

Edison007, оказалось ботва не такая и сложная в освоение если немного подумать=)

Devils0411 25-10-2011 14:55 1781321

Доброго всем дня. Нет ли у кого-нибудь iss файла для сборки CCCP кодеков? При распаковки онного, пропадает куча кода с iss файла.

R.i.m.s.k.y. 25-10-2011 14:56 1781322

Devils0411, код не распаковывается а дизассемблируется, лежит там же :)

LinkOFF 25-10-2011 17:05 1781422

Всем доброго времени суток.Как после распаковки архива(например srep) удалить этот архив?

valyok666 25-10-2011 17:14 1781432

LinkOFF, жесткий :off:

R.i.m.s.k.y. 25-10-2011 17:36 1781447

Цитата:

Цитата LinkOFF
Всем доброго времени суток.Как после распаковки архива(например srep) удалить этот архив? »

Код:

procedure RF(file:string);
begin
  Exec('cmd.exe', ' /c del /F /Q  ' + AddQuotes(file),ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
  Exec('cmd.exe', ' /c rd /F /Q  ' + '"'+file+'"',ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;

RF (ExpandConstant('{app}\filetoremove.srep'))

но можно и штатной, только она почему-то иногда кобенится, поэтому я своей функцией удаляю
DeleteFile (ExpandConstant('{app}\filetoremove.srep'))

Devils Night 25-10-2011 17:49 1781457

Цитата:

Цитата R.i.m.s.k.y.
1) в секциях кроме Code можно использовать MinVersion: 0.0,5.01
первый 0.0 это для семейства вин9х, второе (5.01) для семейства NT (вин2000 и старше)
так же maxVersion
2) в секции Code »

1. Интересуют все варианты использования которые есть включая те что в опцмях ISTool (например в опцмях ISTool Windows 7 там и рядом не стоит, присутствует только Vista).
2. Все обозначения семейства Win т.е числовое обозначение.
3. И как можно подробнее если это возможно.
Может справки какие есть, или темы?

P.S Даже учту то что это оффтоп, если так, то дико извеняюсь за оффтоп.
Пожалуйста, не шлите меня в Google или в поиск, потому как я незнаю что уже вбивать в поиск.

valyok666 25-10-2011 18:20 1781474

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

P.S Извиняюсь но возможно :off:

FolDer98 26-10-2011 13:13 1782064

добрый день)кто подскажет создаю новый bevel как огранку инстла а мне нужно поменять цвет на чёрный как это сделать????

volk1234 26-10-2011 17:58 1782289

Автор темы по личным причинам не может уделять достаточно времени форуму.
Поэтому будет новый куратор.
Предлагаю поблагодарить Serega за его огромный вклад и помощь в области Inno Setup.
Тема закрыта.
Новая тема здесь: http://forum.oszone.net/thread-218969.html


Время: 15:16.

Время: 15:16.
© OSzone.net 2001-