miduraa11 Napisano Grudzień 28, 2016 Zgłoś Share Napisano Grudzień 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 do komentarza Udostępnij na innych stronach More sharing options...
DevPort Napisano Grudzień 28, 2016 Zgłoś Share Napisano Grudzień 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 do komentarza Udostępnij na innych stronach More sharing options...
miduraa11 Napisano Grudzień 28, 2016 Autor Zgłoś Share Napisano Grudzień 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 do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.