Problem z DriveComboBox

Problem z DriveComboBox
CI
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 17 lat
0

Jak wybiorę w DriveComboBoxie napęd CD, w którym nie ma aktualnie płyty wywala mi błąd...Co zrobić, żeby po wybraniu pustego napędu wyświetlić np. prośbę o włożenie płyty ?? [glowa]


mcbury
  • Rejestracja:prawie 22 lata
  • Ostatnio:prawie 15 lat
0

Proponuje zrobić to tak z

Kopiuj
try

http://mcbury.prv.pl <== i wszystko jasne..
<img src="http://www.gixi.net/lamzasady/propaganda/baner1_150x60.png" alt="user image" />
CI
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 17 lat
0

To nic nie daje...Chyba, że robię coś źle...Oto kawałek kodu:

Kopiuj
procedure TForm1.DriveComboBox1Change(Sender: TObject);
begin
try
DirectoryListBox1.Update;
except
ShowMessage('Błąd!!!');
end;
    end;

I po wybraniu pustego napędu CD pojawia się komunikat "I/O Error 21" Może jest jakiś inny sposób...


BE
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 19 lat
0
Kopiuj
try
DirectoryListBox1.Update;

Stosujesz procedurę Update dla komponentu TDirectoryListBox zupełnie nie wiadomo w jakim celu (Update znaczy to samo, co Refresh, czyli odśwież zawartość - The update command repaints the current frame into the specified device context (DC)). Pojawiający się błąd, to NOT_READY - Urządzenie nie jest gotowe (nr błędu: 21). Należy obsłużyć ten wyjątek za pomocą deklaracji try...except

Dla przykładu:

Kopiuj
 try
  ...
  except
   on EInOutError do
    ShowMessage('Urządzenie nie jest gotowe');
 end;

Co na ten temat sądzi pomoc Delphi:
EInOutError is raised when an file input/output error occurs, provided I/O checking is enabled.

In Delphi code, use the

Kopiuj
{$I+}

directive to enable I/O checking. If an I/O error occurs while this directive is disabled, the application must call IOResult to clear the error.

1

Ja rozwiązałem ten problem inaczej i działa.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Forms,
Dialogs, StdCtrls, FileCtrl, Controls;

type
TForm1 = class(TForm)
DriveComboBox1: TDriveComboBox;
DirectoryListBox1: TDirectoryListBox;
procedure DriveComboBox1Click(Sender: TObject);
procedure DriveComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1 : TForm1;
NextDrive : Char;
PreviousDrive : Char;
PreviousDirListDriveCombobox: TDirectoryListBox;

implementation

{$R *.dfm}

procedure TForm1.DriveComboBox1Change(Sender: TObject);
begin
NextDrive := DriveComboBox1.Drive;
If DiskFree(Ord(UpCase(NextDrive)) - Ord('A') + 1) <> -1 then
begin
DirectoryListBox1.Drive := DriveComboBox1.Drive;
end
else
begin
ShowMessage('drive not ready');
DriveComboBox1.Drive := PreviousDrive;
DriveComboBox1.DirList := DirectoryListBox1;
end;
end;

procedure TForm1.DriveComboBox1Click(Sender: TObject);
begin
PreviousDrive := DriveComboBox1.Drive;
PreviousDirListDriveCombobox := DriveComboBox1.DirList;
DriveComboBox1.DirList := nil ;
end;

end.

ŁF
Moderator
  • Rejestracja:ponad 22 lata
  • Ostatnio:3 dni
0

nekrofilu, ten wątek ma PIĘĆ lat!


AD
  • Rejestracja:około 18 lat
  • Ostatnio:5 miesięcy
  • Postów:206
0

ale moze sie komuś przyda google dalej je znajduje.

0

A czy kogoś zastanowił ten fakt, że skoro ten wątek ma pięć lat, to dlaczego nikt go wcześniej tu nie umieścił ?

SE
  • Rejestracja:około 20 lat
  • Ostatnio:ponad 15 lat
0

Proponuj wg mnie coś bardziej prostego...

  1. ApplicationEvents
  2. ApplicationEvents.OnException
Kopiuj
if E.Message = 'I/O error 21'
  then
    MessageBox(Handle, 'Urządzenie nie jest gotowe!', 'Blad..', MB_ICONSTOP+MB_OK);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.