Jamie,
Here are some answers to you comments on CVI I'll get the suggestions to the right people to be taken into account for future releases.
1) EVENT_VAL_CHANGED
According to the CVI help file this "event is generated continuously while the user is performing an ongoing action which results in the value of a control changing". Basically you'll get this event when the user is modifying the control whether or not he submits a new value. I guess it would be nice not to have an event generated when the increment value is set to 0. As an alternative you can hide the up/down arrows when you don't want events to happen.
Also you can use the EVENT_COMMIT event to get an event only when the user is done editing the control. It can save you one of the traps.
2) Enter Key in Table control
I'll file a suggestion for this, I think would be useful. There is a document on this with the workaround, but it would be useful. (http://digital.ni.com/public.nsf/websearch/6DBDBBF27ECB95CA862569F200583D0F?OpenDocument)
3) Event processing and PostDeferredCall().
This is due to the way the events are processed by the table control. the table uses the user event to assign the active cell; so the user event gets called before the event is processed by the table control.
4) InsertTableRows() with 0 rows.
I gave this a try in CVI 7 and I was able to insert 0 rows to a table with no Run-Time Error or a row being inserted. I have not tested this in any other versions.
5) RecallPanelState() does not set table controls to the same dimensions (rows x cols) as when SavePanelState() was called.
The RecallPanelState() currently saves only the values of the controls, but not the properties. It is a very good suggestion to include the row/column info in the panel state.
6) Calling SetActiveTableCell() from within a callback seems to swallow any outstanding events. e.g. if SetActiveTableCell() is called from within a callback case EVENT_KEYPRESS, EVENT_VAL_CHANGED & EVENT_COMMIT are swallowed. Is that normal/unavoidable?
I'll give this a try and let you know how this goes.
7)GetTableSelection() does not return what I would expect.
This is because a single selected cell is not considered to be a selection, in the function help you can see that they stated this, there is always an active cell, but not always a selection.
😎 zero based rows and columns.
I think this is done to be more user friendly. Most Spreadsheet applications are 1 based.
9) Halting execution using Ctrl+F12.
I'm running here Windows 2000 and did some testing on this. I was able to run applications with several threads on it and then halt the execution without any crash or error. I think this will have to do more with some Hardware operations taking place. To generate a system crash in a Windows NT/2000/XP you need to be in kernel mode, a CVI application without any HW access is not likely to be doing operations in kernel.
I hope this helps, let me know the comments that you have.
Regards,
Juan Carlos
N.I.