Setting parameters for EDITNUMBER in res-file

On 07/11/2017 at 07:21, xxxxxxxx wrote:

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

---------
Hi everybody,

is there a way to define the values for type (float/int), min and max for EDITNUMBER GUI-elements within the res-file of a dialog?

I've tried in within my command plugin directly via c++ and it worked fine. But I can't get the field get working and/or formatted while using the res-file.

Cheers,
Svente

On 08/11/2017 at 01:40, xxxxxxxx wrote:

According to an example of Scott (ResBasedDialog) I've tried to set the parameters in the GeDialog::InitValues() function. But it seems, that the function isn't called at any time. So the call of this->SetReal(id, val); has no effect.
Any ideas?

On 08/11/2017 at 02:31, xxxxxxxx wrote:

Hi and Welcome to the Plugin Cafe forums!

In a resource file for a dialog usually only layout and size settings can be specified for the gadgets.
An EDITNUMBER's type, min/max, step etc. have to be set with GeDialog.SetFloat().
Note SetReal() was renamed to SetFloat() several releases ago.

On 08/11/2017 at 03:41, xxxxxxxx wrote:

Hi Yannick,

thank you for your help.
That's my fault. I've tried the SetFloat() method.

Actually the res file looks something like this:

  
DIALOG BS_MC  
{  
  NAME BS_MC_TITLE; FIT_V; SCALE_V; FIT_H; SCALE_H;  
    
  GROUP BS_MC_TRANSFORM_POSITION  
  {  
      ALIGN_TOP; ALIGN_LEFT;  
      SCALE_H;  
      COLUMNS 2;  
        
      STATICTEXT BS_MC_PX_TEXT { NAME BS_MC_PX_TEXT; }  
      EDITNUMBERARROWS BS_MC_PX_INPUT { }  
  
      STATICTEXT BS_MC_PY_TEXT { NAME BS_MC_PY_TEXT; }  
      EDITNUMBERARROWS BS_MC_PY_INPUT { }  
  
      STATICTEXT BS_MC_PZ_TEXT { NAME BS_MC_PZ_TEXT; }  
      EDITNUMBERARROWS BS_MC_PZ_INPUT { }  
  }  
}  

But not a single editnumberarrows field accept any value. Even the arrows are without function.

The c++ file looks like this:

  
Bool BS_MC_Dialog::CreateLayout(void)  
{  
  Bool res = TRUE;  
  res = LoadDialogResource(BS_MC, nullptr, 0);  
  
  GroupBegin(BS_MC_GROUP, BFH_LEFT, 2, 0, "", 0);  
  {  
      GroupBorder(BORDER_ACTIVE_1);  
      GroupBorderSpace(4, 4, 4, 4);  
  
      AddStaticText(9000, BFH_LEFT, 0, 0, "Pos:", 0);  
  
      AddEditNumberArrows(9001, BFH_LEFT);  
  }  
  GroupEnd();  
  
  return res;  
}  
  
Bool BS_MC_Dialog::InitValues(void)  
{  
  GePrint("InitValues");  
  
  if (!GeDialog::InitValues()) return FALSE;  
  
  GePrint("SetFloat");  
  
  this->SetFloat(MATERIALCHANGE_PX_INPUT, 0.5);  
  
  return TRUE;  
}  

The hard coded editnumberarrows-field is visible and fully functional.

But the InitValues function seems not to be called, because both GePrints aren't called (don't print to the console).

I can't find any failures but something seems to be missing...

On 08/11/2017 at 04:09, xxxxxxxx wrote:

Now I extended the InitValues method with a SetFloat() for the hard coded editnumberarrows and it works. Even the geprint's are triggered now.

  
Bool BS_MC_Dialog::InitValues(void)  
{  
  GePrint("InitValues");  
  
  if (!GeDialog::InitValues()) return FALSE;  
  
GePrint("SetFloat");  
  
  this->SetFloat(BS_MC_PX_INPUT, 0.5);  
  this->SetFloat(9001, 2.4);  
  
  return TRUE;  
}  

But still no effect on the loaded fields.
Looks pretty strange to me.

On 08/11/2017 at 08:15, xxxxxxxx wrote:

It looks like there is something wrong with the edit number arrows IDs used in the res file.
Make sure BS_MC_PX_TEXT, BS_MC_PY_TEXT, BS_MC_PZ_TEXT IDs number are unique.

On 09/11/2017 at 02:29, xxxxxxxx wrote:

Hi Yannick,

in order to make sure there're no other failures I deleted the statictext-fields.
But the result is still the same.

For debugging I tried to print the result of SetFloat(...) to the console.
And the result is false, so nothing was set.

I guess it's because of the gadget id (tried the MATERIALCHANGE_PX_INPUT and the appropiate int).
But I can't see why.

On 09/11/2017 at 03:59, xxxxxxxx wrote:

Hi,

The gadget ID to pass to SetFloat() is the one defined in c4d_symbols.h and used in the DIALOG resource.

If you can post your latest IDs definitions, dialog resource and implementation, it will be easier to see where there's an issue.

On 09/11/2017 at 05:23, xxxxxxxx wrote:

Hi Yannick,

now I'm a little bit confused.
The id's have to be defined in the c4d_symbols.h???

At the moment my structure looks this was:
BS >
res >
    _c4d_symbols.h                   _(a list with the different plugins in BS)
    dialogs >
       _matchange.res               _ (defining the layout) _
        matchange.h                  _(defining the id's for the different gui elements)
    strings_de >
       dialogs >
          _matchange.str              _(the strings for the different gui elements)

Am I right, that this isn't the correct structure?

I'll post the asked definitions, resource and implementation in a second.

On 09/11/2017 at 05:45, xxxxxxxx wrote:

Hi,

Yes, dialog resources IDs have to be defined in c4d_symbols.h
See Dialog Resource for more information on how these have to be written.

On 09/11/2017 at 05:50, xxxxxxxx wrote:

Mh, stupid...
Ok Yannick, then I'll first change this, test again and post the (hopefully) positive result.

Thank you for your help.

On 09/11/2017 at 06:14, xxxxxxxx wrote:

Suprise, it works...

According to the folder structure of plugins using a description i build this dialog plugin and didn't realize the difference of both.

Thank you a lot Yannick. Problem solved.

Cheers,
Svente