Jak zablokować wpisywanie innych znaków niż cyfry do Edit w Delphi?

0

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ę

0

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 :)

2

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".

Zbiory

0

Rozumiem, że litery nie przyjmie pomijając ją i umożliwiając pisanie dalej. A gdzie to należy wpisać w kod?

1

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

0

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.

0

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

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);

1 użytkowników online, w tym zalogowanych: 0, gości: 1