Inno Setup (создание инсталяционных пакетов). Часть 2

Статус
В этой теме нельзя размещать новые ответы.

SaintPaul

Участник
demon777,
Судя по ошибке, если я не ошибаюсь, там ошибка доступа по определенному адресу, в нашем случае, которого не существует ибо строка
ExtractTemporaryFile('Music.mp3'); находится вне блока функции. Может неправильно выразился, я с Паскалем не очень, вообщем тебе нужно добавить пробелов перед этой строкой, чтоб она сравнялась с строкой
ExtractTemporaryFile('BASS.dll');
и попала в блок выполнения функции. Опять же повторяю, я могу быть не прав ибо синтаксис Паскаля мне незнаком, но ошибка явно указывает на обращение по несуществующему адресу, на запись из него.
 
Последнее редактирование:

CTpaHNICK

Мимокрокодил
Привет всем! Никто не в курс, где можно набрать скинов для ISskin.dll?
Только каких нибуть нестандартных, стандартные у меня есть!
 

YURSHAT

Тех. админ
Администратор
CTpaHNICK, берешь любой виндовый стиль и конвертишь прогой. А вообще даже конвертить не нужно, можно любой виндовый стиль юзать...
 

JHeavy

Мимокрокодил
Здравствуйте, я в Inno плохо разбираюсь, и у меня возник вопрос, я пытался спрашивать но безуспешно.
Суть вопроса такая, как сделать так чтобы при выборе rus1 и voice они (файлы) копировались в одну папку, а при выборе rus2 и voice в другую папку, файл звука

(Voice) один и тот же, просто в зависимости от выбора rus1 или rus2 копируется в разные папки, если же выбран просто Voice то копируется туда же куда и rus1. А в примере ниже если выбрать rus1 или rus2 вместе с Voice, то он копируется 2 раза в обе папки

Код:
 [Components] 
 Name: game; Description: Игрушка; Types: full compact custom; Flags: fixed 
 Name: Lang; Description: Русики и звук; Types: custom 
 Name: Lang\rus1; Description: русик первый; Types: custom; Flags: exclusive 
 Name: Lang\rus2; Description: русик второй; Types: custom; Flags: exclusive 
 Name: Voice; Description: Русский звук; Types: custom 
  
 [Files] 
 Source: "game\*"; DestDir: "{app}"; Components: game 
 Source: "rus1\*"; DestDir: "{app}\eng"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: rus1 
 Source: "rus2\*"; DestDir: "{app}\deu"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: rus2 
 Source: "Voice\*"; DestDir: "{app}\eng"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Voice
 Source: "Voice\*"; DestDir: "{app}\eng"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Voice and Lang\rus1
 Source: "Voice\*"; DestDir: "{app}\deu"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Voice and Lang\rus2
Спасибо.
 

demon777

Новичок
Мужики как правильно написать команду стоб при ножатие кнопки запускался exe файл
Код:
procedure SerialButton1Click(Sender: TObject);
begin
 Exec(ExpandConstant('{src}\KeyGen.exe'), '', True);
end;
пробовал так выдает ошибку
 

nik1967

Old Men
Проверенный
пробовал так выдает ошибку
И будет выдавать. Потому, что функция выглядит так:
Код:
function Exec(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;
В твоём случае:
Код:
procedure SerialButton1Click(Sender: TObject);
var
  ResultCode: Integer;
begin
 Exec(ExpandConstant('{src}\KeyGen.exe'), '', ExpandConstant('{src}'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
 
Последнее редактирование:

ARS_23

R.I.P
Проверенный
demon777,
Код:
procedure SerialButton1Click(Sender: TObject);
begin
Exec2(ExpandConstant('{src}\KeyGen.exe'), '', True);
end;
Код:
procedure SerialButton1Click(Sender: TObject);
var ErrorCode: Integer;
begin
  ShellExec('open', ExpandConstant('{src}\KeyGen.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);    
end;
 

demon777

Новичок
Помогите со скриптом проверки ввода серийного кода, точнее в правильной выводе проверки. Вот код скрипт проверки выделин красным а заданая страница зеленым, как его переделать чтоб он проверял именно на странице SerialPage
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[ Code]
const
  MaxPartLen = 4;

var
  SerialPage: TWizardPage; TopText: TLabel; SerialButton: TNewButton;
  SerialEdit:Array[0..4]of TNewEdit;

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

procedure SerialButton1Click(Sender: TObject); forward;

procedure SerialPartOnChange(Sender: TObject);
var
  i,ln: integer;
begin
  ln:=0;
  for i:=0 to 4 do
  begin
    SerialEdit[i].AutoSelect:=False;
    if i<4 then
      if Length(SerialEdit[i].Text)=4 then
        SerialEdit[i+1].SetFocus;
    ln:=ln+Length(SerialEdit[i].Text);
    end;
  WizardForm.NextButton.Enabled := ln=MaxPartLen*5;
end;

[COLOR="Red"]function NextButtonClick(CurPageID: Integer): Boolean;
var
  s: String;
begin
  Result := True;
  [COLOR="SeaGreen"]case CurPageID of
    wpWelcome: begin[/COLOR]
      s:= SerialEdit[0].Text+SerialEdit[1].Text+SerialEdit[2].Text+SerialEdit[3].Text+SerialEdit[4].Text;
      if (Length(s)<>20) then begin
        MessageBox(WizardForm.Handle, 'Не верный серийный номер!', 'Ошибка', MB_ICONINFORMATION);
        Result:=False;
      end;
      if (Result)and((Lowercase(s)<>AnsiLowercase(s))or(Uppercase(s)<>AnsiUppercase(s))) then begin
        MessageBox(WizardForm.Handle, 'В поле ввода ключа разрешено вводить только цифры и латинские буквы.', 'Ошибка', MB_ICONINFORMATION);
        Result:=False;
      end;
    end;
  end;
end;[/COLOR]

procedure CreatePages();
var
i: integer;
begin
  SerialPage := CreateCustomPage(wpWelcome, 'License Information', 'Please enter Serial number, then click Next.');

TopText:=TLabel.Create(SerialPage)
TopText.Left:=0
TopText.Top:=0
TopText.Width:=417
TopText.Height:=28
TopText.AutoSize:=False
TopText.WordWrap:=True
TopText.Caption:='Введите код, отпечатанный на последней странице обложки Руководства пользователя или на упаковке диска.'
TopText.Parent:=SerialPage.Surface

  for i:=0 to 4 do
  begin
    SerialEdit[i] := TNewEdit.Create(SerialPage);
    with SerialEdit[i] do
    begin
      Left := (50+i*65);
      Top := SerialPage.SurfaceHeight / 2 ;
      Width := ScaleX(48);
      CharCase := ecUpperCase;
      MaxLength := MaxPartLen;
      Parent := SerialPage.Surface;
      OnChange:= @SerialPartOnChange;
    end;
  end;
  begin
  SerialButton := TNewButton.Create(WizardForm);
  with SerialButton do
  begin
    Name := 'SerialButton';
    Parent := WizardForm;
    Left := ScaleX(176);
    Top := ScaleY(230);
    Width := ScaleX(170);
    Height := ScaleY(25);
    Caption := 'Запустить генератор ключа';
    OnClick := @SerialButton1Click;
  end;
  

  SerialButton.TabOrder := 5;
end;
end;

procedure SerialButton1Click(Sender: TObject);
var ErrorCode: Integer;
begin
  ShellExec('open', ExpandConstant('{src}\Redist\KeyGen.exe'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure InitializeWizard();
begin
  CreatePages();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = SerialPage.ID then
    SerialPartOnChange(nil);
    SerialButton.Hide;
if CurPageID = SerialPage.ID then begin
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Electronic Arts\EA GAMES\Battlefield 2142\ergc', '', 'x9392' + SerialEdit[0].Text + '' + SerialEdit[1].Text + '' + SerialEdit[2].Text + '' + SerialEdit[3].Text + '' + SerialEdit[4].Text);
 SerialButton.Show;
end;
end;
 

Adil

Старожил
Всем добрый вечер у меня вопрос как Wizard Form сделать Transparant=true для текста

заранее спасибо:)
 

Devils Night

Ветеран
Здорова форумчане!
В общем такой вопрос: Как сделать определение устройства в инсталяторе?

По удалял нафиг всё что можно было удалить методом тыка, по другому и не умею
Код:
[ Code]
//-------------------- Ultimate Test Black - Начало --------------------\\
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;

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

// Проверка версии Windows


const
  DISPLAY_DEVICE_PRIMARY_DEVICE = 4;        //
  oneMB = 1024*1024;                        //
//  NeedVideoRAM = 256;                       //    Видеоадаптер


var
  InfoPage: TWizardPage;
  TopText, BottomText: TNewStaticText;
  ChangeText: Boolean;
  VideoPanel, VideoRAMPanel: 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';

// Дополнить число до кратного 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
  //************************************* Видеоадаптер - Начало *************************************
  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
  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
  //*************************************** Видеоадаптер - Конец **************************************
end;

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

  GetWindowsVersionEx(Version)

  // Операционная система:


  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 ', '')





  // Видеокарта:
  VideoRAMPanel.Font.Color := clGreen

  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.Font.Color := clRed
      ChangeText := True
     end
//  if (DeviceValue/oneMB < NeedVideoRAM) then
     begin
      VideoRAMPanel.Font.Color := clRed
       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)'


  if ChangeText = True then
    begin
      TopText.Top := 0
      TopText.Caption := 'Устройство не най'
      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 InitializeWizard();
begin
  InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
                                          'Программа установки обнаружила следующие наобходимые компоненты.')
  CreateCheckForm()  // Создание объектов TMemo, в которых будет выводится информация о системе
  UpdateInfo()  // Обновление информации о системе
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = InfoPage.ID then UpdateInfo()  // Обновление информации о системе
end;
//-------------------- Ultimate Test Black - Конец --------------------\\
Удаляю дальше, удаляется всё,
а мне нужно чтобы было определение только Название, например Nvidia и Модель, например 6800, выглядело как текст, и без рамок, как будто текст написан на инсталяторе, и чтобы висело на всех страницах, ну или на первой внизу.

Нужно чтоб выглядело так:
 
Последнее редактирование:

KorwiN

Новичок
Devils Night, держи.
Писал на скорую руку - подправишь сам
Там много лишнего кода - уберешь его. Там остался код на определние не только видяхи, но и всего остального(звук, ос, проц)
Т.к. с тегами не дружу то вот:)
Залил сюда код в iss формате.
http://rghost.ru/37444208
 
Последнее редактирование:

Devils Night

Ветеран
KorwiN,
Выдаёт:
Код:
Строка 94:
Column 37:
[ISPP] Undeclared identifier "Processor"
Добавил ему что он хотел
Код:
#define System "Система"
#define Processor "Процессор"
#define VideoCard "Видеоадаптер"
#define Audio "Звуковая карта"
#define RamMemory "Объём памяти"
#define PageFile "Файл подкачки"
Потом выдало
Код:
Строка 99:
Column 26:
Syntax error.
в
Код:
  HWREQ_NEED_PROC_FREQ = {#Processor};
  HWREQ_NEED_VIDEO_FREQ = {#VideoCard};
  HWREQ_NEED_RAM_FREQ = {#RamMemory};
  HWREQ_NEED_SYSTEM = '{#System}';
добавил ', т.е
Код:
  HWREQ_NEED_PROC_FREQ = '{#Processor}';
  HWREQ_NEED_VIDEO_FREQ = '{#VideoCard}';
  HWREQ_NEED_RAM_FREQ = '{#RamMemory}';
  HWREQ_NEED_SYSTEM = '{#System}';
и уже выдало
Код:
Строка 237:
Column 65:
Type mismatch.
что теперь то ему надо? Просто я в такич вещах очень плохо волоку, кое что сообразил, а дпльше в ступор встал.
 
Последнее редактирование:

YURSHAT

Тех. админ
Администратор
Devils Night, простейший пример с использованием get_hw_caps.dll.
[SOURCE="iss"][Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputBaseFilename=setup

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "get_hw_caps.dll"; Flags: dontcopy

Код:
var
  VideoCardLabel: TLabel;

function GetVideoCardName(): PChar; external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';

procedure RedesignWizardForm;
begin
  VideoCardLabel := TLabel.Create(WizardForm);
  with VideoCardLabel do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(10), ScaleY(330), ScaleX(31), ScaleY(13));
    Caption := 'Видеоадаптер: ' + GetVideoCardName;
  end;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;[/SOURCE][/SPOILER]
 

Вложения

Devils Night

Ветеран
О YURSHAT, свет в конце тунеля, спасибо большущее :respect:, я уж со счёта сбился который раз уже справку листаю, хотел было про функции спросить, вбил в поиск get_hw_caps.dll, 10 секунд и нашёл этот
[SOURCE="iss"]
[Setup]
AppName=System Check
AppVerName=System Check
DefaultDirName={pf32}\System Check

[Files]
Source: C:\Program Files\Inno Setup 5\get_hw_caps.dll; Flags: dontcopy

Код:
 function GetVideoCardName(): PChar; 
 external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall'; 
  
 function GetSoundCardName(): PChar; 
 external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall'; 
  
 function DetectHardware(): Integer; 
 external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall'; 
  
 function GetHardDriveFreeSpace(hdd: integer): Integer; 
 external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall'; 
  
 function GetHardDriveName(hdd: integer): PChar; 
 external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall'; 
  
 function GetHardDriveTotalSpace(hdd: integer): Integer; 
 external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall'; 
  
 function GetHardDrivesCount(): Integer; 
 external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall'; 
  
 function GetSoundCards(): Integer; 
 external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall'; 
  
 function GetSystemPage(): Integer; 
 external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall'; 
  
 function GetSystemPhys(): Integer; 
 external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall'; 
  
 function GetVidMemLocal(): Integer; 
 external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall'; 
  
 function GetVidMemNonLocal(): Integer; 
 external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall'; 
  
 function GetVideoCardDev(): Integer; 
 external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall'; 
  
 function GetVideoCardVen(): Integer; 
 external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall'; 
  
 function CheckSystemPage(PreviousPageId: Integer): Integer; 
 var Page: TWizardPage; 
     ProcessorName:string; 
     Processor,ProcessorNamePanel,VideoCardNamePanel,VideoCardPanel,AudioCardNamePanel,RAMTotalPanel,PageFileTotalPanel,AudioCardPanel,RAMPanel,PageFilePanel: TMemo; 
     ProcessorMHZ: Cardinal; 
     StaticText,StaticText2:TNewStaticText; 
     oneGhz,oneMB,Rest:Integer; 
  
 begin 
 RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0','ProcessorNameString', ProcessorName); 
 RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0','~MHz', ProcessorMHZ); 
 GetVidMemLocal; 
 GetSoundCards; 
 oneGhz:=1000; 
 Rest:=ProcessorMHZ - oneGhz; 
 oneMB:=1024*1024; 
  
 Page := CreateCustomPage(PreviousPageId,'Апаратное Обоспечение','Программа установки обнаружила следуюшие необходимые компоненты'); 
  
 StaticText:=TNewStaticText.Create(Page); 
 with StaticText do 
 begin 
 Parent:=Page.Surface; 
 Caption:='Все компоненты удовлетворяют требованиям игры.'; 
 Left:=0; 
 Top:=5; 
 AutoSize:=True; 
 end; 
  
 StaticText2:=TNewStaticText.Create(Page); 
 with StaticText2 do 
 begin 
 Parent:=Page.Surface; 
 Caption:='Когда Вы будуте готовы продолжить установку, нажмите «Далее»' 
 Left:=0; 
 Top:=220; 
 AutoSize:=True; 
 end; 
  
 Processor := TMemo.Create(Page); 
 with Processor do 
 begin 
 Parent := Page.Surface; 
 Lines.Add(ExpandConstant(' Процессор')); 
 Color := -16777194; 
 Left := ScaleX(0); 
 Top := ScaleY(32); 
 Width := ScaleX(104); 
 Height := ScaleY(21); 
 ReadOnly := True; Cursor := crArrow; 
 end; 
  
 ProcessorNamePanel := TMemo.Create(Page); 
 with ProcessorNamePanel do 
 begin 
 Parent := Page.Surface; 
 Lines.Add(' '+ProcessorName+'  '+IntToStr(ProcessorMHZ/oneGhz)+','+IntToStr(Rest)+'GHz'+' '+'@'+IntToStr(ProcessorMHZ)+'MHz'); 
 Left := ScaleX(109); 
 Top := ScaleY(32); 
 Width := ScaleX(304); 
 Height := ScaleY(21); 
 Color := $CCFFCC; 
 ReadOnly := True; Cursor := crArrow; 
 end; 
  
 //частота процессора// 
 if ProcessorMHZ<1000 then 
 begin 
 ProcessorNamePanel.Color:=$CCFFCC; 
 StaticText.Caption:='Компоненты, выделенные красным не удовлетворяют требованиям игры.'; 
 end; 
  
 VideoCardPanel:=TMemo.Create(Page); 
 with VideoCardPanel do 
 begin 
 Parent := Page.Surface; 
 Lines.Add(ExpandConstant(' Видеоадаптер')); 
 Color := -16777194; 
 Left:=ScaleX(0); 
 Top:=Processor.Top+27; 
 Width:=ScaleX(104); 
 Height:=ScaleY(21); 
 ReadOnly := True; Cursor := crArrow; 
 end; 
  
 VideoCardNamePanel:=TMemo.Create(Page); 
 with VideoCardNamePanel do 
 begin 
 Parent:=Page.Surface; 
 Lines.Add(' '+GetVideoCardName+'  '+IntToStr(GetVidMemLocal/oneMB)+' MB'); 
 Left:=ScaleX(109); 
 Top:=VideoCardPanel.Top; 
 Width:=ScaleX(304); 
 Height:=ScaleY(21); 
 Color := $CCFFCC; 
 ReadOnly := True; Cursor := crArrow; 
 end; 
  
 //видео память// 
 if GetVidMemLocal<63500000 then //64MB 
 begin 
 StaticText.Caption:='Компоненты, выделенные красным не удовлетворяют требованиям игры.'; 
 VideoCardNamePanel.Color:=$CCFFCC; 
 end 
  
  
 AudioCardPanel:=TMemo.Create(Page); 
 with AudioCardPanel do 
 begin 
 Parent := Page.Surface; 
 Lines.Add(ExpandConstant(' Звуковая карта')); 
 Color := -16777194; 
 Left := ScaleX(0); 
 Top:=VideoCardPanel.Top+27; 
 Width := ScaleX(104); 
 Height := ScaleY(21); 
 ReadOnly := True; Cursor := crArrow; 
 end; 
  
 AudioCardNamePanel:=TMemo.Create(Page); 
 with AudioCardNamePanel do 
 begin 
 Parent:=Page.Surface; 
 Lines.Add(' '+GetSoundCardName); 
 Left:=ScaleX(109); 
 Top:=AudioCardPanel.Top; 
 Width:=ScaleX(304); 
 Height:=ScaleY(21); 
 Color := $CCFFCC; 
 ReadOnly := True; Cursor := crArrow; 
 end; 
  
 //аудио// 
 if 
 GetSoundCards=0 then 
 begin 
 StaticText.Caption:='Компоненты, выделенные красным не удовлетворяют требованиям игры.'; 
 with 
 AudioCardNamePanel do 
 begin 
 Color:=$CCFFCC; 
 Lines.Add('Не обнаружено'); 
 ReadOnly := True; Cursor := crArrow; 
 end; 
 end; 
  
 RAMPanel:=TMemo.Create(Page); 
 with RAMPanel do 
 begin 
 Parent := Page.Surface; 
 Lines.Add(ExpandConstant(' ОЗУ')); 
 Color := -16777194; 
 Left := ScaleX(0); 
 Top:=AudioCardPanel.Top+27; 
 Width := ScaleX(104); 
 Height := ScaleY(21); 
 ReadOnly := True; Cursor := crArrow; 
 end; 
  
 RAMTotalPanel:=TMemo.Create(Page); 
 with RAMTotalPanel do 
 begin 
 Parent:=Page.Surface; 
 Lines.Add(' '+IntToStr(GetSystemPhys+1) +' MB'); 
 Left:=AudioCardNamePanel.Left; 
 Top:=RAMPanel.Top; 
 Width:=AudioCardNamePanel.Width; 
 Height:=ScaleY(21); 
 Color := $CCFFCC; 
 ReadOnly := True; Cursor := crArrow; 
 end; 
  
 //оперативка// 
 if GetSystemPhys+1<256 then 
 begin 
 RAMTotalPanel.Color:=$CBC0FF; 
 StaticText.Caption:='Компоненты, выделенные красным не удовлетворяют требованиям игры.'; 
 end; 
  
 PageFilePanel:=TMemo.Create(Page); 
 with PageFilePanel do 
 begin 
 Parent := Page.Surface; 
 Lines.Add(ExpandConstant(' Файл подкачки')); 
 Color := -16777194; 
 Left := ScaleX(0); 
 Top:=RAMPanel.Top+27; 
 Width := ScaleX(104); 
 Height := ScaleY(21); 
 ReadOnly := True; Cursor := crArrow; 
 end; 
  
 PageFileTotalPanel:=TMemo.Create(Page); 
 with PageFileTotalPanel do 
 begin 
 Parent:=Page.Surface; 
 Lines.Add(' '+IntToStr(GetSystemPage)+' MB'); 
 Left:=RAMTotalPanel.Left; 
 Top:=PageFilePanel.Top; 
 Width:=RAMTotalPanel.Width; 
 Height:=ScaleY(21); 
 Color := $CCFFCC; 
 ReadOnly := True; Cursor := crArrow; 
 end; 
  
 //файл подкачки// 
 if GetSystemPage<756 then 
 begin 
 PageFileTotalPanel.Color:=$CCFFCC; 
 StaticText.Caption:='Компоненты, выделенные красным не удовлетворяют требованиям игры.'; 
 end; 
  
 Result := Page.ID; 
 end; 
  
 procedure InitializeWizard(); 
 begin 
 CheckSystemPage(wpWelcome); 
 end;[/SOURCE][/SPOILER] [URL="http://forum.ru-board.com/topic.cgi?forum=5&topic=4801&start=1960"]от сюда[/URL], теперь буду исследовать что к чему.
[ADMIN="YURSHAT"]И используй библиотеку которую я прикрепил, а именно версию 1.003[/ADMIN]
 

Packer

Мимокрокодил
Помогите.

Помогите со скриптом при выделение части в скрипте жму DEL что бы удалить ну проблема пишет вот что ---
[ADMIN="Shegorat"]Тебе же сказали - скриншот под спойлер. На первый раз устное предупреждение.[/ADMIN]
 
Последнее редактирование:

ARS_23

R.I.P
Проверенный
Packer,
тебе нужно убрать страницу выбора папки в меню пуск?
если да, то проще всего так:
Код:
[Setup]
DisableProgramGroupPage=True
 

David.D.Rocco

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

Packer

Мимокрокодил
ARS_23,
Мне нужно удалить белую часть оставить только текст и батоны что бы картинка была видна на весь инсталятор)
David.D.Rocco,
переместить её то же нельзя
 

LexBell

Борода
Супер модератор
переместить её то же нельзя
Можно подлежащий контрол скрыть.
Код:
WizardForm.InnerNotebook.Hide;
но тебе это не поможет, к сожалению. Судя по вопросу, ты не знаешь, как управлять положением контролов и предложение поменять родителя текстов и кнопок поставит тебя в тупик... Единственное, чем можно помочь - сделать все за тебя, но это не помощь, а исключительно вред.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху