Проблема Свободное место на диске

Danser

Новичок
Доброго дня. Подскажите, как быть? Установщик не блокирует установку при недостаточном месте на жестком диске.
Код:
//************************************************[Начало - Проверка места на диске]*************************************************************//

procedure GroupChange (Sender: TObject);
begin
  GroupEditLabel.Caption := MinimizePathName(WizardForm.GroupEdit.Text, GroupEditLabel.Font, GroupEditLabel.Width);
  WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;
end;

//************************************************[Конец - Проверка места на диске]*************************************************************//
 

Krinkels

Он где то тут
Администратор
1. Определяем место на диске.
2. Сравниваем с требуемым местом для установки.
3. Если для игры нужно места больше чем имеется на диске то блокируем кнопку "Далее".
4. Если место достаточно то не блокируем.

А тот код что ты привел, там ничего такого не наблюдается
 

Danser

Новичок
Да, я догадался, что это "пустая" часть кода, спасибо сейчас попробую.
 

Danser

Новичок
Из кода я убрал вот эту часть, так как, у меня в установочном пакете нет такой вкладки. Или я не правильно делаю?
Код:
begin
  Drive:= ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Drive, True, FreeMB, TotalMB);
  TotalSpaceLabel.Caption:= 'Всего места на диске: '+MbOrTb(TotalMB);
  FreeSpaceLabel.Caption:= 'Доступно места на диске: '+MbOrTb(FreeMB)+' ('+IntToStr(round(FreeMB*100/TotalMB))+'%)';
  InstallSpacelabel.Caption:= 'Требуется места для установки: '+MbOrTb({#NeedInstallSize});
  NeedSpaceLabel.Caption:= 'Требуется места на диске: '+MbOrTb({#NeedSize});
  WizardForm.NextButton.Enabled:= (FreeMB>{#NeedInstallSize})and(FreeMB>{#NeedSize});
end;
Получается вот такая ошибка.
 

Nemko

Дилетант
Модератор
Danser, переменная с таким именем уже объявлена, посмотрите (выше) в другой секции var или закомментируйте..
 

Danser

Новичок
Чего-то я не то делаю, а что не то, не пойму. Вот теперь такая ошибка.
 

Nemko

Дилетант
Модератор
Чего-то я не то делаю, а что не то, не пойму. Вот теперь такая ошибка.
Закомментировав все, вы оставили пустую секцию var, отсюда и ошибка. Да и закомментировали не правильно, // или {} или (* *)... Поправка.
 
Последнее редактирование:

Danser

Новичок
Nemko, спасибо, что поправили.
Я удалил дубликаты переменных и теперь, если правильно понимаю, не проходит инициализация.
 

Danser

Новичок
Спасибо, но у меня дальше в лес, больше дров
Теперь скрипт не находит DirEditOnChange, хотя он прописан выше в var

Сделал, вроде, как сказали
Код:
//************************************************[Начало - Проверка места на диске]*************************************************************//

var
  TotalSpaceLabel, InstallSpaceLabel: TLabel;
 

function NumToStr(Float: Extended): String;
begin
  Result:= Format('%.2f', [Float]);
  StringChange(Result, ',', '.');
  while ( Pos('.', Result) > 0 ) and ( (Result[Length(Result)] = '0') or (Result[Length(Result)] = '.') ) do
    SetLength(Result, Length(Result) - 1);
end;

function MbOrTb(Float: Extended): String;
begin
  if Float < 1024 then Result:= NumToStr(Float)+' Мб' else
    if Float/1024 < 1024 then Result:= NumToStr(Float/1024)+' Гб' else
      Result:= NumToStr(Float/(1024*1024))+' Тб';
end;


var Drive: String;

procedure InitializeWizard();
begin
  TotalSpaceLabel:= TLabel.Create(WizardForm);
  TotalSpaceLabel.AutoSize:= False;
  TotalSpaceLabel.SetBounds(0, 120, 300, 20);
  TotalSpaceLabel.Parent:= WizardForm.SelectDirpage;

  FreeSpaceLabel:= TLabel.Create(WizardForm);
  FreeSpaceLabel.AutoSize:= False;
  FreeSpaceLabel.SetBounds(0, 140, 300, 20);
  FreeSpaceLabel.Parent:= WizardForm.SelectDirpage;

  InstallSpacelabel:= TLabel.Create(WizardForm);
  InstallSpacelabel.AutoSize:= False;
  InstallSpacelabel.SetBounds(0, 160, 300, 20);
  InstallSpacelabel.Parent:= WizardForm.SelectDirpage;

  NeedSpaceLabel:= TLabel.Create(WizardForm);
  NeedSpaceLabel.AutoSize:= False;
  NeedSpaceLabel.SetBounds(0, 180, 300, 20);
  NeedSpaceLabel.Parent:= WizardForm.SelectDirpage;

  WizardForm.DirEdit.OnChange:=@DirEditOnChange;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpSelectDir then begin
    DirEditOnChange(nil)
  end;
end;

//************************************************[Конец - Проверка места на диске]*************************************************************//
 

vint56

Ветеран
Проверенный
Danser,
#define NeedInstallSize "55992"
#define NeedSinceInstallSize "5992"
до
[Setup]

[CustomMessages]
rus.Size1= Мб
rus.Size2= Гб
rus.Size3= Тб
rus.Install1=Требуется места для установки:
rus.Install2=Занимаемое место после установки:

Код:
var
InstallSpacelabel1, InstallSpacelabel2: TLabel;

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;

function MbOrTb(Float: Extended): String;
begin
if Float < 1024 then Result:= NumToStr(Float)+ExpandConstant('{cm:Size1}') else
if Float/1024 < 1024 then Result:= NumToStr(Float/1024)+ExpandConstant('{cm:Size2}') else
   Result:= NumToStr(Float/(1024*1024))+ExpandConstant('{cm:Size3}');
end;

procedure DirEditOnChange(Sender: TObject);
var Drive: String;
begin
  DirEditLabel.Caption:=MinimizePathName(WizardForm.DirEdit.Text, DirEditLabel.Font, DirEditLabel.Width);
  Drive:= ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Drive, True, FreeMB, TotalMB);
  InstallSpacelabel1.Caption:=ExpandConstant('{cm:Install1}')+ MbOrTb({#NeedInstallSize});
  InstallSpacelabel2.Caption:=ExpandConstant('{cm:Install2}')+ MbOrTb({#NeedSinceInstallSize});
if WizardForm.CurPageID = wpWelcome then begin
end;
if  (FreeMB>{#NeedInstallSize}) then begin
  WizardForm.NextButton.Enabled:= (FreeMB>{#NeedInstallSize});
  BtnSetEnabled(hNextBtn, True);
end else begin
  WizardForm.NextButton.Enabled:= (FreeMB>{#NeedInstallSize});
  BtnSetEnabled(hNextBtn, False);
end;
end;
до
procedure CreateWizardImage;
begin

procedure CreateWizard;
begin

DirEditLabel := TLabel.Create(WizardForm);
end;
после

with InstallSpacelabel1 do begin
  Left:= 160;
  Top:= 380;
  Width:= 594;
  Height:= 74;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
end;

 InstallSpacelabel2:= TLabel.Create(WizardForm);
with InstallSpacelabel2 do begin
  Left:= 160;
  Top:= 400;
  Width:= 594;
  Height:= 74;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
end;

GroupEditLabel := TLabel.Create(WizardForm);
end;

после
WizardForm.DirEdit.OnChange:=@DirEditOnChange;
WizardForm.GroupEdit.OnChange := @GroupChange;

procedure Hide;
begin
 InstallSpacelabel1.Hide;
 InstallSpacelabel2.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  wpSelectDir:
begin
DirEditOnChange(nil)
[/SPOILER]
 

Вложения

vint56

Ветеран
Проверенный
Danser,
цвет шрифта
Font.Color:=clRed;

InstallSpacelabel1:= TLabel.Create(WizardForm);
with InstallSpacelabel1 do begin
Left:= 160;
Top:= 380;
Width:= 594;
Height:= 74;
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
ParentFont := True;
Parent:= WizardForm;

Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Color:={#Color};
Font.Style:=[fsBold];

end;

InstallSpacelabel2:= TLabel.Create(WizardForm);
with InstallSpacelabel2 do begin
Left:= 160;
Top:= 400;
Width:= 594;
Height:= 74;
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
ParentFont := True;
Parent:= WizardForm;

Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Color:={#Color};
Font.Style:=[fsBold];

end;
 
Сверху