如何载获在drivecombobox中选择软驱或光驱,而其中无盘时的异常?(50分)

  • 主题发起人 主题发起人 Jeny
  • 开始时间 开始时间
J

Jeny

Unregistered / Unconfirmed
GUEST, unregistred user!
如何载获在drivecombobox中选择软驱或光驱,而其中无盘时的异常?
 
没有人知道吗?
 
为什么不查查以前的回答啊,再给你贴一次。

procedure TForm1.DriveComboBox1Exit(Sender: TObject);
begin
try
if not DiskInDrive(DriveComboBox1.Drive) then
showmessage('No disk!');
except
showmessage('error');
end;
end;

function DiskInDrive(const Drive: char): Boolean;
var
DrvNum: byte;
EMode: Word;
begin
result := false;
DrvNum := ord(Drive);
if DrvNum >= ord('a') then dec(DrvNum,$20);
EMode := SetErrorMode(SEM_FAILCRITICALERRORS);
try
if DiskSize(DrvNum-$40) <> -1 then result := true
else messagebeep(0);
finally
SetErrorMode(EMode);
end;
end;
 
to duckstar:
不行,已经晚了。
 
to duckstar:
不行,已经晚了。
写在exit晚了。我的DCB连着DirectoryListBox
 
不一定放在exit事件中嘛,要不然你放在onchange事件中。
 
这个问题还没解,有哪个DFW知道???
 
Function DiskInDrive(Drive: Char): Boolean;
Var ErrorMode : word;
temoJY : boolean;
Begin
temoJY := Isjybusying;
Isjybusying := true;
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;
 
吉祥鸟你好:
你写的代码很好,可这个函数在什么时机调用能截住"I/O Error"呢?
 
在软驱中没有软盘的时候,就会不出错,你试试看
 
这可是咱们自己写的函数呀,什么事件中调用你还没告诉我的.
你回信可真快呀
 
不行还是不行,和duckstar给我的代码结果一样.
另外,
temoJY := Isjybusying;
Isjybusying := true;
不知你这两句是什么意思
 
在程序中不要将Drivecombobox和DirectoryListBox1关联起来,否则就会出错
Function DiskInDrive(Drive:Char):Boolean;
Var ErrorMode :word;
temoJY :boolean;
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 Not DIskINDrive(Drivecombobox1.Drive) Then
Begin
SHowmessage('NO Disk');
Drivecombobox1.Drive:=DirectoryListBox1.Drive;
exit;
End;
DirectoryListBox1.Drive:=Drivecombobox1.Drive;
End;
 
后退
顶部