Search code examples
macosdelphidelphi-xe2firemonkeykeyevent

How to get current modifier states with FireMonkey on OSX?


With Delphi for Windows, I usually use this code:

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

How can I achieve this with FireMonkey on Mac OSX?

I have found this, but I don't know how to manage it with FireMonkey/Delphi (which uses, ...):

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;
}

I'm still investigating... For now, I have find this unit with key events stuff... unit Macapi.AppKit;


Solution

  • Based on this answer you could try this:

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