PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [45] 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

Gnom_aka_Lexander
26-02-2011, 09:51
actavir, Форм-дизайнер есть в расширенной версии компилятора, на последней вкладке. Можно скачать отсюда (http://forum.oszone.net/thread-148707-22.html) , или, извиняюсь за рекламу,осюда (http://innoultra.ru/) инсталлятором.
И да, не забываем кнопку - Полезное сообщение : с вас не убудет, а у людей останется желание по возможности помоч в следующий раз.

actavir
26-02-2011, 09:55
Ок пасибо)))

actavir
26-02-2011, 10:19
Лександер, подскажите пожалуйста а как сделать чтобы картинка, которую я добавляю на в форм дизайнере была на переднем плане, я уже всё перепробовал, а основная форма не хочет даже удаляться пишет заблокирована, как решить эту проблему?

И ещё вопрос сразу как сделать прозрачный фон у label

Gnom_aka_Lexander
26-02-2011, 10:30
actavir, Прозрачный фон на лебеле - только на ботве вроде, а на форм дизайнере тебе нужно просто выделить компоненты нужные тебе - чтоб потом проще было описывать нужную тебе страницу, а вот описывать страницу - все равно вручную...

actavir
26-02-2011, 10:34
Лександер, а что такое "ботве" - delphy?

И ещё а как страницу через форм дизайнер сделать активной?
А то я хочу испольховать SelectProgramGroupPage, а она серая и в инсталятор при компиляции не включается?

actavir
26-02-2011, 10:58
Мда Лександр, чёто у меня ничё не получается.((((((((

Народ есть у кого-нибудь скрипт растягивания изображения на ВСЕ страницы, ну или хотя бы на 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 включительно.

actavir
26-02-2011, 11:19
у меня win7)))))))))

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: Создать значки

R3Pa4eK
26-02-2011, 19:35
Привет всем! У меня вопрос: Как во время установки проверить: не запущен ли параллельно экземпляр установки? И если запущен, то второй экземпляр установки закрыть, а для первого экземпляра установки нужно активировать окно, чтобы показать статус установки?

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) еще.

R3Pa4eK
26-02-2011, 20:41
Лександер, угу понял спс!

Gnom_aka_Lexander
26-02-2011, 20:48
R3Pa4eK, Единственная беда - идентифицировать инсталлятор - но с этим, я думаю, помогут, у R.i.m.s.k.y. здорово получаются такие вещи.

actavir
26-02-2011, 22:12
Народ, подскажите есть у кого-нибудь код, который показывает сколько времени прошло при установке и сколько осталось?

nik1967
26-02-2011, 22:36
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;Вот, можно пользоваться :)

nik1967
27-02-2011, 11:23
Лександер,
Только, когда копируешь из Inno, переключай раскладку на русскую, а то вместо русских надписей получаются кракозябрины :)

actavir
27-02-2011, 15:41
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