NI Home > Community > NI Discussion Forums

LabWindows/CVI Idea Exchange

The NI Idea Exchange is a product feedback forum where NI R&D and users work together to submit ideas, collaborate on their development, and vote for the ones they like best. View all of the NI Idea Exchanges to post an idea or add your opinion on an existing one today!
New Idea

'+' sign in numeric controls

Status: Under Consideration
by Trusted Enthusiast on ‎11-01-2010 03:06 AM

As suggested about two years ago ( I am still looking for a possibility to explicitly show the positive sign of a numeric value in numeric controls, i.e. the control should display '+6.789' instead of '6.789'.


Phrased differently I would like to have one more attribute 'SHOW_POSITIVE_SIGN' that could be set to


0: don't show the plus sign, i.e. display numbers as is implemented now, default

1: show plus sign for positive numbers

2: show plus sign for positive numbers and zero




Better Documentation

Status: New
by Member MarcBAE on ‎02-13-2013 11:10 AM

I'd like to see better documentation online.


Currently, documentation seems to be spread over different areas: online, in sample code included with the development environment, in a downloadable help file, etc. What online documentation there is is incomplete - for instance, if I'm looking at the function reFFT (just an example, I know it's obsolete), the online help gives me the parameters and what they are but they don't tell me acceptable values, e.g. what is the largest/smallest value I can use for numberOfElements: 1 - 9e99999Another case was with the NIscope driver NISCOPE_ATTR_INPUT_CLOCK_SOURCE. When I looked at the documentation (downloaded zip file filled with CHM files) there was a list of defined values but no desciption of what they were or were not for. Example: NISCOPE_VAL_NO_SOURCE ("VAL_NO_SOURCE")...I *assume* NO SOURCE is equivalent to Intenal but should I really have to guess when looking at documentation? For that matter, why does this information only appear to be available via downloadable file? 


In another case with NISCOPE I found that the niScope_ConfigureHorizontalTiming expects a certain clock frequency (10 MHz) if you're using an external clock, but if you are using a clock frequency at exactly what you're asking for you have to set the attributes directly. I messed with this for a while before calling the help desk. The person at the other end was able to tell me how to fix my problem but he could not find documentation online (accessable by me) where this information could be located. It seems to me that the number of help calls could be drastically reduced if sufficient help were available online. Finding information on error codes is similarly lacking.


I also have a problem with referencing "installed" sample code in lieu of a online programmer's manual. I don't always run on my development machine. So I'm on my target system (that does not have the development environment installed) and I want to look something's very frustrating to find all help on a particular subject referring to my development machine. 

When using the UI functions, a neat feature is the ability to pull up a dialog of valid control IDs when specifying the control:




clicking the elipses displays this dialog showing all valid control IDs:




If you are using the function panel however, you cannot access this dialog and you are on your own for figuring out the correct control ID:




I think we should add this functionality in the function panel for any function that has a control ID parameter.





Status: Completed
by Active Participant vix on ‎10-13-2010 01:09 AM

If you have a Numeric Indicator, and you set "Range checking" to Notify, CVI will show an ugly popup when you enter a value out of range.

If you set this property to "Coerce", the value you enter is coerced in range, but no specific event is generated.


I think that an EVENT_VAL_COERCED would be really useful: using this event you could easily show a message popup, for example.

Status: Completed

I usually add a lot of files to my project (images, documents, ...) because in this way their path is taken as a relative path when building a distribution kit.

But in this way, if I press "Mark files in project" all the files are marked to search in, and so CVI gets a lot of errors for the files that can't be opened because they are not text files.

Using "Mark all c" and "Mark all h" extends the research also inside CVI installation directory, and (usually) this is not what I want.


I propose to replace "Mark files in project" with "Mark source files in project" or to add this last option to the existing ones.



I think it would be a nice tool to save a panel which is generated dynamically from a source code. If I have a database with many variables which I want to set on a panel as controls, I could write an import of this database, generate a panel automatically and could save this panel as UIR file. After this I could use this automatically generated UIR file in a project.





My company has begun placing incentives on Test Driven Development as fundamental to the code development process.  I expect this incentive will impact other companies where CVI applications are used in production.   It would be beneficial for NI to provide developers with a roadmap and definitive structures and methods and support for TDD within the CVI environment.

I added the tab control into panel to my project. Overtime, I added 20 items into the single Tab Control. But since were so many items in the tab control, I decided to re-arrange items (indexes) in the tab control by either moving them left or right depending on the alphabetical order. But here is my problem.


Since I re-arranged the items (indexes), the indexes have all changed for all the items. Now I have to go everywhere the function GetPanelHandleFromTabPage is called and manually update the index numbers to match panel handles for the index. There are 20 different places where this could occur. The number of items (indexes) on the tab control could grow even more and may have to be re-arranged again in the future. Just a big pain.


Suggestion for improvement: Provide a another function that can obtain the index of the item on the tab control dynamically. This could be done by using the "Constant name:" issued in the edit tab panel of the edit tab control. So if the items (index) inside the tab control are re-arranged then the index value for that item is carried with the new index value.


Also the index would be included in the header file generated by the panel editor for CVI so that now the index value can be used thus eliminating the hard coded the index value.


Single File Distribution

Status: Under Consideration
by Active Participant Shako on ‎03-07-2011 12:22 AM



It would be nice for the distribution to be in one installer able file.

Which i could then send to a customer.





Make scanf read back [+][-]Inf and NaN

Status: Under Consideration
by Member m-a on ‎04-20-2012 10:12 AM



LabWindows/CVI 9.0.1's implementation of <stdio.h> *scanf and <stdlib.h> strtod functions appears not to support reading back "NaN", "Inf", "+Inf" or "-Inf" values, although printf() can generate them. May I suggest to add functionality like described below.


Practical use would be that it's easier to propagate "invalid measurement" through strings if strto*() and *scanf() understand all classes of strings that *printf() family functions will generate.


This suggestion is in alignment with ISO 9899:1999 (withdrawn) and its successor ISO 9899:2011, i. e. C99 and C11. Note that there is a "stronger" suggestion to implement all of the C11 standard library in the idea exchange already, which - if implemented - would subsume this suggestion, but as the bare minimum, I'd certainly appreciate seeing this in CVI 2012.


Demo code:


 printf("%g\n", -NotANumber());
 printf("%+g\n", PositiveInfinity());
 printf("%g\n", NegativeInfinity());
 double x = 0; int i;
 i = sscanf("NaN", "%lf", &x); printf("i=%d, x=%g\n", i, x);
 i = sscanf("Inf", "%lf", &x); printf("i=%d, x=%g\n", i, x);
 errno = 0; x = strtod("NaN", NULL); printf("x=%g, errno=%d\n", x, errno);


Desired result:





 i=1, x=NaN

 i=1, x=Inf

 x=NaN, errno=0


Actual result: we see that printf supports NaN/Inf, but scanf and strtod do not:


 i=0, x=0
 i=0, x=0
 x=0, errno=0


Thank you.


The additional columns of a tree can be hidden using SetTreeColumnAttribute() with ATTR_COLUMN_VISIBLE parameter. This is an easy and effective way.

For a table this attribute isn't supported, so you can use some workaround that requires more coding and have some disadvantages (for example if you set the width to the minimum value of 1, the user can increase it with the mouse...).

I think that the ATTR_COLUMN_VISIBLE parameter would solve this needs in the perfect way.

Status: Completed

Library for accessing generic USB HID device

Status: New
by Member TonyG614 on ‎08-17-2011 11:29 AM

I woudl like to have a library for accessing any generic USB HID device.  The library would include functions to query the list of HID's, functions to communicate with a HID, callbacks for when any HID device is connected or removed, etc.

If a panel is made part of a tab (InsertPanelAsTabPage) or if a panel handle is obtained from a tab (GetPanelHandleFromTabPage), there are some restrictions as to how you can use that panel. Some of those restrictions could be lifted if the panel knew which tab it belonged to.


I suggest the addition of the following (or similar) attributes:

GetPanelAttribute(Panel, ATTR_PANEL_PARENT_TAB_CTRL, &TabCtrl);

GetPanelAttribute(Panel, ATTR_PANEL_PARENT_TAB_INDEX, &TabIndex);

And of course you can already get the parent panel with:

GetPanelAttribute(Panel, ATTR_PANEL_PARENT, &ParentTab);


So, now that a panel knows the tab it belongs to, some obvious associations can be handled by the UIR library:

  • Calling DiscardPanel should, internally, call DeleteTabPage instead of the current undefined and illogical behavior
  • SetActivePanel should do a SetActiveTabPage instead of the current buggy behavior
  • SetPanelAttribute(.., ATTR_DIMMED) should do a SetTabPageAttribute(..., ATTR_DIMMED)
  • - etc...

This would allow the user to select at runtime if he wants a Multiple Panels application (MDI) or a Single Panel/Multiple Tab application (tabbed SDI) and almost no changes are necessary to the code.


CVI Service API

Status: Under Consideration
by Member Johannes_T on ‎03-13-2012 04:58 AM


Implement CVI Service API for creating and managing Windows Services (and Unix daemons).



Add specialized CVI functions that users can use for creating, installing and managing the entire life-cycle of long-running user services.

Users can thus have a more uniform interface to the system service API and benefit from a higher level of abstraction across multiple platforms (Windows vs. Unix). These services can contain user code for various tasks, that are running in the background.


batch built dialog

Status: Under Consideration
by Member ciaoa on ‎03-12-2012 06:10 AM

With the batch built dialog, it is possible to select "all releases" and/or "all debugs". This button causes, that all 32-bit AND 64-bit releases and/or debugs are selected (marked). It would be helpful, if the selection buttons would be splitted in "select all 32-bit releases", "select all 64-bit releases", "select all 32-bit debugs" and "select all 64-bit debugs". When I develop e.g. 32-bit Software, I don't need the 64-bit versions.


It would be also helpful, if it is possible to select the sequence of the batch built. For example: project 1 depends on project 4, but project 4 is currently compiled after project 1 etc.



I miss an event that is fired whenever an axis, set to autoscale, changes its minimum/maximum values.


Imagine the following scenario: On a xy graph, I have several plots and also some 'regions of interest' that are visualized either by lines or rectangles. Now, if a new plot is added that results in a different axis scale, I also need to redraw my regions of interest. At present, this requires bookkeeping of xmin, xmax, ymin, ymax and comparing the current axes ranges with the previous ones. It appears to be simpler if one could rely on a suitable event that is fired whenever the axis range is changed.


Thanks :smileywink:


Preview in NIReport

Status: Declined
by Proven Zealot on ‎11-11-2010 02:24 AM

A feature that is still missing in NIReport is the ability to show a preview on screen of the generated report.

This feature could help very much the developer in designing the report without the immense wasting of paper that its lack implies. Moreover, customers are more and more requiring this feature to check reports before actual printing them, especially in applications where reports can be tailored some way to adapt to customers requirements.


Both reasons prevent me at present to use NIReport,

Status: Declined
Those are both very good suggestions and, at some point, CVI will have much better report generation tools than it does today. But that will almost certainly not be nireport.fp. Given that, any future enhancements of nireport.fp are very unlikely.

panel events: MINIMIZE and RESTORE

Status: Completed
by Trusted Enthusiast on ‎10-14-2010 06:44 AM



in my application, several panels exist. Their size is fixed and can not be changed by the user, but they can be minimized and restored by the user. It would be nice to have the possibility to programmatically react to these MINIMIZE and RESTORE events. Right now, I have to poll the panel zoom attribute.





Status: Completed

CVI & LabVIEW UI Builder

Status: New
by Active Participant msaxon on ‎01-09-2012 07:18 AM

It seems to me that it would be really neat if CVI were able to support publishing/acceptance of XML data in the format required by LabVIEW UI Builder. The idea of LabVIEW UI Builder thin clients with a CVI server is quite appealing.


Improved Single Row Scroll of Tab Panels

Status: New
by Trusted Enthusiast on ‎11-03-2012 01:19 PM



This suggestion is about an improved handling of tab panels. Let's assume there are several tab panels, but only 3-4 tabs fit in a row. Selecting 'Single Row Scroll' will show say 3.5 tab panels and the row selector. Now I'd like to access say tab panel 5: Right now this requires clicking on the row selector to show the desired tab AND then click on this tab to show the tab panel. It would be more convenient if clicking the row selector would automatically show the next tab, too.


Let me give an example: The desired tab is not shown in the scroll list below, so one has to click on the right arrow...




... until the tab shows up:




But still the first tab panel is displayed, so another mouse click is required:




It is not just that one more mouse click is needed, but the mouse needs to moved, too, to click on the respective tab... It would be much more convenient to simply click a few times at the same position...

About LabWindows/CVI Idea Exchange

Do you have a feature idea for how to improve LabWindows/CVI? Submit and vote on ideas now!
  1. Browse by label or search in the LabWindows/CVI Idea Exchange to see if your idea has previously been submitted. If your idea exists, be sure to vote for the idea by giving it kudos to indicate your approval!
  2. If your idea has not been submitted click New Idea to submit a product idea. You should submit a separate post for each idea. Watch as the community gives your idea kudos and adds their input.
  3. Give kudos to other ideas that you would like to see implemented!
  4. NI R&D will review ideas that have been submitted and update the status.

Note: the LabWindows/CVI Idea Exchange is not the appropriate forum to submit technical support questions.

The LabWindows/CVI R&D team is committed to reviewing every idea submitted via the LabWindows/CVI Idea Exchange. However, we cannot guarantee the implementation of any LabWindows/CVI Idea Exchange submission.

Idea Statuses
Top Kudoed Authors