Ru-Board.club
← Вернуться в раздел «Программы»

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

Автор: Diawer
Дата сообщения: 07.03.2008 04:43
elapse

Спасибо тебе за помощь по Слайдшоу, но у меня есть ещё один и последний вопрос
по этому [more=коду][Код]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
TimerID: LongWord;
SlideImage: TBitmapImage;

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 PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do
Result := (Position-Min) / ((Max - Min) / 100);
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
if (PercentProgress > 30) and (PercentProgress < 50) and (SlideImage.Tag <> 1) then
begin
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_2.bmp'));
SlideImage.Tag := 1;
end
else
if (PercentProgress > 50) and (PercentProgress < 80) and (SlideImage.Tag <> 2) then
begin
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_3.bmp'));
SlideImage.Tag := 2;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if CurPageID = wpInstalling then
begin
pfunc := WrapTimerProc(@OnTimer, 4);
TimerID := SetTimer(0, 0, 100, pfunc);

SlideImage := TBitmapImage.Create(WizardForm);
SlideImage.Left := WizardForm.ProgressGauge.Left;
SlideImage.Top := WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + 10;
SlideImage.Width := ScaleX(400);
SlideImage.Height := ScaleY(150);
SlideImage.Stretch := True;
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_1.bmp'));
SlideImage.Parent := WizardForm.InstallingPage;
end;
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;[/more], а именно {src}\Image_1.bmp, помоги с такой темой, нужно что бы
файлы находились в инсталляторе и брались прямо от туда или сразу после запуска
Setup.exe распаковывались во временную папку.
Автор: Kutsenko
Дата сообщения: 07.03.2008 07:31
2 Diawer.
Это очень просто сделать. Поменяй с {src}\Image_1.bmp на {tmp}\Image_1.bmp, и так с каждым изображением + не забудь указать в секции [Files] так:
Source: Image_1.bmp; DestDir: {tmp}; Flags: dontcopy
Автор: argnistkroleg
Дата сообщения: 07.03.2008 09:11
htuos, elapse

Спасибо.
А строчку, позволяющую окошку перетаскиваться подскажите, пожалуйста...
Автор: Diawer
Дата сообщения: 07.03.2008 17:14

Цитата:
argnistkroleg

Твой вариант не работает, выдаёт ошибку в которой пишет что не может найти файл
Image_1.bmp по пути C:\WINDOWS\Temp, то есть он ищет файлы не в инсталляторе, а
во временной папке WINDOWS в которую он конечно же их не копирует,
может в коде чего то не хватает? Посмотри пожалуйста, уже замучался.
Автор: elapse
Дата сообщения: 07.03.2008 17:37
Diawer, вот [more=сам код][no]
[Setup]
AppName=Application
AppVerName=Application [Version]
DefaultDirName={pf}\Application

[Files]
Source: InnoCallBack.dll; DestDir: {tmp}; Flags: dontcopy;
Source: Image_1.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: Image_2.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: Image_3.bmp; DestDir: {tmp}; Flags: dontcopy;

[Code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
TimerID: LongWord;
SlideImage: TBitmapImage;

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 PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do
Result := (Position-Min) / ((Max - Min) / 100);
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
if (PercentProgress > 30) and (PercentProgress < 50) and (SlideImage.Tag <> 1) then
begin
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_2.bmp'));
SlideImage.Tag := 1;
end
else
if (PercentProgress > 50) and (PercentProgress < 80) and (SlideImage.Tag <> 2) then
begin
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_3.bmp'));
SlideImage.Tag := 2;
end;
end;

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Image_1.bmp');
ExtractTemporaryFile('Image_2.bmp');
ExtractTemporaryFile('Image_3.bmp');
Result := True;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if CurPageID = wpInstalling then
begin
pfunc := WrapTimerProc(@OnTimer, 4);
TimerID := SetTimer(0, 0, 100, pfunc);

SlideImage := TBitmapImage.Create(WizardForm);
SlideImage.Left := WizardForm.ProgressGauge.Left;
SlideImage.Top := WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + 10;
SlideImage.Width := ScaleX(400);
SlideImage.Height := ScaleY(150);
SlideImage.Stretch := True;
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_1.bmp'));
SlideImage.Parent := WizardForm.InstallingPage;
end;
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;
[/no][/more], "копи" и "паст". Насчёт "чего-то не хватает": тебе забыли сказать про ExtractTemporaryFile.


Добавлено:
argnistkroleg, [more=здесь]
[Код]
function ReleaseCapture(): Longint;
external 'ReleaseCapture@user32.dll stdcall';

const
WM_SYSCOMMAND = $0112;

var
CaptionPanel:Tpanel;
MinimizeBtn,CloseBtn:TButton;

procedure MinimizeBtnClick(Sender:TObject);
begin
SendMessage(WizardForm.Handle,WM_SYSCOMMAND,61472,0);
end;

procedure CloseBtnClick(Sender:TObject);
begin
WizardForm.Close;
end;

procedure LabelOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture
SendMessage(WizardForm.Handle, WM_SYSCOMMAND, $F012, 0)
end;

procedure InitializeWizard;
var
d:integer;
begin
d:=WizardForm.Width-WizardForm.ClientWidth;
with WizardForm do begin
BorderStyle:=bsNone;
Width:=Width+d;
OuterNotebook.Left:=OuterNotebook.Left+d;
Bevel.Visible:=False;
Color:=$404040;
end;
CaptionPanel:=TPanel.Create(WizardForm);
with CaptionPanel do begin
Parent:=WizardForm;
Height:=34;
Width:=WizardForm.Width;
Align:=alTop;
ParentColor:=False;
Color:=$800000;
BevelInner:=bvNone;
BevelOuter:=bvNone;
end;
with TLabel.Create(CaptionPanel) do begin
Parent:=CaptionPanel;
Top:=(CaptionPanel.Height-Height) div 2;
Left:=d;
Font.Color:=clWhite;
Font.Style:=[fsBold];
Caption:=WizardForm.Caption;
OnMouseDown:=@LabelOnMouseDown;
end;
with TLabel.Create(CaptionPanel) do begin
Parent:=CaptionPanel;
Transparent:=True;
Autosize:=False;
Top:=0;
Left:=0;
Width:=CaptionPanel.Width;
Height:=CaptionPanel.Height;
OnMouseDown:=@LabelOnMouseDown;
end;
CloseBtn:=TButton.Create(CaptionPanel);
with CloseBtn do begin
Parent:=CaptionPanel;
Height:=22;
Width:=23;
Top:=(CaptionPanel.Height-Height) div 2;
Left:=CaptionPanel.Width-Width-d;
Caption:='X';
OnClick:=@CloseBtnClick;
end;
MinimizeBtn:=TButton.Create(CaptionPanel);
with MinimizeBtn do begin
Parent:=CaptionPanel;
Height:=22;
Width:=23;
Top:=(CaptionPanel.Height-Height) div 2;
Left:=CaptionPanel.Width-Width-CloseBtn.Width-d-2;
Caption:='_';
OnClick:=@MinimizeBtnClick;
end;
with WizardForm do begin
OuterNotebook.Top:=OuterNotebook.Top+CaptionPanel.Height;
CancelButton.Top:=CancelButton.Top+CaptionPanel.Height;
NextButton.Top:=NextButton.Top+CaptionPanel.Height;
BackButton.Top:=BackButton.Top+CaptionPanel.Height;
end;
end;
[/more] скрипт htuos, форму можно перетаскивать.
Автор: htuos
Дата сообщения: 07.03.2008 20:03
elapse
какое извращение с label'ом, но за неимением у панельки OnMouseDown можно и так

кстати не знаешь случайно можно ли в инно сабклассинг делать? или каким образом здесь можно переопределить оконную процедуру?
что-то у меня не фига не получается, а в хэлпе не нашел ничего
Автор: elapse
Дата сообщения: 07.03.2008 22:52
htuos, может хватит меня ставить в неловкое положение? Я и так в программировании ноль, а тут ещё такие вопросы... Думаю, лучше спросить кого-нить более сведущего, например Genri.
Автор: Genri
Дата сообщения: 07.03.2008 23:17
elapse

Цитата:
лучше спросить кого-нить более сведущего, например Genri.
-- нельзя Сам отстреливайся. Тем более у тебя получается лучше чем у меня. Тяну сейчас несколько проектов - на форум времени совсем нет.

Автор: argnistkroleg
Дата сообщения: 07.03.2008 23:45
Тысяча чертей, не могу нормально сделать....
ткните меня носом, как наложить текстуру на CloseBtn и MinimizeBtn из [more] [Код]
function ReleaseCapture(): Longint;
external 'ReleaseCapture@user32.dll stdcall';

const
WM_SYSCOMMAND = $0112;

var
CaptionPanel:Tpanel;
MinimizeBtn,CloseBtn:TButton;

procedure MinimizeBtnClick(Sender:TObject);
begin
SendMessage(WizardForm.Handle,WM_SYSCOMMAND,61472,0);
end;

procedure CloseBtnClick(Sender:TObject);
begin
WizardForm.Close;
end;

procedure LabelOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture
SendMessage(WizardForm.Handle, WM_SYSCOMMAND, $F012, 0)
end;

procedure InitializeWizard;
var
d:integer;
begin
d:=WizardForm.Width-WizardForm.ClientWidth;
with WizardForm do begin
BorderStyle:=bsNone;
Width:=Width+d;
OuterNotebook.Left:=OuterNotebook.Left+d;
Bevel.Visible:=False;
Color:=$404040;
end;
CaptionPanel:=TPanel.Create(WizardForm);
with CaptionPanel do begin
Parent:=WizardForm;
Height:=34;
Width:=WizardForm.Width;
Align:=alTop;
ParentColor:=False;
Color:=$800000;
BevelInner:=bvNone;
BevelOuter:=bvNone;
end;
with TLabel.Create(CaptionPanel) do begin
Parent:=CaptionPanel;
Top:=(CaptionPanel.Height-Height) div 2;
Left:=d;
Font.Color:=clWhite;
Font.Style:=[fsBold];
Caption:=WizardForm.Caption;
OnMouseDown:=@LabelOnMouseDown;
end;
with TLabel.Create(CaptionPanel) do begin
Parent:=CaptionPanel;
Transparent:=True;
Autosize:=False;
Top:=0;
Left:=0;
Width:=CaptionPanel.Width;
Height:=CaptionPanel.Height;
OnMouseDown:=@LabelOnMouseDown;
end;
CloseBtn:=TButton.Create(CaptionPanel);
with CloseBtn do begin
Parent:=CaptionPanel;
Height:=22;
Width:=23;
Top:=(CaptionPanel.Height-Height) div 2;
Left:=CaptionPanel.Width-Width-d;
Caption:='X';
OnClick:=@CloseBtnClick;
end;
MinimizeBtn:=TButton.Create(CaptionPanel);
with MinimizeBtn do begin
Parent:=CaptionPanel;
Height:=22;
Width:=23;
Top:=(CaptionPanel.Height-Height) div 2;
Left:=CaptionPanel.Width-Width-CloseBtn.Width-d-2;
Caption:='_';
OnClick:=@MinimizeBtnClick;
end;
with WizardForm do begin
OuterNotebook.Top:=OuterNotebook.Top+CaptionPanel.Height;
CancelButton.Top:=CancelButton.Top+CaptionPanel.Height;
NextButton.Top:=NextButton.Top+CaptionPanel.Height;
BackButton.Top:=BackButton.Top+CaptionPanel.Height;
end;
end;[/more]
Автор: DarkSeroy
Дата сообщения: 08.03.2008 19:10
Ребята подскажыте можно ли в инно сетапе такую фишку сделать что после определенной даты инстал не будет запускатся. И если да ко как?
Автор: serg_aka_lain
Дата сообщения: 08.03.2008 20:21
DarkSeroy

Да, в Inno Setup Extensions Knowledge Base есть такой пример

[more]

Setup
AppName=DateTimeStop
AppVerName=DateTimeStop
Uninstallable=false
DefaultDirName={pf}\DateTimeStop



Code


type
TSystemTime = record
wYear : Word;
wMonth : Word;
wDayOfWeek : Word;
wDay : Word;
wHour : Word;
wMinute : Word;
wSecond : Word;
wMilliseconds : Word;
end;


procedure GetLocalTime(var lpSystemTime: TSystemTime); external
'GetLocalTime@kernel32.dll';


function IsOKDateTime( dt1, dt2: TSystemTime ) : Boolean;
begin
Result := true;
if dt2.wYear < dt1.wYear then
result := false

else if dt2.wYear = dt1.wYear then
if dt2.wMonth < dt1.wMonth then
result := false

else if dt2.wMonth = dt1.wMonth then
if dt2.wDay < dt1.wDay then
result := false ;
end;



function InitializeSetup: Boolean;
var lt, datelimit: TSystemTime;
s, crlf: string;

begin
crlf := #13#10;
datelimit.wYear := 2008;
datelimit.wMonth := 3;
datelimit.wDay := 9;

GetLocalTime(lt);
Result := IsOKDateTime( lt, datelimit );

s := 'Можно запустить до 09.03.2008 включительно.';

if not Result then
MsgBox( s , mbError, MB_OK );

end;
[/more]
Автор: Kindly
Дата сообщения: 09.03.2008 12:36
Genri
Цитата:
Тяну сейчас несколько проектов
а чо за проекты? Хоть в какой области?
Автор: Frenzzy
Дата сообщения: 09.03.2008 15:00
Добрые люди, подскажите пожалуйста:

как сделать чтобы папка {app} создавалась до начала установки?

или как сделать так, чтобы файлы скаченые с FTP сервера помещались в папку {app} при установке?

Использую ISTool, [_ISToolDownload]

Автор: Genri
Дата сообщения: 09.03.2008 21:39
Kindly -- внешние платежные терминалы; автоматизирование идентификации автотранспортных средств
Автор: htuos
Дата сообщения: 09.03.2008 23:29

Цитата:
htuos, может хватит меня ставить в неловкое положение?

извини, больше не буду
может кто-то сможет ответить на мой вопрос?
Автор: KurtWagner
Дата сообщения: 11.03.2008 05:28
как сделать это >>> http://ifolder.ru/control/?file_id=5686036&code=71ddc484a6cfb123cc0c5d69cceae0a1 72,8 КБ
Автор: Kindly
Дата сообщения: 11.03.2008 20:47
Genri, у меня надежда только на тебя. Есть dll для проигрывания формата YM для ZX Spectrum. Но проигрывание осуществляется не через файл, а через массив байтов (DWORD) YM файла. Такой внешний "исходник" чипа можно получить поставляемой программкой. Я выкладываю комплект:
http://dump.ru/files/o/o2180129775/
dll с примером и сорцами для проигрывания + программу для преобразования файла в массив байтов. Вообще реально реализовать это в Inno?
Автор: Sampron
Дата сообщения: 11.03.2008 22:03
Круто! в новой версии Inno Setup 5.2.3 можно через код редактировать форму деинсталлятора UninstallProgressForm.

http://files.jrsoftware.org/is/5/isetup-5.2.3.exe

http://cvs.jrsoftware.org/is/whatsnew.htm
Автор: NightW0lf
Дата сообщения: 11.03.2008 22:20
[удалено]

Sampron
Опередил уже)))
Автор: Diawer
Дата сообщения: 11.03.2008 22:35
elapse Спасибо за помощь со Слайдшоу всё отлично теперь работает, здорово помог.


Добавлено:
1.
Есть ещё вопросы наверняка он поднимался, но я просмотрел весь форум по теме и не нашёл,
ключ SetupIconFile=program.ico всё устраивает кроме того, что он одинаков и на установщик, и на анинсталлер,
нужно что бы иконки оставались стандартными в {app}\unins000.exe и в Пуск\Uninstall My program.
То есть нужно, что бы всё что касается анинсталлера оставались стандартные иконки.

2.
После установки программы если запустить инсталлер ещё раз то он сообщает что программа уже установленна
и пишет сообщение типа "Программа уже установленна" и выходит из установки, то есть после сообщения есть только
одна кнопка "Завершить" или "Выход" (отмена установки).
Автор: Kutsenko
Дата сообщения: 11.03.2008 23:14
2 Diawer.
По второму вопросу. Так подойдёт? Я немного подкоректировал под себя скрипт с руководства Kindly
[more=Читать дальше..]
function InitializeSetup: Boolean;
var
ResultCode: Integer;
s, ResultStr:string;
begin
Result:=False;
If not RegKeyExists(HKLM, 'Software\PE\Need for Speed Most Wanted')
then
begin
{MsgBox('Программа MY_PROGRAM не установлена или установлена неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbInformation, mb_Ok);}
Result:=True;
end
else
begin
MsgBox('Установка не может быть продолжена.' #13#13 'Игра уже установлена на ваш компютер.', mbError, mb_Ok);
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My_Program_v1.0_is1', 'UninstallString', ResultStr)
then
begin
If ResultStr<>''
then
begin
ResultStr:=RemoveQuotes(ResultStr);
if MsgBox('Программа установки обнаружила уже установленную программу ранней версии.' #13#13 'Вы желаете предварительно удалить ее?', mbInformation, MB_YESNO) = idYes
then
if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
then
MsgBox('Ошибка удаления. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', mbError, MB_OK);
end;
end;
end;
end;
end;
[/more]
Автор: vserd
Дата сообщения: 12.03.2008 10:32
доброго здравия,
В Inno можно добавить свой контрол (чекбокс ) на стандартную страницу? Интересует wpSelectDir, wpSelectProgramGroup, а то создавать отдельную вкладку ради него не хочется....
Автор: elapse
Дата сообщения: 12.03.2008 10:58
vserd, если я правильно понял, то [more=так][no]
[Code]
var
CheckBox: TCheckBox;

procedure InitializeWizard();
begin
CheckBox := TCheckBox.Create(WizardForm);
with CheckBox do
begin
Parent := WizardForm.SelectDirPage; // WizardForm.SelectProgramGroupPage;
Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 10;
Left := WizardForm.DirEdit.Left;
Caption := 'Text';
end;
end;[/no]
[/more].
Автор: vserd
Дата сообщения: 12.03.2008 11:37
elapse
Спасибо!!!
Я не много по другому способ раскопал, но примерно так же....

P.S. Вот ведь жизнь, только вопрос задашь, так с разу и ответ сам находишь :))))))))))

А где нибудь исходники к "Русская справка к версиям 5.0.xx в .chm формате" можно найти?
Автор: JKSerGEAnt
Дата сообщения: 12.03.2008 14:57
Inno Script Generator обновил в шапке.
Unpacker не совместим с версией 5.2.3.
Автор: boss911
Дата сообщения: 13.03.2008 03:51
Inno Setup 5.2.3

What's new in this version?



Innoгnp 0.20 - Тестовая версия [27.10.2007] отказывается распаковывать, увы, придется ждать обновления.
Автор: argnistkroleg
Дата сообщения: 13.03.2008 08:30
Возникли такие вопросы:
1.) Можно ли изменить цвет фона квадратика чекбоксов, рамку этого квадратика и цвет галочки внутри?
2.) Можно ли изменить цвета прямоугольников в прогрессбаре и фон прогрессбара, а так же убрать закругленные углы?
3.) Изменить фон и цвет скролов на странице readymemo?
Автор: EagleSH
Дата сообщения: 13.03.2008 11:24
господа подскажите:

нужен такой момент, если инсталлер находит рядом с собой сигнальный файл какойто (к примеру update.exe) - то в дополнительных задачах появляется строчка типа "Установить UPDATE" с чек боксом соответственно и если выбрана галочка, то после всех дел, самым последним запускается данный файл.

если файл отсутствует - то в дополнительных задачах соответственно ничего не появляется.
Автор: Diawer
Дата сообщения: 13.03.2008 20:22
Kutsenko ,да спасибо то что надо.


Добавлено:
Подскажите, как поменять значёк (ярлык) в верхнем-левом углу окна инсталлятора.
Только его и нигде больше.
Автор: noiseless
Дата сообщения: 14.03.2008 09:08
Diawer
В секции [Setup] см. параметр SetupIconFile
Меняет иконку инсталляционного пакета и, соответственно, иконку в верхнем левом углу

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Поиск в WinDjView


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.