Peter Dassow
2020-11-08 16:34:53 UTC
Hallo, suche Hilfe beim Abfangen eines nicht setzbaren Laufwerks.
Es soll versucht werden, Laufwerk D: anzusprechen.
Wenn Laufwerk D: nicht existiert, soll der Benutzer mit Hilfe einer
Abfrage die Möglichkeit bekommen, ein USB-Memory-Stick zu benutzen (so
dass dann nach dem Einstecken Laufwerk D: existiert).
Der Refresh der DriveComboBox geschieht mit dem erneuten Zuweisen des
Attributs textcase.
Leider wird genau einmal der Fehler abgefangen, wenn der User 'Ja'
anwählt, und der Refresh stattfindet, läuft das Programm in eine
Fehlermeldung ohne erneute Fehlerbehandlung.
Im Ereignis OnCreate des Formulars Form1 steht folgendes:
var confirm:Integer;
is_successful:Boolean;
Begin
confirm:=mrYes;
is_successful:=False;
while (is_successful=False) AND (confirm=mrYes) do
begin
Try
{ try to set the drive to D: }
DriveComboBox1.Drive:='d';
DriveComboBox2.Drive:='d';
FileListBox1.Drive:='d';
is_successful:=True;
confirm:=mrNo; { if this statement is reached, no need to ask
again }
Except
confirm:=MessageDlg('There is no drive D:
!'+Chr(13)+Chr(10)+'Connect an USB storage drive.'
+Chr(13)+Chr(10)+'If confirmed, a retry will be
started.' ,mtError,[mbYes,mbNo],0);
is_successful:=False;
End;
if (confirm=mrNo) and (is_successful=False) then
{ only in case of it wasn't successful the user's choice is
important }
{ the user don't like to go on, so terminate the application
immediately }
Begin
Application.Terminate;
Exit;
End;
{ in any case a refresh of the DriveComboBox can be done now }
{ if it isn't successful,
with DriveComboBox1 do
textcase := textcase; { that should enforce the refresh of the
DriveComboBox }
End; { end of while loop }
End;
Gewollt ist, dass nach dem Beantworten mit 'Ja' erneut versucht wird,
auf das Laufwerk D: zu wechseln.
Wo muss der textcase-Refresh hin, damit die Fehlerbehandlung erneut wirkt ?
Es soll versucht werden, Laufwerk D: anzusprechen.
Wenn Laufwerk D: nicht existiert, soll der Benutzer mit Hilfe einer
Abfrage die Möglichkeit bekommen, ein USB-Memory-Stick zu benutzen (so
dass dann nach dem Einstecken Laufwerk D: existiert).
Der Refresh der DriveComboBox geschieht mit dem erneuten Zuweisen des
Attributs textcase.
Leider wird genau einmal der Fehler abgefangen, wenn der User 'Ja'
anwählt, und der Refresh stattfindet, läuft das Programm in eine
Fehlermeldung ohne erneute Fehlerbehandlung.
Im Ereignis OnCreate des Formulars Form1 steht folgendes:
var confirm:Integer;
is_successful:Boolean;
Begin
confirm:=mrYes;
is_successful:=False;
while (is_successful=False) AND (confirm=mrYes) do
begin
Try
{ try to set the drive to D: }
DriveComboBox1.Drive:='d';
DriveComboBox2.Drive:='d';
FileListBox1.Drive:='d';
is_successful:=True;
confirm:=mrNo; { if this statement is reached, no need to ask
again }
Except
confirm:=MessageDlg('There is no drive D:
!'+Chr(13)+Chr(10)+'Connect an USB storage drive.'
+Chr(13)+Chr(10)+'If confirmed, a retry will be
started.' ,mtError,[mbYes,mbNo],0);
is_successful:=False;
End;
if (confirm=mrNo) and (is_successful=False) then
{ only in case of it wasn't successful the user's choice is
important }
{ the user don't like to go on, so terminate the application
immediately }
Begin
Application.Terminate;
Exit;
End;
{ in any case a refresh of the DriveComboBox can be done now }
{ if it isn't successful,
with DriveComboBox1 do
textcase := textcase; { that should enforce the refresh of the
DriveComboBox }
End; { end of while loop }
End;
Gewollt ist, dass nach dem Beantworten mit 'Ja' erneut versucht wird,
auf das Laufwerk D: zu wechseln.
Wo muss der textcase-Refresh hin, damit die Fehlerbehandlung erneut wirkt ?