CREATE WIDGET-POOL.
DEFINE VARIABLE oButton AS System.Windows.Forms.Button NO-UNDO.
DEFINE VARIABLE oForm AS Progress.Windows.Form NO-UNDO.
DEFINE VARIABLE oWindowContainer AS Progress.Windows.WindowContainer NO-UNDO.
DEFINE VAR C-Win AS WIDGET-HANDLE NO-UNDO.
DEFINE VARIABLE FILL-IN-1 AS CHARACTER FORMAT "X(256)":U
LABEL "Fill 1"
VIEW-AS FILL-IN
SIZE 14 BY 1 NO-UNDO.
DEFINE FRAME DEFAULT-FRAME
FILL-IN-1 AT ROW 1.71 COL 7 COLON-ALIGNED
WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 1 ROW 1
SIZE 100 BY 16.
CREATE WINDOW C-Win ASSIGN
TITLE = "ABL Window Embedded Into .NET Form"
HEIGHT = 16
WIDTH = 100
THREE-D = yes.
ON CLOSE OF THIS-PROCEDURE
RUN disable_UI.
MAIN-BLOCK:
DO ON ERROR UNDO MAIN-BLOCK, LEAVE MAIN-BLOCK
ON END-KEY UNDO MAIN-BLOCK, LEAVE MAIN-BLOCK:
/* Create the .NET form. */
oForm = NEW Progress.Windows.Form().
oForm:ClientSize = NEW System.Drawing.Size(C-Win:WIDTH-PIXELS,C-Win:HEIGHT-PIXELS).
oForm:Text = C-Win:TITLE.
oForm:FormClosed:Subscribe("FormClosed").
/* Create .NET button. */
oButton = NEW System.Windows.Forms.Button().
oButton:Location = NEW System.Drawing.Point(100,100).
oButton:Text = ".NET Button".
oButton:Click:Subscribe("NetButtonClick").
oForm:Controls:Add(oButton).
/* Create the WindowContainer, embedding the ABL window into it. */
oWindowContainer = NEW Progress.Windows.WindowContainer().
oWindowContainer:Size = NEW System.Drawing.Size(C-Win:WIDTH-PIXELS, C-Win:HEIGHT-PIXELS).
oWindowContainer:EmbeddedWindow = C-Win.
oWindowContainer:Parent = oForm.
oWindowContainer:Show().
oForm:Show().
RUN enable_UI.
IF NOT THIS-PROCEDURE:PERSISTENT THEN
WAIT-FOR System.Windows.Forms.Application:Run(oForm).
END.
PROCEDURE disable_UI :
IF SESSION:DISPLAY-TYPE = "GUI":U AND VALID-HANDLE(C-Win)
THEN DELETE WIDGET C-Win.
IF THIS-PROCEDURE:PERSISTENT THEN DELETE PROCEDURE THIS-PROCEDURE.
END PROCEDURE.
PROCEDURE enable_UI :
DISPLAY FILL-IN-1
WITH FRAME DEFAULT-FRAME IN WINDOW C-Win.
ENABLE FILL-IN-1
WITH FRAME DEFAULT-FRAME IN WINDOW C-Win.
VIEW C-Win.
END PROCEDURE.
PROCEDURE FormClosed :
DEFINE INPUT PARAMETER sender AS System.Object NO-UNDO.
DEFINE INPUT PARAMETER e AS System.EventArgs NO-UNDO.
APPLY "CLOSE" TO THIS-PROCEDURE.
END PROCEDURE.
PROCEDURE NetButtonClick :
DEFINE INPUT PARAMETER sender AS System.Object NO-UNDO.
DEFINE INPUT PARAMETER e AS System.EventArgs NO-UNDO.
MESSAGE ".NET button clicked - close form." VIEW-AS ALERT-BOX.
oForm:Close().
END PROCEDURE.