How to Get a Widget's Procedure Handle

Chris Kelleher

Administrator
Staff member
<BLOCKQUOTE><font size="1" face="Arial, Verdana">code:</font><HR><pre>&ANALYZE-SUSPEND _VERSION-NUMBER UIB_v9r12
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Method-Library
/*------------------------------------------------------------------------
Library : pubwin.i

Purpose : Get a Widgets Procedure Handle

Syntax : Include as a method library

Author(s) : Mike Carroll

Created : August 1999
----------------------------------------------------------------------*/
/* This .W file was created with the Progress AppBuilder. */
/*----------------------------------------------------------------------*/

/* *************************** Definitions ************************** */

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME


&ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK

/* ******************** Preprocessor Definitions ******************** */

/* _UIB-PREPROCESSOR-BLOCK-END */
&ANALYZE-RESUME


/* ************************ Function Prototypes ********************** */

&IF DEFINED(EXCLUDE-FRAME-OF) = 0 &THEN

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD FRAME-OF Method-Library
FUNCTION FRAME-OF RETURNS HANDLE
( INPUT hWidget AS HANDLE ) FORWARD.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ENDIF

&IF DEFINED(EXCLUDE-PROCEDURE-OF) = 0 &THEN

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD PROCEDURE-OF Method-Library
FUNCTION PROCEDURE-OF RETURNS HANDLE
( INPUT hWidget AS HANDLE ) FORWARD.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ENDIF

&IF DEFINED(EXCLUDE-WINDOW-OF) = 0 &THEN

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD WINDOW-OF Method-Library
FUNCTION WINDOW-OF RETURNS HANDLE
( INPUT hWidget AS HANDLE ) FORWARD.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ENDIF


/* *********************** Procedure Settings ************************ */

&ANALYZE-SUSPEND _PROCEDURE-SETTINGS
/* Settings for THIS-PROCEDURE
Type: Method-Library
Allow:
Frames: 0
Add Fields to: Neither
Other Settings: INCLUDE-ONLY
*/
&ANALYZE-RESUME _END-PROCEDURE-SETTINGS

/* ************************* Create Window ************************** */

&ANALYZE-SUSPEND _CREATE-WINDOW
/* DESIGN Window definition (used by the UIB)
CREATE WINDOW Method-Library ASSIGN
HEIGHT = 15
WIDTH = 60.
/* END WINDOW DEFINITION */
*/
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _INCLUDED-LIB Method-Library
/* ************************* Included-Libraries *********************** */

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Method-Library


/* *************************** Main Block *************************** */

&IF "{&PROCEDURE-TYPE}" = "SmartWindow"
&THEN
SUBSCRIBE PROCEDURE THIS-PROCEDURE TO "PublishWindowOwner" ANYWHERE.
&ENDIF

SUBSCRIBE PROCEDURE THIS-PROCEDURE TO "PublishFrameOwner" ANYWHERE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME


/* ********************** Internal Procedures *********************** */

&IF DEFINED(EXCLUDE-PublishFrameOwner) = 0 &THEN

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE PublishFrameOwner Method-Library
PROCEDURE PublishFrameOwner :
/*------------------------------------------------------------------------------
Purpose: Returns THIS-PROCEDURE if the handle matches the current frame
Parameters: Handle of the Window to compare
Notes:
------------------------------------------------------------------------------*/
DEFINE INPUT PARAMETER hFrame AS HANDLE NO-UNDO.

&IF "{&FRAME-NAME}" <> ""
&THEN
IF hFrame = FRAME {&FRAME-NAME}:HANDLE
THEN
RETURN STRING(THIS-PROCEDURE:HANDLE).
&ENDIF

END PROCEDURE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ENDIF

&IF DEFINED(EXCLUDE-PublishWindowOwner) = 0 &THEN

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE PublishWindowOwner Method-Library
PROCEDURE PublishWindowOwner :
/*------------------------------------------------------------------------------
Purpose: Returns THIS-PROCEDURE if the handle matches the current window
Parameters: Handle of the Window to compare
Notes:
------------------------------------------------------------------------------*/
DEFINE INPUT PARAMETER hWindow AS HANDLE NO-UNDO.

&IF DEFINED(WINDOW-NAME)
&THEN
IF hWindow = {&WINDOW-NAME}:HANDLE
THEN
RETURN STRING(THIS-PROCEDURE:HANDLE).
&ENDIF

END PROCEDURE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ENDIF

/* ************************ Function Implementations ***************** */

&IF DEFINED(EXCLUDE-FRAME-OF) = 0 &THEN

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION FRAME-OF Method-Library
FUNCTION FRAME-OF RETURNS HANDLE
( INPUT hWidget AS HANDLE ) :
/*------------------------------------------------------------------------------
Purpose: Return the handle of the window containing the widget
Notes:
------------------------------------------------------------------------------*/

DO WHILE VALID-HANDLE(hWidget) AND hWidget:TYPE <> "FRAME":U:
ASSIGN hWidget = hWidget:pARENT.
END.

RETURN hWidget.

END FUNCTION.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ENDIF

&IF DEFINED(EXCLUDE-PROCEDURE-OF) = 0 &THEN

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION PROCEDURE-OF Method-Library
FUNCTION PROCEDURE-OF RETURNS HANDLE
( INPUT hWidget AS HANDLE ) :
/*------------------------------------------------------------------------------
Purpose: Returns the handle of the procedure that owns widget hWidget.
Notes:
------------------------------------------------------------------------------*/

PUBLISH "PublishFrameOwner" (FRAME-OF(hWidget)).

IF RETURN-VALUE = ""
THEN
PUBLISH "PublishWindowOwner" (WINDOW-OF(hWidget)).

RETURN WIDGET-HANDLE(RETURN-VALUE).

END FUNCTION.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ENDIF

&IF DEFINED(EXCLUDE-WINDOW-OF) = 0 &THEN

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION WINDOW-OF Method-Library
FUNCTION WINDOW-OF RETURNS HANDLE
( INPUT hWidget AS HANDLE ) :
/*------------------------------------------------------------------------------
Purpose: Return the handle of the window containing the widget
Notes:
------------------------------------------------------------------------------*/

DO WHILE VALID-HANDLE(hWidget) AND hWidget:TYPE <> "WINDOW":U:
ASSIGN hWidget = hWidget:pARENT.
END.

RETURN hWidget.

END FUNCTION.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ENDIF

[/code]
 
Even simpler,
DO WITH FRAME {&FRAME-NAME}:
MESSAGE
widgetName:HANDLE /* specify the widget and access the required attribute */
VIEW-AS ALERT-BOX.
 
Top