Solved Adding Keyboard Message: KEY_ENTER & KEY_TAB

Hello,
I would like to request that KEY_ENTER and KEY_TAB are added to the Keyboard Message's Channel.

This issue has come up several times in the forum. There are some workarounds, it seems, but they aren't nearly as straightforward as checking the Channel's value:

I'm sure there are reasons those two keys weren't included, but it would be very helpful if this implementation could be revisited.

For anyone facing this issue, here are some workarounds in a script:

import c4d
from c4d import gui

GROUP_ID1=1000
TEXT_FIELD=1001

class KeyDlg(gui.GeDialog):
    def CreateLayout(self):
        self.SetTitle("Key Test")
        if self.GroupBegin(GROUP_ID1, c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT, 1, 1):
            self.GroupBorderNoTitle(c4d.BORDER_THIN_IN)
            self.AddStaticText(TEXT_FIELD, c4d.BFH_CENTER | \
            c4d.BFH_SCALE | c4d.BFV_CENTER | c4d.BFV_SCALE, 0, \
            0, "Press the Enter Key")
        self.GroupEnd()
        return True

    def Message (self, msg, result):
        if msg.GetId() == c4d.BFM_INTERACTSTART:
            bc = c4d.BaseContainer()
            if c4d.gui.GetInputState(c4d.BFM_INPUT_KEYBOARD, c4d.KEY_TAB, bc):
                if bc[c4d.BFM_INPUT_VALUE] == 1:
                    print(c4d.KEY_TAB,"Tab")
                    self.SetString(TEXT_FIELD,"Tab")
                    self.LayoutChanged(TEXT_FIELD)
                    return True
            if c4d.gui.GetInputState(c4d.BFM_INPUT_KEYBOARD, c4d.KEY_ENTER, bc):
                if bc[c4d.BFM_INPUT_VALUE] == 1:
                    print(c4d.KEY_ENTER,"Enter")
                    self.SetString(TEXT_FIELD,"Enter")
                    self.LayoutChanged(TEXT_FIELD)
                    return True
        if msg.GetId() == c4d.BFM_INPUT:
            if msg.GetInt32(c4d.BFM_INPUT_DEVICE) == c4d.BFM_INPUT_KEYBOARD:
                channel = msg.GetInt32(c4d.BFM_INPUT_CHANNEL)
                txt = msg.GetString(c4d.BFM_INPUT_ASC)
                if channel == c4d.KEY_SPACE:
                    txt = "Space"
                elif channel == c4d.KEY_LEFT:
                    txt = "Left"
                elif channel == c4d.KEY_RIGHT:
                    txt = "Right"
                elif channel == c4d.KEY_UP:
                    txt = "Up"
                elif channel == c4d.KEY_DOWN:
                    txt = "Down"
                print(channel,txt)
                self.SetString(TEXT_FIELD,txt)
                self.LayoutChanged(TEXT_FIELD)
                return True
        return gui.GeDialog.Message(self, msg, result)

dlg = KeyDlg()
dlg.Open(c4d.DLG_TYPE_MODAL, defaultw=300, defaulth=50)

Thank you!

thats a nice one, thank you!

enter and tab works!
can't get the last part to work here, tough (c4d.BFM_INPUT)

@indexofrefraction I just tested and it works with my setup. Most of the code comes from former SDK team member Andreas' post here. Perhaps test that? If it doesn't work, I would open a new thread.

I'd prefer to keep this topic on the KEY_ENTER & KEY_TAB request please.

hi,

@indexofrefraction, as @blastframe said, let's keep that thread clean and ask your question in another thread, this is working on my system.

@blastframe , we will take into consideration your request.

Cheers,
Manuel

MAXON SDK Specialist

MAXON Registered Developer