Mam takie pytania:
Aktualnie tworzę program do obliczeń, w którym użytkownik ma wpisywać elementy działania do elementu Edit. Czy jest możliwe, aby nie miał on możliwości wpisać tam innych znaków niż cyfry oraz przecinek (znak jest wybierany w innym miejscu). Najlepszym rozwiązaniem byłoby od razu stworzenie tego dla czterech Edit. Czy da się to od razu połączyć z zablokowaniem wpisywania zera i jedynki? Mam Delphi 6
Z góry dziękuję
Zamiast tłumaczyć, dam coś do poczytania. Juhas napisał bardzo ładny artykuł na ten temat: Ograniczenie wpisywanych znaków do TEdit. Nawet jeśli nie wykorzystasz takiego rozwiązania, możesz w kodzie podejrzeć jak to się robi :)
Można i to bez problemu ;-)
W zdarzeniu OnKeyPress:
Const Dozwolone: Set Of Char = ['-', 'e', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',', #8];
begin
if Not (Key In Dozwolone) Then
Key := #0;
end;
#8
to backspace
Edit: Dodałem "-" oraz "e".
Rozumiem, że litery nie przyjmie pomijając ją i umożliwiając pisanie dalej. A gdzie to należy wpisać w kod?
to ja dodam, że to nie do końca działa - nie można wpisać liczby z e, nie można wpisać liczby ujemnej, nie bierze pod uwagę ustawień lokalnych
W OnKeyPress edita wpisz
var
OldValue, NewValue: string;
SelS, SelL: Integer;
Val: Single;
begin
if Key > #31 then
begin
OldValue := TEdit(Sender).Text;
NewValue := OldValue;
SelS := TEdit(Sender).SelStart;
SelL := TEdit(Sender).SelLength;
Delete(NewValue, SelS, SelL);
Insert(Key, NewValue, SelS + 1);
if not TryStrToFloat(NewValue, val) then
begin
Key := #0;
TEdit(Sender).Text := OldValue;
end;
end;
dal całkowitych wystarczy zmienić TryStrToFloat na TryStrToInt i typ zmiennej val z single na integer
A tak dla kogoś kto się praktycznie nie zna to co to robi? Bo nie chodzi mi o skopiowanie kodu i załatwienie sprawy.
var
editMgr: TEditManager;
begin
editMgr:=TEditManager.Create;
editZOgraniczeniem.OnKeyPress:=editMgr.KeyPressInteger;
end;
Takie coś spowoduje możliwość wpisania jedynie cyfr(liczba całkowita) w edicie: EditZOgraniczeniem.
Oczywiście pamiętajcie o zwolnieniu klasy, gdy już nie będzie potrzebna(dla mało kumatych: editMgr.Free)
To jest wycinek z poleconego wcześniej artykułu, gdzie wrzucić ten kod, aby poszło? I jakie znaczenie ma tu zwolnienie klasy?
EDIT: Dzięki wielkie za pomoc. Udało mi się rozwiązać ten problem. Temat raczej do zamknięcia.
Można dodać metodę dla zdarzenia OnPressKey:
if not (key in ['0'..'9',#8{backspace},#9{tab}]) then
begin
Key := #0;
MessageBeep(0);
end;
dodanie znaczników <code class="delphi"> - fp
1 linijka kodu załatwia sprawę + blokuje wrzucenie śmieci z Ctrl+V :-)
SetWindowLong(Edit.Handle, GWL_STYLE, GetWindowLong(Edit.Handle, GWL_STYLE) or ES_NUMBER);