Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
Gnom_aka_Lexander
26-02-2011, 09:51
actavir, Форм-дизайнер есть в расширенной версии компилятора, на последней вкладке. Можно скачать отсюда (http://forum.oszone.net/thread-148707-22.html) , или, извиняюсь за рекламу,осюда (http://innoultra.ru/) инсталлятором.
И да, не забываем кнопку - Полезное сообщение : с вас не убудет, а у людей останется желание по возможности помоч в следующий раз.
Лександер, подскажите пожалуйста а как сделать чтобы картинка, которую я добавляю на в форм дизайнере была на переднем плане, я уже всё перепробовал, а основная форма не хочет даже удаляться пишет заблокирована, как решить эту проблему?
И ещё вопрос сразу как сделать прозрачный фон у label
Gnom_aka_Lexander
26-02-2011, 10:30
actavir, Прозрачный фон на лебеле - только на ботве вроде, а на форм дизайнере тебе нужно просто выделить компоненты нужные тебе - чтоб потом проще было описывать нужную тебе страницу, а вот описывать страницу - все равно вручную...
Лександер, а что такое "ботве" - delphy?
И ещё а как страницу через форм дизайнер сделать активной?
А то я хочу испольховать SelectProgramGroupPage, а она серая и в инсталятор при компиляции не включается?
Мда Лександр, чёто у меня ничё не получается.((((((((
Народ есть у кого-нибудь скрипт растягивания изображения на ВСЕ страницы, ну или хотя бы на SelectProgramGroupPage????
Выручите плиз!!!!!!!!
Gnom_aka_Lexander
26-02-2011, 11:05
Вот (http://rghost.ru/4010498) скрипт написанный на 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 включительно.
STRAYKER
26-02-2011, 13:32
Помогите кто может.
Наприменр после установки игры нада запуск специального .ехе ( для смены игрового ника ) но чтобы оно запустилось без запроса о запуске.
И как сделать чтобы писало
Создать значок 1
Создать значок 2
http://columbus-home.org/images/p5.jpg
Gnom_aka_Lexander
26-02-2011, 15:41
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: Создать значки
Привет всем! У меня вопрос: Как во время установки проверить: не запущен ли параллельно экземпляр установки? И если запущен, то второй экземпляр установки закрыть, а для первого экземпляра установки нужно активировать окно, чтобы показать статус установки?
Gnom_aka_Lexander
26-02-2011, 20:27
R3Pa4eK, Я-ж на руборде написал - искать нужно :) Вот, (http://forum.ru-board.com/topic.cgi?forum=5&topic=29117&start=195&limit=1&m=1#1) на базе этого можно построить то, что тебе нужно. Вот (http://forum.ru-board.com/topic.cgi?forum=5&topic=29117&start=196&limit=1&m=1#1) еще.
Лександер, угу понял спс!
Gnom_aka_Lexander
26-02-2011, 20:48
R3Pa4eK, Единственная беда - идентифицировать инсталлятор - но с этим, я думаю, помогут, у R.i.m.s.k.y. здорово получаются такие вещи.
Народ, подскажите есть у кого-нибудь код, который показывает сколько времени прошло при установке и сколько осталось?
actavir,
Не совсем то, но может пригодиться:
[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
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;Вот, можно пользоваться :)
Лександер,
Только, когда копируешь из Inno, переключай раскладку на русскую, а то вместо русских надписей получаются кракозябрины :)
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
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;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC