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.
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.
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.
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.
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.
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.
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'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
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'
Doing a CTRL+F and finding all instances of a word works, but is a lot of steps. I tend to use Notepad++ a lot for my IDE and it has this really handy feature. If you double-click a word, it will highlight that and all other instances of that word inside that one open file. This is like a "quick find" that saves a lot of time. See attached image to get the idea. The darkest highlight is the one instance that was double-clicked.
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.
For God's sake please add a zoom function, the text and icons are so small that my eyes burn when looking at the block diagram window.
Or at least just a way to make icons/text bigger so it's easier to manage connections.
When working with large programs, especially those with involved user interfaces and the pernicious CallControlCallback or CallPanelCallback functions, it becomes very difficult to follow the program flow when trying to trace a program through all of the various levels of subroutines.
A tool for leaving breadcrumbs, in the order visited, could be very helpful. Right now I use the "breakpoints" as a sort of hyper-bookmark, since the breakpoint facility in LabWindows shows the line number and has the "go to breakpoint" capability in the dialog box. However, this is of limited utility since the dialog box sorts the breakpoints by line number and file, not in order of placement. The bookmark facility doesn't show line numbers nor does it have the goto capability.
What is needed is a way of showing the program flow, through routines, in the order visited, in a way similar to the "stack trace" window, except that it needs to be able to show multiple levels simultaneously. This could be done using the existing bookmark facility with the addition of a few items. 1) show file names and line numbers in the bookmark display; 2) allow them to be shown in the order that they were entered, not sorted by line number; 3) add the go-to capability so that I can jump to the location of any bookmark directly.
For instance, right now I'm trying to solve a memory problem. A dynamically allocated buffer is being de-allocated before being used, or at least when the error pops up the routine is trying to write to a NULL pointer. I've got to trace through from the starting point and try to understand where in the flow the buffer is being freed and why it's being freed before being written to. Since there are about a half-dozen levels of subroutines, trying to remember what the program flow is and where I'm coming from in trying to trace it can be difficult.
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,
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.