Capturar una excepción de un DriveCombobox

Tengo una aplicación a la cual le he incluido un componente Drivecombobox y un DirectoryListBox. Necesito capturar una excepción para cuando no este preparada la unidad de disco flexible o de disco extraíble, y si no esta preparada que mande un mensaje personalizado, ya intente poner algunas instrucciones (try.. Except)en el evento Onchange del Drivecombobox pero no he tenido éxito.
1

1 Respuesta

47.200 pts. Analista/Programador de Sistemas Oracle
Aquí tienes varias cosas para probar...
1...
procedure TForm1.MydrivecomboboxChange(Sender: TObject);
begin
try
Mydirectorylistbox.drive := Mydrivecombobox.drive;
except on EInOutError do
messagedlg(#13 + 'the selected drive, or device is not ready'+ #13,
mtwarning, [mbok], 0);
end;
end;
2..........
En el Evento onChange de DriveComboBox:
Try
ChDir(cbDrive.drive+':');
Except
MessageDlg('La unidad especificada no está
lista',mtError,[mbOK],0);
cbDrive.Drive := GetCurrentDir[1];
End;
3..........
procedure TForm1.DriveComboBox1Change(Sender: TObject);
begin
try
DirectoryListBox1.Drive := DriveComboBox1.Drive;
except
MessageDlg('The drive is not ready!',mtError,[mbOK],0);
end;
end;
4..........
procedure TForm1.DriveComboBox1Change(Sender: TObject);
begin
if DirectoryExists(DriveComboBox1.Drive+':\') then
DirectoryListBox1.Drive := DriveComboBox1.Drive
else
{ reset DriveComboBox1.Drive to something if you want }
end;
5..........
Es del truco [34] de Trucomania (www.q3.nu)
function DiskInDrive(Drive: Char): Boolean;
var
ErrorMode: word;
begin
{ make it upper case }
if Drive in ['a'..'z'] then Dec(Drive, $20);
{ make sure it's a letter }
if not (Drive in ['A'..'Z']) then
raise EConvertError.Create('Not a valid drive ID');
{ turn off critical errors }
ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
try
{ drive 1 = a, 2 = b, 3 = c, etc. }
if DiskSize(Ord(Drive) - $40) = -1 then
Result := False
else
Result := True;
finally
{ restore old error mode }
SetErrorMode(ErrorMode);
end;
end;
Un ejemplo de cómo llamarla:
if DiskInDrive('a') then...
Esta es más guay:
if FileExists('a:\NUL') then
ShowMessage('Disco A preparado') {Drive Ready}
else
ShowMessage('Disco A NO preparado'); {Drive NOT Ready}
Es del truco [62] de Trucomania (www.q3.nu)
Para hacer lo que pide, lo del DriveCombo... supongo que además del
DriveCombo usará un DirectoryListBox y un FileListBox y los tendrá
enlazados...
De por sí, la DriveComboBox no da error al seleccionar la
disquetera... es la DirectoryBox o la FileListBox la que da error al
intentar pillar los directorios y ficheros que tiene...
Así que... con interceptar la unión DriveComboBox -> DirectoryListBox
y chequear la unidad... se acabo el problema:
Pon esto en el OnChange de la DriveComboBox:
procedure TForm1.DriveComboBox1Change(Sender: TObject);
begin
If FileExists(DriveComboBox1.Drive+':\NUL')
then DirectoryListBox1.Drive:=DriveComboBox1.Drive;
end;
Y borra la propiedad DirList de DriveComboBox1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas