miduraa11 Posted December 28, 2016 Report Share Posted December 28, 2016 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 to comment Share on other sites More sharing options...
DevPort Posted December 28, 2016 Report Share Posted December 28, 2016 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 to comment Share on other sites More sharing options...
miduraa11 Posted December 28, 2016 Author Report Share Posted December 28, 2016 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 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 Edit 3 Dobra jednak to nie był dobry pomysł 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 to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.