Ru-Board.club
← Вернуться в раздел «Программы»

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

Автор: Chanka
Дата сообщения: 28.06.2007 15:31
Kirgyz,
Спасибо за код. Только как сделать чтобы показывалось не в ГБ а в МБ.
Автор: Chuvakstepan
Дата сообщения: 28.06.2007 15:57
Нашёл что-то про AnimGif.dll - http://nsis.sourceforge.net/AnimGif_plug-in
Вот только Как и ЧТо? - незнаю...

Добавлено:
Удалось вызвать процедуру:


Цитата:
procedure InitializeWizard();
begin
////////GIF
ExtractTemporaryFile('AnimGif.dll');
ExtractTemporaryFile('gis_copy.gif');
callplug(0,ExpandConstant('{tmp}\AnimGif.dll'),'play',ExpandConstant('{tmp}\gis_copy.gif'),'','','','','','','','','')
///////////////
end;


Но при запуске выходит ошибка приложения
Автор: maxdddca123
Дата сообщения: 29.06.2007 13:15
Подскажите: у меня есть произвольная кнопка на произвольной странице... Как мне сделать, что бы при нажатии на неё автоматически нажималась кн далее.... Сделал вот так, не работает

procedure InstallAbonentClick(Sender: TObject);
begin
MsgBox('Вставьте настроечную дискету.', mbInformation, mb_Ok);
if FindFirst('A:\Asetup*.ini', FindRec) then
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end
else
begin
MsgBox('Вставлена неверная дискета.', mbError, MB_OK);
end;
end;

Можно ли это реализовать не в procedure CurPageChanged ???
Автор: Sampron
Дата сообщения: 29.06.2007 13:32
iTASmania_Inc

Цитата:
как можно устранить баг с серийным ноиером на странице wpUserInfo?

Незнаю как решить эту проблему.

Добавлено:
Kirgyz
Незнаю, у меня с твоим кодом нормально распаковывает.

Добавлено:
maxdddca123

[Code]
var
Button: TButton;

procedure ButtonOnClick(Sender: TObject);
begin
WizardForm.NextButton.OnClick (nil)
end;

procedure InitializeWizard();
begin
Button:=TButton.Create(WizardForm)
Button.Top:=327
Button.Left:=20
Button.Width:=75
Button.Height:=23
Button.Caption:='Далее'
Button.OnClick:=@ButtonOnClick
Button.Parent:=WizardForm
end;
Автор: maxdddca123
Дата сообщения: 29.06.2007 13:52
Sampron
Спасиб. А ещё 1 каверзный вопрос: можно ли сделать там, что бы старница wpInstalling не отображалась совсем... ПРосто у меня
[Files]
Source: ISTask.dll; DestDir: {tmp}; Flags: deleteafterinstall;
и как таковой инсталляции не происходит, а сама старничка распаковки файлов на долю секунды отображается...

Добавлено:
У меня есть двоичный файл. Как мне вытащить из него данные и преобразовать в нормальный текстовый вид ?
ОЧЕНЬ СРОЧНО НАДО. Genri помоги плииииз !!!
Автор: Sero
Дата сообщения: 29.06.2007 18:56
Вот сделал скин для Inno Setup - Bending !
Автор: maxdddca123
Дата сообщения: 29.06.2007 19:03
Sero
А пароль ?
Автор: Sero
Дата сообщения: 29.06.2007 19:11
Уууууупссс! извиняюсь! "ru-board"
Автор: iTASmania_Inc
Дата сообщения: 30.06.2007 04:40
Sampron

Цитата:
Незнаю как решить эту проблему.

Я вроде частично решил:

function CheckSerial(Serial: String): Boolean;
begin
if (Serial='123') or (Serial='321') then
begin
ButtonPanel[bidNext].Enabled:=True
ButtonLabel[bidNext].Enabled:=True
Result:=True
end
else
begin
ButtonPanel[bidNext].Enabled:=False
ButtonLabel[bidNext].Enabled:=False
Result:=False
end
end;

Только если серийный номер не введён, а происходит переход на предыдущую страницу, то кнопка "Далее" заедает (она работает, но не как анимированная), поэтому надо прописать ещё это:

if CurPageID<wpUserInfo then begin
ButtonPanel[bidNext].Enabled:=True
end;

Ну в принципе, наверное понятно в какой процедуре!

Добавлено:
Chanka

Цитата:
Только как сделать чтобы показывалось не в ГБ а в МБ.

Если я тебя правильно понимаю, то решается вот так:

ListBox:= TListBox.Create(WizardForm)
with ListBox do begin
Color:= $EEEEEE; Font.Size:= 10; Font.Name:= 'Tahoma'; Font.Style:=[fsBold]; Parent:= WizardForm.SelectDirPage; OnClick:= @ListBoxOnClick; Top:= WizardForm.DirEdit.Top +WizardForm.DirEdit.Height +ScaleY(30); Width:= WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left; Height:= WizardForm.DiskSpaceLabel.Top -Top -9;
FileSystemName:= StringOfChar(' ', BufferLen); VolumeName:= StringOfChar(' ', BufferLen);
for i:=0 to GetHardDrivesCount-1 do begin
GetSpaceOnDisk(GetHardDriveName(i), True, FreeMB, TotalMB); GetVolumeInformation(GetHardDriveName(i), VolumeName, BufferLen-1, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, BufferLen-1);
Items.Add(Copy(Uppercase(GetHardDriveName(i)),0,2)+ Copy(' ',0,14-Length(MorG(TotalMB,0)))+ MorG(TotalMB,1)+ Copy(' всего, ',0,17-Length(MorG(FreeMB,0)))+ MorG(FreeMB,1)+ Copy(' (0',0,4-Length(IntToStr(round(FreeMB/TotalMB*100)))) + FloatToStr(round(FreeMB/TotalMB*100))+ '%) свободно, '+ FileSystemName); end;
end;
with TNewStaticText.Create(WizardForm) do begin Top:= WizardForm.DirEdit.Top +WizardForm.DirEdit.Height +ScaleY(8); Caption:='Список локальных дисков, присутствующих в системе:'; Parent:= WizardForm.SelectDirPage; end;
end;

Находишь данный кусок кода (для Listbox'a c HDD) в скрипте с 41 страницы, просто заменяешь его на мой!
Там надо было заменить MorG(TotalMB,0) на MorG(TotalMB,1) и MorG(FreeMB,0) на MorG(FreeMB,1).

Добавлено:
Sero

Цитата:
Вот сделал скин для Inno Setup

Прикольно!!! Очень!!!
Автор: Chanka
Дата сообщения: 30.06.2007 08:59
iTASmania_Inc

Спасибо. Только вопрос немного в другом. Вот я тут кое-что убрал, чтобы выглядело как в сталкере. Так вот собственно вопрос: У меня отображаются 2 диска C:\ и D:\ на C:\ у меня показывает свободно 4.004 ГБ, а на D:\ 5.68 ГБ. Так вот как сделать, чтобы на D:\ было как на C:\ 3 числа после запятой?

ListBox:= TListBox.Create(WizardForm)
with ListBox do begin
Color:= $EEEEEE; Font.Size:= 10; Font.Name:= 'Tahoma'; Font.Style:=[fsBold]; Parent:= WizardForm.SelectDirPage; OnClick:= @ListBoxOnClick; Top:= WizardForm.DirEdit.Top +WizardForm.DirEdit.Height +ScaleY(30); Width:= WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left; Height:= WizardForm.DiskSpaceLabel.Top -Top -9;
FileSystemName:= StringOfChar(' ', BufferLen); VolumeName:= StringOfChar(' ', BufferLen);
for i:=0 to GetHardDrivesCount-1 do begin
GetSpaceOnDisk(GetHardDriveName(i), True, FreeMB, TotalMB); GetVolumeInformation(GetHardDriveName(i), VolumeName, BufferLen-1, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, BufferLen-1);
Items.Add(Copy(Uppercase(GetHardDriveName(i)),0,3) + Copy(' ',0,5-Length(IntToStr(round(FreeMB/TotalMB*100)))) + FloatToStr(round(FreeMB/TotalMB*100)) + '%' + Copy(' ',0,11-Length(MorG(FreeMB,0))) + MorG(FreeMB,0)); end;
end;
with TNewStaticText.Create(WizardForm) do begin Top:= WizardForm.DirEdit.Top +WizardForm.DirEdit.Height +ScaleY(8); Caption:='Список локальных дисков, присутствующих в системе:'; Parent:= WizardForm.SelectDirPage; end;
end;
Автор: Victor_Dobrov
Дата сообщения: 30.06.2007 10:45
Зачем добавлять нули? У меня в старом тесте на странице wpSelectDir выравниваются строки:
[more=Inno Check System Requirements (старая версия)]
#expr Exec("cmd /c echo #define DateTime '%DATE%' > DateTime.iss")
    #include "DateTime.iss"
        #expr DeleteFile("DateTime.iss")
#define VersionInfoTextVersion "сборка от "+ DateTime

[Setup]
AppName=Inno System Test by Dobrov
AppVerName=Inno System Test (old version!)
DefaultDirName={pf}\{#SetupSetting("AppName")}
VersionInfoTextVersion={#VersionInfoTextVersion}

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

[Messages]
BeveledLabel=© Виктор Добров
FinishedHeadingLabel=Завершение установки [name]
RunEntryShellExec=Прочитать краткую справку.
AboutSetupMenuItem=Краткая справка...
AboutSetupNote=ПАРАМЕТРЫ КОМАНДНОЙ СТРОКИ:%n%n/SAVEINF="filename%n Сохранить параметры установки в файл%n/LOADINF="filename%n Загрузить параметры установки из файла%n/SILENT - ускоренный режим установки%n/NORESTART - Не выполнять перезагрузку
ExitSetupMessage=%nУстановка приостановлена. Если сейчас закрыть программу,%nвозможны непредсказуемые системные ошибки.%n%nВы действительно желаете прервать установку программы?
ComponentsDiskSpaceMBLabel=Текущий выбор требует не менее [mb] Мб

[CustomMessages]
ClickNext=Нажмите «Далее» для продолжения установки, или «Выход», чтобы выйти из программы установки.

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

[LangOptions]
DialogFontName=Tahoma
DialogFontSize=9
WelcomeFontName=Arial
WelcomeFontSize=12

[Code]
const SmallBitmapWidth= 170; oneMB= 1024*1024; LightColor= $EEEEEE; GreenColor= $C0DCC0; RedColor= $CCCCFF; BufferLen= 32;
NeedMB= 100; NeedMHZ= 3500; NeedRAM= 128; NeedVRAM= 64; NeedSys= 5.0; NeedSp= 0; NeedSwap= 256; NeedProgram= 'Software\Microsoft\.NETFramework';

type TMemoryStatus = record dwLength, dwMemoryLoad, dwTotalPhys, dwAvailPhys, dwTotalPageFile, dwAvailPageFile, dwTotalVirtual, dwAvailVirtual: Longint; end;
var Check: Boolean; Memory: TMemoryStatus; FreeMB, TotalMB: Cardinal; VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint; i, CurPage, errorCode: Integer; VolumeName, FileSystemName, UpdateHint, UserSelectDir: String; CancelButton, InfoButton, UpdateButton: TButton; ListBox: TListBox; InfoPage: TWizardPage; CheckFolders: TCheckBox; System, SystemNamePanel, Processor, ProcessorName, VideoCardPanel, VideoCardName, AudioCardPanel, AudioCardName, RAMPanel, RAMSize, PageFilePanel, PageFileSize, NeedSoft, NeedSoftName, Hdd, HddSize, Folders, FoldersSize: TPanel;

procedure GlobalMemoryStatus(var lpBuffer: TMemoryStatus); external 'GlobalMemoryStatus@kernel32.dll';
function GetSystemMetrics(nIndex: Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer; external 'sndPlaySoundA@winmm.dll stdcall';
function GetHardDrivesCount: Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: Integer): PChar; external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetSoundCards: Integer; external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';
function GetSoundCardName: PChar; external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';
function GetSystemPage: Integer; external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';
function GetVideoCardName: PChar; external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';
function GetVidMemLocal: Integer; external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';

Function CalcDirSize(const fromDir, fileMask: string; SubDirsAllow: Boolean): Extended; Var FSR, DSR: TFindRec; FindResult: Boolean;
    Begin
        FindResult:= FindFirst(AddBackslash(fromDir) + fileMask, FSR);
Try
while FindResult do
    begin
        if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then if FSR.SizeLow > $7FFFFFFF then Result:= Result + FSR.SizeLow + $7FFFFFFF + $7FFFFFFF + 2 else Result:= Result + FSR.SizeLow
        FindResult:= FindNext(FSR)
    end;
        FindResult:= FindFirst(AddBackslash(fromDir) + '*.*', DSR)
While FindResult and SubDirsAllow do
    begin
        if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then {Recursion} Result:= Result + CalcDirSize(AddBackslash(fromDir) + DSR.Name, fileMask, SubDirsAllow)
        FindResult:= FindNext(DSR)
    end;
Finally
    FindClose(FSR); FindClose(DSR); end;
End;

Function MorG(MB: Integer; autoGB: Boolean): string; {Перевод числа в строку объёма Мб/Гб (до 3х знаков после запятой)}
    Begin If (MB < 1000) or not autoGB then Result:= IntToStr(MB)+ 'Мб' else Result:= FloatToStr(round(MB/1024*1000)/1000)+ 'Гб'; StringChange(Result, ',', '.') End;

Procedure CheckFoldersOnClick(Sender: TObject);
    Begin
if CheckFolders.State= cbChecked then begin
    if (UpdateHint = '') or (InfoButton.Tag= 1) then begin
        InfoButton.Caption:= 'Подсчёт папок...'; InfoButton.Cursor:= crAppStart; UpdateButton.Cursor:= crAppStart; CheckFolders.Cursor:= crAppStart;
    if UserSelectDir='' then FoldersSize.Caption:=' Система: '+ MorG(Trunc(CalcDirSize(ExpandConstant('{%windir}'),'*',True)/oneMB),True) +' ('+ MorG(Trunc(CalcDirSize(ExpandConstant('{%windir}\Temp'),'*',True)/oneMB + CalcDirSize(ExpandConstant('{reg:HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders,Local Settings}\Temp'),'*',True)/oneMB),True) +' Temp), Браузер: ' +    MorG(Trunc(CalcDirSize(ExpandConstant('{reg:HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders,Cache}'),'*',True)/oneMB),True)
        else FoldersSize.Caption:=' ' +MorG(Trunc(CalcDirSize(UserSelectDir,'*',True)/oneMB),True)+ ' ...' +Copy(UserSelectDir, Length(UserSelectDir)-46, 46)
            UpdateHint:=FoldersSize.Caption
        end else FoldersSize.Caption:=UpdateHint;
    InfoButton.Caption:= 'Скрыть сведения'; InfoButton.Cursor:= crDefault; UpdateButton.Cursor:= crDefault; UpdateButton.Hint:=UserSelectDir; CheckFolders.Cursor:= crHand;
    CancelButton.Tag:= 1
end else
    CancelButton.Tag:= 0
End;

Procedure UpdateButtonOnClick(Sender: TObject); var Version: TWindowsVersion; NoPass: Boolean; CpuMHZ: Cardinal;
    Begin
Check:=True; RegQueryDWordValue(HKLM,'Hardware\Description\System\CentralProcessor\0','~MHz',CpuMHZ); GetWindowsVersionEx(Version); GlobalMemoryStatus(Memory); GetSpaceOnDisk(ExpandConstant('{sd}'),True,FreeMB,TotalMB); VolumeName:= StringOfChar(' ', BufferLen); FileSystemName:= StringOfChar(' ', BufferLen); GetVolumeInformation(ExpandConstant('{sd}\'), VolumeName, BufferLen-1, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, BufferLen-1);

with System do begin
    Caption:= ' О системе'; Color:= LightColor; Parent:= InfoPage.Surface;
    Top:= ScaleY(12); Width:= ScaleX(114); Height:= ScaleY(24); BevelOuter:= bvLowered; end;
with SystemNamePanel do begin    //Windows versions
    Caption:=ExpandConstant('{reg:HKLM\Software\Microsoft\Windows NT\CurrentVersion,ProductName} ') + ExpandConstant('{reg:HKLM\Software\Microsoft\Windows NT\CurrentVersion,CSDVersion} ') +'сборка ' +IntToStr(Version.Major) +'.' +IntToStr(Version.Minor);
    If Pos('Microsoft', Caption) > 0 Then Caption:=Copy(Caption, 10, 45);
    Top:= System.Top; Left:= System.Left + System.Width -2; Width:= ScaleX(305); Height:= System.Height; Parent:= InfoPage.Surface; BevelOuter:= bvLowered; Alignment:=taLeftJustify; Color:= GreenColor; Hint:='Свойства системы'; ShowHint:=True; Cursor:= crHand;
    If (NeedSys*10 > (Version.Major*10 +Version.Minor)) or (NeedSp >Version.ServicePackMajor) then begin Caption:= Caption + ' (< ' +FloatToStr(NeedSys)+ ' SP' +IntToStr(NeedSp) + ')'; Color:= RedColor; NoPass:= True; end else Caption:= Caption + '.' + IntToStr(Version.Build); end;

with Processor do begin
    Caption:= ' Процессор'; Color:= System.Color; Parent:= InfoPage.Surface;
    Top:= System.Top + System.Height - 2; Left:= System.Left; Width:= System.Width; Height:= System.Height; BevelOuter:= bvLowered; end;
with ProcessorName do begin        //CPU
    Caption:=' '+ Trim(ExpandConstant('{reg:HKLM\Hardware\Description\System\CentralProcessor\0,ProcessorNameString}'))+ ' ' +FloatToStr(CpuMHZ/1000) +'GHz'
    Top:= Processor.Top; Left:= SystemNamePanel.Left; Width:= SystemNamePanel.Width; Height:= System.Height; BevelOuter:= bvLowered; Parent:= InfoPage.Surface; Alignment:=taLeftJustify; Color:= GreenColor; Hint:='Управление компьютером'; ShowHint:=True; Cursor:= crHand;
    if CpuMHZ < NeedMHZ then begin Caption:= Caption + ' (< ' + FloatToStr(round(NeedMHZ)/1000)+ ')'; Color:= RedColor; NoPass:= True; end; end;

with RAMPanel do begin
    Caption:=' Объём памяти'; Color:= System.Color; Parent:= InfoPage.Surface;
    Top:=Processor.Top + System.Height - 2; Left:= System.Left; Width:= System.Width; Height:= System.Height; BevelOuter:= bvLowered; end;
with RAMSize do begin        //RAM
    Caption:=' '+MorG(round(Memory.dwTotalPhys/oneMB/64)*64,False) +' всего, '+ MorG(Memory.dwAvailPhys/oneMB,False) +' свободно, '
    Top:=RAMPanel.Top; Left:= SystemNamePanel.Left; Width:= SystemNamePanel.Width; Height:= System.Height; BevelOuter:= bvLowered; Parent:= InfoPage.Surface; Alignment:=taLeftJustify; Color:= GreenColor; Hint:='Учетные записи пользователей'; ShowHint:=True; Cursor:= crHand;
    if round(Memory.dwTotalPhys/oneMB/64)*64 < NeedRAM then begin Caption:= Caption + 'требуется ' + MorG(NeedRAM,False); Color:= RedColor; NoPass:= True; end else Caption:= Caption +MorG((Memory.dwTotalPhys - Memory.dwAvailPhys)/oneMB,False) +' используется'; end;

with VideoCardPanel do begin
    Caption:=' Видеоадаптер'; Color:= System.Color; Parent:= InfoPage.Surface;
    Top:=RAMPanel.Top + System.Height - 2; Left:= System.Left; Width:= System.Width; Height:= System.Height; BevelOuter:= bvLowered; end;
with VideoCardName do begin        //Video
    Caption:= ' ' + Trim(GetVideoCardName)+ ', '+ MorG(round(GetVidMemLocal/oneMB/64)*64,False);
    Top:=VideoCardPanel.Top; Left:= SystemNamePanel.Left; Width:= SystemNamePanel.Width; Height:= System.Height; BevelOuter:= bvLowered; Parent:= InfoPage.Surface; Alignment:=taLeftJustify; Color:= GreenColor; Hint:='Свойства: Экран'; ShowHint:=True; Cursor:= crHand;
    if round(GetVidMemLocal/oneMB/64)*64 < NeedVRAM then begin Caption:= Caption + ' (< ' + MorG(NeedVRAM,False)+ ')'; Color:= RedColor; NoPass:= True; end;
    Caption:= Caption + ', '+ IntToStr(GetSystemMetrics(0)) + 'x' +IntToStr(GetSystemMetrics(1)); end;

with AudioCardPanel do begin
    Caption:=' Звуковая карта'; Color:= System.Color; Parent:= InfoPage.Surface;
    Top:=VideoCardPanel.Top + System.Height - 2; Left:= System.Left; Width:= System.Width; Height:= System.Height; BevelOuter:= bvLowered; end;
with AudioCardName do begin        //Sound card
    if Pos('SB', UpperCase(GetSoundCardName)) > 0 then Caption:=' Creative Sound Blaster ' +Copy(GetSoundCardName,Pos('SB', UpperCase(GetSoundCardName))+3,Length(GetSoundCardName)) else Caption:=' '+GetSoundCardName + ' (рекомендуется Creative X-Fi)'
    Top:=AudioCardPanel.Top; Left:= SystemNamePanel.Left; Width:= SystemNamePanel.Width; Height:= System.Height; BevelOuter:= bvLowered; Parent:= InfoPage.Surface; Alignment:=taLeftJustify; Color:= GreenColor; Hint:='Звуки и аудиоустройства'; ShowHint:=True; Cursor:= crHand;
    if GetSoundCards = 0 then begin Caption:=' Устройство не обнаружено'; Color:= RedColor; NoPass:= True; end; end;

with NeedSoft do begin
    Caption:=' Программы'; Color:= System.Color; Parent:= InfoPage.Surface;
    Top:=AudioCardPanel.Top + System.Height - 2; Left:= System.Left; Width:= System.Width; Height:= System.Height; BevelOuter:= bvLowered; end;
with NeedSoftName do begin        //Check Registry key
    Top:=NeedSoft.Top; Left:= SystemNamePanel.Left; Width:= SystemNamePanel.Width; Height:= System.Height; BevelOuter:= bvLowered; Parent:= InfoPage.Surface; Alignment:=taLeftJustify; Color:= GreenColor; Hint:='Установка и удаление программ'; ShowHint:=True; Cursor:= crHand;
    if RegKeyExists(HKLM, NeedProgram)= true then Caption:=' Пакет Microsoft .NET Framework установлен' else begin Caption:=' Требуется установить Microsoft .NET Framework'; Color:= RedColor; NoPass:= True; end; end;

with PageFilePanel do begin
    Caption:=' Файл подкачки'; Color:= System.Color; Parent:= InfoPage.Surface;
    Top:=NeedSoft.Top + System.Height - 2; Left:= System.Left; Width:= System.Width; Height:= System.Height; BevelOuter:= bvLowered; end;
with PageFileSize do begin        //Virtual memory
    Caption:=' '+MorG(GetSystemPage,False)+' всего, ';
    Top:=PageFilePanel.Top; Left:= SystemNamePanel.Left; Width:= SystemNamePanel.Width; Height:= System.Height; BevelOuter:= bvLowered; Parent:= InfoPage.Surface; Alignment:=taLeftJustify; Color:= GreenColor; Hint:='Быстродействие'; ShowHint:=True; Cursor:= crHand;
    if GetSystemPage < NeedSwap then begin Caption:= Caption + 'требуется не менее '+ MorG(NeedSwap,False); Color:= RedColor; NoPass:= True; end else Caption:= Caption + MorG((Memory.dwTotalPageFile - Memory.dwAvailPageFile)/oneMB,True) +' занято системным кэшем'; end;

with Hdd do begin
    Caption:=' Системный диск'; Color:= System.Color; Parent:= InfoPage.Surface;
    Top:=PageFilePanel.Top + System.Height - 2; Left:= System.Left; Width:= System.Width; Height:= System.Height; BevelOuter:= bvLowered; end;
with HddSize do begin        //System drive
    Caption:=' '+ MorG(TotalMB,True)+ ' всего, '+ IntToStr(round((TotalMB-FreeMB)/TotalMB*100))+ '% занято, '+ MorG(FreeMB,True)+ ' свободно';
    Top:=Hdd.Top; Left:= SystemNamePanel.Left; Width:= SystemNamePanel.Width; Height:= System.Height; BevelOuter:= bvLowered; Parent:= InfoPage.Surface; Alignment:=taLeftJustify; Color:= GreenColor; Hint:='Очистка диска'; ShowHint:=True; Cursor:= crHand;
    if FreeMB < NeedMB then begin Caption:= Caption +' (< '+ MorG(NeedMB,True)+ ')'; Color:= RedColor; NoPass:= True; end else Caption:= Caption +', '+ Trim(FileSystemName); end;

with Folders do begin
    Color:= System.Color; Parent:= InfoPage.Surface;
    Top:=Hdd.Top + System.Height -2; Left:= System.Left; Width:= System.Width; Height:= System.Height; BevelOuter:= bvLowered; end;
CheckFolders:= TCheckBox.Create(InfoPage);
with CheckFolders do begin
    OnClick:= @CheckFoldersOnClick; Hint:='Подсчёт размера папок займёт некоторое время...'; ShowHint:=True; if CancelButton.Tag= 0 then State:= cbUnChecked else State:= cbChecked;
Caption:='Объём папок'; Color:= System.Color; Parent:= InfoPage.Surface; BringToFront; Cursor:= crHand; Top:=Folders.Top +ScaleY(5); Left:= System.Left +ScaleX(10); Width:= System.Width -ScaleX(15); end;
with FoldersSize do begin        //calculate Size of User Folders
    if CheckFolders.State= cbUnChecked then if UserSelectDir='' then Caption:=' Система: '+ ExpandConstant('{%windir}') +', Temporary Internet Files' else Caption:=' ...' + Copy(UserSelectDir, Length(UserSelectDir)-50, 50)
    Top:=Folders.Top; Left:= SystemNamePanel.Left; Width:= SystemNamePanel.Width; Height:= System.Height; BevelOuter:= bvLowered; Parent:= InfoPage.Surface; Alignment:=taLeftJustify; Color:= GreenColor; Hint:='Щёлкните здесь для подсчёта размера другой папки...'; ShowHint:=True; Cursor:= crHand; end;

with TPanel.Create(InfoPage) do begin Parent:= InfoPage.Surface; BevelOuter:= bvLowered; Top:=System.Top; Height:= (System.Height-2)*9+2; Left:= SystemNamePanel.Left + SystemNamePanel.Width -2; end; with TPanel.Create(InfoPage) do begin Parent:= InfoPage.Surface; BevelOuter:= bvLowered; Top:=Folders.Top + System.Height -2; Left:= System.Left - 25; Width:= WizardForm.ClientWidth; end; with TPanel.Create(InfoPage) do begin Parent:= InfoPage.Surface; BevelOuter:= bvNone; Top:=System.Top; Height:= (System.Height-2)*9+2; Left:= SystemNamePanel.Left + SystemNamePanel.Width-1; end;
    with TPanel.Create(InfoPage) do begin Parent:= InfoPage.Surface; BevelOuter:= bvNone; Top:=System.Top; Left:= System.Left; Height:= 1; Width:= 1; end; with TPanel.Create(InfoPage) do begin Parent:= InfoPage.Surface; BevelOuter:= bvNone; Top:=System.Top; Left:= SystemNamePanel.Left + SystemNamePanel.Width -2; Height:= 1; Width:= 1; end;     with TPanel.Create(InfoPage) do begin Parent:= InfoPage.Surface; BevelOuter:= bvNone; Top:=Folders.Top + System.Height -2; Left:= System.Left; Height:= 1; Width:= 1; end; with TPanel.Create(InfoPage) do begin Parent:= InfoPage.Surface; BevelOuter:= bvNone; Top:=Folders.Top + System.Height -2; Left:= SystemNamePanel.Left + SystemNamePanel.Width -2; Height:= 1; Width:= 1; end;

    if NoPass then begin WizardForm.PageDescriptionLabel.Font.Color:=$402080 InfoPage.Description:='Не все компоненты соответствуют требованиям программы, проверьте позиции, выделеные красным!' end;
End;

Procedure CloseInfo; Begin If InfoButton.Tag= 1 then InfoButton.OnClick(InfoButton) End;

Function BackButtonClick(CurPageID: Integer): Boolean; Begin Result:= True CloseInfo End;

Function NextButtonClick(CurPageID: Integer): Boolean;
    Begin If InfoButton.Tag= 1 then else Result:= True
    if (i =wpWelcome) and (InfoButton.Tag= 1) then Result:= True
    CloseInfo
    if (CurPageID = wpWelcome) and Not(Check) then begin InfoButton.OnClick(InfoButton) Result:= False end
    End;

Procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);    //С началом установки включаем подтверждение при нажатии на кнопку 'Отмена'
    Begin If CurPageID <> wpInstalling then Confirm:= False End;

procedure ListBoxOnClick(Sender: TObject);
    Begin for i:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[i] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[i],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text)); End;

Procedure DirOnClick(Sender: TObject);
    Begin UserSelectDir:= WizardForm.DirEdit.Text If BrowseForFolder('Выберите папку для установки или создайте новую', UserSelectDir, True) then WizardForm.DirEdit.Text:= UserSelectDir End;

Procedure SystemNamePanelOnClick(Sender: TObject);
    Begin Exec(ExpandConstant('{sys}\rundll32.exe'), 'shell32.dll, Control_RunDLL sysdm.cpl', '', sw_Hide, ewWaitUntilTerminated, errorCode); UpdateButton.OnClick(UpdateButton); End;
Procedure ProcessorNameOnClick(Sender: TObject);
    Begin ShellExec('open', ExpandConstant('{sys}\compmgmt.msc'), '', '', sw_Show, ewWaitUntilTerminated, errorCode); UpdateButton.OnClick(UpdateButton); End;
Procedure RAMSizeOnClick(Sender: TObject);
    Begin Exec(ExpandConstant('{sys}\control.exe'), 'userpasswords2', '', sw_Hide, ewNoWait, errorCode) End;
Procedure VideoCardNameOnClick(Sender: TObject);
    Begin Exec(ExpandConstant('{sys}\control.exe'), 'desk.cpl,,3', '', sw_Hide, ewWaitUntilTerminated, errorCode); UpdateButton.OnClick(UpdateButton); End;
Procedure AudioCardNameOnClick(Sender: TObject);
    Begin Exec(ExpandConstant('{sys}\control.exe'), 'mmsys.cpl', '', sw_Hide, ewNoWait, errorCode) End;
Procedure NeedSoftNameOnClick(Sender: TObject);
    Begin Exec(ExpandConstant('{sys}\control.exe'), 'appwiz.cpl', '', sw_Hide, ewNoWait, errorCode) End;
Procedure PageFileSizeOnClick(Sender: TObject);
    Begin Exec(ExpandConstant('{sys}\rundll32.exe'), 'shell32.dll, Control_RunDLL sysdm.cpl,,3', '', sw_Hide, ewWaitUntilTerminated, errorCode); UpdateButton.OnClick(UpdateButton); End;
Procedure HddSizeOnClick(Sender: TObject);
    Begin ShellExec('open', ExpandConstant('{sys}\cleanmgr.exe'), '', '', sw_Show, ewWaitUntilTerminated, errorCode); UpdateButton.OnClick(UpdateButton); End;
Procedure FoldersSizeOnClick(Sender: TObject);
    Begin if BrowseForFolder('Выберите папку для подсчёта её размера:', UserSelectDir, False) then begin    CheckFolders.State:= cbUnChecked; CheckFolders.State:= cbChecked; end End;

Procedure InfoButtonOnClick(Sender: TObject);
    Begin
if InfoButton.Tag= 0 then begin
    InfoPage:= CreateCustomPage(CurPage, 'Проверка системных требований', 'Все компоненты соответствуют требованиям программы')
    System:=TPanel.Create(InfoPage); SystemNamePanel:=TPanel.Create(InfoPage); SystemNamePanel.OnClick:= @SystemNamePanelOnClick
    Processor:=TPanel.Create(InfoPage); ProcessorName:=TPanel.Create(InfoPage); ProcessorName.OnClick:= @ProcessorNameOnClick
    RAMPanel:=TPanel.Create(InfoPage); RAMSize:=TPanel.Create(InfoPage); RAMSize.OnClick:= @RAMSizeOnClick
    VideoCardPanel:=TPanel.Create(InfoPage); VideoCardName:=TPanel.Create(InfoPage); VideoCardName.OnClick:= @VideoCardNameOnClick
    AudioCardPanel:=TPanel.Create(InfoPage); AudioCardName:=TPanel.Create(InfoPage); AudioCardName.OnClick:= @AudioCardNameOnClick
    NeedSoft:=TPanel.Create(InfoPage); NeedSoftName:=TPanel.Create(InfoPage); NeedSoftName.OnClick:= @NeedSoftNameOnClick
    PageFilePanel:=TPanel.Create(InfoPage); PageFileSize:=TPanel.Create(InfoPage); PageFileSize.OnClick:= @PageFileSizeOnClick
    Hdd:=TPanel.Create(InfoPage); HddSize:=TPanel.Create(InfoPage); HddSize.OnClick:= @HddSizeOnClick
    Folders:=TPanel.Create(InfoPage); FoldersSize:=TPanel.Create(InfoPage); FoldersSize.OnClick:= @FoldersSizeOnClick;
    UpdateButton:= TButton.Create(WizardForm);
        with UpdateButton do begin Top:= CancelButton.Top; Left:= InfoButton.Left + InfoButton.Width; Width:= CancelButton.Width; Caption:= 'Обновить'; OnClick:= @UpdateButtonOnClick; Parent:= WizardForm; Hint:=UserSelectDir; ShowHint:=True; end;
    UpdateButton.OnClick(UpdateButton);
    WizardForm.NextButton.OnClick(WizardForm.NextButton);
    InfoButton.Caption:= 'Скрыть сведения'; InfoButton.Cursor:= crDefault; InfoButton.Tag:= 1;
end else begin
    InfoButton.Caption:= 'О системе'; InfoButton.Cursor:= crHelp; InfoButton.Tag:= 0;
    WizardForm.BackButton.OnClick(WizardForm.BackButton);
    WizardForm.PageDescriptionLabel.Font.Color:= WizardForm.PageNameLabel.Font.Color
    UpdateButton.Free
    InfoPage.Free
end
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
    i:=CurPage; CurPage:= CurPageID
    If WizardForm.FindComponent('CancelButton') is TButton then CancelButton.Caption:= 'Выход';
case CurPageID of
wpWelcome: sndPlaySound(ExpandConstant('{win}\Media\start.wav'), 1)
    wpSelectDir: begin
        with ListBox do begin Parent:= WizardForm.SelectDirPage; Items.Clear; Color:= $EEEEEE; Font.Size:= 9; Font.Name:= 'Courier New'; OnClick:= @ListBoxOnClick; Top:= WizardForm.DirEdit.Top +WizardForm.DirEdit.Height +ScaleY(30); Width:= WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left; Height:= WizardForm.DiskSpaceLabel.Top -Top -9;
        for i:=0 to GetHardDrivesCount-1 do begin VolumeName:= StringOfChar(' ', BufferLen); FileSystemName:= StringOfChar(' ', BufferLen); GetSpaceOnDisk(GetHardDriveName(i), True, FreeMB, TotalMB); GetVolumeInformation(GetHardDriveName(i), VolumeName, BufferLen-1, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, BufferLen-1); if Trim(VolumeName)='' then VolumeName:='без метки';
        Items.Add(Copy(Uppercase(GetHardDriveName(i)),0,2)+ PadL(MorG(TotalMB,True),11) +' всего| '+ PadL(MorG(FreeMB,True),9)+ PadL(FloatToStr(round(FreeMB/TotalMB*100)),4)+ '% своб| '+ PadL(Trim(FileSystemName),5)+ '| '+ Trim(VolumeName)); end; end; end
wpInstalling: begin CancelButton.Caption:= 'Прервать' InfoButton.Visible:= False end;
    wpFinished: sndPlaySound(ExpandConstant('{win}\Media\tada.wav'), 1) end;
End;

Procedure InitializeWizard;
    Begin
    CancelButton:= WizardForm.CancelButton;
InfoButton:= TButton.Create(WizardForm);
with InfoButton do begin Left:= WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width; Top:= CancelButton.Top; Width:= CancelButton.Width +ScaleX(20); Height:= CancelButton.Height; Caption:= 'О системе'; Hint:='Проверка системных требований'; ShowHint:=True; OnClick:= @InfoButtonOnClick; Parent:= WizardForm; end;
with WizardForm.PageNameLabel do begin Top:= Top - 2; Left:=Left - 4; Width:= Width -i + 16; end;
with WizardForm.PageDescriptionLabel do begin Top:= Top -2; Left:=Left -10; Width:= Width -i +24; end;
with WizardForm.TypesCombo do begin Width:= ScaleX(170); Top:= WizardForm.SelectComponentsLabel.Top; end;
with WizardForm.ComponentsList do begin Top:=1 + WizardForm.TypesCombo.Top + WizardForm.TypesCombo.Height; Height:=ScaleY(18) + WizardForm.ComponentsDiskSpaceLabel.Top -Top; end;
with WizardForm.ComponentsDiskSpaceLabel do begin Top:=3; Left:=ScaleX(20) + WizardForm.TypesCombo.Width; end;
    WizardForm.SelectComponentsLabel.Visible:= False;
    WizardForm.DirBrowseButton.OnClick:= @DirOnClick;
ListBox:= TListBox.Create(WizardForm)
    with TNewStaticText.Create(WizardForm) do begin Top:= WizardForm.DirEdit.Top +WizardForm.DirEdit.Height +ScaleY(8); Font.Name:= 'Lucida Sans Unicode'; Caption:='Список локальных дисков, присутствующих в системе:'; Parent:= WizardForm.SelectDirPage; end;
End;
[/more]

Corona Skin & Check System Requirements - обложка для Inno Setup с проверкой системных требований.

Проверка оборудования, версий Windows и ServicePack, объёма папок, ключа реестра...

При несоответствии минимальным требованиям пользователю сообщается об этом после 'Приветствия'.

Дополнения: Автонастройка на приложение; Расширенная локализация; В инсталлятор вписывается дата сборки; Защита от многократного запуска и запрос деинсталляции установленного приложения (без диалогов в режиме /SILENT).

Управление: Путь установки и название группы можно сменить, щёлкнув значок на wpSelectDir и wpSelectProgramGroup. Клик по компоненту в таблице открывает его свойства; Клик на имени папки позволяет сменить текущую папку; Клик с нажатой Shift открывает текущую папку в Проводнике. Правый клик на кнопке 'О системе' показывает минимальные системные требования для данной программы; Правый клик на кнопке 'Закрыть' перезапускает тест. Правый клик на кнопке 'Выход' закрывает инсталлятор без подтверждения (кроме wpInstalling).

Данная обложка добавляет к объёму инсталлятора ~190 Кб (можно получить ~80Кб, удалив Copy.avi, ошибок не будет, но и анимации на wpInstalling тоже ).
Автор: Chuvakstepan
Дата сообщения: 30.06.2007 18:03
Вот доработал оболочку для Inno Setup - Grey Inno Setup
Серо-оранжевый стильный скин, всё в тему


Прямая ссылка на скрипт здесь - 148 кб
или здесь - 148 кб
Для работы нужен Inno Setup Preprocessor, брать из Inno QuickStartPack
Автор: iTASmania_Inc
Дата сообщения: 30.06.2007 21:13
Victor_Dobrov
Не подскажешь, как ты реализовал изменение прогресс-бара на странице wpInstalling?
Нижний правый угол на скриншоте! И если можно, то процедуру отдельно!

Добавлено:
А-а, извиняюсь, чё-т не сообразил, что это из-за классического стиля!
Автор: gofryA
Дата сообщения: 01.07.2007 05:20
Приветствую знатоков инно и паскаля, спс. за ваши скины, оч рульные.
Собственно потихоньку учусь тут у вас.
Хотел уточнить, вроде все понятно со стандартными параметрами секций инно, кроме DiscClusterSize. Имеет значение или нет размер кластера, что вообще имеется тут в виду, чтобы ровно билось что-ли (DiskSpanning), или это касается размера кластера на носителе предполагаемом? Если да, то не оч понятно как это реализовано, и почему тогда кластера а не сектора (или это дискет касается?).
Автор: Chuvakstepan
Дата сообщения: 01.07.2007 05:37
gofryA
DiskClusterSize - размер кластера на носителе, используется только при DiskSpaning=yes
Лично я эту директиву не трогаю, она мне не нужна
Если DiskSpaning=yes, то инсталлятор будет разбивать на ровные файлы, размер которых прописан в DiskSliceSize
Например в моих игровых инсталляторах DiskSliceSize=723517440, это значит 690 МБ
Автор: gofryA
Дата сообщения: 01.07.2007 05:51
Chuvakstepan
При DiskSpaning=yes, ну в общем это ясно, только зачем этот параметр. И почему игнорируется если нет разбития, может имеется в виду что эти равные части будут равны до байта? Если да, то к чему такая точность
Или что тут вообще подразумевается, зачем инсталлятору точно знать размер кластера? И размер кластера чего, фс на которой размещается файл? Если для CD\DVD то это вроде как не имеет вообще никакого значения, если не ошибаюсь, т.к. там посекторно все (хотя я не спец в CDFS, может действительно чего то не знаю).
Автор: CapsLosk
Дата сообщения: 02.07.2007 01:42
Genri
Спасибо!



Добавлено:
Подскажите......
sndPlaySound(ExpandConstant('{tmp}\sound.wav'), $0001 or $0008);
А как прекратить воспроизведение ?
Автор: Chuvakstepan
Дата сообщения: 02.07.2007 10:05
CapsLosk
Попробуй убрать or $0008

Цитата:
sndPlaySound(ExpandConstant('{tmp}\sound.wav'), $0001);
Автор: DmitryKz
Дата сообщения: 02.07.2007 11:20
Как распаковать инсталлятор, сделанный с помощью версии сабжа 2.0.8. UniExtractor не берет. InnoUnp - тоже.
Автор: megarom
Дата сообщения: 02.07.2007 13:29
Можно ли читать параметры из текстового файла?
Автор: maxdddca123
Дата сообщения: 02.07.2007 14:23
megarom
Можно, вообще в хелпе оприсаны ф-ции, которые это умеют.
Автор: CapsLosk
Дата сообщения: 03.07.2007 01:44
Chuvakstepan
Chuvakstepan

Цитата:
CapsLosk
Попробуй убрать or $0008

Цитата:sndPlaySound(ExpandConstant('{tmp}\sound.wav'), $0001);


or $0008- это кол-во повторов!
Меня интерисует как можно прекратить воспроизведение
Автор: Chuvakstepan
Дата сообщения: 03.07.2007 10:07
CapsLosk
Если я правильно тебя понимаю, тебе нужно через какую-либо кнопку прекратить воспроизведение звука?

Лови код:

Цитата:

[Files]
Source: compiler:sound.wav; DestDir: "{tmp}"; Flags: dontcopy nocompression

[Code]
function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';

procedure StopSound(Sender: TObject);
begin
sndPlaySound(ExpandConstant(''), $0001 or $0008);
end;

procedure InitializeWizard();
var
ButtonStop: TButton;
begin
ExtractTemporaryFile(ExpandConstant('sound.wav'));
sndPlaySound(ExpandConstant('{tmp}\sound.wav'), $0001 or $0008);

ButtonStop := TButton.Create(WizardForm);
with ButtonStop do
begin
Parent := WizardForm;
Caption :='stop';
Left := ScaleX(8);
Top :=320
Width := ScaleX(43);
Height := ScaleY(33);
TabOrder := 0;
OnClick:=@StopSound
end;
end;
Автор: Chanka
Дата сообщения: 03.07.2007 11:10
Народ!!! Скажите, пожалуйста, как увеличить оббьем требуемого места на диске на странице выбора директории? Т.е допустим, требуется 1,125 Мб, а надо, чтобы допустим было 2,125 Мб.
Автор: Sampron
Дата сообщения: 03.07.2007 11:21
Chanka
[Code]
procedure InitializeWizard();
begin
WizardForm.DiskSpaceLabel.Caption:='Необходимо на диске 2,125 Мб свободного места.'
end;
Автор: Chuvakstepan
Дата сообщения: 03.07.2007 11:21
Chanka


Цитата:
требуется 1,125 Мб, а надо, чтобы допустим было 2,125 Мб


[Setup]
ExtraDiskSpaceRequired=1048576



Добавлено:
Sampron
Можно и так
Автор: maxdddca123
Дата сообщения: 03.07.2007 11:24
Народ подскажите, почему не создаётся дирректория вот такая ???
CreateDir(ExpandConstant('{app}\') + 'BOXES\' + Login + '\monitor\')
ф-ция выдаёт значение false почему то... Не могу понять в чём дело !
Ошибку при компиляции не выдаёт, Login строковая переменная...
Автор: Chuvakstepan
Дата сообщения: 03.07.2007 11:42
maxdddca123
Директория должна быть "app\BOXES\Login\monitor ?"

Если да, то так:

Цитата:
CreateDir(ExpandConstant('{app}\BOXES\Login\monitor\'))


или поясни что-за строковая переменная? имя пользователя чтоли?

Цитата:
CreateDir(ExpandConstant('{app}\BOXES\') + (ExpandConstant('{sysuserinfoname}\monitor\'))
Автор: maxdddca123
Дата сообщения: 03.07.2007 12:45
Chuvakstepan
логин например 7699999 (берётся из настроечного файла пользователя). На каждом компе свой !
Дирректория должна быть app\BOXES\7699999\monitor например
Автор: Chanka
Дата сообщения: 03.07.2007 12:53
Sampron, Chuvakstepan Спасибо!

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Mail.ru агент - вход не выполнен


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.