Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 6]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1274
Благодарности: 1030


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

Старожил


Сообщения: 242
Благодарности: 128

Профиль | Отправить PM | Цитировать


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;
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:29, 19-07-2013 | #811



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


vint56, Спасибо большое, работает. Последний вопрос, можно ли сделать фон прозрачным? А то получается светлая рамка на картинке.

Отправлено: 13:43, 19-07-2013 | #812


Старожил


Сообщения: 242
Благодарности: 128

Профиль | Отправить PM | Цитировать


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;

Последний раз редактировалось vint56, 19-07-2013 в 14:13.


Отправлено: 13:48, 19-07-2013 | #813


Новый участник


Сообщения: 17
Благодарности: 0

Профиль | Отправить PM | Цитировать


а как сделать чтоб вот эта строчка "if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data-1.bin'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;" запускалась только после выбора того или иного компонента?

Отправлено: 14:12, 19-07-2013 | #814


Старожил


Сообщения: 242
Благодарности: 128

Профиль | Отправить PM | Цитировать


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;

Отправлено: 14:27, 19-07-2013 | #815


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Цитата Johny777:
поднятие привилегий собственному процессу не поможет? пример понятия привилегий в шапке, в "закрытии процесса".
возможные привилегии: »
я наверное что-то не так делаю,
не выскакивает окно уака/пасса
покромсал пример "закрытие процесса"
Ну и по факту видно что права как были простые так и остались
Код: Выделить весь код
[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 в 14:45.


Отправлено: 14:36, 19-07-2013 | #816


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


нашел вот что http://support.microsoft.com/kb/981778
поможет ли это под простым пользователем поставить программу, требующую админа, для записи переменных в окружение простого пользователя

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 17:57, 19-07-2013 | #817


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


R.i.m.s.k.y., если честно я нифига не понимаю Зачем тебе весь этот изврат? Программно сделать из простого пользователя админа очень сложно - точно, я почти уверен невозможно. В первую очередь на инно.Но вопрос зачем? Если что-то должно быть сделано админом, то инсталл запрашивает права (по дефолту так). Пусть пользователь введёт пароль админа, или войдет в систему под админом и тд. Не вижу в этом ничего плохого. Я б на твоём месте забил бы. Даже если есть решение, там может быть столько подводных камней, что офигеть можно.

Отправлено: 20:51, 19-07-2013 | #818


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Цитата Johny777:
Но вопрос зачем? »
multiuser enviroment
Цитата Johny777:
Если что-то должно быть сделано админом, то инсталл запрашивает права (по дефолту так) »
в том то и да что не запрашивает, при копировании в PF выдает ошибку доступа, при регистрации пишет недостаточно прав
Цитата Johny777:
или войдет в систему под админом и тд »
переменная окружения будет админская и все настройки пойдут админу - это и есть подводный камень

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 21:01, 19-07-2013 | #819


Пользователь


Сообщения: 80
Благодарности: 3

Профиль | Отправить PM | Цитировать


Ребят, может кто помочь? У меня тут такая проблемка нарисовалась.... надо добавить в установщик еще 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,False);
  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;

Отправлено: 21:17, 19-07-2013 | #820



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59




 
Переход