PDA

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


Страниц : 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

Nordek
11-09-2014, 12:58
Не проверял. »Не помешало бы.
#1868 (http://forum.oszone.net/post-2290789-1868.html), #1860 (http://forum.oszone.net/post-2290655-1860.html).

El Sanchez, Поправь код в #1361 (http://forum.oszone.net/post-2040074-1361.html) сообщении.
Там отсутствует:
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';

nik1967
11-09-2014, 14:43
Не помешало бы. »
Знаете, любезный, если я пишу/исправляю что-то сам, то безусловно проверяю то, что выкладываю. Ну а тут ситуация сложилась таким образом, что я нашёл пример от уважаемого El Sanchez'а и не подумал, что надо ещё и проверить сей пример.
Мне, как бы это нафиг не надо.

Nordek
11-09-2014, 16:19
Знаете, любезный »По сдержанней мистер nik1967. Я вас прекрасно понимаю.
Это ещё не изрекал нравоучением в сторону acer0072-а, чтоб этот пользователь для начала воспользовался поиском (поиск действительно работает): Помощь (http://forum.oszone.net/faq.php) » Использование фильтров и поиска на конференции (http://forum.oszone.net/faq.php?faq=faq_filters) » Использование фильтров в качестве инструмента поиска (http://forum.oszone.net/faq.php?faq=faq_filters#faq_filter), Помощь (http://forum.oszone.net/faq.php) » Использование фильтров и поиска на конференции (http://forum.oszone.net/faq.php?faq=faq_filters) » Поиск по конференции (http://forum.oszone.net/faq.php?faq=faq_filters#faq_search).
Полагаю: старание быть более вежливым проходит небезуспешно.

Мне, как бы это нафиг не надо. »Когда мне "нафиг не надо", "не интересно", "нет желания" - просто не пишу: потому что-можно "сморозить" глупость и такое сообщение никакой информативности в себе не может нести.
"Помочь" и "На и отвали" - между собой имеют большую разницу.

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

El Sanchez
12-09-2014, 09:22
El Sanchez, Поправь код в #1361 сообщении.
Там отсутствует: »
Nordek, я, пожалуй, его совсем заменю, т.к. содержит ошибки: не проверяется первый процесс из слепка процессов (некритично); ненужный VirtualAllocEx (некритично); неверная декларация GetProcAddress, из-за чего не отработало бы закрытие процесса по истечении таймаута (критично).

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
TH32CS_SNAPPROCESS = $2;
INVALID_HANDLE_VALUE = -1;
PROCESS_TERMINATE = $1;
PROCESS_CREATE_THREAD = $2;
PROCESS_QUERY_INFORMATION = $400;
SYNCHRONIZE = $100000;
TOKEN_QUERY = $8;
TOKEN_ADJUST_PRIVILEGES = $20;
SE_PRIVILEGE_ENABLED = $2;
TA_FAILED = 0;
TA_SUCCESS_CLEAN = 1;
TA_SUCCESS_KILL = 2;
WM_CLOSE = $10;
WAIT_OBJECT_0 = $0;
WAIT_TIMEOUT = $102;
WAIT_FAILED = $FFFFFFFF;
SMTO_BLOCK = $1;
SMTO_ABORTIFHUNG = $2;

type
TPROCESSENTRY32 = record
dwSize, cntUsage, th32ProcessID: DWORD;
th32DefaultHeapID: Longint;
th32ModuleID, cntThreads, th32ParentProcessID: DWORD;
pcPriClassBase: Longint;
dwFlags: DWORD;
szExeFile: array [0..259] of Char;
end;

LUID = record
LowPart: DWORD;
HighPart: Longint;
end;

LUID_AND_ATTRIBUTES = record
Luid: LUID;
Attributes: DWORD;
end;

TOKEN_PRIVILEGES = record
PrivilegeCount: DWORD;
Privileges: array [0..0] of LUID_AND_ATTRIBUTES;
end;

function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; external 'CreateToolhelp32Snapshot@kernel32.dll stdcall';
#ifdef UNICODE
function Process32First(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32First{#A}@kernel32.dll stdcall';
function Process32Next(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32Next{#A}@kernel32.dll stdcall';
#else
function Process32First(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32First@kernel32.dll stdcall';
function Process32Next(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32Next@kernel32.dll stdcall';
#endif
function OpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; external 'OpenProcess@kernel32.dll stdcall';
function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD; var TokenHandle: THandle): BOOL; external 'OpenProcessToken@advapi32.dll stdcall';
function GetCurrentProcess(): THandle; external 'GetCurrentProcess@kernel32.dll stdcall';
function LookupPrivilegeValue(lpSystemName, lpName: String; var lpLuid: LUID): BOOL; external 'LookupPrivilegeValue{#A}@advapi32.dll stdcall';
function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL; NewState: TOKEN_PRIVILEGES; BufferLength: DWORD; var PreviousState: TOKEN_PRIVILEGES; var ReturnLength: Longint): BOOL; external 'AdjustTokenPrivileges@advapi32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetProcessImageFileName(hProcess: THandle; var lpImageFileName: Char; nSize: DWORD): DWORD; external 'GetProcessImageFileName{#A}@psapi.dll stdcall';
function GetLogicalDrives(): DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function QueryDosDevice(lpDeviceName: String; var lpTargetPath: Char; ucchMax: DWORD): DWORD; external 'QueryDosDevice{#A}@kernel32.dll stdcall';
function EnumWindows(lpEnumFunc, lParam: Longint): BOOL; external 'EnumWindows@user32.dll stdcall';
function WaitForSingleObject(hHandle: THandle; dwMilliseconds: DWORD): DWORD; external 'WaitForSingleObject@kernel32.dll stdcall';
function GetProcAddress(hModule: THandle; lpProcName: AnsiString): Longint; external 'GetProcAddress@kernel32.dll stdcall';
function GetModuleHandle(lpModuleName: String): THandle; external 'GetModuleHandle{#A}@kernel32.dll stdcall';
function CreateRemoteThread(hProcess: THandle; lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags: DWORD; var lpThreadId: DWORD): THandle; external 'CreateRemoteThread@kernel32.dll stdcall';
function TerminateProcess(hProcess: THandle; uExitCode: UINT): BOOL; external 'TerminateProcess@kernel32.dll stdcall';
function GetWindowThreadProcessId(hWnd: HWND; var lpdwProcessId: DWORD): DWORD; external 'GetWindowThreadProcessId@user32.dll stdcall';
function SendMessageTimeout(hWnd: HWND; Msg: UINT; wParam, lParam: Longint; fuFlags, uTimeout: UINT; var lpdwResult: Longint): Longint; external 'SendMessageTimeout{#A}@user32.dll stdcall';

/////////////////////////////////////////////////////////
function CharArrayToString(aChar: array of Char): String;
begin
Result := '';
while aChar[Length(Result)] <> #0 do Insert(aChar[Length(Result)], Result, Length(Result)+1);
end;

////////////////////////////////////////////////////////////
function EnumWindowsProc(hwnd: HWND; lParam: Longint): BOOL;
var
dwID: DWORD;
lResult: Longint;
begin
Result := True;
GetWindowThreadProcessId(hwnd, dwID);
if dwID = lParam then
Result := SendMessageTimeout(hwnd, WM_CLOSE, 0, 0, SMTO_BLOCK or SMTO_ABORTIFHUNG, 5000, lResult) <> 0;
end;

//////////////////////////////////////////////////////////////////////////////////
function TerminateApp(const szProcessList: String; const dwTimeout: DWORD): DWORD;
// szProcessList : process names or full paths of processes delimited by vertical bar, e.g. calc.exe|notepad.exe|c:\hungtest.exe
// dwTimeout.....: kill timeout in ms
var
hProcessSnap, hProc, hToken, hThread, lpProcName: THandle;
pe32: TPROCESSENTRY32;
aBuf: array [0..259] of Char;
bProcFind: Boolean;
szExeFile, szExePath, szFileName, szDeviceName: String;
tkp: TOKEN_PRIVILEGES;
SeDebugNameValue: LUID;
i, ret: Longint;
lpThreadId, dwDrives: DWORD;
begin
hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hProcessSnap = INVALID_HANDLE_VALUE then Exit;
try
with TStringList.Create do
try
StringChangeEx(szProcessList, '|', #13#10, True);
Text := szProcessList;
//
pe32.dwSize := SizeOf(pe32);
if not Process32First(hProcessSnap, pe32) then Exit;
repeat
bProcFind := False;
szExeFile := CharArrayToString(pe32.szExeFile);
for i := 0 to Count-1 do
begin
if CompareText(szExeFile, ExtractFileName(Strings[i])) = 0 then
begin
bProcFind := True;
szExePath := Strings[i];
Break;
end;
end;
if not bProcFind then Continue;

// try open process
hProc := OpenProcess(PROCESS_TERMINATE or PROCESS_CREATE_THREAD or PROCESS_QUERY_INFORMATION or SYNCHRONIZE, False, pe32.th32ProcessID);
if hProc = TA_FAILED then
begin
// open process token adjust privileges
if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then Exit;
if not LookupPrivilegeValue('', 'SeDebugPrivilege', SeDebugNameValue) then Exit;
try
// fill token privileges struct
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Luid := SeDebugNameValue;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

// set debug privileges
if not AdjustTokenPrivileges(hToken, False, tkp, SizeOf(tkp), tkp, ret) then Exit;

// try open process with debug privileges
hProc := OpenProcess(PROCESS_TERMINATE or PROCESS_CREATE_THREAD or PROCESS_QUERY_INFORMATION or SYNCHRONIZE, False, pe32.th32ProcessID);
if hProc = TA_FAILED then Exit;
finally
tkp.Privileges[0].Attributes := 0;
AdjustTokenPrivileges(hToken, False, tkp, SizeOf(tkp), tkp, ret);
CloseHandle(hToken);
end;
end;

// if szProcess is full path
if CompareText(szExePath, szExeFile) <> 0 then
begin
GetProcessImageFileName(hProc, aBuf[0], SizeOf(aBuf));
szFileName := CharArrayToString(aBuf);
dwDrives := GetLogicalDrives();
for i := 2 to 25 do if dwDrives and (1 shl i) <> 0 then
begin
QueryDosDevice(Format('%s:', [Chr(Ord('A') + i)]), aBuf[0], SizeOf(aBuf));
szDeviceName := CharArrayToString(aBuf);
if Pos(szDeviceName, szFileName) = 0 then Continue;
StringChangeEx(szFileName, szDeviceName, Format('%s:', [Chr(Ord('A') + i)]), True);
if CompareText(szExePath, szFileName) = 0 then Break;
end;
if CompareText(szExePath, szFileName) <> 0 then
begin
CloseHandle(hProc);
Continue;
end;
end;

// try stop process
try
if not EnumWindows(CallbackAddr('EnumWindowsProc'), pe32.th32ProcessID) then
begin
if TerminateProcess(hProc, 0) then Result := TA_SUCCESS_KILL;
end else case WaitForSingleObject(hProc, dwTimeout) of
WAIT_OBJECT_0: Result := TA_SUCCESS_CLEAN;
WAIT_TIMEOUT: try
lpProcName := GetProcAddress(GetModuleHandle('kernel32.dll'), 'ExitProcess');
if lpProcName = 0 then Exit;
hThread := CreateRemoteThread(hProc, 0, 0, lpProcName, 0, 0, lpThreadId);
case WaitForSingleObject(hThread, dwTimeout) of
WAIT_OBJECT_0: Result := TA_SUCCESS_CLEAN;
WAIT_TIMEOUT, WAIT_FAILED: if TerminateProcess(hProc, 0) then Result := TA_SUCCESS_KILL;
end;
finally
CloseHandle(hThread);
end;
end;
finally
CloseHandle(hProc);
end;
until not Process32Next(hProcessSnap, pe32);
finally
Free;
end;
finally
CloseHandle(hProcessSnap);
end;
end;

/////////////////////////////
procedure InitializeWizard();
begin
TerminateApp('NvXDSync.exe', 5000);
end;

Irenis
12-09-2014, 12:49
Всем привет :) Возник один вопросик, очень надеюсь на помощь :blush2: Мне нужно в самом обычном установщике в конце установки (то есть в последнем окошке) вставить текст, желательно красными буквами. Можно ли это как то реализовать попроще, например, просто вставив в скрипт определенный код? Спасибо.

kotyarko@fb
12-09-2014, 14:17
Мне нужно в самом обычном установщике в конце установки (то есть в последнем окошке) вставить текст, желательно красными буквами. Можно ли это как то реализовать попроще, например, просто вставив в скрипт определенный код? »
А есть какой-то другой способ? без дописания кода? :)
[Сode]
Procedure InitializeWizard();
var
FinishLabel: TLabel;
begin
FinishLabel := TLabel.Create(WizardForm);
FinishLabel.Parent := FinishedPage;
FinishLabel.Left := 50;
FinishLabel.Top := 50;
FinishLabel.Width := 150;
FinishLabel.Height := 20;
FinishLabel.Font.Color := clRed;
FinishLabel.Caption := 'Надпись красным цветом';
FinishLabel.Autosize := False;
FinishLabel.WordWrap := True;
end;

Irenis
12-09-2014, 16:25
kotyarko@fb, спасибо :) Только у меня почему то на строчке FinishLabel.Parent := FinishedPage; ошибка. А если удалить эту строчку, то при установке не появляется надпись.

kotyarko@fb
12-09-2014, 17:33
Только у меня почему то на строчке FinishLabel.Parent := FinishedPage; ошибка. »
Это мой косяк, извиняюсь, не проверил.
Замените проблемную строку на эту:FinishLabel.Parent := WizardForm.FinishedPage;

Irenis
12-09-2014, 18:11
kotyarko@fb, спасибо, теперь надпись появилась, только она у меня вся не помещается :blush2: Как сделать так, чтобы эта надпись была в несколько строчек? И можно ли сделать, чтоб сами буквы были немного побольше?
Вообще я пока разобралась только в этих строчках, за что они отвечают:
FinishLabel.Left := 50;
FinishLabel.Top := 50;

А в этих значения меняла, что то никаких изменений не заметила:
FinishLabel.Width := 150;
FinishLabel.Height := 20;

Shkutu
12-09-2014, 20:25
Irenis, предполагаю, что дело не в том, что надпись не помещается, а в том, что ее не видно.
Попробуйте так:

[Сode]
Procedure InitializeWizard();
var
FinishLabel: TLabel;
begin
FinishLabel := TLabel.Create(WizardForm);
FinishLabel.Parent := WizardForm.FinishedLabel.parent;
FinishLabel.Left := WizardForm.FinishedLabel.left; //координата X левого верхнего угла
FinishLabel.Top := WizardForm.FinishedLabel.top + WizardForm.FinishedLabel.height + ScaleY(10); //координата Y левого верхнего угла
FinishLabel.Width := WizardForm.FinishedLabel.width; //ширина (длина) контрола
FinishLabel.Height := ScaleY(50); //высота контрола
FinishLabel.Font.Color := clRed; //цвет
FinishLabel.WordWrap := True; //перенос по словам, чтоб выводить в несколько строк
FinishLabel.Font.size:= FinishLabel.Font.size*2; //буквы в 2 раза крупнее
FinishLabel.Caption := 'Надпись красным цветом';
end;

Dodakaedr
12-09-2014, 23:56
Всем привет! Подскажите, реально ли задать идентификатор программы (AppID) во время установки? Задать в зависимости от выбранной кнопки?[Setup]
AppId={code:GetAppID}

[Co de]
procedure GetAppID(id: string): String;
begin
if Bus.Checked then
id := '{{CA297C8C-88CC-4708-9177-4CD49DBE87B4}';
if Eng.Checked then
id := '{{8177DA7A-1D72-4C0A-9B22-BA030AEF3C58}';
if Ext.Checked then
id := '{{A9E0C8A3-E5C7-4D5D-A893-663D09782286}';
if Net.Checked then
id := '{{D72E97FC-7702-4385-9679-0E3515AB922C}';
end;

kotyarko@fb
13-09-2014, 00:14
Подскажите, реально ли задать идентификатор программы (AppID) во время установки? Задать в зависимости от выбранной кнопки? »
Да.

[Setup]
AppId={code:GetAppID}

[Сode]
var
32RadioButton: TNewRadioButton;
64RadioButton: TNewRadioButton;

function GetAppID(const Value: string): string;
var
AppID: string;
begin
if Assigned(Ver32RadioButton) then
begin
AppID := 'FDFD4A34-4A4C-4795-9B0E-04E5AB0C374D'; //это то, что будет приниматься за AppID до того, пока не выбран вариант радиоБаттонов.
if 32RadioButton.Checked then
Result := AppID + '_32'
else
Result := AppID + '_64';
end;
end;

procedure InitializeWizard;
var
Page: TWizardPage;
begin
Page := CreateCustomPage(wpWelcome, '2', '1');
32RadioButton := TNewRadioButton.Create(WizardForm);
32RadioButton.Parent := Page.Surface;
32RadioButton.Checked := True;
32RadioButton.Caption := 'Install 32-bit version';
64RadioButton := TNewRadioButton.Create(WizardForm);
64RadioButton.Parent := Page.Surface;
64RadioButton.Top := 32RadioButton.Top + 32RadioButton.Height + 4;
64RadioButton.Caption := 'Install 64-bit version';
end;
p.s. а зачем его менять?

Dodakaedr
13-09-2014, 17:51
p.s. криво лежит под тегом code, поэтому вставил так. »
Вставте [ /u] между Co и de [Co[u]de]

p.p.s. а зачем его менять? »
В моем проэкте 4 версии программы, вот и надо задать для каждой программы отдельный идентификатор:)

kotyarko@fb
13-09-2014, 17:57
Вставте [u] [ /u] между Co и de »
Нет, прикол не в этом. Секция [Setup], почему-то, выделялась и автоматически выносилась за теги кода и спойлера.

Dodakaedr
13-09-2014, 18:02
Нет, прикол не в этом »
Именно в нем:)
с [ /u]:

[Setup]
AppId={code:GetAppID}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}

[Co[u]de]


без:

[Setup]
AppId={code:GetAppID}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}

[Code]

kotyarko@fb
13-09-2014, 18:26
Именно в нем »
Не. Вот сейчас без [u][ /u] нормально отредактировалось.

Dodakaedr
13-09-2014, 19:16
Подскажите, как можно задать имя программы в деинсталяторе в зависимости от кнопки?

Nordek
13-09-2014, 19:52
нормально отредактировалось. »Что у вас нормально отредактировалось?
В данном (http://forum.oszone.net/post-2402142-1532.html) случае: у вас в [Code] - вместо латинской "C", русская "С". Так делать вообще не следует.

Прочтите здесь (http://forum.oszone.net/post-2373775-1079.html) и здесь (http://forum.oszone.net/post-2270836-1700.html).
Потренироваться можете здесь (http://forum.oszone.net/forum-26.html).

kotyarko@fb
13-09-2014, 21:21
Nordek, спасибо, буду просто приписывать какой-либо символ к названию секции.

AlexALSP
14-09-2014, 22:21
Добрый вечер. Подскажите пожалуйста, как сделать фоновый звук во время установки, что бы играла какая нибудь композиция с начала установки и до нажатия кнопки Завершить.

Если есть готовый код , дайте пожалуйста , а то уже листать устал 3 часа глаза как у рака.

Вот код на фоновый слайд но нужно добавить музон.

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

И сюда же прикрутить либо отдельным блоком добавить код на воспроизведение фонового звука mp3 в процессе установки.

Задачи от кода.:

1. Фоновая композиция от начала установки до нажатия кнопки Завершить
2. Слайдер изображений во время установки
3. HTTP урл

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




// кликабельная текстовая http-ссылка в левом нижнем углу инсталлера и слайдер
var
MouseLabel,SiteLabel: TLabel;

procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://apocalypse.moy.su', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clRed
end;

procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue
end;

procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clGreen
end;

procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue
end;


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

var
TimerID: LongWord;
CurrentPicture:integer;
PicList: TStringlist;
BackgroundForm: TForm;

function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeSlideShow(Hwnd:Thandle; l,t,w,h:integer;Animate:boolean; Stretch:integer); external 'InitializeSlideShow@files:isslideshow.dll stdcall';
procedure DeinitializeSlideShow; external 'DeinitializeSlideShow@files:isslideshow.dll stdcall';
procedure ShowImage(ipath:PAnsiChar; Effect:integer); external 'ShowImage@files:isslideshow.dll stdcall';

procedure InitializeWizard();
begin
BackgroundForm:= TForm.Create(nil);
BackgroundForm.BorderStyle:= bsNone;
BackgroundForm.Color:=clBlack;
BackgroundForm.SetBounds(0, 0, GetSystemMetrics(0), GetSystemMetrics(1))
BackgroundForm.Visible:=True;
BackgroundForm.enabled:= false;
PicList:=tstringlist.Create;
ExtractTemporaryFile('Back.jpg');
ExtractTemporaryFile('1.jpg');
ExtractTemporaryFile('2.jpg');
ExtractTemporaryFile('3.jpg');
ExtractTemporaryFile('4.jpg');
ExtractTemporaryFile('5.jpg');
ExtractTemporaryFile('6.jpg');
ExtractTemporaryFile('7.jpg');
ExtractTemporaryFile('8.jpg');
ExtractTemporaryFile('9.jpg');
ExtractTemporaryFile('10.jpg');
ExtractTemporaryFile('11.jpg');

piclist.add(ExpandConstant('{tmp}') + '\1.jpg');
piclist.add(ExpandConstant('{tmp}') + '\2.jpg');
piclist.add(ExpandConstant('{tmp}') + '\3.jpg');
piclist.add(ExpandConstant('{tmp}') + '\4.jpg');
piclist.add(ExpandConstant('{tmp}') + '\5.jpg');
piclist.add(ExpandConstant('{tmp}') + '\6.jpg');
piclist.add(ExpandConstant('{tmp}') + '\7.jpg');
piclist.add(ExpandConstant('{tmp}') + '\8.jpg');
piclist.add(ExpandConstant('{tmp}') + '\9.jpg');
piclist.add(ExpandConstant('{tmp}') + '\10.jpg');
piclist.add(ExpandConstant('{tmp}') + '\11.jpg');

BackgroundForm.show;
InitializeSlideShow(BackgroundForm.Handle, 0, 0, GetSystemMetrics(0), GetSystemMetrics(1), true, 1);
ShowImage(ExpandConstant('{tmp}') + '\Back.jpg', 1);


MouseLabel:=TLabel.Create(WizardForm)
MouseLabel.Width:=WizardForm.Width
MouseLabel.Height:=WizardForm.Height
MouseLabel.Autosize:=False
MouseLabel.Transparent:=True
MouseLabel.OnMouseMove:=@SiteLabelMouseMove2
MouseLabel.Parent:=WizardForm

SiteLabel:=TLabel.Create(WizardForm)
SiteLabel.Left:=10
SiteLabel.Top:=330
SiteLabel.Cursor:=crHand
SiteLabel.Font.Color:=clBlue
SiteLabel.Caption:='Alex Ltd and System Perverted 2000 - 2014'
SiteLabel.OnClick:=@SiteLabelOnClick
SiteLabel.OnMouseDown:=@SiteLabelMouseDown
SiteLabel.OnMouseUp:=@SiteLabelMouseUp
SiteLabel.OnMouseMove:=@SiteLabelMouseMove
SiteLabel.Parent:=WizardForm

end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
thePicture: integer;
delta: double;
begin
delta := WizardForm.ProgressGauge.Max / ( piclist.Count );
thePicture := round( WizardForm.ProgressGauge.Position / delta );
if( thePicture <> CurrentPicture ) then
begin
CurrentPicture := thePicture;
try
ShowImage(piclist.strings[CurrentPicture - 1], 1);
except
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpInstalling then
begin
with WizardForm do
begin
hide;
MainPanel.Visible:=False;
Bevel1.Visible:=False;
setbounds(ScaleX(GetSystemMetrics(0)-420), ScaleY(GetSystemMetrics(1)-167), ScaleX(395), ScaleY(142));
InnerNotebook.setbounds(ScaleX(10), ScaleY(10), ScaleX(370), InnerNotebook.height);
StatusLabel.setbounds(ScaleX(0), ScaleY(0), InnerNotebook.Width, StatusLabel.height);
FileNameLabel.setbounds(ScaleX(0), ScaleY(20), InnerNotebook.Width, FileNameLabel.height);
ProgressGauge.Top:=ScaleY(40);
ProgressGauge.Width:=InnerNotebook.Width;
CancelButton.Left:=ScaleX(154);
CancelButton.Top:=ScaleY(80);
CancelButton.bringtofront;
show;
end;
TimerID:=SetTimer(0, 0, 200, WrapTimerProc(@OnTimer, 4));
end;

if CurPageID=wpFinished then
begin
WizardForm.Visible:=False;
WizardForm.setbounds((GetSystemMetrics(0)-WizardForm.Width) div 2, (GetSystemMetrics(1)-WizardForm.Height) div 2, ScaleX(502), ScaleY(392));
WizardForm.Visible:=True;
showimage(ExpandConstant('{tmp}') + '\Back.jpg', 1);
end;
end;

procedure DeinitializeSetup();
begin
DeinitializeSlideShow;
KillTimer(0, TimerID);
end;




© OSzone.net 2001-2012