ActiveX Combobox on wrong page

Hi everyone, 

Updating one app to 2018 r2 from citect scada 2015, an activex that displays a form with a list of items appears just in the main monitor. The client has a multimonitor function with two monitors. If the operator opens de form on the second display, the list appears on the main one.  

here the activex - 

  

any idea what is going on?

thanks. 

  • Hi ,
    Can you provide a little more detail of how you display the form which contains the ActiveX, e.g. are you using WinNewAt()?
    Is your project based on CSV_Include multimonitor code?
    It might be good to have a look at the new Screen Layout feature and better native support for multi-monitors that is now available in 2018R2. You don't need to use the Situation Awareness Include (SA_Include) project to use these features.
    Kind regards
    Olivier
  • Hi Oliver,
    All that we did was insert the ActiveX once i was able to do it, installing the microsoft forms 2.0 ActiveX. Something like this...https://www.se.com/in/en/faqs/FA283136/. Used to work well in 2015, the drop down list appeared right in the same page that you were working with, but with the update... the list now appears just on the main monitor, even if you want to open it in the second monitor, the list appear in the other one, the main one.
  • Hello Diego, hello Olivier.
    I'm using 2018R1 and i'm having the same Problem.
    Any ideas to solve this issue Olivier?
    Thanks
    Bernhard
  • Try setting your left monitor as the main display in the Windows Display properties. I believe if your right monitor is the main display then the left monitor's x coordinates will be negative and components that are not multi-monitor aware may change the negative coordinate to 0, causing it to display on the edge of the other monitor.

  • Hello Eric,
    even if the left monitor is the main screen, the popup of the combobox still appears on the left screen, no matter on which screen the ActiveX object is located.

    Any other ideas?

    Dank you.
  • Hi Diego,

    It seems that more people suffer from this issue, according to https://www.vbforums.com/showthread.php?544101-excel-userform-combobox-dropdown-position

    1) Does this also occur when the operator first forces the focus on the window / page on the secondary monitor by clicking somewhere in that window (outside the ActiveX)?

    2) Does the behaviour change when you play with settings like Windows display (text) scaling, i.e. set it to 100%

    3) Is it possible to redesign the page and use one of Citect's own ActiveX objects instead, like ciText.Combobox or ciListBox.ItemListBox?

  • Hello Patrick,

    I have tried all your suggested solutions, unfortunately without success.

    Do you have any other solutions?

    Thanks a lot

    Bernhard
  • Hi Diego and Bernhard,

    Can you confirm the OS you are using?

    The Workspace (Situational Awareness) projects have ciText.comboboxes in them as part of the "Shelve Until..." form.

    Since you have 2018 R2 let's see if you can observe the same behaviour:

    Pre-reqs
    a. Make sure your computer has two or more monitors hooked up

    Steps
    1. Make your ExampleSA project Active
    2. Compile and Run the Setup Wizard
    3. On the Profile Setup step, select Use Profiles and then, Select "TWOMONITORSHD"
    4. Run the project up and you should hopefully see two workspaces displayed - one on each monitor.
    5. On Monitor1, select the 'Active Alarm' page
    6. Then, right click on any alarm and select 'Shelve Until..."
    7. The shelve form should appear with many combo boxes on it.
    8. Click on one of those and see if they display correctly.
    9. Repeat on the 2nd monitor's Active Alarm page.

    Cheers,

    bradley
  • Hi,

    Since V2018 you can use so called maps. It's very to create a combobox like this:

    In this case the text is linked to an interger in the controller. This requires some initialisation of the map, i.e. the translation of the value:

    sEnumMap = Enum_AddEnum("ControlModeEnum"); // Add a new enumeration

    IF sEnumMap <> "" THEN
    MapValueSet(sEnumMap, 0, "Automatic" ); // Add the enumeration values
    MapValueSet(sEnumMap, 1, "Manual" );
    MapValueSet(sEnumMap, 2, "Cascade" );
    MapValueSet(sEnumMap, 3, "Local" );
    MapValueSet(sEnumMap, 4, "Computer" );
    END

    In the combobox genie you can use

    MapValueGet("ControlModeEnum",IntToStr(TagInTheController))

    This removes the need for activex comboboxes and makes life easier when upgrading. As a bonus the genie will never be shown on a different monitor.