Цитата: Как использовать два и более КОДОВ
Бери здесь
http://victor-dobrov.narod.ru/InnoSetupFAQ_ru-board.chm Добавлено: Кстати, нашел у себя в загашниках скрипт:
[Setup]
AppName=Drive Checked
AppVerName=Drive Checked
DefaultDirName={pf}\Drive Checked
[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
[Messages]
ru.SelectDirBrowseLabel=Нажмите "Далее", чтобы продолжить. Для установки на другой диск, выберите из списка.
[_Code]
var
cbDrive: TComboBox;
DrvLetters: array of string;
FreeSpaceLabel: TLabel;
function GetDriveType(lpDisk: string): integer;
external 'GetDriveTypeA@kernel32.dll stdcall';
function GetLogicalDriveStrings(nLenDrives: LongInt; lpDrives: string): integer;
external 'GetLogicalDriveStringsA@kernel32.dll stdcall';
const
DRIVE_UNKNOWN=0;
DRIVE_NO_ROOT_DIR=1;
DRIVE_REMOVABLE=2;
DRIVE_FIXED=3;
DRIVE_REMOTE=4;
DRIVE_CDROM=5;
DRIVE_RAMDISK=6;
function DriveTypeString(dtype: integer): string;
begin
case dtype of
DRIVE_NO_ROOT_DIR: Result:='Неверный путь';
DRIVE_REMOVABLE: Result:='Съемный';
DRIVE_FIXED: Result:='';
DRIVE_REMOTE: Result:='Сетевой';
DRIVE_CDROM: Result:='CD-ROM';
DRIVE_RAMDISK: Result:='Ram диск';
else
Result:='Неизвестный';
end;
end;
procedure cbDriveOnClick(Sender: TObject);
begin
WizardForm.DirEdit.Text:=DrvLetters[cbDrive.ItemIndex]+'Program Files\Disk Checked';
end;
procedure FillCombo();
var
n: integer;
drivesletters: string; lenletters: integer;
drive: string;
disktype, posnull: integer;
sd: string;
begin
sd:=UpperCase(ExpandConstant('{sd}'));
drivesletters:=StringOfChar(' ', 64);
lenletters:=GetLogicalDriveStrings(63, drivesletters);
SetLength(drivesletters, lenletters);
drive:='';
n:=0;
while ((Length(drivesletters) > 0)) do
begin
posnull:=Pos(#0, drivesletters);
if posnull > 0 then
begin
drive:=UpperCase(Copy(drivesletters, 1, posnull-1));
disktype:=GetDriveType(drive);
if (not(disktype=DRIVE_REMOVABLE)) then
begin
cbDrive.Items.Add(drive+DriveTypeString(disktype))
SetArrayLength(DrvLetters, N+1);
DrvLetters[n]:=drive;
if (Copy(drive, 1, 2)=sd) then cbDrive.ItemIndex:=n;
n:=n+1;
end
drivesletters:=Copy(drivesletters, posnull+1, Length(drivesletters));
end
end;
cbDriveOnClick(cbDrive);
end;
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: string;
FreeMB, TotalMB: cardinal;
begin
Path:=ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption:='Свободно на диске:' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption:='Свободно на диске:' + IntToStr(FreeMB) + ' MB'
end;
procedure InitializeWizard();
begin
cbDrive:=TComboBox.Create(WizardForm.SelectDirPage);
FreeSpaceLabel:=TLabel.Create(WizardForm);
with cbDrive do
begin
Parent:=WizardForm.DirEdit.Parent;
Left:=WizardForm.DirEdit.Left;
Top:=WizardForm.DirEdit.Top+WizardForm.DirEdit.Height*5;
Width:=WizardForm.DirEdit.Width+83;
Style:=csDropDownList;
end
with FreeSpaceLabel do
begin
Parent:=WizardForm.SelectDirPage;
Left:=ScaleX(0);
Top:=Scaley(167);
Width:=ScaleX(209);
Height:=ScaleY(13);
end;
WizardForm.DirBrowseButton.Visible:=true;
WizardForm.DirEdit.Enabled:=true;
WizardForm.DirEdit.OnChange:=@GetFreeSpaceCaption;
WizardForm.DirEdit.Text:=WizardForm.DirEdit.Text+#0;
FillCombo;
cbDrive.OnClick:=@cbDriveOnClick;
end;
Кажется, в загашник он был отправлен потому, что че-то там не работало. Хотя когда я скомпилил, вроде все пучком было. Короче, времени разбераться нет - я обещанные проги никак не могу закончить, так что если чего неправильного найдете здесь - пишите.