如何捕捉drivecomcobox变化的信息(50分)

  • 主题发起人 主题发起人 hb9999
  • 开始时间 开始时间
H

hb9999

Unregistered / Unconfirmed
GUEST, unregistred user!
1。捕捉drivecomcobox变为未准备好的驱动器的错误消息
2.当前drive为光盘时,user弹出光盘的消息
 
1。捕捉drivecomcobox变为未准备好的驱动器的错误消息
你是不是加进了一些其他的即时响应呀,把那段控制disable
2.当前drive为光盘时,user弹出光盘的消息
var
error:longint;
SetParm: TMCI_set_Parms;
begin
SetParm.dwCallback := Handle;
error:=mcisendcommand(mediaplayer1.deviceid,mci_set,mci_set_door_open,Longint(@SetParm));
end;
 
不好意思,刚才贴上的是tmediaplayer打开光驱的:-)
 
1.没有加进一些其他的即时响应呀,出现Einouterror 21错误消息
无法变为自己的提示信息
 
关键是你要知道产生错误的代码是那一段,然后用try捕捉即可如:

try
//你的代码
except
On E: EInOutError do
...
end;
 
光盘弹出时,windows 应该有消息通知的,查一查吧,请高手回答。
 
附加功能 将问题提前
 
hb9999:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
其实,目前大富翁上所有关于DRIVERCOMBO的回答,不外乎
利用setErrorMode(SEM_FAILCRITICALERRORS)和MCI。
这两种方式在某些情况下可以满足要求,但是局限性十分明显。
1、如果整个程序中有数十个DRIVERCOMBO,那么对每个控件都处理,岂不烦死。
2、在onchange时,I/O异常捕获发生在错误代码处理之前,因此必须用消息捕获先将I/O异常
捕获关闭,这段程序也不小。
其实,最好的方法就是直接处理异常I/O21,用GETLASTERROR得到异常代码,如果=21则显示
MESSAGEDLG,否则...。在具体程序中,可以在程序的最外层的全局异常处理中写入,这样
无论哪个DRIVERCOMBO发生这种异常,本身不处理,最后交给最外层异常处理中解决,可以
大大减小重复代码。直接对异常处理往往事半功倍,而且安全性好。这个方法我在多个程序
中都使用过,很好使。
 
接受答案了.
 
后退
顶部