Try OpenEdge Now
skip to main content
Programming Interfaces
External Program Interfaces : System Clipboard : Single-item data transfers : Single-item transfer example
 
Single-item transfer example
The i-clpbrd.p procedure uses the clipboard operation implementation described in the previous section. It both demonstrates the capabilities of that design and serves as a primer for other design alternatives. (To run i-clpbrd.p in character mode, comment out all statements that reference MainWindow and assign the MENU MainMenu:HANDLE attribute to the CURRENT-WINDOW:MENUBAR attribute.)
i-clpbrd.p
DEFINE VARIABLE lStat      AS LOGICAL   NO-UNDO.
DEFINE VARIABLE MainWindow AS HANDLE    NO-UNDO.
DEFINE VARIABLE MyEditor   AS CHARACTER NO-UNDO
  VIEW-AS EDITOR SIZE 20 BY 4 SCROLLBAR-VERTICAL.
DEFINE VARIABLE Fillin     AS CHARACTER NO-UNDO FORMAT "x(20)".
DEFINE VARIABLE TogDemo    AS LOGICAL   NO-UNDO EXTENT 2
  INITIAL ["FALSE", "TRUE"]
  LABEL "Pick-Me1", "Pick-Me2"
  VIEW-AS TOGGLE-BOX.
DEFINE VARIABLE Radios     AS INTEGER  NO-UNDO INITIAL 3
  LABEL "Time-O-Day"
  VIEW-AS RADIO-SET RADIO-BUTTONS "1pm", 1, "2pm", 2, "3pm", 3.
DEFINE VARIABLE Slider1    AS INTEGER NO-UNDO
  VIEW-AS SLIDER SIZE-PIXELS 120 by 40
  MAX-VALUE 100 MIN-VALUE 10 LABEL "Slide Me:".
DEFINE VARIABLE Slider2    AS INTEGER  NO-UNDO
  VIEW-AS SLIDER SIZE-PIXELS 120 by 80
  MAX-VALUE 1000 MIN-VALUE 100 VERTICAL LABEL "Slide Me:".
DEFINE VARIABLE SelectList AS CHARACTER NO-UNDO
  VIEW-AS SELECTION-LIST SINGLE SIZE 23 BY 7
  LIST-ITEMS "Line 1", "Line 2", "Line 3", "Line 4", "Line 5", "Line 6",
    "Line 7", "Line 8", "Line 9", "Line 10", "Line 11", "Line 12",
    "Line 13", "Line 14", "Line 15".

DEFINE SUB-MENU FileMenu
  MENU-ITEM FM_New LABEL "&New"
  MENU-ITEM FM_Open LABEL "&Open... "
  RULE
  MENU-ITEM FM_Save LABEL "&Save "
  MENU-ITEM FM_Save_as LABEL "Save &As... "
  RULE
  MENU-ITEM FM_Exit LABEL "E&xit ".

DEFINE SUB-MENU EditMenu
  MENU-ITEM EM_Cut   LABEL "&Cut "
  MENU-ITEM EM_Copy  LABEL "C&opy "
  MENU-ITEM EM_Paste LABEL "&Paste ".
DEFINE MENU MainMenu
  MENUBAR
  SUB-MENU FileMenu LABEL "&File "
  SUB-MENU EditMenu LABEL "&Edit ".

DEFINE BUTTON b_OK     LABEL " OK ".
DEFINE BUTTON b_Cancel LABEL " CANCEL ".

FORM
  "Enter Text Here" AT ROW 1 COLUMN 2
  MyEditor AT ROW 2 COLUMN 2
  "Fill In Here" AT ROW 1 COLUMN 39
  Fillin AT ROW 2 COLUMN 39
  TogDemo[1] AT ROW 2 COLUMN 25
  TogDemo[2] AT ROW 4 COLUMN 25
  Radios AT ROW 7 COLUMN 2
  "Selection List" AT ROW 6 COLUMN 22
  SelectList AT ROW 7 COLUMN 17
  Slider2 AT ROW 7 COLUMN 45
  Slider1 AT ROW 12 COLUMN 43
  b_OK AT ROW 12 COLUMN 2
  b_Cancel AT ROW 14 COLUMN 2 SKIP 0.5)
  WITH FRAME MainFrame NO-LABEL CENTERED WIDTH-CHARS 80.

ON CHOOSE OF b_OK IN FRAME MainFrame MESSAGE "OK pressed".
ON CHOOSE OF b_Cancel IN FRAME MainFrame MESSAGE "CANCEL pressed".
ON CHOOSE OF MENU-ITEM FM_Exit IN MENU FileMenu STOP.

/****** Begin Clipboard Code ******/
ON MENU-DROP OF MENU EditMenu DO:
  IF FOCUS:TYPE = "EDITOR" THEN DO:
    MENU-ITEM EM_Cut:SENSITIVE IN MENU EditMenu =
      IF LENGTH(FOCUS:SELECTION-TEXT) > 0 THEN TRUE ELSE FALSE.
    MENU-ITEM Em_Copy:SENSITIVE IN MENU EditMenu =
      IF LENGTH(FOCUS:SELECTION-TEXT) > 0 THEN TRUE ELSE FALSE.
    MENU-ITEM EM_Paste:SENSITIVE IN MENU EditMenu =
      IF CLIPBOARD:NUM-FORMATS > 0 THEN TRUE ELSE FALSE.
  END.
  ELSE IF FOCUS:TYPE = "RADIO-SET" OR
          FOCUS:TYPE = "SELECTION-LIST" OR
          FOCUS:TYPE = "SLIDER" OR
          FOCUS:TYPE = "TOGGLE-BOX" THEN DO:
    MENU-ITEM EM_Cut:SENSITIVE IN MENU EditMenu   = FALSE.
    MENU-ITEM Em_Copy:SENSITIVE IN MENU EditMenu  = TRUE.
    MENU-ITEM Em_Paste:SENSITIVE IN MENU EditMenu = FALSE.
  END.

  ELSE IF FOCUS:TYPE = "FILL-IN" THEN DO:
    MENU-ITEM EM_Cut:SENSITIVE IN MENU EditMenu =
      IF LENGTH(FOCUS:SCREEN-VALUE) > 0 THEN TRUE ELSE FALSE.
    MENU-ITEM Em_Copy:SENSITIVE IN MENU EditMenu =
      IF LENGTH(FOCUS:SCREEN-VALUE) > 0 THEN TRUE ELSE FALSE.
    MENU-ITEM EM_Paste:SENSITIVE IN MENU EDitMenu =
      IF CLIPBOARD:NUM-FORMATS > 0 THEN TRUE ELSE FALSE.
  END.
  ELSE DO:
    MENU-ITEM EM_Cut:SENSITIVE IN MENU EditMenu = FALSE.
    MENU-ITEM EM_Copy:SENSITIVE IN MENU EditMenu = FALSE.
    MENU-ITEM EM_Paste:SENSITIVE IN MENU EditMenu = FALSE.
  END.
END. /* ON MENU-DROP IN EditMenu */

ON CHOOSE OF MENU-ITEM EM_Cut IN MENU EditMenu DO:
  IF FOCUS:TYPE = "EDITOR" THEN DO:
    IF FOCUS:SELECTION-START <> FOCUS:SELECTION-END THEN DO:
      CLIPBOARD:VALUE = FOCUS:SELECTION-TEXT.
      lStat           = FOCUS:REPLACE-SELECTION-TEXT("").
    END.
    ELSE DO:
      CLIPBOARD:VALUE    = FOCUS:SCREEN-VALUE.
      FOCUS:SCREEN-VALUE = "".
    END.
  END.
  ELSE DO: /* For FILL-IN */
    CLIPBOARD:VALUE    = FOCUS:SCREEN-VALUE.
    FOCUS:SCREEN-VALUE = "".
  END.
END. /* ON CHOOSE OF MENU-ITEM EM_Cut */

ON CHOOSE OF MENU-ITEM EM_Copy IN MENU EditMenu DO:
  IF FOCUS:TYPE = "EDITOR" THEN
    IF FOCUS:SELECTION-START <> FOCUS:SELECTION-END THEN
      CLIPBOARD:VALUE = FOCUS:SELECTION-TEXT.
    ELSE
      CLIPBOARD:VALUE = FOCUS:SCREEN-VALUE.
  ELSE IF FOCUS:TYPE = "RADIO-SET" THEN
    CLIPBOARD:VALUE = ENTRY(LOOKUP(FOCUS:SCREEN-VALUE,
      FOCUS:RADIO-BUTTONS) - 1, FOCUS:RADIO-BUTTONS).
  ELSE IF FOCUS:TYPE = "TOGGLE-BOX" THEN
    IF FOCUS:SCREEN-VALUE = "yes" THEN
      CLIPBOARD:VALUE = FOCUS:LABEL + " selected.".
    ELSE
      CLIPBOARD:VALUE = FOCUS:LABEL + " not selected.".
  ELSE /* For FILL-IN */
    CLIPBOARD:VALUE = FOCUS:SCREEN-VALUE.
END. /* ON CHOOSE OF MENU-ITEM EM_Copy */

ON CHOOSE OF MENU-ITEM EM_Paste IN MENU EditMenu DO:
  IF FOCUS:TYPE = "EDITOR" THEN DO:
    IF FOCUS:SELECTION-START <> FOCUS:SELECTION-END THEN
      lStat = FOCUS:REPLACE-SELECTION-TEXT(CLIPBOARD:VALUE).
    ELSE
      lStat = FOCUS:INSERT-STRING(CLIPBOARD:VALUE).
  END.
  ELSE /* For FILL-IN */
    FOCUS:SCREEN-VALUE = CLIPBOARD:VALUE.
END. /* ON CHOOSE OF MENU-ITEM EM_Paste */
/****** End Clipboard Code ******/

CREATE WINDOW MainWindow
  ASSIGN
    X = 0
    Y = 0
    MENUBAR = MENU MainMenu:HANDLE
    TITLE = "CLIPBOARD SUPPORT".

CURRENT-WINDOW = MainWindow.

ON WINDOW-CLOSE OF MainWindow STOP.

ENABLE ALL WITH FRAME MainFrame.
STATUS DEFAULT "Widgets and the Clipboard".

WAIT-FOR CHOOSE OF b_Cancel IN FRAME MainFrame.
DELETE WIDGET MainWindow.