{代碼如下}
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)?}

解决方案 »

  1.   

    修改代码如下:
    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;