ComradG
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Как использовать два и более КОДОВ | Бери здесь 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; Кажется, в загашник он был отправлен потому, что че-то там не работало. Хотя когда я скомпилил, вроде все пучком было. Короче, времени разбераться нет - я обещанные проги никак не могу закончить, так что если чего неправильного найдете здесь - пишите. |