Inno Setup Drive Selection Without Folder

编译时候不成功,跟踪了一下,发现是字符问题。
**************** Sample Code

* -- Sample Code for Inno 5.1.9
#define _AppDir_ "MyAppName"


[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={#_appdir_}
DefaultGroupName=My Program
Compression=lzma
SolidCompression=true
DisableProgramGroupPage=true
UsePreviousGroup=false
ShowLanguageDialog=no
OutputBaseFilename=drivesOnly
OutputDir=output


[Files]
Source: feature.txt; DestDir: {app}


[Dirs]
; Create Sub directories required
Name: {app}/backup
Name: {app}/temp
Name: {app}/tutorial
Name: {app}/images

[Messages]
SelectDirBrowseLabel=To continue, click Next. If you would like to select a different drive, choose from the list.

[Code]
var
// combo box for drives
cbDrive : TComboBox ;
// array fo string that keep the drive letters
DrvLetters: array of String;
function GetDriveType( lpDisk: String ): Integer;
external '[email protected] stdcall';

function GetLogicalDriveStrings( nLenDrives: LongInt; lpDrives: String ): Integer;
external '[email protected] stdcall';
const
DRIVE_UNKNOWN = 0; // The drive type cannot be determined.
DRIVE_NO_ROOT_DIR = 1; // The root path is invalid. For example, no volume is mounted at the path.
DRIVE_REMOVABLE = 2; // The disk can be removed from the drive.
DRIVE_FIXED = 3; // The disk cannot be removed from the drive.
DRIVE_REMOTE = 4; // The drive is a remote (network) drive.
DRIVE_CDROM = 5; // The drive is a CD-ROM drive.
DRIVE_RAMDISK = 6; // The drive is a RAM disk.
// function to convert disk type to string
function DriveTypeString( dtype: Integer ): String ;
begin
case dtype of
DRIVE_NO_ROOT_DIR : Result := 'Root path invalid';
DRIVE_REMOVABLE : Result := 'Removable';
DRIVE_FIXED : Result := 'Fixed';
DRIVE_REMOTE : Result := 'Network';
DRIVE_CDROM : Result := 'CD-ROM';
DRIVE_RAMDISK : Result := 'Ram disk'; else Result := 'Unknown';
end;
end;
// change folder accordigly to the drive letter selected
procedure cbDriveOnClick(Sender: TObject);
begin
WizardForm.DirEdit.Text := DrvLetters[ cbDrive.ItemIndex ] + UpperCase(ExpandConstant('{#_AppDir_}'));
end;
procedure FillCombo(); var
n: Integer;
drivesletters: String; lenletters: Integer;
drive: String;
disktype, posnull: Integer; sd: String;
begin
//get the system drive
sd := UpperCase(ExpandConstant('{sd}'));
//get all drives letters of system
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 ) ); // get number type of disk disktype := GetDriveType( drive ); // add it only if it is not a floppy if ( not ( disktype = DRIVE_REMOVABLE ) ) then begin cbDrive.Items.Add( drive + ' [' + DriveTypeString( disktype ) + ']' )
SetArrayLength(DrvLetters, N+1);
DrvLetters[n] := drive;
// default select C: Drive
//if ( Copy(drive,1,2) = 'C:' ) then cbDrive.ItemIndex := n;
// or default to system 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 InitializeWizard();
begin // create the combo box for drives cbDrive:= TComboBox.Create(WizardForm.SelectDirPage);
with cbDrive do
begin Parent := WizardForm.DirEdit.Parent;
Left := WizardForm.DirEdit.Left; Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height * 2;
Width := WizardForm.DirEdit.Width; Style := csDropDownList; end; // hide the Browse button WizardForm.DirBrowseButton.Visible := false; // Edit box for folder don't have to be editable WizardForm.DirEdit.Enabled := false; // fill combo box with Drives FillCombo; // set the event on combo change
cbDrive.OnClick := @cbDriveOnClick ;
end;
procedure MyAfterInstall2(FileName: String); begin MsgBox('Just installed ' + FileName + ' as ' + CurrentFileName + '.', mbInformation, MB_OK);
end;

你可能感兴趣的:(String,function,Integer,System,NetWork,disk)