Skocz do zawartości

Problem KeyUp


miduraa11

Polecane posty

Witam

 

Mam pewnie problem z procedurą KeyUp.

 

Chcę zablokować wpisywanie niedozwolonych znaków.

 

Kawałek kodu:

 

if not (Key in ['0'..'9']) then
 Key := #0
 else
 begin  (kod działający poprawnie) end

 

Program ma za zadanie wczytywać w TMemo1 jakąś cyfrę (string) i wypisywać w TMemo2 jej dzielniki od 1 do 11.

 

Program się wysypywał jeśli wpisałem coś innego jak cyfrę, gdy dodałem ten kawałek kodu to przestał się wysypywać, ale nadal jestem w stanie wpisywać litery.

 

Jak mogę to zablokować? Jeśli jest coś innego jak cyfra to żeby mi zablokowało klawiaturę.

 

KeyDown i KeyPress nie wchodzi niestety w grę, bo gdy wpiszę dla przykładu cyfrę '2' to nic mi nie wypisze, a gdy dopiszę jeszcze '0' to wyświetla mi dzielniki dla '2' a nie dla '20'.

 

Da się tak zablokować klawiature na KeyUp?

 

Z góry przepraszam, ale to mój pierwszy post gdyby było coś nie tak.

Link do komentarza
Udostępnij na innych stronach

Nie da się zmienić kodu klawisza, który ma zostać dodany do zawartości memo w innych funkcjach jak KeyPress.

 

W Twoim wypadku do KeyPress wstaw:

if not (Key in ['0'..'9', #8] ) then begin
Key := #0;
if Memo1.Lines.text <> '' then
  Label1.Caption := IntToStr(StrToInt(Memo1.Lines.text));
end;

 

Nie wiem czy o to chodziło... ;]

Ps. Gdy w KeyPress robisz taki warunek to pamiętaj, aby obsługiwać wszelkie klawisze np Backspace = #8, aby móc później kasować zawartość Memo czy edit'a

Prawdziwy programista wiesza sie wraz ze swoim programem.

Link do komentarza
Udostępnij na innych stronach

Nie da się zmienić kodu klawisza, który ma zostać dodany do zawartości memo w innych funkcjach jak KeyPress.

 

W Twoim wypadku do KeyPress wstaw:

if not (Key in ['0'..'9', #8] ) then begin
Key := #0;
if Memo1.Lines.text <> '' then
  Label1.Caption := IntToStr(StrToInt(Memo1.Lines.text));
end;

 

Nie wiem czy o to chodziło... ;]

Ps. Gdy w KeyPress robisz taki warunek to pamiętaj, aby obsługiwać wszelkie klawisze np Backspace = #8, aby móc później kasować zawartość Memo czy edit'a

 

A możesz mi powiedzieć co to jest Label1.Caption ? I czy trzeba to wcześniej zadeklarować?

 

I z góry dziekuję za odpowiedź! :)

 

Edit.

 

Ale czy to zlikwiduje mój problem co wcześniej?

Bo gdy wpisywałem do memo1 np 2 to w memo2 nic nie pokazywało dopiero gdy nacisnąłem kolejna cyfrę np 3 to wyskakiwały mi dzielniki dla 2 nie dla 23.

Tego problemu dalej nie będzie?

 

Edit 2.

 

W miedzy czasie wymyśliłem coś takiego :D

 

procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Char; Shift: TShiftState);
var
 i, dlugosc_memo1, linia : integer;
 napis,wyraz, NoweMemo : string;
begin
 if Key in ['0'..'9',#8] then
 begin
(obliczanie jakie dzielniki)
 end else
 begin
NoweMemo := Copy (Memo1.Text,0,(length(Memo1.text)-1));
Memo1.Lines.Clear;
Memo1.Text := NoweMemo; (caly napis ten sam ale jeśli dam inny znak niz 0 - 9 to kopjuje cale memo bez zle wpisanego znaku)
begin
(znowu obliczanie jakie dzielniki)
end;
 end;

endł

 

Może trochę przekombinowane ale działa tak jak chciałem :D

 

Edit 3

 

Dobra jednak to nie był dobry pomysł :D

Nadal mogę wpisywać litery gdy np kursorem kliknę pomiędzy cyfry, strzałki i enter nie działają itd..

Także dalej szukam pomocy w rozwiązaniu tego :)

 

Edit 4

 

Ok już sobie poradziłem z tym problemem :)

Dodałem KeyUp i KeyDown jednocześnie i działa :)

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...