{代碼如下}
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, FileCtrl, StdCtrls;type
TForm1 = class(TForm)
DriveComboBox1: TDriveComboBox;
FileListBox1: TFileListBox;
DirectoryListBox1: TDirectoryListBox;
procedure DriveComboBox1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
DriverName:Char;implementation{$R *.dfm}
function DiskInDrive(Drive: Char): Boolean;
var ErrorMode: word;
begin
//將字母轉為大寫
if Drive in ['a'..'z'] then Dec(Drive, $20);
//確認參數為字母
if not (Drive in ['A'..'Z']) then
raise EConvertError.Create('Not a valid drive ID');
//觸發異常
ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
try
if DiskSize(Ord(Drive) - $40) = -1 then
Result := False
else
Result := True;
finally
SetErrorMode(ErrorMode);
end;
end;procedure TForm1.DriveComboBox1Change(Sender: TObject);
begin
if DiskInDrive(DriveComBoBox1.Drive ) then
showmessage('Driver Ready.')
else
showmessage('Driver Not Ready.');
end;
{這段代碼,在程序一運行的時候就判斷驅動器了,還有就是在選擇DriveComBoBox1的驅動器的時候,會產生兩次提示.要怎麼樣才能使程序在開始運行的時候不作判斷,而且在選擇DriveComBobox的盤符時,不產生兩次判斷(即彈出兩次MessageBox)?}
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, FileCtrl, StdCtrls;type
TForm1 = class(TForm)
DriveComboBox1: TDriveComboBox;
FileListBox1: TFileListBox;
DirectoryListBox1: TDirectoryListBox;
procedure DriveComboBox1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
DriverName:Char;implementation{$R *.dfm}
function DiskInDrive(Drive: Char): Boolean;
var ErrorMode: word;
begin
//將字母轉為大寫
if Drive in ['a'..'z'] then Dec(Drive, $20);
//確認參數為字母
if not (Drive in ['A'..'Z']) then
raise EConvertError.Create('Not a valid drive ID');
//觸發異常
ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
try
if DiskSize(Ord(Drive) - $40) = -1 then
Result := False
else
Result := True;
finally
SetErrorMode(ErrorMode);
end;
end;procedure TForm1.DriveComboBox1Change(Sender: TObject);
begin
if DiskInDrive(DriveComBoBox1.Drive ) then
showmessage('Driver Ready.')
else
showmessage('Driver Not Ready.');
end;
{這段代碼,在程序一運行的時候就判斷驅動器了,還有就是在選擇DriveComBoBox1的驅動器的時候,會產生兩次提示.要怎麼樣才能使程序在開始運行的時候不作判斷,而且在選擇DriveComBobox的盤符時,不產生兩次判斷(即彈出兩次MessageBox)?}
procedure TForm1.DriveComboBox1Change(Sender: TObject);
begin
DriveComboBox1.OnChange := nil; //加入这行
if DiskInDrive(DriveComBoBox1.Drive ) then
showmessage('Driver Ready.')
else
showmessage('Driver Not Ready.');
end;procedure TForm1.FormCreate(Sender: TObject);
begin
DriveComboBox1.OnChange := nil;//加入这行
end;procedure TForm1.FormShow(Sender: TObject);
begin
DriveComboBox1.OnChange := Form1.DriveComboBox1Change;
end;procedure TForm1.DriveComboBox1Click(Sender: TObject);
begin
DriveComboBox1.OnChange := Form1.DriveComboBox1Change;
end;