Ł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
  •