如何让DriveCombox更新Drive的列表? 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 它就是一個COMBOBOX下拉就是了啊。 你是不是要關聯路徑啊? DriveComboBox1.TextCase:= tcUpperCase;只要定时执行上语句或在需要时执行上语句即可刷新drive列表或监控文件夹,当发现新增驱动器时执行上句监控文件夹方法论坛上有,就不多说了 如果你只是說U盤插入後不能更新可以在插入後重新獲取。const DBT_DEVICEARRIVAL = $8000; // system detected a new device DBT_DEVICEREMOVECOMPLETE = $8004; // device is gone DBT_DEVTYP_VOLUME = $00000002; // logical volume DBTF_MEDIA = $0001; // media comings and goingsPDEV_BROADCAST_HDR = ^TDEV_BROADCAST_HDR; TDEV_BROADCAST_HDR = packed record dbch_size : DWORD; dbch_devicetype : DWORD; dbch_reserved : DWORD; end; PDEV_BROADCAST_VOLUME = ^TDEV_BROADCAST_VOLUME; TDEV_BROADCAST_VOLUME = packed record dbcv_size : DWORD; dbcv_devicetype : DWORD; dbcv_reserved : DWORD; dbcv_unitmask : DWORD; dbcv_flags : WORD; end;private procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;procedure TForm1.WMDeviceChange(var Msg: TMessage);var lpdb : PDEV_BROADCAST_HDR; lpdbv : PDEV_BROADCAST_VOLUME; unitmask:DWORD; i,attr:integer; inifile:TIniFile;begin lpdb := PDEV_BROADCAST_HDR(Msg.LParam); case Msg.WParam of DBT_DEVICEARRIVAL ://有設備安裝完畢 if lpdb.dbch_devicetype=DBT_DEVTYP_VOLUME then begin lpdbv := PDEV_BROADCAST_VOLUME(lpdb); unitmask:=lpdbv.dbcv_unitmask;//取得設備的盤符 for i:=0 to 25 do //遍歷磁盤 begin if Boolean(unitmask and $1)then//看該驅動器的狀態是否發生了變化 break; unitmask := unitmask shr 1; end; end; DBT_DEVICEREMOVECOMPLETE: begin MessageDlg('Your disk is removed!',mtWarning,[mbOK],0); end; end;end; 很菜的问题 各位大侠帮帮忙!在线等! 在Dbgrid中增加记录~~~~~~~~~~`` 请问,为什么我的所有office工具打开的相关文档都成了只读文件呢? 怎么使用TListview,请大家教教小弟(在线等待)! 如何发现本系统已经运行? 极菜问题,database desktop 怎么给新建的表加密码? 各位大虾进来看看!!! 我的移位操作为什么得不到需要的结果呢???请高手指教!! !!!!!!!!!!我真的不知道该怎么办了! 如何实现将一个窗口设置成为无边框的,总在最前面的窗口??? 100分树形问题(在线等) ComboBox去相同记录的问题,请教大家!
只要定时执行上语句或在需要时执行上语句即可刷新drive列表
或监控文件夹,当发现新增驱动器时执行上句
监控文件夹方法论坛上有,就不多说了
DBT_DEVICEARRIVAL = $8000; // system detected a new device
DBT_DEVICEREMOVECOMPLETE = $8004; // device is gone
DBT_DEVTYP_VOLUME = $00000002; // logical volume
DBTF_MEDIA = $0001; // media comings and goings
PDEV_BROADCAST_HDR = ^TDEV_BROADCAST_HDR;
TDEV_BROADCAST_HDR = packed record
dbch_size : DWORD;
dbch_devicetype : DWORD;
dbch_reserved : DWORD;
end;
PDEV_BROADCAST_VOLUME = ^TDEV_BROADCAST_VOLUME;
TDEV_BROADCAST_VOLUME = packed record
dbcv_size : DWORD;
dbcv_devicetype : DWORD;
dbcv_reserved : DWORD;
dbcv_unitmask : DWORD;
dbcv_flags : WORD;
end;
private
procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
procedure TForm1.WMDeviceChange(var Msg: TMessage);
var
lpdb : PDEV_BROADCAST_HDR;
lpdbv : PDEV_BROADCAST_VOLUME;
unitmask:DWORD;
i,attr:integer;
inifile:TIniFile;
begin
lpdb := PDEV_BROADCAST_HDR(Msg.LParam);
case Msg.WParam of
DBT_DEVICEARRIVAL ://有設備安裝完畢
if lpdb.dbch_devicetype=DBT_DEVTYP_VOLUME then
begin
lpdbv := PDEV_BROADCAST_VOLUME(lpdb);
unitmask:=lpdbv.dbcv_unitmask;//取得設備的盤符
for i:=0 to 25 do //遍歷磁盤
begin
if Boolean(unitmask and $1)then//看該驅動器的狀態是否發生了變化
break;
unitmask := unitmask shr 1;
end;
end;
DBT_DEVICEREMOVECOMPLETE:
begin
MessageDlg('Your disk is removed!',mtWarning,[mbOK],0);
end;
end;
end;