Skocz do zawartości
Zaloguj się, aby obserwować  
miduraa11

Problem KeyUp

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.

Udostępnij ten post


Link to postu
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

Udostępnij ten post


Link to postu
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 :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
Zaloguj się, aby obserwować  

×