Getting KeyDown Event



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 05/01/2007 at 21:01, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   9 
    Platform:   Windows  ;   
    Language(s) :     C++  ;

    ---------
    Hello ...

    In my dialog plugin ...
    I want to make a calculation when the user is entering data into a textbox ...
    So I try to know when the user is pressing the keys to enter data ... but I can't ...
    I can only know when the user input is done and the focus is moved to another textbox ... I hope you see what I mean ...
    In the otherwords ...
    I want to do some process for KEYDOWN event ...
    But I can only make it in LOSTFOCUS event ...

    How can I solve it ...?
    Or is that simply what we can't in C4D?

    Wishing you'll do me a favor ...
    Zaw Min Tun



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 09/01/2007 at 03:20, xxxxxxxx wrote:

    you could try to the pressed keys within Message

      
    LONG AsyncDialog::Message(const BaseContainer &msg;,BaseContainer &result;)  
    {  
         switch (msg.GetId())  
         {  
              case BFM_INPUT:  
                   if(msg.GetLong(BFM_INPUT_DEVICE) == BFM_INPUT_KEYBOARD)  
                   {  
                        String input = msg.GetString(BFM_INPUT_ASC);  
                        GePrint(input);  
                   }  
                   break;  
         }  
         return GeDialog::Message(msg,result);  
    }  
    

    cheers,
    Matthias



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 11/01/2007 at 00:44, xxxxxxxx wrote:

    Thank you Matthias ...
    I tried it and this is what I found out ...

    The following code segment always shows 1 and 4 in console ...

    ///////
    LONG dlgMine::Message(const BaseContainer& msg, BaseContainer& result)
    {
         GePrint("1");
        switch (msg.GetId())
        {
              GePrint("2");
         case BFM_INPUT:
              if(msg.GetLong(BFM_INPUT_DEVICE) == BFM_INPUT_KEYBOARD)
            {
                   GePrint("3");
                   String input = msg.GetString(BFM_INPUT_ASC);
                 GePrint(input);
            }
            break;
        }
         GePrint("4");
         return GeDialog::Message(msg,result);
    }
    ///////

    So I doubt that msg.GetId() is always returning 0 ...
    So I tried this below ...

    ///////

    LONG dlgMine::Message(const BaseContainer& msg, BaseContainer& result)
    {     
         GePrint(LongToString(msg.GetId()));
        switch(msg.GetId())
        {
         case BFM_INPUT:
              if(msg.GetLong(BFM_INPUT_DEVICE) == BFM_INPUT_KEYBOARD)
            {
                   String input = msg.GetString(BFM_INPUT_ASC);
            }
            break;
        }
         return GeDialog::Message(msg,result);
    }
    ///////

    But this time ... console is showing a very large numbers (like 1667853926,1668846437) all the time ... So they are not surely 0s ...
    So why aren't the code lines in switch are not running ...?
    I'm a little confusing ...
    Thank you for code segment ...
    It makes me curious about C4D a lot !!!

    Wishing you all the best ... especially the happiness ...
    Zaw Min Tun


Log in to reply