Raf-9600, В каком смысле? Если менять язык инсталлятора на ходу, то это страшное дело - абсолютно все надписи нужно перерисовывать заново - это долгий процесс, и на слабых компах вызовет дикие тормоза.
по предложенным тобой примерам:
Проверка кириллицы в пути - слегка правленый вариант товарища
VoLT:
читать дальше »
Код:
![Выделить весь код](images/misc/selectcode.png)
[Setup]
AppName = MyApp
AppVername = MyApp
DefaultDirName = {pf}\MyApp
[*Code]
function IsAnsi(S: string): boolean;
begin
if CompareStr(AnsiLowercase(S), Uppercase(S)) = 0 then
if CompareStr(Lowercase(S), AnsiLowercase(S)) = 0 then
Result := True;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
if CurPageID = wpSelectDir then
if not (IsAnsi(WizardForm.DirEdit.Text)) then
begin
MsgBox('В пути установки присуствуют русские символы'+#13#10+'Пожалуйста, повторите ввод.', mbError, mb_Ok);
Result := False;
end;
end;
Скрипт для вывода данных о винтах - слегка правленный вариант от
YURSHAT(требует get_hw_caps.dll):
читать дальше »
Код:
![Выделить весь код](images/misc/selectcode.png)
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Files]
Source: compiler:Dll Pack\get_hw_caps.dll; Flags: dontcopy
[*Code]
var
DirList: TNewListBox;
Text: TNewStaticText;
function GetHardDriveFreeSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: integer): PAnsiChar;
external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetHardDriveTotalSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';
function GetHardDrivesCount(): Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';
function 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 TBorGBorMB(Float: Extended): string;
// функция определения ТБ, ГБ или МБ
begin
if Float<1024 then Result:=NumToStr(Float)+' MB'
else if (Float/1024)<1024 then Result:=NumToStr(Float/1024)+' GB'
else if (Float/(1024*1024))<1024 then Result:=NumToStr(Float/(1024*1024))+' TB'
end;
procedure ListBoxOnClick(Sender: TObject);
var
NewLetter, OldString: string;
begin
with TNewListBox(Sender) do
begin
NewLetter := Copy(Items[ItemIndex], 0, 1);
OldString := Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
WizardForm.DirEdit.Text := NewLetter + OldString;
end;
end;
procedure InitializeWizard();
var
i : Integer;
begin
{ DirList }
DirList := TNewListBox.Create(WizardForm);
with DirList do
begin
Parent := WizardForm.SelectDirPage;
SetBounds(ScaleX(0),ScaleY(112),ScaleX(417),ScaleY(97));
ItemHeight := 13;
ItemIndex := 0;
for i:= 0 to GetHardDrivesCount() - 1 do
Items.Add(GetHardDriveName(i)+ ' ' + 'Свободно: ' + IntToStr((GetHardDriveFreeSpace(i)*100) div GetHardDriveTotalSpace(i)) + '% '+'('+ TBorGBorMB(GetHardDriveFreeSpace(i))+')'+' '+'из'+' '+TBorGBorMB(GetHardDriveTotalSpace(i)));
OnClick := @ListBoxOnClick;
end;
end;
На описания тоже гдето есть скрипт более оптимальный и в плане производительности и в плане косячности работы, за авторством
Shegorat, но лень искать (эти два под рукой просто были).