Hallo allemaal,
Hoe kan ik de lettertoetsen van een toetsenbord zodanig laten werken dat
een KeyDown geen invloed heeft (repeat is dan niet meer mogelijk) en bij KeyUp
de letter wel in een Memo wordt weergegeven?
H.G. Frans
Hallo allemaal,
Hoe kan ik de lettertoetsen van een toetsenbord zodanig laten werken dat
een KeyDown geen invloed heeft (repeat is dan niet meer mogelijk) en bij KeyUp
de letter wel in een Memo wordt weergegeven?
H.G. Frans
In OnKeyDown doe Key := 0 als Key een printable character is.
Dan in OnKeyUp plaats je alsnog dat character in je memo.
Nogal omslachtig als je het mij vraagt, en behoorlijk contra-intuïtief voor de gebruiker.
Wat wil je eigenlijk precies bereiken?
Bart
Bart,
Dit werkt niet. Het is ook niet mogelijk om in OnKeyDown een waarde aan Key mee te geven. Dat is naar mijn idee wel vreemd omdat er in de procedure
staat ...; Var Key : Word,... Geld ook voor OnKeyUp.
Ik zoek een manier om herhaling bij het te lang indrukken van een karakter te voorkomen. Is er een manier om dat te doen?
H.G. Frans
Als het is voor de toegankelijkheid (iemand die moeite heeft met kort aanslaan), dan zou ik het gewoon bij de toegankelijkheidsopties van Windows instellen.
"Toegankelijkheidsopties voor toetsenbord" -> Filtertoetsen -> en dan Herhaalde toetsen aan zetten.
1+1=b
En dat zeg ik dus: als je dat doet (tenminste in Delphi), dan krijg je alsnog een karakter in de memo, omdat de OnKeyPress wordt afgevuurd.
Wanneer je ook in OnKeyPress de key op #0 zet, dan kun je "Handmatig" de gewenste functionaliteit implementeren in de OnKeyUp
Last edited by VideoRipper; 21-Feb-23 at 15:48.
Je kan beter de OnKeyPress event tijdelijk op nil zetten als je echt alleen OnKeyUp wil.
Werken aan Ansi support voor Windows is verspilde tijd, behalve voor historici.
Default staan alle events al op nil natuurlijk, dat probeer ik nou juist duidelijk te maken.
Wanneer je alleen OnKeyDown() afhandelt, waarin je de Key op 0 zet, dan krijg je toch nog een karakter in de meno
Zet je daarnaast ook nog de OnKeyPress(), en zet je daarin de key op #0 (want een char var), dan krijg je geen karakter meer en heb je de mogelijkheid om je ding te doen in de OnKeyUp event (de betreffende key in de memo zetten).
Probeer maar eens in een testprojectje (of ik moet jullie verkeerd begrijpen).
(Oké, oplossing is niet perfect, maar is enkel om het aan te geven)Delphi Code:
procedure TForm2.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key in [32..255] then Key := 0; end; procedure TForm2.Memo1KeyPress(Sender: TObject; var Key: Char); begin Key := #0; end; procedure TForm2.Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key in [32..255] then Memo1.Text := Memo1.Text + Char(Key); end;
En ja, ook ik vind het contra-intuïtief, maar dat is hier nu even niet de discussie.
TMemoryLeak.Create(Nil);
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks