Ładny brzuch
Witam
stosujac sie do instrukcji z FAQ probowalem podczas zamiany StrToInt zastosowac try...except...niestety nadal program mi sie zwiesza i pisze ze wystapil blad zamiany, mimo ze go wczesniej "wyeliminowalem"
procedure TForm1.Edit1Change(Sender: TObject); var a:integer; begin try a:=StrToInt(Edit1.Text); except on E:Exception do begin ShowMessage('To nie jest poprawna liczba'); a := 0; end; end;
i przy okazji inne pytanie, czy da sie jakos zrobic zeby uzytkownik programu nie mogl korzystac z klawiasz Backspace i Delete?
Prosilbym o pomoc
Uytkownik chrisxx edytowa ten post 26 maj 2005, 00:03
Bd powinien wystpowa tylko i wycznie w momencie kiedy jest uruchomione Delphi. A co do blokowania klawiszy to oczywicie, e mona. Sprawdzasz jaki klawisz nacisn user porwnujesz, jeeli ten przycisk ma nie by uyty to wtedy dajesz key:= #00; Sam procedure dajesz w onkeydown
Napisz jakiego delphi uzywasz, bo ja miaem podobne problemy. :)
Uzywam Delphi 7 Enterprise.
PcSA wielkie dzieki, rzeczywiscie problem jest tylko w przypadku uruchomionego Delphi, a dokaldniej gdy program odpalam z Delphi.
Uytkownik chrisxx edytowa ten post 26 maj 2005, 08:17
Widzisz, to co robisz jest bardzo niedobre. Nie powinno sie uciekac przed bledem, i "ukrywac" jego skutki. Znacznie lepiej jest upewnic sie czy ciag znakow jest liczba. Najlepiej zrobic tak:
function isint(s: string): boolean; var i: integer; begin result := False; if s = '' then begin exit; end; for i:=1 to length(s) do begin if not (s[i] in ['0'..'9']) then begin if not ((s[i] = '-') and (i=1)) then begin exit; end; end; end; result := True; end; [....] if IsInt(Edit1.Text) then a:=StrToInt(Edit1.Text);
migajek: ale on chyba nie ukrywa skutkw bdu, gdy w razie jego wystpienia przypisuje zmiennej a warto 0. Bdem za to jest E: Exception.
Nie prociej tak? :
try a := StrToInt(Edit1.Text); except on EConvertError do //tylko ten jedyny wyjatek obsugujemy ShowMessage('bad); a := 0; end;
Naprawd nie warto uywa nigdy E: Exception.
A co do klawiszy, to tak jak poda Cyrkiel. W onkeypress piszesz:
if (key = #46) or (key = #8) then key := #0;
#46 - kod klawisza Delete
#8 - kod klawisza Backspace
//z reszt napisaem to w FAQ.
~~
To co napisales, to przechwytywanie bledu. IMHO lepiej dmo niego nie dopuszczac ;)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
stosujac sie do instrukcji z FAQ probowalem podczas zamiany StrToInt zastosowac try...except...niestety nadal program mi sie zwiesza i pisze ze wystapil blad zamiany, mimo ze go wczesniej "wyeliminowalem"
procedure TForm1.Edit1Change(Sender: TObject); var a:integer; begin try a:=StrToInt(Edit1.Text); except on E:Exception do begin ShowMessage('To nie jest poprawna liczba'); a := 0; end; end;
i przy okazji inne pytanie, czy da sie jakos zrobic zeby uzytkownik programu nie mogl korzystac z klawiasz Backspace i Delete?
Prosilbym o pomoc
Uytkownik chrisxx edytowa ten post 26 maj 2005, 00:03
Bd powinien wystpowa tylko i wycznie w momencie kiedy jest uruchomione Delphi. A co do blokowania klawiszy to oczywicie, e mona. Sprawdzasz jaki klawisz nacisn user porwnujesz, jeeli ten przycisk ma nie by uyty to wtedy dajesz key:= #00; Sam procedure dajesz w onkeydown
Napisz jakiego delphi uzywasz, bo ja miaem podobne problemy. :)
Uzywam Delphi 7 Enterprise.
PcSA wielkie dzieki, rzeczywiscie problem jest tylko w przypadku uruchomionego Delphi, a dokaldniej gdy program odpalam z Delphi.
Uytkownik chrisxx edytowa ten post 26 maj 2005, 08:17
Widzisz, to co robisz jest bardzo niedobre. Nie powinno sie uciekac przed bledem, i "ukrywac" jego skutki. Znacznie lepiej jest upewnic sie czy ciag znakow jest liczba. Najlepiej zrobic tak:
function isint(s: string): boolean; var i: integer; begin result := False; if s = '' then begin exit; end; for i:=1 to length(s) do begin if not (s[i] in ['0'..'9']) then begin if not ((s[i] = '-') and (i=1)) then begin exit; end; end; end; result := True; end; [....] if IsInt(Edit1.Text) then a:=StrToInt(Edit1.Text);
migajek: ale on chyba nie ukrywa skutkw bdu, gdy w razie jego wystpienia przypisuje zmiennej a warto 0. Bdem za to jest E: Exception.
Nie prociej tak? :
try a := StrToInt(Edit1.Text); except on EConvertError do //tylko ten jedyny wyjatek obsugujemy ShowMessage('bad); a := 0; end;
Naprawd nie warto uywa nigdy E: Exception.
A co do klawiszy, to tak jak poda Cyrkiel. W onkeypress piszesz:
if (key = #46) or (key = #8) then key := #0;
#46 - kod klawisza Delete
#8 - kod klawisza Backspace
//z reszt napisaem to w FAQ.
~~

To co napisales, to przechwytywanie bledu. IMHO lepiej dmo niego nie dopuszczac ;)
