Kbase P185545: How to switch between different ABL popup menus on a dynamic browse
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  08/04/2011 |
|
Status: Unverified
GOAL:
How to switch between different ABL popup menus on a dynamic browse
GOAL:
How to use two different popup menus on the same dynamic browse.
FACT(s) (Environment):
Windows
OpenEdge 10.x
OpenEdge Category: Language (4GL/ABL)
FIX:
DEFINE VARIABLE b1 AS HANDLE.
DEFINE VARIABLE calch AS HANDLE.
DEFINE VARIABLE h_q AS HANDLE NO-UNDO.
DEFINE VARIABLE hPopupMenu AS HANDLE NO-UNDO.
DEFINE VARIABLE hPopupMenu2 AS HANDLE NO-UNDO.
DEFINE QUERY q1 FOR customer
FIELDS (custnum name phone contact creditlimit balance) SCROLLING.
OPEN QUERY q1 FOR EACH customer NO-LOCK.
DEFINE FRAME f1
WITH SIZE 78 BY 18.
CREATE BROWSE b1
ASSIGN
FRAME = FRAME f1:HANDLE
X = 2
Y = 2
WIDTH = 76
DOWN = 8
QUERY = QUERY q1:HANDLE
TITLE = "Dynamic Browse with static query"
SENSITIVE = TRUE
VISIBLE = FALSE
MULTIPLE = TRUE
READ-ONLY = FALSE
SEPARATORS = TRUE.
PROCEDURE SendMessageA EXTERNAL "USER32.DLL":
DEFINE INPUT PARAMETER lHandle AS LONG NO-UNDO.
DEFINE INPUT PARAMETER lMessage AS LONG NO-UNDO.
DEFINE INPUT PARAMETER wParam AS LONG NO-UNDO.
DEFINE INPUT PARAMETER lParam AS LONG NO-UNDO.
END PROCEDURE.
RUN createMenuPopup. /* Popup active on browse */
RUN createMenuPopup2. /* Popup active on browse column header */
ON 'mouse-menu-click':U OF b1
DO:
IF LAST-EVENT:Y < 16 THEN
b1:HANDLE:POPUP-MENU = hPopupMenu.
ELSE
b1:handle:POPUP-MENU = hPopupMenu2.
RUN SendMessageA(SELF:HWND, 517,0,0).
b1:HANDLE:POPUP-MENU = ?.
END.
PROCEDURE createMenuPopup:
DEFINE VARIABLE hBrowse AS HANDLE NO-UNDO.
DEFINE VARIABLE hRuleItem AS HANDLE NO-UNDO.
DEFINE VARIABLE lMovable AS LOGICAL NO-UNDO.
DEFINE VARIABLE phMenuItem AS HANDLE NO-UNDO.
hBrowse = b1:HANDLE.
CREATE MENU hPopupMenu
ASSIGN
POPUP-ONLY = TRUE
TITLE = 'Browser Menu'.
RUN createPopupItem IN TARGET-PROCEDURE
(INPUT hPopupMenu,
INPUT FALSE,
INPUT '&Popup Menu1',
INPUT "":U,
INPUT FALSE,
INPUT FALSE,
OUTPUT phMenuItem).
END PROCEDURE.
PROCEDURE createMenuPopup2:
DEFINE VARIABLE hBrowse AS HANDLE NO-UNDO.
DEFINE VARIABLE hRuleItem AS HANDLE NO-UNDO.
DEFINE VARIABLE lMovable AS LOGICAL NO-UNDO.
DEFINE VARIABLE phMenuItem AS HANDLE NO-UNDO.
hBrowse = b1:HANDLE.
CREATE MENU hPopupMenu2
ASSIGN
POPUP-ONLY = TRUE
TITLE = 'Browser Menu'.
RUN createPopupItem IN TARGET-PROCEDURE
(INPUT hPopupMenu2,
INPUT FALSE,
INPUT '&Popup Menu2',
INPUT "":U,
INPUT FALSE,
INPUT FALSE,
OUTPUT phMenuItem).
END PROCEDURE.
PROCEDURE createPopupItem:
DEFINE INPUT PARAMETER phPopupMenu AS HANDLE NO-UNDO.
DEFINE INPUT PARAMETER lSubMenu AS LOGICAL NO-UNDO.
DEFINE INPUT PARAMETER pcLabel AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER pcName AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER plChecked AS LOGICAL NO-UNDO.
DEFINE INPUT PARAMETER plToggle AS LOGICAL NO-UNDO.
DEFINE OUTPUT PARAMETER phMenuItem AS HANDLE NO-UNDO.
IF lSubMenu THEN
CREATE SUB-MENU phMenuItem
ASSIGN
LABEL = pcLabel
NAME = pcName
PARENT = phPopupMenu.
ELSE DO:
IF plToggle THEN
CREATE MENU-ITEM phMenuItem
ASSIGN
 .; LABEL = pcLabel
NAME = pcName
TOGGLE-BOX = plToggle
CHECKED = plChecked
PARENT = phPopupMenu.
ELSE
CREATE MENU-ITEM phMenuItem
ASSIGN
LABEL = pcLabel
NAME = pcName
PARENT = phPopupMenu.
END.
END PROCEDURE.
b1:ADD-LIKE-COLUMN("customer.custnum").
b1:ADD-LIKE-COLUMN("customer.name").
b1:ADD-LIKE-COLUMN("customer.phone").
b1:ADD-LIKE-COLUMN("customer.contact").
calch=b1:ADD-CALC-COLUMN("DECIMAL","->,>>>,>>9.99","0","CurrentLimit").
b1:VISIBLE = TRUE.
ENABLE ALL WITH FRAME f1.
WAIT-FOR CLOSE OF CURRENT-WINDOW
.