Make sure ALL the function panels use the right controls
For example in the CVIDynamicMemoryInfo function panel below, the "Options" parameter should not use the String Ctrl.
Instead it would be "safer" to use a list box, a ring or whatever make sense to display the two available choices : DYNAMIC_MEMORY_SHOW_ALLOCATED_MEMORY or DYNAMIC_MEMORY_SHOW_ALLOCATED_MEMORY_SUMMARY
This would help to reduce the typo errors etc.
this is a very tiny suggestion, but still I would consider it a very convenient improvement:
Right now, if I am using the 'Find' command in the IDE with a typo in the search string (this happens frequently...!), press F3, I receive a popup message telling me that the string 'xxx' has no matches. After pressing OK the popup disappears, but also the Find window disappears! So I have to press Ctrl-F again just to correct my search string.
Hence I suggest that in case a search is not successful, (the popup disappears but) the Find window remains open. This is also true if the search was successful, so I would even consider the current behavior inconsistent
When writing a large amount of functions for CVI, I use the View>> Collapse All / Expand All options quit a lot. It would be incredibly useful to have a keyboard shortcut to do this.
That's all, but I can't stress how much I use these menu items and how incredibly helpful it would be to have a shortcut. All of my coworkers agree. Thanks.
It would be convienent at times to have a way to know if timer callbacks had been suspended by another part of the program by
SuspendTimerCallbacks(), or if timers are running again from ResumeTimerCallbacks(). As far as I can tell there is currently no way to know this in CVI without manually keeping track of the last suspend/resume function called. Thanks.
This is sort of a slight extension of the valuable suggestion by vix (Go to Next/Previous function in source files):
Right now, in the CVI IDE it is possible to have a function tree of all library functions - for larger projects it might be useful to also have a function browser for all the functions in the current project, thus not only permitting to jump to the next or previous function, as suggested by vix, but also to more easily return to a frequently used function by one mouse click on the function name in the function browser.
Functions could be grouped by file name (typically there is more than one source file in a project), or alphabetically...
One nice feature of menu bars is their capability of grouping different items using a separator.
Having ring controls with many text entries it would be nice from a user perspective if these many entries also could be grouped using one or more separators.
What would be also convenient is the ability to dim or hide a specified entry; right now it is possible to rebuild the ring programmatically with one or several entries less (or more), but this is some overhead that could be minimized by simply hiding or showing an indexed entry.
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.
following the discussion here it turns out that at present there is some ambiguity in using the taskbar button of applications created with CVI: Clicking on the taskbar button gives the visual impression of minimizing all panels of the application, in fact the panels are just hidden, not minimized. As a result, the application will behave differently if you really minimize panels using the _ panel button, or if you hide the panels by clicking on the taskbar. In the latter case the new EVENT_PANEL_MINIMIZE event does not get triggered and the application cannnot know that all panels are hidden (for the user appearing to be minimized). Hence this new event is required to complement this functionality.
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.
In LabVIEW graphs there is a nice property called "Fill To" that can be used to get very cool features (see here, for example) to highlight different regions or data.
I think such a property should be introduced in CVI too, with the following options:
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.
I've been looking around for a way to open the LabWindows/CVI print dialog box. It appears when you call the PrintCtrl function, does NOT appear in the PrintTextFile or PrintTextBuffer functions, and there is no function to open it directly; I need to print from a text buffer and would like to open it directly from a Print Setup menu function. The best recommendations that I have received are either use the Windows PrintDlg function, or to kludge the text into a hidden control and print the control. I highly recommend either adding it to all user interface library print functions or allow the user to call it directly.
- If control mode is indicator set ATTR_HILITE_CURRENT_ITEM to 0 per default
- Provide a code to set the background color of the whole line (from "here" on) instead of just where text is
This would make it far more easy to color alternating lines differently, now you have to append every text with lots of spaces to fake it if you use tabs
- Autoscroll option
Always jump to the last line if a new last one is inserted. Useful for logging purposes
designing a screen layout I frequently encounter the wish to have not only rectangular (and circular) decoration elements, but also one of the type shown below.
Only the upper right rectangular shape can be realized now, while the more complex shape on the left is what I would like to see added in the future.
Instead of two parameters width and height four parameters would be required (two heights and two widths), may be even a fifth parameter specifying the orientation of the shape: as shown, mirrored in x, mirrored in y, mirrored in x and y.
Without doubt grouping control elements is useful; unfortunately these groups may differ in the number and type of control elements.
Thanks for consideration,
Sometimes I want to complement standard UIR controls with custom graphics on my own. For instance an arrow linking two otherwise normal controls. One way to do those custom graphics is to draw them in a transparent canvas. But then if you place the canvas on top of the controls, it catches the clic events destined for the controls below.
There should be either:
- an attribute for the canvas (or maybe all controls) that basically says 'ignore me and pass the event to the control below me'
- a way for the canvas callback to say 'nope, this event is not for me, just pass it on to the control below me'
Include a function to programmatically re-start the NI Variable Engine if it is found to be stopped.
Although the NV libraries include a function to detect whether the NI Varible Engine service is running, there is no function included in the library to facilitate re-starting the NI Variable Engine service.
For those The method that I am aware of to restart this service is to use the ANSI C system() function with an embedded command line:
Index = 0;
while((!running) && (index++ < 5))
System(“net start \"NI Variable Engine\"");
if(!running) return -1;
Learning this required some time spent on the web, looking through old posts on how to solve the same problem in LabView. Rather than spending that time, it would have been more productive to just pull it out of the library.
I discovered through trial and error that the CNVCreateBufferedWriter function, while it does provide buffering when necessary to preserve data until it can be written within a process, it does not provide for arbitration between writes originating from multiple processes. Stated another way: As far as I am aware, a single Network Variable process is not designed be written to by more than one application.
The documentation was not clear on this point. It states “You can buffer data to be written to the network variable by calling CNVPutDataInBuffer. The system automatically writes the buffered data to the network variable.” This suggested to me that arbitration of some kind existed to handle asynchronous writes by multiple applications. I confess, my interpretation may have been driven by wishful thinking to support my application needs.
Nevertheless, my suggestion is that future versions of this library include a capability to arbitrate asynchronous writes from multiple applications to a single network variable. i.e., that two, or three, or more applications can successfully connect to and write to the same network variable.
I tried to use a source code / version control for projects in which I use LabWindows and Visual Studio.
One possible solution would be to implement support for the team foundation server, which already has be added to LabView.
Another would to provide an independent solution.
In previous applications, we would talk to our product using a telnet session.
CVI has libraries to do this, such as...
ConnectToTCPServer ((unsigned int *)&g_ShelfHandle[iSocketNumber], 23, sAddress, com_ClientTCPCB, NULL, 0);
In one of our new products, it only supports "ssh" which is similar to telnet, but is a "secured shell" connection.
One option is to use putty: http://digital.ni.com/public.nsf/allkb/C49602A7982
It is not the most straightforward way of doing things, but at the moment, it is what we have to deal with.
Since the ssh protocol is becoming the new standard in communications (used in all Linux machines, and windows), and most
of the new telnet programs (supporting ssh), I would like to request that a CVI library be created to support this protocol.
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.