Свободное общение

Правила данные были приняты после моей регистрации..
Раньше я только читал и переписывался в лс.. в посты не лез ибо не доходили руки до самого Inno Setup
Хотя часть ресурсов всё же доступно и скачиваю, использую, пробую проверяю стараюсь разобраться.. без DLL тут вообще делать нечего, приходится обращаться к сторонним ресурсам с этими dll либо потрошить чужие репаки, что тоже не очень хорошо.

К тому же на самом форуме можно скачивать данные DLL вместе с кодом и примерами, что напрочь расходится с правилами.


P.S. Почему правила работают двояко ? Заходим на данный пост и скачиваем от туда Готовую Сборку Прототипа 2 https://krinkels.org/threads/skript-prototype-2.3148/ Правим что написано и получаем готовый мануал.. Но проку от него ,если у вас не хватает мозгов самим разобраться и сделать с нуля, потому что нет доступа к библиотекам на самом форуме.. но есть отдельные билды готовые со встроенными библиотеками и рабочими скриптами, тогда к чему эти правила?
 

Вложения

  • 1627830317748.png
    1627830317748.png
    27 KB · Просмотры: 30
Последнее редактирование:
AlexZetCrow написал(а):
Почему правила работают двояко?
AlexZetCrow, несколько причин:
  • Некоторые пользователи не желают оформить свои "наработки" в виде ресурса.
  • Правила были введены недавно, а запрета скачивать из "Прикрепленных файлов" нет. Может и введут.
  • К новым примерам пользователи порой вынуждены прикреплять инструменты и код с задекларированными функциями, так как порой познаний собеседников недостаточно.
  • Может еще чего...
Ссылаетесь на двоякость правил, а созданная Вами тема поменяла суть вопроса уже несколько раз. Может переименовать ее: "Хочу знать абсолютно все и обо всем как можно скорее". Так не бывает. Я такой же мало знающий, но считаю: "В чужой монастырь со своим уставом не ходят". Отбросим инфантильность и нарциссизм, было же сказано об новых правилах: "Это вынужденная мера и она не обсуждается". Может связано с безопасностью форума, ddos-угрозами, сервер платный, а может еще чего. Если нравиться форум, не вижу преград взять пропуск за 3$, да я на транспорт трачу больше в день. У меня были права на скачивания, но решил приобрести все равно и чтобы Вы там не думали про меня после этого. Может слышали про бесплатные проекты, которые хочется поддержать (Inno Setup, Mp3tag, Blender, AIMP, так и данный форум доступен бесплатно, нужна лишь Ваша активность (10 - симпатий).
 
Последнее редактирование:
AlexZetCrow, несколько причин:
  • Некоторые пользователи не желают оформить свои "наработки" в виде ресурса.
  • Правила были введены недавно, а запрета скачивать из "Прикрепленных файлов" нет. Может и введут.
  • К новым примерам пользователи порой вынуждены прикреплять инструменты и код с задекларированными функциями, так как порой познаний собеседников недостаточно.
  • Может еще чего...
Ссылаетесь на двоякость правил, а созданная Вами тема поменяла суть вопроса уже несколько раз. Может переименовать ее: "Хочу знать абсолютно все и обо всем как можно скорее". Так не бывает. Я такой же мало знающий, но считаю: "В чужой монастырь со своим уставом не ходят". Отбросим инфантильность и нарциссизм, было же сказано об новых правилах: "Это вынужденная мера и она не обсуждается". Может связано с безопасностью форума, ddos-угрозами, сервер платный, а может еще чего. Если нравиться форум, не вижу преград взять пропуск за 3$, да я на транспорт трачу больше в день. У меня были права на скачивания, но решил приобрести все равно и чтобы Вы там не думали про меня после этого. Может слышали про бесплатные проекты, которые хочется поддержать (Inno Setup, Mp3tag, Blender, AIMP, так и данный форум доступен бесплатно, нужна лишь Ваша активность (10 - симпатий).
Простите, просто половина туториалов без DLL никак вообще не реализуемы ((
А активность с меня не очень, недостаток знаний в программировании.

Про плату не знал, будет возможность внесу свои 3 бакса, а вы не в курсе как решить проблему ?
Я смог всё же отыскать системные требования
Но как быть, как можно проигнорировать запрет кнопки далее?

Код взят из FAQ за авторством SBalykov
У меня кнопка горит серой, не могу прожать.
Просто хотел составить сведения о системе для пользователя в соответствии с минимальными требованиями, чтоб пользователь был в курсе о проблемах или недостатках системы и брал на себя риск дальнейшей установки.
Код:
#define NeedSystem = "5.1.3";

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

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

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
  DISPLAY_DEVICE_PRIMARY_DEVICE = 4;
  oneMB = 1024*1024;
  NeedMHz = 1800;
  NeedVideoRAM = 128;
  NeedSoundCard = 'Creative X-Fi';
  NeedMB = 512;
  NeedPageFile = 1024;

type
#ifdef UNICODE
  PChar = PAnsiChar;
#else
  AnsiChar = Char;
#endif

THardwareRequirementSnapShot = record
  WinName, WinBits, SPack: String;
  WinVer: TWindowsVersion;
end;

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;

TMemoryStatusEx = record
  dwLength, dwMemoryLoad: DWord;
  LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,
  LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,
  LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,
  HiAvailExtendedVirtual: Integer;
end;

var
  InfoPage: TWizardPage;
  TopText, BottomText: TNewStaticText;
  ChangeText: Boolean;
  SystemPanel, ProcessorPanel, VideoPanel,
  AudioPanel, RAMPanel, PageFilePanel: TMemo;
  SystemVersionPanel, ProcessorMHzPanel, VideoRAMPanel,
  AudioNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  lpCaps: TMixerCaps;
  MemoryEx: TMemoryStatusEx;
  i, n, errCode: Integer;
  Keys: TArrayOfString;
  DeviceValue: Cardinal;
  lpDisplayDevice: PDisplay_Device;
  SystemName, DeviceName, SoundName, DeviceKey, String: String;
  DeviceNamed: AnsiString;
  HWREQ: THardwareRequirementSnapShot;

function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean; external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
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 'CreateDC{#A}@GDI32 stdcall';
function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean; external 'EnumDisplayDevices{#A}@user32.dll stdcall';
function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TMixerCaps; uSize: LongInt): LongInt; external 'mixerGetDevCaps{#A}@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;

/// Размерность выражения
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 NumToStr(Float: Extended): string;
begin
  Result:= Format('%.2n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
  SetLength(Result, Length(Result)-1);
end;

/// Конвертация чисел Mb, Gb, Tb
function MbOrTb(Byte: Extended): string;
begin
if Byte < 1024 then Result:= NumToStr(Byte) + ' MB' else
if Byte/1024 < 1024 then
  Result:= NumToStr(Byte/1024) + ' GB' else
  Result:= NumToStr(Byte/oneMB) + ' TB';
end;

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

/// Информация о версии сервис пака
function DecodeSystemStr(Str: String): TWindowsVersion;
var tmp, s: String;
begin
  tmp := str;
  s := Copy(tmp, 1, Pos('.', tmp)-1);
  Delete(tmp, 1, Pos('.', tmp));
if (s <> '') then Result.Major := StrToInt(s);
  s := Copy(tmp, 1, Pos('.', tmp)-1);
  Delete(tmp, 1, Pos('.', tmp));
if (s <> '') then Result.minor := StrToInt(s);
  s := Copy(tmp, 1, Pos('.', tmp)-1);
  Delete(tmp, 1, Pos('.', tmp));
if (s <> '') then Result.Build:= StrToInt(s);
  s := Copy(tmp, 1, Pos('.', tmp)-1);
  Delete(tmp, 1, Pos('.', tmp));
if (s <> '') then Result.ServicePackMajor := StrToInt(s);
end;

/// Информация о версии системы
function HWREQ_CompareWindows: Boolean;
var tmp: TWindowsVersion;
begin
  Result := False;
  tmp := DecodeSystemStr('{#NeedSystem}');
if HWREQ.WinVer.NTPlatform then begin
if (tmp.Major <= HWREQ.WinVer.Major) then
if (tmp.Minor <= HWREQ.WinVer.Minor) then
if (tmp.ServicePackMajor <= HWREQ.WinVer.ServicePackMajor) then
  Result := True;
end;
end;

/// Проверка процессоров
function CheckCPU(NeedMHz: Integer): Boolean;
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 SearchCardName(const DeviceName: String): String;
begin
for i:= 0 to 9 do
  RegQueryStringValue(HKLM,'SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\000'+IntToStr(i),'AdapterDesc', DeviceName);
  Result := DeviceName;
end;

/// Модель Установленной Видеокарты
function CardDeviceName: Boolean;
begin
  SearchCardName(DeviceName);
  Result := (Pos('AMD', DeviceName) <> Pos('Gigabyte', DeviceName)) or (Pos('NVIDIA', DeviceName) <> Pos('MSI', DeviceName)) or (Pos('ASUS', DeviceName) <> Pos('Palit', DeviceName));
end;

// Сведения о Производителе Компьютера
function SystemManufacturer(SManufacturer: String): String;
begin
  RegQueryStringValue(HKLM, 'SYSTEM\CurrentControlSet\Control\SystemInformation', 'SystemManufacturer', SManufacturer);
  Result := SManufacturer;
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 InitializeWizard();
begin
  InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
'Программа установки обнаружила следующие наобходимые компоненты.');
with InfoPage do begin
  ChangeText := False

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

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

SystemPanel := TMemo.Create(nil)
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(nil)
with SystemVersionPanel do begin
  Alignment := taLeftJustify
  Parent := InfoPage.Surface
  Left := ScaleX(104)
  Top := SystemPanel.Top
  Width := ScaleX(310)
  Height := ScaleY(22)
  ReadOnly := True
end;

/// Информации о системе из реестра
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'ProductName', SystemName) then
  HWREQ.WinName := DelSP(SystemName);
  GetWindowsVersionEx(HWREQ.WinVer);

/// Информации о битности системы
if IsWin64 then
  HWREQ.WinBits := 'x64' else
  HWREQ.WinBits := 'x86';

/// Вывод информации о системе
if HWREQ.WinVer.ServicePackMajor > 0 then
  SystemVersionPanel.Text := ' ' + HWREQ.WinName+' SP'+IntToStr(HWREQ.WinVer.ServicePackMajor)+' '+HWREQ.WinBits+
' ('+IntToStr(HWREQ.WinVer.Major)+'.'+IntToStr(HWREQ.WinVer.Minor)+
'.'+IntToStr(HWREQ.WinVer.Build)+'), '+SystemManufacturer('SManufacturer') else
  SystemVersionPanel.Text := HWREQ.WinName+' '+HWREQ.WinBits+' ('+IntToStr(HWREQ.WinVer.Major)+
'.'+IntToStr(HWREQ.WinVer.Minor)+'.'+IntToStr(HWREQ.WinVer.Build)+
'); '+SystemManufacturer('SManufacturer');
  SystemVersionPanel.Color := $CCFFCC
if IntToStr(HWREQ.WinVer.Major)+'.'+IntToStr(HWREQ.WinVer.Minor)+'.'+IntToStr(HWREQ.WinVer.ServicePackMajor) < '{#NeedSystem}'
then begin
  SystemVersionPanel.Color := $CCCCFF
  ChangeText := True
end;

/// Процессор:
ProcessorPanel := TMemo.Create(nil)
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(nil)
with ProcessorMHzPanel do begin
  Alignment := taLeftJustify
  Parent := InfoPage.Surface
  Left := ScaleX(104)
  Top := ProcessorPanel.Top
  Width := ScaleX(310)
  Height := ScaleY(22)
  ReadOnly := 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 := 'Процессоры';

/// Видеокарта:
VideoPanel := TMemo.Create(nil)
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(nil)
with VideoRAMPanel do begin
  Alignment := taLeftJustify
  Parent := InfoPage.Surface
  Left := ScaleX(104)
  Top := VideoPanel.Top
  Width := ScaleX(310)
  Height := ScaleY(22)
  ReadOnly := True
end;

  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);
  StringChange(DeviceKey, '\Registry\Machine\', '');
  errCode := 1;
  DeviceValue := 0;

if CardDeviceName then begin
for i := 0 to 9 do
if RegQueryBinaryValue(HKLM,'SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\000'+IntToStr(i),'HardwareInformation.MemorySize',DeviceNamed) then
end else
if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceNamed) then
for n := 1 to Length(DeviceNamed) do begin
  DeviceValue := DeviceValue + Ord(DeviceNamed[n])*errCode;
  errCode := errCode*$100;
  end else
if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then
else
if CardDeviceName then begin
for i := 0 to 9 do
RegQueryDWordValue(HKLM,'SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\000'+IntToStr(i),'HardwareInformation.MemorySize',DeviceValue);
end 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 CardDeviceName then
  VideoRAMPanel.Text := DelSp(DeviceName) + ', ' + IntToStr(DeviceValue/oneMB) + ' Mb' else
  VideoRAMPanel.Text := DelSp(DeviceName) + ' (Integrated), ' + MbOrTb(DeviceValue/oneMB)
  else begin
if DeviceValue = 0 then
  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)';

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

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

AudioNamePanel.Color := $CCFFCC;
for errCode := 0 to mixerGetNumDevs do begin
  mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps));
  SoundName := ' '
for n := 0 to 31 do
  SoundName := SoundName + lpCaps.sName[n];
  Delete(SoundName, Pos(Chr(0), SoundName), 31);
  Delete(SoundName, Pos(' [', SoundName), 31);
  StringChange(SoundName, 'SB ', 'Creative ');
  Delete(SoundName, Pos(' Audio', SoundName), 31);
  SetArrayLength(Keys, errCode);
if errCode > 0 then Keys[errCode-1] := SoundName;
end;

/// Вывод информации о звуковой карте
if GetArrayLength(Keys) > 1 then begin
  AudioPanel.Text := 'Звуковые карты';
  AudioNamePanel.Text := '';
for n := 1 to GetArrayLength(Keys) do
  AudioNamePanel.Text := AudioNamePanel.Text + Keys[n-1];
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 + ')';

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

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

  RAMTotalPanel.Color := $CCFFCC;
if not CheckMemorySize(NeedMB) then begin
  RAMTotalPanel.Color := $CCCCFF;
  ChangeText := True;
end;

/// Вывод информации об установленной памяти
RAMTotalPanel.Text := ' ' + MbOrTb(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB) + ' всего, ' +
MbOrTb((Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys) -
Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys))/oneMB) + ' используется, ' +
MbOrTb(Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB) + ' свободно';

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

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

/// Вывод информации о файле подкачки
  PageFileTotalPanel.Color := $CCFFCC;
  PageFileTotalPanel.Text := ' ' + MbOrTb((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys))/oneMB) + ' всего, ' +
MbOrTb((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
Size64(MemoryEx.HiAvailPageFile, MemoryEx.LoAvailPageFile))/oneMB) + ' занято системным кэшем';
if Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB < NeedPageFile then begin
  PageFileTotalPanel.Color := $CCCCFF;
  ChangeText := True;
  end;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = InfoPage.ID then begin
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;
end;

И ещё вопрос, как связаны функции, можно ли объединять функции в одну, сильно ли критично изменение названий функций или так не работает? Ругается на одинаковые GetDeviceCaps

(Код из проверки системных требования)
IntToStr(GetSystemMetrics(1)) + ' (' + IntToStr(GetDeviceCaps(CreateDC('DISPLAY','','',0),14) *
GetDeviceCaps(CreateDC('DISPLAY','','',0),12)) + ' bit)';

Код из Splash (пришлось изменить GetDeviceCaps на GetDeviceCaps2 боюсь что-то испортил)


function GetDC(HWND: hWnd): HDC; external 'GetDC@user32.dll stdcall';
function GetDeviceCaps2(HDC: HDC; Index: Integer): Integer; external 'GetDeviceCaps@gdi32.dll stdcall';
function ReleaseDC(HWND: hWnd; DC: HDC): Integer; external 'ReleaseDC@user32.dll stdcall';

function GetMonitorInfo: TPoint;
var
DC: HDC;
Screen, null: TPoint;
begin
Result:=null;
DC:=GetDC(MainForm.Handle);
Screen.x:=GetDeviceCaps2(DC, 08);
Screen.y:=GetDeviceCaps2(DC, 10);
if (Screen.x <> 0) and (Screen.y <> 0) then Result:=Screen;
ReleaseDC(MainForm.Handle, DC);
end;
 

Вложения

  • 1627838056843.png
    1627838056843.png
    89.6 KB · Просмотры: 30
Нашел решение
Вкратце из предыдущего скажу так

if IntToStr(HWREQ.WinVer.Major)+'.'+IntToStr(HWREQ.WinVer.Minor)+'.'+IntToStr(HWREQ.WinVer.ServicePackMajor) > '{#NeedSystem}'
Тут есть условия функции сумма меньше больше либо равно заданному числу, так вот!
Я смог разузнать как исправить ситуацию без доступа к необходимой установки, ругался на ОС

Изначально в функции было это значение
if IntToStr(HWREQ.WinVer.Major)+'.'+IntToStr(HWREQ.WinVer.Minor)+'.'+IntToStr(HWREQ.WinVer.ServicePackMajor) < '{#NeedSystem}'
< '{#NeedSystem}' означает что заданная вами ОС должна быть больше всегда! Что в корне не верно.. Хотя может касаться старых игр, которые на новую ОС не ставится.
#define NeedSystem = "5.1.3"; оставил без изменений

В общем:
= '{#NeedSystem} - Строго под заданную ОС
< '{#NeedSystem} - Только для старых ОС
>'{#NeedSystem} - Только для новых ОС
 
AlexZetCrow, нет смысла изобретать велосипед, закрепил пример, там убраны строки с изменением параметра Enabled для для NextButton, а также добавлен модуль для создание Splash заставки средствами WinApi (без Dll автор по моему - El Sanchez). Для создания прозрачных Splash необходимо BMP c альфа каналом и глубиной цвета 32-бит, а также с черным фоном (пример там же). Удачи.
 

Вложения

  • Exp.7z
    Exp.7z
    16.2 KB · Просмотры: 14
Ну я вроде подправил функцию и заработал код ))
Всё равно спасибо, ваш метод явно лучше.
Сейчас разбираюсь со сжатием и распаковкой.. Если есть варианты как сделать, скажите пожалуйста как поэтапно сделать Бины архиватором отдельной подставив их уже в сам код Inno Setup
 
AlexZetCrow, думаю "Бины" - ".bin" файлы создаваемые Inno Setup, то никак (ИМХО). Стоит посмотреть в сторону ISDone (не знаю доступен ли он) и паковать в архивы (7zip, WinRar, FreeArc).
 
AlexZetCrow, думаю "Бины" - ".bin" файлы создаваемые Inno Setup, то никак (ИМХО). Стоит посмотреть в сторону ISDone (не знаю доступен ли он) и паковать в архивы (7zip, WinRar, FreeArc).

Имею в виду Bin созданные 7zip архиватором.

ISDone есть вместе сборкой Прототип скачал. там всё имеется, но ничего не понятно кроме кода, где есть описание о порядке установки бинов, FILES пункт не содержит компонентов, как я понимаю отдельные компоненты надо будет как-то по иному прописывать при использовании ISDone
Также имеется прога для повторного сжатия архивов скачивал отдельно.
 
FILES пункт не содержит компонентов, как я понимаю отдельные компоненты надо будет как-то по иному прописывать при использовании ISDone
Можно и в пункт files прописывать, если они не большого обьема.
 
также добавлен модуль для создание Splash заставки средствами WinApi (без Dll автор по моему - El Sanchez). Для создания прозрачных Splash необходимо BMP c альфа каналом и глубиной цвета 32-бит,
По моему лучше уж dll использовать и подсовывать png без геморроя с форматом. Библиотека для splash заставки все равно весит ни о чем, на весе установки не скажется никак.
 
По моему лучше уж dll использовать и подсовывать png без геморроя с форматом. Библиотека для splash заставки все равно весит ни о чем, на весе установки не скажется никак.

Смотри такой вопрос, как можно менять иконки установленных уже папок? Ну или в процессе установки подкидывать свои иконки к этим создаваемым папкам?

Кстати по архивам, не выйдет, разве что отдельно компоненты и то не все можн запихнуть в [FILES]

https://krinkels.org/threads/faq-po-inno-setup.7/ Уже пробовал как он zxcvvcxz и выходит только одна папка, группа всё равно не подкрашивается, пробовал подставлять, ярлыки отдельные указать могу, остальное нет. Помогите пожалуйста
 
Кстати по архивам, не выйдет, разве что отдельно компоненты и то не все можно запихнуть в [FILES]
там можно больше, чем кажется - вы просто не особо разбираетесь.
Смотри такой вопрос, как можно менять иконки установленных уже папок? Ну или в процессе установки подкидывать свои иконки к этим создаваемым папкам?
подбрасывать во время установки и на PostInstall обработке уже делать пропись отображения иконки для конкретной папки, если она существует.
 
там можно больше, чем кажется - вы просто не особо разбираетесь.

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

Ну я разобрался, просто вписав ту же иконку, что используется при создании Setup
Тот же метод сработал.. просто нужно было, чтоб имена совпадали, а иконки можно было разные включить.

Ещё такой вопрос, как вписать предупредительное сообщение с ДА НЕТ при не соответствии с минимальными требованиями?

Минимальные требования я брыл с FAQ и там есть одна загвоздка, если не соответствует, то не высвечивается кнопка ДАЛЕЕ
Думал включить каким-нибудь образом ветку с предупредительным сообщением для пользователя и возможностью продолжить установку.


Брал код у SBalykov

Помогите добавить предупредительное сообщение позволяющее сделать кнопку ДАЛЕЕ активной. Спасибо


Код:
Code:
#define NeedSystem = "5.1.3";

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.

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

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
  DISPLAY_DEVICE_PRIMARY_DEVICE = 4;
  oneMB = 1024*1024;
  NeedMHz = 1800;
  NeedVideoRAM = 128;
  NeedSoundCard = 'Creative X-Fi';
  NeedMB = 512;
  NeedPageFile = 1024;

type
#ifdef UNICODE
  PChar = PAnsiChar;
#else
  AnsiChar = Char;
#endif

THardwareRequirementSnapShot = record
  WinName, WinBits, SPack: String;
  WinVer: TWindowsVersion;
end;

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;

TMemoryStatusEx = record
  dwLength, dwMemoryLoad: DWord;
  LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,
  LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,
  LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,
  HiAvailExtendedVirtual: Integer;
end;

var
  InfoPage: TWizardPage;
  TopText, BottomText: TNewStaticText;
  ChangeText: Boolean;
  SystemPanel, ProcessorPanel, VideoPanel,
  AudioPanel, RAMPanel, PageFilePanel: TMemo;
  SystemVersionPanel, ProcessorMHzPanel, VideoRAMPanel,
  AudioNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
  lpCaps: TMixerCaps;
  MemoryEx: TMemoryStatusEx;
  i, n, errCode: Integer;
  Keys: TArrayOfString;
  DeviceValue: Cardinal;
  lpDisplayDevice: PDisplay_Device;
  SystemName, DeviceName, SoundName, DeviceKey, String: String;
  DeviceNamed: AnsiString;
  HWREQ: THardwareRequirementSnapShot;

function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean; external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
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 'CreateDC{#A}@GDI32 stdcall';
function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean; external 'EnumDisplayDevices{#A}@user32.dll stdcall';
function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TMixerCaps; uSize: LongInt): LongInt; external 'mixerGetDevCaps{#A}@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;

/// Размерность выражения
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 NumToStr(Float: Extended): string;
begin
  Result:= Format('%.2n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
  SetLength(Result, Length(Result)-1);
end;

/// Конвертация чисел Mb, Gb, Tb
function MbOrTb(Byte: Extended): string;
begin
if Byte < 1024 then Result:= NumToStr(Byte) + ' MB' else
if Byte/1024 < 1024 then
  Result:= NumToStr(Byte/1024) + ' GB' else
  Result:= NumToStr(Byte/oneMB) + ' TB';
end;

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

/// Информация о версии сервис пака
function DecodeSystemStr(Str: String): TWindowsVersion;
var tmp, s: String;
begin
  tmp := str;
  s := Copy(tmp, 1, Pos('.', tmp)-1);
  Delete(tmp, 1, Pos('.', tmp));
if (s <> '') then Result.Major := StrToInt(s);
  s := Copy(tmp, 1, Pos('.', tmp)-1);
  Delete(tmp, 1, Pos('.', tmp));
if (s <> '') then Result.minor := StrToInt(s);
  s := Copy(tmp, 1, Pos('.', tmp)-1);
  Delete(tmp, 1, Pos('.', tmp));
if (s <> '') then Result.Build:= StrToInt(s);
  s := Copy(tmp, 1, Pos('.', tmp)-1);
  Delete(tmp, 1, Pos('.', tmp));
if (s <> '') then Result.ServicePackMajor := StrToInt(s);
end;

/// Информация о версии системы
function HWREQ_CompareWindows: Boolean;
var tmp: TWindowsVersion;
begin
  Result := False;
  tmp := DecodeSystemStr('{#NeedSystem}');
if HWREQ.WinVer.NTPlatform then begin
if (tmp.Major <= HWREQ.WinVer.Major) then
if (tmp.Minor <= HWREQ.WinVer.Minor) then
if (tmp.ServicePackMajor <= HWREQ.WinVer.ServicePackMajor) then
  Result := True;
end;
end;

/// Проверка процессоров
function CheckCPU(NeedMHz: Integer): Boolean;
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 SearchCardName(const DeviceName: String): String;
begin
for i:= 0 to 9 do
  RegQueryStringValue(HKLM,'SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\000'+IntToStr(i),'AdapterDesc', DeviceName);
  Result := DeviceName;
end;

/// Модель Установленной Видеокарты
function CardDeviceName: Boolean;
begin
  SearchCardName(DeviceName);
  Result := (Pos('AMD', DeviceName) <> Pos('Gigabyte', DeviceName)) or (Pos('NVIDIA', DeviceName) <> Pos('MSI', DeviceName)) or (Pos('ASUS', DeviceName) <> Pos('Palit', DeviceName));
end;

// Сведения о Производителе Компьютера
function SystemManufacturer(SManufacturer: String): String;
begin
  RegQueryStringValue(HKLM, 'SYSTEM\CurrentControlSet\Control\SystemInformation', 'SystemManufacturer', SManufacturer);
  Result := SManufacturer;
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 InitializeWizard();
begin
  InfoPage := CreateCustomPage(wpLicense, 'Аппаратное и программное обеспечение',
'Программа установки обнаружила следующие наобходимые компоненты.');
with InfoPage do begin
  ChangeText := False

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

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

SystemPanel := TMemo.Create(nil)
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(nil)
with SystemVersionPanel do begin
  Alignment := taLeftJustify
  Parent := InfoPage.Surface
  Left := ScaleX(104)
  Top := SystemPanel.Top
  Width := ScaleX(310)
  Height := ScaleY(22)
  ReadOnly := True
end;

/// Информации о системе из реестра
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion', 'ProductName', SystemName) then
  HWREQ.WinName := DelSP(SystemName);
  GetWindowsVersionEx(HWREQ.WinVer);

/// Информации о битности системы
if IsWin64 then
  HWREQ.WinBits := 'x64' else
  HWREQ.WinBits := 'x86';

/// Вывод информации о системе
if HWREQ.WinVer.ServicePackMajor > 0 then
  SystemVersionPanel.Text := ' ' + HWREQ.WinName+' SP'+IntToStr(HWREQ.WinVer.ServicePackMajor)+' '+HWREQ.WinBits+
' ('+IntToStr(HWREQ.WinVer.Major)+'.'+IntToStr(HWREQ.WinVer.Minor)+
'.'+IntToStr(HWREQ.WinVer.Build)+'), '+SystemManufacturer('SManufacturer') else
  SystemVersionPanel.Text := HWREQ.WinName+' '+HWREQ.WinBits+' ('+IntToStr(HWREQ.WinVer.Major)+
'.'+IntToStr(HWREQ.WinVer.Minor)+'.'+IntToStr(HWREQ.WinVer.Build)+
'); '+SystemManufacturer('SManufacturer');
  SystemVersionPanel.Color := $CCFFCC
if IntToStr(HWREQ.WinVer.Major)+'.'+IntToStr(HWREQ.WinVer.Minor)+'.'+IntToStr(HWREQ.WinVer.ServicePackMajor) < '{#NeedSystem}'
then begin
  SystemVersionPanel.Color := $CCCCFF
  ChangeText := True
end;

/// Процессор:
ProcessorPanel := TMemo.Create(nil)
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(nil)
with ProcessorMHzPanel do begin
  Alignment := taLeftJustify
  Parent := InfoPage.Surface
  Left := ScaleX(104)
  Top := ProcessorPanel.Top
  Width := ScaleX(310)
  Height := ScaleY(22)
  ReadOnly := 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 := 'Процессоры';

/// Видеокарта:
VideoPanel := TMemo.Create(nil)
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(nil)
with VideoRAMPanel do begin
  Alignment := taLeftJustify
  Parent := InfoPage.Surface
  Left := ScaleX(104)
  Top := VideoPanel.Top
  Width := ScaleX(310)
  Height := ScaleY(22)
  ReadOnly := True
end;

  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);
  StringChange(DeviceKey, '\Registry\Machine\', '');
  errCode := 1;
  DeviceValue := 0;

if CardDeviceName then begin
for i := 0 to 9 do
if RegQueryBinaryValue(HKLM,'SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\000'+IntToStr(i),'HardwareInformation.MemorySize',DeviceNamed) then
end else
if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceNamed) then
for n := 1 to Length(DeviceNamed) do begin
  DeviceValue := DeviceValue + Ord(DeviceNamed[n])*errCode;
  errCode := errCode*$100;
  end else
if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then
else
if CardDeviceName then begin
for i := 0 to 9 do
RegQueryDWordValue(HKLM,'SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}\000'+IntToStr(i),'HardwareInformation.MemorySize',DeviceValue);
end 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 CardDeviceName then
  VideoRAMPanel.Text := DelSp(DeviceName) + ', ' + IntToStr(DeviceValue/oneMB) + ' Mb' else
  VideoRAMPanel.Text := DelSp(DeviceName) + ' (Integrated), ' + MbOrTb(DeviceValue/oneMB)
  else begin
if DeviceValue = 0 then
  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)';

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

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

AudioNamePanel.Color := $CCFFCC;
for errCode := 0 to mixerGetNumDevs do begin
  mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps));
  SoundName := ' '
for n := 0 to 31 do
  SoundName := SoundName + lpCaps.sName[n];
  Delete(SoundName, Pos(Chr(0), SoundName), 31);
  Delete(SoundName, Pos(' [', SoundName), 31);
  StringChange(SoundName, 'SB ', 'Creative ');
  Delete(SoundName, Pos(' Audio', SoundName), 31);
  SetArrayLength(Keys, errCode);
if errCode > 0 then Keys[errCode-1] := SoundName;
end;

/// Вывод информации о звуковой карте
if GetArrayLength(Keys) > 1 then begin
  AudioPanel.Text := 'Звуковые карты';
  AudioNamePanel.Text := '';
for n := 1 to GetArrayLength(Keys) do
  AudioNamePanel.Text := AudioNamePanel.Text + Keys[n-1];
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 + ')';

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

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

  RAMTotalPanel.Color := $CCFFCC;
if not CheckMemorySize(NeedMB) then begin
  RAMTotalPanel.Color := $CCCCFF;
  ChangeText := True;
end;

/// Вывод информации об установленной памяти
RAMTotalPanel.Text := ' ' + MbOrTb(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB) + ' всего, ' +
MbOrTb((Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys) -
Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys))/oneMB) + ' используется, ' +
MbOrTb(Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB) + ' свободно';

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

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

/// Вывод информации о файле подкачки
  PageFileTotalPanel.Color := $CCFFCC;
  PageFileTotalPanel.Text := ' ' + MbOrTb((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys))/oneMB) + ' всего, ' +
MbOrTb((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -
Size64(MemoryEx.HiAvailPageFile, MemoryEx.LoAvailPageFile))/oneMB) + ' занято системным кэшем';
if Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB < NeedPageFile then begin
  PageFileTotalPanel.Color := $CCCCFF;
  ChangeText := True;
  end;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = InfoPage.ID then begin
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;
end;

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

Вложения

  • 1628301650862.png
    1628301650862.png
    537.8 KB · Просмотры: 21
  • 1628301683714.png
    1628301683714.png
    952.8 KB · Просмотры: 14
  • 1628301698471.png
    1628301698471.png
    801.6 KB · Просмотры: 16
  • 1628301777648.png
    1628301777648.png
    524.5 KB · Просмотры: 17
  • 1628301807030.png
    1628301807030.png
    326.3 KB · Просмотры: 17
Помогите добавить предупредительное сообщение позволяющее сделать кнопку ДАЛЕЕ активной. Спасибо
проще сделать кнопку активной всегда и повесить предупреждение по нажатию на кнопку Далее

 

Вложения

проще сделать кнопку активной всегда и повесить предупреждение по нажатию на кнопку Далее



Вы гений!)))
Вам уже говорили?
Просто вы столь терпеливы на новичков вроде меня и во стольких вопросах мне помогли))
Без вас ничего бы не вышло ))
 
Народ, выручайте. Возможно заставить батник делать так:
У меня в папке /data есть структура типа /data/data1; /data/data2

Возможно как-то сделать, что-бы батник искал все папки в data, в моем случае это data1, data2... и создавал соответственно архивы содержимого этих папок, например:
/data1/*.* > data1.bin
/data2/*.* > data2.bin
Ну и что-бы архивы содержали в себе не саму папку, а её содержимое.

В данный момент использую батники Тимика
Код:
@Echo Off
Color 0B

Title MaxArc By Timick
@Echo.***************************************************
@Echo.*                                                 *
@Echo.*                MaxArc By Timick                 *
@Echo.*                                                 *
@Echo.***************************************************
TimeOut 2
CLS

set STARTTIME=%TIME%
PackEXE\arc.exe a -s; -ep1 -di -i2 -r -ed -hp1g2x3h7421 -mMAX GameSetup\DataARC_MAX.bin PackedData\*.*
set ENDTIME=%TIME%

for /F "tokens=1-4 delims=:.," %%a in ("%STARTTIME%") do (set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100")
for /F "tokens=1-4 delims=:.," %%a in ("%ENDTIME%") do (set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100")
set /A elapsed=end-start
set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
if %hh% lss 10 set hh=0%hh%
if %mm% lss 10 set mm=0%mm%
if %ss% lss 10 set ss=0%ss%
if %cc% lss 10 set cc=0%cc%
set DURATION=%hh%:%mm%:%ss%,%cc%

@Echo.*****************************************************
@Echo.*                                                   *
@Echo.*           Started Pack  : %STARTTIME%             *
@Echo.*           Finished Pack : %ENDTIME%             *
@Echo.*                                                   *
@Echo.*           Total  Time   : %DURATION%             *
@Echo.*                                                   *
@Echo.*****************************************************
@Echo.

Pause
 
Объясните пожалуйста, почему у меня нет ссылок для скачивания?
Потому что я новичек? Или браузер нужен поновее? Или что нибудь еще?
 
Назад
Сверху