The "classic" way to call or open a simple window with WINDEV is to use Open(WindowName, Parameter1, Parameter2 , ...) or use OpenChild etc ...

But to use the new Dynamic TAB control, you must use internal windows and the TabOpen function [or one of its variations].

 

The a360_OpenWindow() procedure - part of the UI framework - plays the role of the classic Open() function. It embeds an internal window inside a Dynamic TAB, implements access control _AND_ takes care of the "little but important details" in this area.

How it does it is not really important right now - you can think of it as a "black box" and use it immediately. When you have the time, you can study the code and see how it is implemented ...

 

All a360_OpenWindow() calls have ONE and ONLY one parameter - a ST_a360_DynamicWindow variable and nothing else - all the information needed is "inside" this structured variable.

Lets give a small paradigm, to clear things ...

  1. We create an internal window from the WD IDE and we name it say, IWB_Paradigm.
  2. In the Global Declaration of IWB_Paradigm, we give it a proper name and one and only parameter, like this: PROCEDURE IWB_Paradigm(LOCAL p_OpenWindow is ST_a360_DynamicWindow)
  3. Set Independent HFSQL Context to true
  4. The functionality of the above "window" is NOT important right now - its just a "window" we want to embed inside a Dynamic TAB.

Now here is the code we use to "call/embed" the above internal window:

e_OpenWindow is ST_a360_DynamicWindow

// Initialize the structure to pass to a360_OpenWindow

e_OpenWindow.sDynamicInternalWindow="IWB_Paradigm"        
// Now Open the Window with the UI ......

a360_OpenWindow(e_OpenWindow)

The ST_a360_DynamicWindow structure has many preset members (or variables) that you can use to pass data or functionality to your internal windows. Primary and Foreign Keys, Window titles, the ability to embed multiple copies of the internal windows and many more features are included.

You can find the complete list of preset members at the Project code area _AND_ you can add your own members to the structure, without affecting the way your apps work.