en zij zagen niet hoe spot in mij worstelde met verdriet
OnKeyDown event gebruiken...
Daar kijk je welke toets ingedrukt is. Kun je ervoor zorgen dat er niks gebeurt
Daar kijk je welke toets ingedrukt is. Kun je ervoor zorgen dat er niks gebeurt
code:
1
2
3
4
5
| procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if (Key<'0') or (Key > '9')then Key:=Chr(0); end; |
OnKeyPress werkt volgens mij ook... Hij accepteerd nu iig alleen nog maar nummertjes
Xbox
Even the dark has a silver lining
Verwijderd
Bij de OnKeyDown kun je heel veel toetsen afvangen (incl. delete/home/page down etc.) Wil je bijvoorbeeld dat er alleen nummertjes (0..9, - en . of ,) worden ingevoerd en dat gewoon kan worden genavigeerd en verwijderd dan kun je beter reageren op de OnKeyPress event. Deze geeft alleen ASCII-characters mee. Je zou de volgende code kunnen proberen om het verschil tussen OnKeyDown en OnKeyPress te zien:Op woensdag 19 december 2001 18:20 schreef SpeedAddict het volgende:
code:
1 2 3 4 5 procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if (Key<'0') or (Key > '9')then Key:=Chr(0); end;
OnKeyPress werkt volgens mij ook... Hij accepteerd nu iig alleen nog maar nummertjes
code:
1
2
3
4
5
6
7
8
9
10
11
12
| procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key=VK_F5) or ((Key=VK_RETURN) and (ssCtrl in Shift)) then
Form2.ShowModal;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', '-', DecimalSeparator, #8]) then
Key:=#0;
end; |
Suc6
Dank voor de suggesties, maar helaas zit de oplossing er niet bij.
Ik probeer nu via het KeyDown event de control toets uit te schakelen, maar de Shift parameter die wordt meegegeven met dit event is geen variabele en kan ik dus niet aanpassen.
Iemand nog een idee?
Ik probeer nu via het KeyDown event de control toets uit te schakelen, maar de Shift parameter die wordt meegegeven met dit event is geen variabele en kan ik dus niet aanpassen.
Iemand nog een idee?
en zij zagen niet hoe spot in mij worstelde met verdriet
Verwijderd
CTRL toets is idd. niet af te vangen op die manier, 'k ga ff zoeken. Gevonden:Op vrijdag 21 december 2001 10:06 schreef Mr_Blobby het volgende:
Dank voor de suggesties, maar helaas zit de oplossing er niet bij.
Ik probeer nu via het KeyDown event de control toets uit te schakelen, maar de Shift parameter die wordt meegegeven met dit event is geen variabele en kan ik dus niet aanpassen.
Iemand nog een idee?
code:
1
2
3
4
| if Odd(GetKeyState(VK_CAPITAL)) then
ShowMessage('CAPS LOCK ON')
else
ShowMessage('CAPS LOCK OFF'); |
Dit voorbeeld werkt met de CAPS en kan bijv. in een timer gebruikt worden (VK_CAPTIAL vervangen door zoiets als VK_CONTROL/VK_CTRL o.i.d.).
Als je timers niet mooi vindt gebruik dan bijv. actionupdate als met Delphi 4 of hoger werkt.
Of Application.OnIdle (vanaf Delphi 5). Pas wel op met het implementeren van deze eventhandler!
Suc6
Verwijderd
Als ik alles goed begrepen heb is dit volgende voorbeeld precies wat je bedoeld:Op vrijdag 21 december 2001 12:37 schreef hvdberg het volgende:
[..]
CTRL toets is idd. niet af te vangen op die manier, 'k ga ff zoeken. Gevonden:
code:
1 2 3 4if Odd(GetKeyState(VK_CAPITAL)) then ShowMessage('CAPS LOCK ON') else ShowMessage('CAPS LOCK OFF');
Dit voorbeeld werkt met de CAPS en kan bijv. in een timer gebruikt worden (VK_CAPTIAL vervangen door zoiets als VK_CONTROL/VK_CTRL o.i.d.).
Als je timers niet mooi vindt gebruik dan bijv. actionupdate als met Delphi 4 of hoger werkt.
Of Application.OnIdle (vanaf Delphi 5). Pas wel op met het implementeren van deze eventhandler!
Suc6
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure AppIdle(Sender: TObject; var Done: Boolean);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean);
var
KS: TKeyboardState;
begin
if Odd(GetAsyncKeyState(VK_CONTROL)) then
begin
Caption := 'Control key down; SetAsyncKeyState';
FillChar(KS, 256, #0);
SetKeyboardState(KS);
if not (Odd(GetAsyncKeyState(VK_CONTROL))) then
ShowMessage('It worked');
end else
Caption := 'Control key up';
Done:=True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.OnIdle := AppIdle;
end;
end. |
Als de Button1 éénmaal ingedrukt is zal het formulier 'reageren' op de CTRL-toets.
Als ik de code zo lees zou het moeten werken.
Ik ga het thuis uitproberen.
Bedankt!
Ik ga het thuis uitproberen.
Bedankt!
en zij zagen niet hoe spot in mij worstelde met verdriet
Pagina: 1