#define A = (Defined UNICODE) ? "W" : "A"
[Setup]
AppName=Test
AppVername=Test
DefaultDirName={sd}\Test
[CustomMessages]
err_000=Поле ввода пути установки пустое!
err_001=Установка в корень диска запрещена!
err_002=Неверный формат пути установки!
err_003=Слишком длинный путь установки!
err_004=Недопустимые знаки в пути установки! %n / : * ? " < > |
DRIVE_ERR0=Неопределенный тип устройсва.
DRIVE_ERR1=Недопустимый путь для установки.
DRIVE_ERR2=Установка на «Съемный диск» запрещена.
DRIVE_ERR3=HDD
DRIVE_ERR4=Установка на «Удаленный диск» запрещена.
DRIVE_ERR5=Установка на «CD-ROM» запрещена.
DRIVE_ERR6=Установка на «RAM диск» запрещена.
[Code]
var
MyNextButton: TButton;
{WinApi}
function GetDriveType(lpDisk: String): Integer; external 'GetDriveType{#A}@kernel32.dll stdcall';
procedure OnClicks(Sender: TObject);
var
i, c: Integer;
Path, bl: String;
TypeDrive: Byte;
begin
{проверка корректности пути}
with WizardForm do
if CurPageID = wpSelectDir then begin
if Length(DirEdit.Text) = 0 then begin
MsgBox(CustomMessage('err_000'), mbError, MB_OK);
Exit;
end;
if Length(DirEdit.Text) <= 3 then begin
bl:='abcdefghijklmnopqrstuvwxyz'
if Length(DirEdit.Text) = 3 then begin
if (DirEdit.Text[2] <> ':') or (DirEdit.Text[3] <> '\') or (Pos(Lowercase(DirEdit.Text[1]), bl) = 0)
then MsgBox(CustomMessage('err_002'), mbError, MB_OK)
else MsgBox(CustomMessage('err_001'), mbError, MB_OK);
end else MsgBox(CustomMessage('err_002'), mbError, MB_OK);
Exit;
end;
if Length(DirEdit.Text) >= 220 then begin
MsgBox(CustomMessage('err_003'), mbError, MB_OK);
Exit;
end;
{проверка диска}
Path:=DirEdit.Text;
if Length(Path) > 3 then begin
SetLength(Path, 3);
TypeDrive:=GetDriveType(Path);
if TypeDrive <> 3 then begin
MsgBox(CustomMessage('DRIVE_ERR'+IntToStr(TypeDrive)), mbError, MB_OK);
Exit;
end;
end;
{проверка на символы}
bl:='/:*?"<>|';
for i:=4 to Length(DirEdit.Text) do
for c:=1 to Length(bl) do begin
if DirEdit.Text[i] = bl[c] then begin
MsgBox(CustomMessage('err_004'), mbError, MB_OK);
Exit;
end;
end;
{}
NextButton.OnClick(NextButton);
end else NextButton.OnClick(NextButton);
end;
procedure InitializeWizard;
begin
MyNextButton:=TButton.Create(nil);
with MyNextButton do begin
SetBounds(WizardForm.NextButton.Left, WizardForm.NextButton.Top, WizardForm.NextButton.Width, WizardForm.NextButton.Height);
OnClick:=@OnClicks;
Parent:=WizardForm;
end;
end;
procedure CurPageChanged(Page: Integer);
begin
with WizardForm.NextButton do begin
PostMessage(MyNextButton.Handle, $7, 0, 0); // WM_SETFOCUS
MyNextButton.Caption:=Caption;
Hide;
end;
end;