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

Показать сообщение отдельно

Аватара для Drongo

Будем жить, Маэстро...


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

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


Привет Serega_, это снова я. Два последних вопроса:
1. Где прописать минимальные значения, при которых должна идти установка? Нужны следующие минимальные значения.
а) CPU 1.5 GHz
б) ОЗУ - 256 Mb
в) Видеопамять - 64 Mb

2. Можно ли стандартное окно установки увеличить на 20 в ширину и 20 в высоту? Второй вопрос чисто теоретический, бьюсь с первым. С операционными системами разобрался, а вот с железом, пока никак. Если не затруднит покажи где эти значения нужно менять?

Код Скрипта
Код: Выделить весь код
[_Code]
type
 PDisplay_Device = record
  cb: DWord;
  DeviceName: array [0..31] of char;
  DeviceString: array [0..127] of char;
  StateFlags: DWord;
  DeviceID, DeviceKey: array [0..127] of char;
 end;

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

 TMixerCaps = record
  vPid, vDriverVersion: DWord;
  sName: array [0..31] of char;
  Support, cDestinations: DWord;
 end;

// Проверка версии Windows
#if Pos("4.", GetFileVersion(AddBackslash(GetEnv("windir")) + "Explorer.exe")) == 1
	{Win9x}
   TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, LoAvailPhys, LoTotalPageFile, LoAvailPageFile,
    LoTotalVirtual, LoAvailVirtual, LoAvailExtendedVirtual, HiTotalPhys,
    HiAvailPhys, HiTotalPageFile, HiAvailPageFile, HiTotalVirtual, HiAvailVirtual,
    HiAvailExtendedVirtual: Integer;
   end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
   external 'GlobalMemoryStatus@kernel32.dll stdcall';
#else
	{WinNT}
   TMemoryStatusEx = record
    dwLength, dwMemoryLoad: DWord;
    LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,
    LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,
    LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,
    HiAvailExtendedVirtual: Integer;
   end;
  function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;
   external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
#endif

const
  DISPLAY_DEVICE_PRIMARY_DEVICE = 4;
  oneMB = 1024*1024;
  NeedMHz = 1800;
  NeedVideoRAM = 128;
  NeedSoundCard = 'Creative X-Fi';
  NeedMB = 512;
  NeedPageFile = 1024;

var
  WelcomeLabel1,WelcomeLabel2,FinishedHeadingLabel,RunLabel,
  FinishedLabel,PageNameLabel,PageDescriptionLabel:TLabel;
  RunMyProg: TCheckBox;
  TimerID: LongWord;
  currTime: Integer;
  SplashImage: TBitmapImage;

  InfoPage: TWizardPage;
  TopText, BottomText: TNewStaticText;
  ChangeText: Boolean;
  SystemPanel, ProcessorPanel, VideoPanel,
  AudioPanel, RAMPanel, PageFilePanel: TMemo;
  SystemVersionPanel, ProcessorMHzPanel, VideoRAMPanel,
  AudioNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  lpCaps: TMixerCaps;
  Version: TWindowsVersion;
  MemoryEx: TMemoryStatusEx;
  n, errCode: Integer;
  Keys: TArrayOfString;
  DeviceValue: Cardinal;
  lpDisplayDevice: PDisplay_Device;

function GetSystemMetrics(nIndex: Integer): Integer;
 external 'GetSystemMetrics@user32.dll stdcall';

function GetDeviceCaps(hDC, nIndex: Integer): Integer;
 external 'GetDeviceCaps@GDI32 stdcall';

function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer;
 external 'CreateDCA@GDI32 stdcall';

function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean;
 external 'EnumDisplayDevicesA@user32.dll stdcall';

function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TMixerCaps; uSize: LongInt): LongInt;
 external 'mixerGetDevCapsA@winmm.dll stdcall';

function mixerGetNumDevs: Integer;
 external 'mixerGetNumDevs@winmm.dll stdcall';

//--------------
function WrapTimerProc(callback:TProc; paramcount:integer):longword;
  external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
  external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
  external 'KillTimer@user32.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
   currTime := currTime + 1;
   case currTime of
  {#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_2.bmp')) end;
   2*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_3.bmp')) end;
   3*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_4.bmp')) end;
   4*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_5.bmp')) end;
   5*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_6.bmp')) end;
   6*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_7.bmp')) end;
   7*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_8.bmp')) end;
   8*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_9.bmp')) end;
   9*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_10.bmp'))end;
   10*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_11.bmp')) end;
   11*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_12.bmp')) end;
   12*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_13.bmp'))end;
   13*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_14.bmp'))end;
   14*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_15.bmp')) end;
   15*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_16.bmp')) end;
   16*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_17.bmp')) end;
   17*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_18.bmp')) end;
   18*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_19.bmp')) end;
   19*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_20.bmp'))end;
   20*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_21.bmp')) end;
   21*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_22.bmp')) end;
   22*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_23.bmp')) end;
   23*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_24.bmp')) end;
   24*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_25.bmp')) end;
   25*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_26.bmp')) end;
   26*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_27.bmp')) end;
   end;
   if CurrTime = 26*{#TIME_FOR_VIEW} then CurrTime := -1;
   //--------------
end;

procedure RLabelOnClick(Sender: TObject);
begin
  if RunMyProg.Checked=false then
  begin
    RunMyProg.Checked := true;
  end else
    RunMyProg.Checked := false;
end;

// функция для запуска программы если отмечен чебокс
procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
begin
if CurStep = ssDone then
  begin
    if RunMyProg.Checked then
    Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
  end;
end;

// Дополнить число до кратного Multiple
function ToMultiple(Bytes, Multiple: Integer): Integer;
begin
  if Abs(Bytes/Multiple) > Bytes/Multiple then
     Result := (Bytes/Multiple + 1)*Multiple
  else
     Result := Bytes
end;

// Перевод числа в значение Бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)
function ByteOrTB(Bytes: Extended; noMB: Boolean): String;
begin
 if not noMB then
    Result := FloatToStr(Int(Bytes)) + ' Мб'
 else
		if Bytes < 1024 then
       Result := FloatToStr(Int(Bytes)) + ' Бт'
    else
			 if Bytes/1024 < 1024 then
          Result := FloatToStr(round((Bytes/1024)*10)/10) + ' Кб'
       else
					if Bytes/oneMB < 1024 then
             Result := FloatToStr(round(Bytes/oneMB*100)/100) + ' Мб'
          else
             if Bytes/oneMB/1000 < 1024 then
                Result := FloatToStr(round(Bytes/oneMB/1024*1000)/1000) + ' Гб'
             else
							  Result := FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) + ' Тб'
 StringChange(Result, ',', '.')
end;

// Удаление начальных, конечных и повторных пробелов
function DelSp(String: String): String;
begin
 while (Pos('  ', String) > 0) do Delete(String, Pos('  ', String), 1)
 Result := Trim(String)
end;

function Size64(Hi, Lo: Integer): Extended;
begin
 Result := Lo
 if Lo < 0 then
    Result := Result + $7FFFFFFF + $7FFFFFFF + 2
 for Hi := Hi-1 downto 0 do Result := Result + $7FFFFFFF + $7FFFFFFF + 2
end;

function CheckCPU(NeedMHz: Integer): Boolean;
var
  String: String;
begin
	String := 'Hardware\Description\System\CentralProcessor'; RegGetSubkeyNames(HKLM, String, Keys)	 // Количество ядер
	for n := 0 to GetArrayLength(Keys)-1 do
      RegQueryStringValue(HKLM, String + '\' + Keys[n], 'ProcessorNameString', Keys[n])
	if not RegQueryDWordValue(HKLM, String + '\0', '~MHz', DeviceValue) or (DeviceValue < NeedMHz) then
         Exit
  else
     Result := True
end;

function CheckMemorySize(NeedRAM: Integer): Boolean;
begin
	MemoryEx.dwLength := SizeOf(MemoryEx)
	if not GlobalMemoryStatusEx(MemoryEx) then
         MsgBox('Ошибка функции:' + #13 + 'GlobalMemoryStatusEx', mbError, mb_Ok)
  else
	   if (ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) < NeedRAM) then
         Exit
     else
         Result := True
end;

procedure CreateCheckForm();
begin

  TopText := TNewStaticText.Create(InfoPage)
  with TopText do
  begin
    Parent := InfoPage.Surface
    Left := 0
    AutoSize := True
  end

  BottomText := TNewStaticText.Create(InfoPage)
  with BottomText do
  begin
    Parent := InfoPage.Surface
    Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».'
    Font.Color := clBlack
    Left := 0
    Top := 200
    AutoSize := True
  end

  SystemPanel := TMemo.Create(InfoPage)
  with SystemPanel do
  begin
    Text := 'Система'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ScaleY(33)
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  SystemVersionPanel := TMemo.Create(InfoPage)
  with SystemVersionPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := SystemPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
   end

  ProcessorPanel := TMemo.Create(InfoPage)
  with ProcessorPanel do
  begin
    Text := 'Процессор'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := SystemPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  ProcessorMHzPanel := TMemo.Create(InfoPage)
  with ProcessorMHzPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := ProcessorPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  VideoPanel := TMemo.Create(InfoPage)
  with VideoPanel do
  begin
    Text := 'Видеоадаптер'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := ProcessorPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  VideoRAMPanel := TMemo.Create(InfoPage)
  with VideoRAMPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := VideoPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  AudioPanel := TMemo.Create(InfoPage)
  with AudioPanel do
  begin
    Text := 'Звуковая карта'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := VideoPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  AudioNamePanel := TMemo.Create(InfoPage)
  with AudioNamePanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := AudioPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  RAMPanel := TMemo.Create(InfoPage)
  with RAMPanel do
  begin
    Text := 'Объём памяти'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := AudioPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end

  RAMTotalPanel := TMemo.Create(InfoPage)
  with RAMTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := RAMPanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

  PageFilePanel := TMemo.Create(InfoPage)
  with PageFilePanel do
  begin
    Text := 'Файл подкачки'
    Alignment := taCenter
    Parent := InfoPage.Surface
    Left := ScaleX(0)
    Top := RAMPanel.Top + 27
    Width := ScaleX(100)
    Height := ScaleY(22)
    ReadOnly := True
    Color := $EEEEEE
  end;

  PageFileTotalPanel := TMemo.Create(InfoPage)
  with PageFileTotalPanel do
  begin
    Alignment := taLeftJustify
    Parent := InfoPage.Surface
    Left := ScaleX(104)
    Top := PageFilePanel.Top
    Width := ScaleX(310)
    Height := ScaleY(22)
    ReadOnly := True
  end

end;

procedure UpdateInfo();
var
  DeviceName, DeviceKey: String;
begin
  ChangeText := False

  GetWindowsVersionEx(Version)

  // Операционная система:
  SystemVersionPanel.Color := $CCFFCC

  DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'
  if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')
	RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)
  if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then
     DeviceName := DeviceName + ' ' + DeviceKey
	StringChange(DeviceName, 'Microsoft ', '')
  SystemVersionPanel.Text := ' ' + DeviceName + ' сборка ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +
                             '.' + IntToStr(Version.Build)

  if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and  // Windows 2000 SP4
     (Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and  // Windows XP SP2
     (Pos('XP Service Pack 3', SystemVersionPanel.Text) = 0) and  // Windows XP SP3
     (Pos('Vista', SystemVersionPanel.Text) = 0) then  // Windows Vista (c любым SP или без него)
     begin
      SystemVersionPanel.Color := $CCCCFF
      ChangeText := True
     end

  // Процессор:
  ProcessorMHzPanel.Color := $CCFFCC

  if not CheckCPU(NeedMHz) then
     begin
       ProcessorMHzPanel.Color := $CCCCFF
       ChangeText := True
     end

  ProcessorMHzPanel.Text := ' ' + DelSp(Keys[0]) + ' @' + IntToStr(DeviceValue) + ' MHz'
  if GetArrayLength(Keys) > 1 then
     ProcessorPanel.Text := 'Процессоры' // + ' (' + IntToStr(GetArrayLength(Keys)) + ')'

  // Видеокарта:
  VideoRAMPanel.Color := $CCFFCC

  lpDisplayDevice.cb := SizeOf(lpDisplayDevice)
  DeviceKey := ''
	n := 0
  while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and
            (lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n := n + 1
	for n := 0 to 127 do DeviceKey := DeviceKey + lpDisplayDevice.DeviceKey[n]
  Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127)  // Ключ драйвера получаем из API
	StringChange(DeviceKey, '\Registry\Machine\', '')
  errCode := 1
  DeviceValue := 0
  if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName) then
		 for n := 1 to Length(DeviceName) do
       begin
         DeviceValue := DeviceValue + Ord(DeviceName[n])*errCode
         errCode := errCode*$100
       end
  else
     if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then
     else
        RegQueryDWordValue(HKLM, DeviceKey + '\Info', 'VideoMemory', DeviceValue)
	DeviceName := ''
  for n := 0 to 127 do DeviceName := DeviceName + lpDisplayDevice.DeviceString[n]
  Delete(DeviceName, Pos(Chr(0), DeviceName), 127)

  if DeviceName <> '' then
    if DeviceValue > 0 then
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ', '+ ByteOrTB(DeviceValue/oneMB, False)
    else
      VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ' (Standard), '+ ByteOrTB(DeviceValue/oneMB, False)
  else
     begin
      VideoRAMPanel.Text := ' Драйвер устройства не обнаружен'
      VideoRAMPanel.Color := $CCCCFF
      ChangeText := True
     end
  if (DeviceValue/oneMB < NeedVideoRAM) then
     begin
       VideoRAMPanel.Color := $CCCCFF
       ChangeText := True
     end
  VideoRAMPanel.Text := VideoRAMPanel.Text + ', ' + IntToStr(GetSystemMetrics(0)) + 'x' +
                        IntToStr(GetSystemMetrics(1)) + ' (' + IntToStr(GetDeviceCaps(CreateDC('DISPLAY','','',0),14) *
                        GetDeviceCaps(CreateDC('DISPLAY','','',0),12)) + ' bit)'

  // Звуковая карта:
  AudioNamePanel.Color := $CCFFCC

  // for errCode := 0 to 1 do  // Вывод основного звукового устройства
  for errCode := 0 to mixerGetNumDevs do
    begin
		  mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps))
      DeviceName := ' '
		  for n := 0 to 31 do DeviceName := DeviceName + lpCaps.sName[n]
      Delete(DeviceName, Pos(Chr(0), DeviceName), 31)
      Delete(DeviceName, Pos(' [', DeviceName), 31)
      StringChange(DeviceName, 'SB ', 'Creative ')
      Delete(DeviceName, Pos(' Audio', DeviceName), 31)
		  SetArrayLength(Keys, errCode)
      if errCode > 0 then Keys[errCode-1] := DeviceName
    end

	if GetArrayLength(Keys) > 1 then
    begin
     AudioPanel.Text := 'Звуковые карты'
     // AudioPanel.Text := 'Звуковые карты (' + IntToStr(GetArrayLength(Keys)) +')'
     AudioNamePanel.Text := ''
     for n := 1 to GetArrayLength(Keys) do
         AudioNamePanel.Text := AudioNamePanel.Text + Keys[n-1]  // + '(' + IntToStr(n) + ')'
    end
   else
    if GetArrayLength(Keys) = 0 then
     begin
      AudioNamePanel.Text := ' Драйвер устройства не обнаружен'
      AudioNamePanel.Color := $CCCCFF
      ChangeText := True
     end
      else
       AudioNamePanel.Text := Keys[0]
  if Pos(NeedSoundCard, AudioNamePanel.Text) = 0 then
     AudioNamePanel.Text := AudioNamePanel.Text + ' (рекомендуется ' + NeedSoundCard + ')'

  // Объём памяти:
    RAMTotalPanel.Color := $CCFFCC
  if not CheckMemorySize(NeedMB) then
    begin
      RAMTotalPanel.Color := $CCCCFF
      ChangeText := True
    end
  RAMTotalPanel.Text := ' ' + ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16), False) + ' всего, ' +
                              ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) -
                                                        Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' используется, ' +
                              ByteOrTB(Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' свободно'

  // Виртуальная память:
  PageFileTotalPanel.Color := $CCFFCC
  PageFileTotalPanel.Text := ' ' + ByteOrTB(Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB, False) + ' всего, ' +
                                   ByteOrTB((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
                                             Size64(MemoryEx.HiAvailPageFile, MemoryEx.LoAvailPageFile))/oneMB, False) + ' занято системным кэшем'
  if Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB < NeedPageFile then
    begin
      PageFileTotalPanel.Color := $CCCCFF
      ChangeText := True
    end

  if ChangeText = True then
    begin
      TopText.Top := 0
      TopText.Caption := 'Не все компоненты удовлетворяют минимальным требованиям программы.' #13
                         'Пожалуйста, проверьте позиции, выделенные красным цветом.'
      TopText.Font.Color := clRed
      WizardForm.NextButton.Enabled := False
    end
  else
    begin
      TopText.Caption := 'Все компоненты соответствуют минимальным требованиям программы.'
      TopText.Font.Color := clGreen
      TopText.Top := 8
      WizardForm.NextButton.Enabled := True
    end
end;

procedure CurPageChanged(CurPageID: Integer);
var
  pfunc: LongWord;

begin
  WelcomeLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
  WelcomeLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
  PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
  PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
  FinishedHeadingLabel.Caption := WizardForm.FinishedHeadingLabel.Caption;
  FinishedLabel.Caption := WizardForm.FinishedLabel.Caption;
// здесь придётся вручную вводить требуемый текст
  RunLabel.Caption := 'Запустить программу';

  if CurPageID = InfoPage.ID then UpdateInfo();  // Обновление информации о системе

  if (CurPageID = wpInstalling) then
    begin
      pfunc := WrapTimerProc(@OnTimer, 4);
      TimerID := SetTimer(0, 0, 1000, pfunc);

      WizardForm.InnerNotebook.Hide;
      WizardForm.Bevel1.Hide;
      WizardForm.MainPanel.Hide;
      WizardForm.PageNameLabel.Hide;
      WizardForm.PageDescriptionLabel.Hide;

      WizardForm.ProgressGauge.Show;
      WizardForm.StatusLabel.Show;
      SplashImage.Show;
    end
  else
    begin
      WizardForm.ProgressGauge.Hide;
      WizardForm.StatusLabel.Hide;
      SplashImage.Hide;

    if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
    begin
      WizardForm.InnerNotebook.Show;
      WizardForm.Bevel1.Show;
      WizardForm.MainPanel.Show;
      WizardForm.PageNameLabel.Show;
      WizardForm.PageDescriptionLabel.Show;
    end;
  end;
end;

procedure InitializeWizard();
begin
  InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
                                          'Программа установки обнаружила следующие наобходимые компоненты.')
  CreateCheckForm()  // Создание объектов TMemo, в которых будет выводится информация о системе
  UpdateInfo()  // Обновление информации о системе

  ExtractTemporaryFile('Image_2.bmp')
  ExtractTemporaryFile('Image_3.bmp')
  ExtractTemporaryFile('Image_4.bmp')
  ExtractTemporaryFile('Image_5.bmp')
  ExtractTemporaryFile('Image_6.bmp')
  ExtractTemporaryFile('Image_7.bmp')
  ExtractTemporaryFile('Image_8.bmp')
  ExtractTemporaryFile('Image_9.bmp')
  ExtractTemporaryFile('Image_10.bmp')
  ExtractTemporaryFile('Image_11.bmp')
  ExtractTemporaryFile('Image_12.bmp')
  ExtractTemporaryFile('Image_13.bmp')
  ExtractTemporaryFile('Image_14.bmp')
  ExtractTemporaryFile('Image_15.bmp')
  ExtractTemporaryFile('Image_16.bmp')
  ExtractTemporaryFile('Image_17.bmp')
  ExtractTemporaryFile('Image_18.bmp')
  ExtractTemporaryFile('Image_19.bmp')
  ExtractTemporaryFile('Image_20.bmp')
  ExtractTemporaryFile('Image_21.bmp')
  ExtractTemporaryFile('Image_22.bmp')
  ExtractTemporaryFile('Image_23.bmp')
  ExtractTemporaryFile('Image_24.bmp')
  ExtractTemporaryFile('Image_25.bmp')
  ExtractTemporaryFile('Image_26.bmp')
  ExtractTemporaryFile('Image_27.bmp')


  currTime := 0;

      WizardForm.WelcomeLabel1.Hide;
      WizardForm.WelcomeLabel2.Hide;
      WizardForm.PageNameLabel.Hide;
      WizardForm.PageDescriptionLabel.Hide;
      WizardForm.FinishedHeadingLabel.Hide;
      WizardForm.FinishedLabel.Hide;
    // низнаю почему, но Hide не действует. Поэтому просто уменьшил размер
      WizardForm.RunList.Height := 0;
      WizardForm.RunList.Width := 0;
      WizardForm.FilenameLabel.Hide;

  WizardForm.StatusLabel.Parent := WizardForm;
  WizardForm.StatusLabel.Top := ScaleY(315);
  WizardForm.StatusLabel.Left := ScaleX(10);
  WizardForm.StatusLabel.Width := ScaleX(200);
  WizardForm.StatusLabel.Hide;

      WizardForm.ProgressGauge.Parent := WizardForm;
      WizardForm.ProgressGauge.Top := ScaleY(330);
      WizardForm.ProgressGauge.Left := ScaleX(10);
      WizardForm.ProgressGauge.Width := ScaleX(380);
      WizardForm.ProgressGauge.Height := ScaleX(18);
      WizardForm.ProgressGauge.Hide;

  SplashImage := TBitmapImage.Create(WizardForm);
  SplashImage.Top := 0;
  SplashImage.Left := 0;
  SplashImage.Width := WizardForm.MainPanel.Width;
  SplashImage.Height := WizardForm.Bevel.Top;
  SplashImage.Parent := WizardForm.InnerPage;
  SplashImage.Stretch := True;
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_7.bmp'));
  SplashImage.Hide;

      WizardForm.WizardBitmapImage.Align:=true;
      WizardForm.WizardBitmapImage2.Align:=true;
      WizardForm.WizardSmallBitmapImage.Align:=true;

  WelcomeLabel1:=TLabel.Create(WizardForm);
  WelcomeLabel1.Left:=ScaleX(10);
  WelcomeLabel1.Top := ScaleY(10);
  WelcomeLabel1.Width := ScaleX(350);
  WelcomeLabel1.Height := ScaleY(75);
  WelcomeLabel1.AutoSize := False;
  WelcomeLabel1.WordWrap := True;
  WelcomeLabel1.Font.Color := clGreen;
// здесь можно поиграть шрифтом
//  WelcomeLabel1.Font.Style := [fsBold];
//  WelcomeLabel1.Font.Name:='MS Sans Serif';
  WelcomeLabel1.Font.Size := 14;
  WelcomeLabel1.Transparent := True;
  WelcomeLabel1.Parent := WizardForm.WelcomePage;

      WelcomeLabel2:=TLabel.Create(WizardForm);
      WelcomeLabel2.Left := ScaleX(10);
      WelcomeLabel2.Top := ScaleY(70);
      WelcomeLabel2.Width := ScaleX(200);
      WelcomeLabel2.Height := ScaleY(300);
      WelcomeLabel2.AutoSize := False;
      WelcomeLabel2.WordWrap := True;
      WelcomeLabel2.Font.Color := clGreen;
      WelcomeLabel2.Font.Style := [fsBold];
      WelcomeLabel2.Font.Size := 10;
      WelcomeLabel2.Transparent := True;
      WelcomeLabel2.Parent := WizardForm.WelcomePage;

  PageNameLabel := TLabel.Create(WizardForm);
  PageNameLabel.Left := ScaleX(25);
  PageNameLabel.Top := ScaleY(10);
  PageNameLabel.Width := ScaleX(300);
  PageNameLabel.Height := ScaleY(14);
  PageNameLabel.AutoSize := False;
  PageNameLabel.WordWrap := True;
  PageNameLabel.Font.Color := clRed;
  PageNameLabel.Font.Style := [fsBold];
  PageNameLabel.Transparent := True;
  PageNameLabel.Parent := WizardForm.MainPanel;

      PageDescriptionLabel := TLabel.Create(WizardForm);
      PageDescriptionLabel.Left := ScaleX(40);
      PageDescriptionLabel.Top := ScaleY(25);
      PageDescriptionLabel.Width := ScaleX(475);
      PageDescriptionLabel.Height := ScaleY(30);
      PageDescriptionLabel.AutoSize := False;
      PageDescriptionLabel.WordWrap := True;
      PageDescriptionLabel.Font.Color := clRed;
      PageDescriptionLabel.Transparent := True;
      PageDescriptionLabel.Parent := WizardForm.MainPanel;

  FinishedHeadingLabel:=TLabel.Create(WizardForm);
  FinishedHeadingLabel.Left := ScaleX(10);
  FinishedHeadingLabel.Top := ScaleY(10);
  FinishedHeadingLabel.Width := ScaleX(320);
  FinishedHeadingLabel.Height := ScaleY(75);
  FinishedHeadingLabel.AutoSize := False;
  FinishedHeadingLabel.WordWrap := True;
  FinishedHeadingLabel.Font.Color := clBlue;
// здесь тоже можно поиграть шрифтом
//  FinishedHeadingLabel.Font.Style := [fsBold];
//  FinishedHeadingLabel.Font.Name:='MS Sans Serif';
  FinishedHeadingLabel.Font.Size := 14;
  FinishedHeadingLabel.Transparent := True;
  FinishedHeadingLabel.Parent := WizardForm.FinishedPage;

      FinishedLabel:=TLabel.Create(WizardForm);
      FinishedLabel.Left := ScaleX(10);
      FinishedLabel.Top := ScaleY(70);
      FinishedLabel.Width := ScaleX(220);
      FinishedLabel.Height := ScaleY(300);
      FinishedLabel.AutoSize := False;
      FinishedLabel.WordWrap := True;
      FinishedLabel.Font.Color := clRed;
      FinishedLabel.Font.Size := 10;
      FinishedLabel.Transparent := True;
      FinishedLabel.Parent := WizardForm.FinishedPage;

  RunMyProg := TCheckBox.Create(WizardForm);
  RunMyProg.Parent := WizardForm.FinishedPage;
  RunMyProg.Left := ScaleX(10);
  RunMyProg.Top := ScaleY(270);
  RunMyProg.Width := ScaleX(13);
  RunMyProg.Height := ScaleX(13);
  //RunMyProg.Checked := true; // чтоб чебокс был отмечен, раскоментируй строку

      RunLabel:=TLabel.Create(WizardForm);
      RunLabel.Left := ScaleX(30);
      RunLabel.Top := ScaleY(270);
      RunLabel.Width := ScaleX(200);
      RunLabel.Height := ScaleY(20);
      RunLabel.AutoSize := False;
      RunLabel.WordWrap := True;
      RunLabel.Font.Color := clGreen;
      RunLabel.Font.Style := [fsBold];
      RunLabel.Font.Size := 10;
      RunLabel.OnClick := @RLabelOnClick;
      RunLabel.Transparent := True;
      RunLabel.Parent := WizardForm.FinishedPage;
end;

procedure DeinitializeSetup();
begin
  KillTimer(0, TimerID);
end;
//--------------

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 16:19, 16-04-2009 | #627