Jump to content
Sign in to follow this  
miduraa11

Problem KeyUp

Recommended Posts

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...