MiniHostCore 
HOME   |   Software   |   energyXT       mGUI :: CONTENTS

Modifications to Tobybear's MiniHostCore

MiniHostCore will now handle Steinberg's official OnKeyUp/OnKeyDown/OnWheel dispather codes.

For more information and full source download of Tobybear's MiniHostCore go to www.tobybear.de.

My more elaborate modifications to the MiniHostCore source, plus the executable can be downloaded here.


Some code to create Host VST OnWheel dispatch codes (via VendorSpecific):
  procedure TFmMiniHost.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
                                         MousePos: TPoint; var Handled: Boolean);
  begin
    Handled := true;
    if VSTHost.VSTPlugIns[0].VendorSpecific($73744341{'stCA'},$57686565{'Whee'},nil,1) = 0 then
    if usemousewheel1.Checked then begin
      panic1click(nil);
      if CurProg > 0 then 
        VSTHost.VSTPlugIns[0].SetProgram(CurProg - 1);
    end<
    else Handled := false;
  end;
procedure TFmMiniHost.FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin Handled := true; if VSTHost.VSTPlugIns[0].VendorSpecific($73744341,$57686565,nil,-1) = 0 then if usemousewheel1.Checked then begin panic1click(nil); if CurProg+1 < VSTHost.VSTPlugIns[0].numPrograms then VSTHost.VSTPlugIns[0].SetProgram(CurProg+1); end< else Handled := false; end;

Some code to create Host VST OnKeyDown and OnKeyUp dispatch codes:
  var v_k: array[0..56,0..1] of integer = (
    ( VK_BACK,      VKEY_BACK      ),
    ( VK_TAB,       VKEY_TAB       ),
    ( VK_CLEAR,     VKEY_CLEAR     ),
    ( VK_RETURN,    VKEY_RETURN    ),
    ( VK_PAUSE,     VKEY_PAUSE     ),
    ( VK_ESCAPE,    VKEY_ESCAPE    ),
    ( VK_SPACE,     VKEY_SPACE     ),
    ( VK_NEXT,      VKEY_NEXT      ),
    ( VK_END,       VKEY_END       ),
    ( VK_HOME,      VKEY_HOME      ),
    ( VK_LEFT,      VKEY_LEFT      ),
    ( VK_UP,        VKEY_UP        ),
    ( VK_RIGHT,     VKEY_RIGHT     ),
    ( VK_DOWN,      VKEY_DOWN      ),
    ( VK_PRIOR,     VKEY_PAGEUP    ),
    ( VK_NEXT,      VKEY_PAGEDOWN  ),
    ( VK_SELECT,    VKEY_SELECT    ),
    ( VK_PRINT,     VKEY_PRINT     ),
    ( VK_EXECUTE,   VKEY_ENTER     ),
    ( VK_SNAPSHOT,  VKEY_SNAPSHOT  ),
    ( VK_INSERT,    VKEY_INSERT    ),
    ( VK_DELETE,    VKEY_DELETE    ),
    ( VK_HELP,      VKEY_HELP      ),
    ( VK_NUMPAD0,   VKEY_NUMPAD0   ),
    ( VK_NUMPAD1,   VKEY_NUMPAD1   ),
    ( VK_NUMPAD2,   VKEY_NUMPAD2   ),
    ( VK_NUMPAD3,   VKEY_NUMPAD3   ),
    ( VK_NUMPAD4,   VKEY_NUMPAD4   ),
    ( VK_NUMPAD5,   VKEY_NUMPAD5   ),
    ( VK_NUMPAD6,   VKEY_NUMPAD6   ),
    ( VK_NUMPAD7,   VKEY_NUMPAD7   ),
    ( VK_NUMPAD8,   VKEY_NUMPAD8   ),
    ( VK_NUMPAD9,   VKEY_NUMPAD9   ),
    ( VK_MULTIPLY,  VKEY_MULTIPLY  ),
    ( VK_ADD,       VKEY_ADD       ),
    ( VK_SEPARATOR, VKEY_SEPARATOR ),
    ( VK_SUBTRACT,  VKEY_SUBTRACT  ),
    ( VK_DECIMAL,   VKEY_DECIMAL   ),
    ( VK_DIVIDE,    VKEY_DIVIDE    ),
    ( VK_F1,        VKEY_F1        ),
    ( VK_F2,        VKEY_F2        ),
    ( VK_F3,        VKEY_F3        ),
    ( VK_F4,        VKEY_F4        ),
    ( VK_F5,        VKEY_F5        ),
    ( VK_F6,        VKEY_F6        ),
    ( VK_F7,        VKEY_F7        ),
    ( VK_F8,        VKEY_F8        ),
    ( VK_F9,        VKEY_F9        ),
    ( VK_F10,       VKEY_F10       ),
    ( VK_F11,       VKEY_F11       ),
    ( VK_F12,       VKEY_F12       ),
    ( VK_NUMLOCK,   VKEY_NUMLOCK   ),
    ( VK_SCROLL,    VKEY_SCROLL    ),
    ( VK_SHIFT,     VKEY_SHIFT     ),
    ( VK_CONTROL,   VKEY_CONTROL   ),
    ( VK_MENU,      VKEY_ALT       ),
    ( $5D{VK_EQUALS}, VKEY_EQUALS  ) );  // APP key, also known as context menu key
procedure MakeVstKeyCode(Key: word; Shift: TShiftState; var ch: char; var virt: integer; var modf: double); var i: integer; begin ch := #0; modf := 0; virt := 0; if (Key >= $41{'A'}) and (Key <= $5A{'Z'}) then ch := char(Key+$20) // change to lowercase else ch := char(Key); if ssShift in Shift then modf := modf + MODIFIER_SHIFT; if ssCtrl in Shift then modf := modf + MODIFIER_CONTROL; if ssAlt in Shift then modf := modf + MODIFIER_ALTERNATE; for i := 0 to 56 do if Key = v_k[i,0] then begin virt := v_k[i,1]; break; end; end; // MakeVstKeyCode
procedure TFmMiniHost.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var ch: char; modf: double; virt: integer; f: boolean; begin if not allowed then begin key := 0; exit; end; if mnPstVstKeys.checked then begin MakeVstKeyCode(Key,Shift,ch,virt,modf); f := VstHost.VSTPlugIns[0].EditKeyDown(ch,virt,modf); if f then Key := 0; end; end; // .FormKeyDown
procedure TFmMiniHost.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var ch: char; modf: double; virt: integer; f: boolean; begin if not allowed then begin key := 0; exit; end; if mnPstVstKeys.checked then begin MakeVstKeyCode(Key,Shift,ch,virt,modf); f := VstHost.VSTPlugIns[0].EditKeyUp(ch,virt,modf); if f then Key := 0; end; end; // .FormKeyUp procedure TFmMiniHost.AppMessage(var Msg: TMsg; var Handled: Boolean); var ch: char; modf: double; virt: integer; f: boolean; begin // Handled = false when entering AppMessage if not allowed then exit; case Msg.Message of WM_SYSKEYUP: ; WM_KEYUP: if mnPreVstKeys.checked then begin MakeVstKeyCode(loword(Msg.wParam),KeyDataToShiftState(Msg.lParam), ch,virt,modf); Handled := VstHost.VSTPlugIns[0].EditKeyUp(ch,virt,modf); end; WM_SYSKEYDOWN: ; WM_KEYDOWN: if mnPreVstKeys.checked then begin MakeVstKeyCode(loword(Msg.wParam),KeyDataToShiftState(Msg.lParam), ch,virt,modf); Handled := VstHost.VSTPlugIns[0].EditKeyDown(ch,virt,modf); end; end; // case end; // .AppMessage
CONTENTS   -   TOP