Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]
R.i.m.s.k.y.
18-07-2013, 22:12
Johny777 Это копипаста из шапочного ултимейт тест
Почему то имя одной и той же видеокарты возвращает 2 раза.
А дублируется скорее всего потому что дрова обновлял поверх
но я делаю так
function GetAllVideoCard():String; // HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}
var
Keys : TArrayOfString;
key, DriverDesc, MatchingDeviceId : string;
i : integer;
begin
Result := '';
key := 'SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}'; RegGetSubkeyNames(HKLM, key, Keys)
for i := 0 to GetArrayLength(Keys)-1 do begin
RegQueryStringValue(HKLM, key + '\' + Keys[i], 'DriverDesc', DriverDesc);
RegQueryStringValue(HKLM, key + '\' + Keys[i], 'MatchingDeviceId', MatchingDeviceId); StringChangeEx(MatchingDeviceId, 'pci\', '', True);
if (Pos(LowerCase(DriverDesc), LowerCase(Result)) = 0) then Result := Result + #13#10 + DriverDesc + ' (' + MatchingDeviceId + ')';
end;
end;Дергается не только имя, то и главное - dev&ven, по которому можно выделать классы видеоадаптеров, что намного точнее чем маркетинговые имена
И главное - в системах с оптимусом покажет не только intelHD, но и гефорц
вот тут можно узнать div видюшек
http://cateee.net/lkddb/web-lkddb/DRM_I915.html
Johny777
18-07-2013, 22:18
R.i.m.s.k.y., По секрету :) Я шапочный ултимейт тест в глаза не видел. Открыл гугл и нашёл функцию
читал, что можно и из реестра дёрнуть. Только функция как-то милее :)
это сообщение пустое, и будет удалено ... потом ... мной
R.i.m.s.k.y.
18-07-2013, 22:21
Johny777, а твоя/шапочная функция дернет только текущий активный адаптер, я это проходил когда в SVP делал определялку видюшки для подбора профилей
Дык и у меня функция, возвращает построчно список видюшек
Кстати вот тут можно узнать div видюшек
http://cateee.net/lkddb/web-lkddb/DRM_I915.html
да ладно, не удаляй сообщение
че-то у меня подписка на тему не работает
до кучи в шапку
GUID'ы дивайсов
http://msdn.microsoft.com/en-us/library/windows/hardware/ff553426%28v=vs.85%29.aspx
Johny777
18-07-2013, 22:34
R.i.m.s.k.y., никак нет, я на ноуте сейчас. Возвращает 2 видюхи, интел и нвидию. Активный - интел
R.i.m.s.k.y.
18-07-2013, 22:52
никак нет, я на ноуте сейчас. Возвращает 2 видюхи, интел и нвидию. Активный - интел »
значит мой склероз мне изменил
volga163@vk
19-07-2013, 00:40
Друзья, выручайте. Совсем у меня то ли с памятью, то ли с головой в целом случилось. Как можно в Inno Setup сделать текстовый логотип в верхнем левом углу установщика? Ну как здесь: (взял первое, что под руку попалось :) ) http://savepic.org/4071648m.png (http://savepic.org/4071648.htm)
volga163@vk
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
WindowVisible=true
volga163@vk
19-07-2013, 01:44
vint56, Спасибо!
А ещё вот такой вопрос. Можно ли этот логотип сделать поверх фоновой картинки?
Картинка вызывается так (нашёл скрипт на просторах интернета):
BackgroundForm:= TForm.Create(nil);
BackgroundForm.BorderStyle:= bsNone;
BackgroundForm.OnActivate:= @BackgroundOnActivate;
ShowWindow(BackgroundForm.Handle, sw_ShowMaximized);// фоновое окно на полный экран
BackgroundImage:= TBitmapImage.Create(BackgroundForm);
BackgroundImage.Align:= alClient;
BackgroundImage.Stretch:= True;
ExtractTemporaryFile('fon.bmp');
BackgroundImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
BackgroundImage.Parent:= BackgroundForm;
а можно ли из одного скрипта установить сразу несколько игр? причём скрипт с автораном, знает кто как это сделать?
а можно ли из одного скрипта установить сразу несколько игр? »
Можно установить сколько угодно. Все по тому же принципу: каждая игра в качестве отдельного компонента, или все в одной куче.
причём скрипт с автораном »
Авторан, в идеале, отдельное приложение. Ближайший пример авторана тут (http://forum.oszone.net/post-2184594-777.html), нужно только подправить его под себя. Да и написать его самому не составит большого труда, все зависит от желания и стремления. Ну или же создать кастомную страницу или форму в качестве стартовой страницы с контролами: установить, играть и т.д.
volga163@vk
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: Fon.bmp; DestDir: {tmp}
[code]
var
BackgroundForm: TForm;
BackgroundImage: TBitmapImage;
LoGoTip: TLabel;
Procedure BackgroundOnActivate(Sender: TObject); Begin if WizardForm.Visible then WizardForm.Show End;
function ShowWindow(hWnd, nCmdShow: LongWord): LongWord; external 'ShowWindow@user32.dll stdcall';
procedure InitializeWizard();
begin
BackgroundForm:= TForm.Create(nil);
BackgroundForm.BorderStyle:= bsNone;
BackgroundForm.OnActivate:= @BackgroundOnActivate;
ShowWindow(BackgroundForm.Handle, sw_ShowMaximized);
BackgroundImage:= TBitmapImage.Create(BackgroundForm);
BackgroundImage.Align:= alClient;
BackgroundImage.Stretch:= True;
ExtractTemporaryFile('fon.bmp');
BackgroundImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\fon.bmp'));
BackgroundImage.Parent:= BackgroundForm;
LoGoTip := TLabel.Create(WizardForm);
with LoGoTip do
begin
Parent := BackgroundForm;
Font.Height := -100;
Caption := 'Мой Логотип';
Left := ScaleX(50);
Top := ScaleY(50);
Width := ScaleX(1000);
Height := ScaleY(100);
Font.Name := 'Verdana';
Font.Style := [fsBold];
end;
end;
Procedure DeinitializeSetup;
Begin
BackgroundForm.Free
End;
volga163@vk
19-07-2013, 13:43
vint56, Спасибо большое, работает. Последний вопрос, можно ли сделать фон прозрачным? А то получается светлая рамка на картинке.
volga163@vk может тебе сплэш нужен
[Files]
Source: "Splash.png"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
[Code]
procedure ShowSplashScreen(p1:HWND;p2:ansistring;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;
а как сделать чтоб вот эта строчка "if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data-1.bin'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;" запускалась только после выбора того или иного компонента?
Fakt_37 это пример из справки
[Types]
Name: full; Description: Full installation; Flags: iscustom
[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed // это считается 0
Name: text\rus; Description: Русский; Flags: exclusive;// это считается 1 компонент
Name: text\eng; Description: Английский; Flags: exclusive;// это считается 2 компонент
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed // это считается 3 компонент
Name: voice\rus; Description: Русский; Flags: exclusive; // это считается 4 компонент
Name: voice\eng; Description: Английский; Flags: exclusive;// это считается 5 компонент
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; // это считается 1 компонент
if not ISArcExtract ( 2, 0, ExpandConstant('{src}\engtext.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break; // это считается 2 компонент
if not ISArcExtract ( 3, 0, ExpandConstant('{src}\rusvoice.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break; // это считается 3 компонент
if not ISArcExtract ( 4, 0, ExpandConstant('{src}\engvoice.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break; // это считается 4 компонент
ISDoneError:=false;
until true;
ISDoneStop;
end;
R.i.m.s.k.y.
19-07-2013, 14:36
поднятие привилегий собственному процессу не поможет? пример понятия привилегий в шапке, в "закрытии процесса".
возможные привилегии: »
я наверное что-то не так делаю,
не выскакивает окно уака/пасса
покромсал пример "закрытие процесса"
Ну и по факту видно что права как были простые так и остались
[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
TH32CS_SNAPPROCESS = $2;
INVALID_HANDLE_VALUE = -1;
PROCESS_TERMINATE = $1;
PROCESS_CREATE_THREAD = $2;
PROCESS_VM_OPERATION = $8;
PROCESS_VM_READ = $10;
PROCESS_VM_WRITE = $20;
PROCESS_QUERY_INFORMATION = $400;
SYNCHRONIZE = $100000;
MEM_COMMIT = $1000;
MEM_RESERVE = $2000;
PAGE_EXECUTE_READWRITE = $40;
TOKEN_QUERY = $8;
TOKEN_ADJUST_PRIVILEGES = $20;
SE_PRIVILEGE_ENABLED = $2;
MAX_PATH = 260;
TA_FAILED = 0;
TA_SUCCESS_CLEAN = 1;
TA_SUCCESS_KILL = 2;
WM_CLOSE = $10;
WAIT_OBJECT_0 = $0;
WAIT_TIMEOUT = $102;
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 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: String): Longint; external 'GetProcAddress@kernel32.dll stdcall';
function GetModuleHandle(lpModuleName: String): THandle; external 'GetModuleHandle{#A}@kernel32.dll stdcall';
function VirtualAllocEx(hProcess: THandle; lpAddress, dwSize: Longint; flAllocationType, flProtect: DWORD): Longint; external 'VirtualAllocEx@kernel32.dll stdcall';
function WriteProcessMemory(hProcess: THandle; lpBaseAddress, lpBuffer, nSize: Longint; var lpNumberOfBytesWritten: Longint): BOOL; external 'WriteProcessMemory@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 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;
begin
GetWindowThreadProcessId(hwnd, dwID);
if dwID = lParam then PostMessage(hwnd, WM_CLOSE, 0, 0);
Result := True;
end;
function PrivilegeReq(): DWORD;
var
hProcessSnap, hProc, hToken, hThread, lpProcName: THandle;
pe32: TPROCESSENTRY32;
aBuf: array [0..259] of Char;
szFileName, szDeviceName: String;
tkp: TOKEN_PRIVILEGES;
SeDebugNameValue: LUID;
i, lpMemory, ret: Longint;
lpThreadId, dwDrives: DWORD;
begin
hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hProcessSnap = INVALID_HANDLE_VALUE then Exit;
try
pe32.dwSize := SizeOf(pe32);
if not Process32First(hProcessSnap, pe32) then Exit;
while Process32Next(hProcessSnap, pe32) do
begin
// if CompareText(CharArrayToString(pe32.szExeFile), ExtractFileName(szProcess)) <> 0 then Continue;
// try open process
hProc := OpenProcess(PROCESS_TERMINATE or PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE 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_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE 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
end;
finally
CloseHandle(hProcessSnap);
end;
end;
procedure InitializeWizard();
begin
PrivilegeReq;
R.i.m.s.k.y.
19-07-2013, 17:57
нашел вот что http://support.microsoft.com/kb/981778
поможет ли это под простым пользователем поставить программу, требующую админа, для записи переменных в окружение простого пользователя
Johny777
19-07-2013, 20:51
R.i.m.s.k.y., если честно я нифига не понимаю Зачем тебе весь этот изврат? Программно сделать из простого пользователя админа очень сложно - точно, я почти уверен невозможно. В первую очередь на инно.Но вопрос зачем? Если что-то должно быть сделано админом, то инсталл запрашивает права (по дефолту так). Пусть пользователь введёт пароль админа, или войдет в систему под админом и тд. Не вижу в этом ничего плохого. Я б на твоём месте забил бы. Даже если есть решение, там может быть столько подводных камней, что офигеть можно.
R.i.m.s.k.y.
19-07-2013, 21:01
Но вопрос зачем? »
multiuser enviroment
Если что-то должно быть сделано админом, то инсталл запрашивает права (по дефолту так) »
в том то и да что не запрашивает, при копировании в PF выдает ошибку доступа, при регистрации пишет недостаточно прав
или войдет в систему под админом и тд »
переменная окружения будет админская и все настройки пойдут админу - это и есть подводный камень
Ребят, может кто помочь? У меня тут такая проблемка нарисовалась.... надо добавить в установщик еще 1 окно с выбором компонентов для установки.... точно такое же как и для выбора директории установки, только вместо директории (поля)... поле с выбором компонентов.
Вот тут есть готовый установщик: http://dfiles.ru/files/0v855lkzw
Может кто помочь? Вот тут привожу код для окна с выбором директории... что там надо поменять, чтобы переделать его на окно с компонентами? Я просто еще только начинаю свой путь, еще мало знаний... буду благодарен за любую помощь:
var
BkgImg2 : Longint;
AppLabel, AppLabel2, NeedSizeLabel, NeedSizeLabel2, SDLabel : TLabel;
BackBtn, DirBrowseBtn, OKBtn : HWND;
vPanel2 : TPanel;
procedure HideSelectDirPage;
begin
if CanUseXvid then begin
vPanel2.Visible:=False;
mciSendString('stop sdVideo','',0,0);
end;
ImgSetVisibility(BkgImg2,False);
AppLabel.Visible:=False;
NeedSizeLabel.Visible:=False;
AppLabel2.Visible:=False;
NeedSizeLabel2.Visible:=False;
SDLabel.Visible:=False;
BtnSetVisibility(BackBtn,False);
BtnSetVisibility(DirBrowseBtn,False);
BtnSetVisibility(OKBtn,False);
end;
procedure DirBrowseBtnClick(h:HWND);
begin
WizardForm.DirBrowseButton.OnClick(WizardForm.DirBrowseButton);
AppLabel.Caption:=WizardForm.DirEdit.Text;
AppLabel2.Caption:=WizardForm.DirEdit.Text;
end;
procedure BackBtnClick(h:HWND);
begin
WizardForm.BackButton.OnClick(WizardForm.BackButton);
end;
procedure OKBtnClick(h:HWND);
begin
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
procedure ShowSelectDirPage;
begin
PrevCurPageID:=wpSelectDir;
ImgSetVisibility(BkgImg2,True);
AppLabel.Visible:=True;
NeedSizeLabel.Visible:=True;
AppLabel2.Visible:=True;
NeedSizeLabel2.Visible:=True;
SDLabel.Visible:=True;
BtnSetVisibility(BackBtn,True);
BtnSetVisibility(DirBrowseBtn,True);
BtnSetVisibility(OKBtn,True);
ImgApplyChanges(WizardForm.Handle);
if CanUseXvid then begin
mciSendString('play sdVideo repeat','',0,0);
vPanel2.Visible:=True;
end;
end;
procedure CreateSelectDirPage;
begin
if CanUseXvid then begin
vPanel2:=TPanel.Create(WizardForm);
with vPanel2 do begin
Visible:=False;
Parent:=WizardForm;
SetBounds(32,32,704,272);
end;
mciSendString('open '+ExpandConstant('{tmp}\vid_instdir.avi')+' alias sdVideo parent '+IntToStr(vPanel2.Handle)+' style child','',0,0);
mciSendString('put sdVideo window at 0 0 704 272','',0,0);
end;
BkgImg2:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\pbbkg.png'),28,347,0,0,False,True);
AppLabel2:=TLabel.Create(WizardForm);
with AppLabel2 do begin
Parent:=WizardForm;
Transparent:=True;
Caption:=WizardForm.DirEdit.Text;
with Font do begin
Name:=FontName;
Size:=11;
Color:=clBlack;
end;
Left:=59;
Top:=364;
end;
AppLabel:=TLabel.Create(WizardForm);
with AppLabel do begin
Parent:=WizardForm;
Transparent:=True;
Caption:=WizardForm.DirEdit.Text;
with Font do begin
Name:=FontName;
Size:=11;
Color:=$e5e5e5;
end;
Left:=57;
Top:=362;
end;
NeedSizeLabel2:=TLabel.Create(WizardForm);
with NeedSizeLabel2 do begin
Parent:=WizardForm;
Transparent:=True;
Caption:='Для установки игры требуется 12.00 ГБ';
with Font do begin
Name:=FontName;
Size:=11;
Color:=clBlack;
end;
Left:=41;
Top:=411;
end;
NeedSizeLabel:=TLabel.Create(WizardForm);
with NeedSizeLabel do begin
Parent:=WizardForm;
Transparent:=True;
Caption:='Для установки игры требуется 12.00 ГБ';
with Font do begin
Name:=FontName;
Size:=11;
Color:=$e5e5e5;
end;
Left:=39;
Top:=409;
end;
SDLabel:=TLabel.Create(WizardForm);
with SDLabel do begin
Parent:=WizardForm;
Transparent:=True;
Caption:='ПАПКА УСТАНОВКИ ИГРЫ:';
with Font do begin
Name:=FontName;
Size:=13;
Color:=$e5e5e5;
end;
Left:=50;
Top:=315;
end;
BackBtn:=BtnCreate(WizardForm.Handle,30,450,135,30,PAnsiChar(ExpandConstant('{tmp}\button4.png')),2, False);
BtnSetEvent(BackBtn, BtnClickEventID,WrapBtnCallback(@BackBtnClick,1));
BtnSetFont(BackBtn,BtnFont2.Handle);
BtnSetText(BackBtn,'НАЗАД');
BtnSetFontColor(BackBtn,$e5e5e5,$ffffff,$ffffff,$8a390e);
BtnSetEvent(BackBtn,BtnMouseEnterEventID,WrapBtnCallback(@BtnMouseEnter,1));
DirBrowseBtn:=BtnCreate(WizardForm.Handle,603,405,135,30,PAnsiChar(ExpandConstant('{tmp}\button4.png ')),2,False);
BtnSetEvent(DirBrowseBtn, BtnClickEventID,WrapBtnCallback(@DirBrowseBtnClick,1));
BtnSetFont(DirBrowseBtn,BtnFont2.Handle);
BtnSetText(DirBrowseBtn,'ИЗМЕНИТЬ');
BtnSetFontColor(DirBrowseBtn,$e5e5e5,$ffffff,$ffffff,$8a390e);
BtnSetEvent(DirBrowseBtn,BtnMouseEnterEventID,WrapBtnCallback(@BtnMouseEnter,1));
OKBtn:=BtnCreate(WizardForm.Handle,606,450,135,30,PAnsiChar(ExpandConstant('{tmp}\button4.png')),2,F alse);
BtnSetEvent(OKBtn, BtnClickEventID,WrapBtnCallback(@OKBtnClick,1));
BtnSetFont(OKBtn,BtnFont2.Handle);
BtnSetText(OKBtn,'OK');
BtnSetFontColor(OKBtn,$e5e5e5,$ffffff,$ffffff,$8a390e);
BtnSetEvent(OKBtn,BtnMouseEnterEventID,WrapBtnCallback(@BtnMouseEnter,1));
end;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.