Victor_Dobrov
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Вот более тупой вариант: Function DirSize(const fromDir: String): Currency; var ArrOfFiles: TArrayOfString; St: String; errorCode: Integer; Begin Exec(ExpandConstant('{cmd}'), ExpandConstant('/C dir /w /s >{tmp}\DirSize.lst'), ExpandConstant(fromDir), sw_Hide, ewWaitUntilTerminated, errorCode); LoadStringsFromFile(ExpandConstant('{tmp}\DirSize.lst'), ArrOfFiles); St:=ArrOfFiles[GetArrayLength(ArrOfFiles)-2]; OemToCharBuff(St); StringChange(St, Chr($A0), ''); Result:=StrToFloat(Trim(Copy(St, Pos('файлов', St)+8, Pos('байт', St)-2-(Pos('файлов', St)+7)))); End; Procedure DirOnClick(Sender: TObject); var UserSelectDir: String; res: Integer; Begin UserSelectDir:= WizardForm.DirEdit.Text If BrowseForFolder('Выберите папку для подсчёта её размера:', UserSelectDir, True) then begin WizardForm.DirEdit.Text:= UserSelectDir res:= Trunc(DirSize(UserSelectDir)/(1024*1024)) //результат в Мб If res < 1000 then MsgBox(IntToStr(res)+ ' Mb', mbInformation, MB_OK) else MsgBox(FloatToStr(round(res/1024*1000)/1000)+ ' Gb', mbInformation, MB_OK) end; End; Procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); Begin If CurPageID <> wpInstalling then Confirm:= False; End; Procedure CurPageChanged(CurPageID: Integer); Begin If CurPageID = wpWelcome then WizardForm.NextButton.OnClick(WizardForm.NextButton) End; Procedure InitializeWizard; Begin WizardForm.DirBrowseButton.OnClick:= @DirOnClick End; |