USER COMPONENTS INTERFACE
Standard Interface To Allow HMG Users Create Its Own Components
InstallEventHandler ()
InstallEventHandler ( <cEventHandlerFunctionName> )
Every time that an event is triggered by the system the specified function will be called.
This function will receive the following parameters: hWnd, nMsg, wParam, lParam
If your function process the message, it must return a not NIL value. If not, it must return NIL.
InstallMethodHandler()
InstallMethodHandler(<cMethodName>,<cMethodHandlerProcName>)
Every time that specified method is called, your procedure will be executed.
If your procedure process the method, you must set the 'user process flag' ( _HMG_SYSDATA [63] ) to .T. If not, you must
set it to .F.
InstallPropertyHandler()
InstallPropertyHandler(<cPropName>,<cSetFucName>,<cGetFuncName>)
When the specified property is set, <cSetFucName> is called with all the original parameters
When the specified property is value retrieved <cGetFucName> is called with all the original parameters.
In both cases if your functions process the property, you must set the 'user process flag' ( _HMG_SYSDATA [63] ) to .T. If not, you must set it to .F.
Other Considerations:
If you've created components that requires #command directives (ie. a control) you must add these definitions to i_UsrInit.ch file located at HMG's INCLUDE folder.
The definitions must include start and end markers that will be used to allow the creation of automated installation and maintenance procedures for components.
The format for start marker is:
#define BASEDEF_<YourComponentTypeName>
The format for end marker is:
#undef BASEDEF_<YourComponentTypeName>
If you've created methods or properties with new names (not currently specified in i_windows.ch, DECLARE WINDOW command definition) you must add translation directives for them in 'i_UsrSOOP.ch' file, located at HMG's INCLUDE folder.
The definitions must include start and end markers too and the translation directives must follow special rules.
The format for start marker is:
#define SOOP_<YourComponentTypeName> ;;
The format for translation directives for methods is:
#xtranslate <Window> . \<Control\> . MethodName => Domethod ( <"Window">, \<"Control"\> , "MethodName" ) ;;
The format for translation directives for properties is:
#xtranslate <Window> . \<Control\> . PropName => GetProperty ( <"Window">, \<"Control"\> , "PropName" ) ;;
#xtranslate <Window> . \<Control\> . PropName := \<v\> => SetProperty ( <"Window">, \<"Control"\> , "PropName" , \<v\> ) ;;
The format for end marker is:
#undef SOOP_<YourComponentTypeName> ;;
Sample:
c:\hmg\samples\user_components