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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| uses
lcltype, lclintf, classes
{$IFDEF MSWINDOWS}
,Windows
{$ELSE}
{$IFDEF LINUX}
,x, xlib, KeySym
{$ENDIF}
{$IFDEF DARWIN}
{$ENDIF}
{$ENDIF} ;
type
TVirtualKeyCode = Integer;
const
// pseudo wheel keys (we squat F23/F24), see KeyboardNotifyWheelMoved
VK_MOUSEWHEELUP = VK_F23;
VK_MOUSEWHEELDOWN = VK_F24;
var
vLastWheelDelta : Integer;
{ IsKeyDown : Vérifie si la touche correspondant au "char" donné est appuyé.
**Le caractère est mappé sur le "clavier principal" uniquement, et non sur le clavier numérique.(virtuel)
**Les combinaisons Shift / Ctrl / Alt qui peuvent être nécessaires pour taper
**le caractère sont ignorés (c.-à-d. 'a' équivaut à 'A' et sur mon clavier français
**'5' = '(' = '[' car ils ont tous le même Code de touche physique).
}
function IsKeyDown(C:Char):Boolean;
begin
c := UpperCase(c)[1];
Result := GetKeyState(Ord(c)) < 0;
End;
{ IsKeyDown : Vérifie si la touche correspondant au "Code Virtuel" donné est appuyé.
Cette fonction est juste là pour englober GetKeyState.
}
function IsKeyDown(vk : TVirtualKeyCode) : Boolean;
begin
case vk of
VK_MOUSEWHEELUP:
begin
Result := vLastWheelDelta > 0;
if Result then
vLastWheelDelta := 0;
end;
VK_MOUSEWHEELDOWN:
begin
Result := vLastWheelDelta < 0;
if Result then
vLastWheelDelta := 0;
end;
else
Result := GetKeyState(vk) < 0;
end;
end;
{ KeyboardNotifyWheelMoved : Utilisez cette procédure pour informer le mouvement de la roue de la souris
et simuler l'appui d'une touche (VK_MOUSEWHEELUP/VK_MOUSEWHEELDOWN), qui sera intercepté par IsKeyDown et/ou KeyPressed
A placer dans les évènement OnMouseWheel des controles graphique (form, tpanel ect...)
}
procedure KeyboardNotifyWheelMoved(wheelDelta : Integer);
begin
vLastWheelDelta:=wheelDelta;
end; |
Partager