Hej! Może mi ktoś pomóc w zabezpieczeniu TEdit przed wpisaniem litery? Próbowałem przy użyciu Val, tka jak w aplikacji konsolowej....ale nie działa mi jeśli chodzi o aplikację okienkową. Jest jakiś porosty sposób, dzięki któremu można to zrobić?
W zdarzeniu OnKeyPress dla Edita sprawdzasz czy wpisany znak jest literą.
Przykład:
procedure TForm.Edit1KeyPress(Sender: TObject; var Key: Char);
var
Alphabet: set of 'A'..'z';
begin
if (Key in Alphabet) then //jezeli wprowadzony znak jest litera
begin
Key := #0; //zamien ten znak na pusty
MessageBeep(0);
end;
end;
@Sauler - Twój zakres wyklucza znaki pomiędzy Z
a a
, czyli o kodach od 91
do 96
; Jeśli już to tak:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
if Key in ['A' .. 'Z', 'a' .. 'z'] then
Key := #0;
end;
PS: Nadal można wpisywać litery - np. polskie znaki diakrytyczne :]
PS: Gdyby było wiadomo do czego ma służyć ta filtracja, to może lepszym rozwiązaniem okazała by się white-lista.
Dzięki wielkie! :D
Aż mi głupio, że to było takie proste, a ja nie wiedziałem
To ma być prosty program do szkoły, który oblicza najważniejsze rzeczy dotyczące równań kwadratowych. Czyli w TEdit mogą znajdować się wyłącznie cyfry i przecinek.
No to lepszym rozwiązaniem jest użycie innego komponentu;
Jeśli robisz ten program w Lazarusie to w zakładce Misc znajduje się komponent TFloatSpinEdit
- umożliwia on wpisywanie lub wyklikiwanie liczb całkowitych i zmiennoprzecinkowych; Sporo rzeczy możesz sobie wyklikać w okienku Inspektora Obiektów, więc on najbardziej nadaje się do tego celu; I nie będziesz się musiał też martwić o konwersję - ten komponent ma właściwość Value
typu Double, gotową do wykorzystania.
O to dobre rozwiązanie. Myślę, że wszytko (przynajmniej teraz) działa jak trzeba :D
Jeszcze raz dzięki za pomoc!