2012-10-13 14 views
5

Con Delphi per Windows, io di solito uso di questo codice:Come ottenere gli stati del modificatore corrente con FireMonkey su OSX?

function isCtrlDown : Boolean; 
var 
    ksCurrent : TKeyboardState; 
begin 
    GetKeyboardState(ksCurrent); 
    Result := ((ksCurrent[VK_CONTROL] and 128) <> 0); 
end; 

Come posso raggiungere questo obiettivo con FireMonkey su Mac OSX?

ho trovato this, ma non so come gestire con FireMonkey/Delphi (che utilizza, ...):

void PlatformKeyboardEvent::getCurrentModifierState(bool& shiftKey, bool& ctrlKey, bool& altKey, bool& metaKey) 
{ 
    UInt32 currentModifiers = GetCurrentKeyModifiers(); 
    shiftKey = currentModifiers & ::shiftKey; 
    ctrlKey = currentModifiers & ::controlKey; 
    altKey = currentModifiers & ::optionKey; 
    metaKey = currentModifiers & ::cmdKey; 
} 

sto ancora indagando ... Per ora, ho trovare l'unità con eventi chiave roba ... unit Macapi.AppKit;

risposta

2

sulla base di questo answer si potrebbe provare questo:

function isCtrlDown : Boolean; 
begin 
    Result := NSControlKeyMask and TNSEvent.OCClass.modifierFlags = NSControlKeyMask; 
end; 
4

Ciò restituisce l'attuale stato di spostamento:

uses 
    Macapi.CoreGraphics; 

function KeyboardModifiers: TShiftState; 
const 
    kVK_Shift      = $38; 
    kVK_RightShift    = $3C; 
    kVK_Control     = $3B; 
    kVK_Command     = $37; 
    kVK_Option     = $3A; 
begin 
    result := []; 
    if (CGEventSourceKeyState(0, kVK_Shift) <> 0) or (CGEventSourceKeyState(0, kVK_RightShift) <> 0) then Include(result, ssShift); 
    if CGEventSourceKeyState(0, kVK_Command) <> 0 then Include(result, ssCommand); 
    if CGEventSourceKeyState(0, kVK_Option) <> 0 then Include(result, ssAlt); 
    if CGEventSourceKeyState(0, kVK_Control) <> 0 then Include(result, ssCtrl); 
end; 
+0

Entrambe le soluzioni postate durante il mio sonno stanno lavorando. Scusa, ho accettato l'altro perché è stato pubblicato qualche minuto prima ... è stato difficile scegliere tra entrambi. A proposito, ottieni un +1 – Whiler

+0

Grazie Whiler, +1 anche da parte mia Giel –