Kbase P21123: How to copy the field values of the selected rows of a multiple selection browse or SmartDataBrowse
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  16/10/2008 |
|
Status: Verified
GOAL:
How to access information stored in CLIPBOARD?
GOAL:
How to retrieve CLIPBOARD information in 4GL ?
GOAL:
How to copy the field values of the selected rows of a multiple selection browse or SmartDataBrowse to the clipboard?
GOAL:
How to capture a field value to the clipboard
GOAL:
How to simulate a CTRL-C
FACT(s) (Environment):
Windows
Progress 9.x
OpenEdge 10.x
FIX:
Use CLIPBOARD:VALUE.
The following example illustrates the solution. In a regular browse it is assumed that at least one field will be enabled:
Procedure CopyToClipboard:
/*------------------------------------------------------------------------------
Purpose:
Parameters:
Notes:
------------------------------------------------------------------------------*/
DEF VAR hcol AS HANDLE NO-UNDO.
DEF VAR hBuffer AS HANDLE NO-UNDO.
DEF VAR hQuery AS HANDLE NO-UNDO.
DEF VAR hField AS HANDLE NO-UNDO.
DEFINE VARIABLE hBrowse AS HANDLE.
DEF VAR i AS INT NO-UNDO.
DEF VAR j AS INT NO-UNDO.
hBrowse = BROWSE {&BROWSE-NAME}:HANDLE.
hQuery = hBrowse:QUERY.
hBuffer = hQuery:GET-BUFFER-HANDLE(1).
hcol = hBrowse:CURRENT-COLUMN.
/*
Is-Row-Selected will give TRUE even if we are in an enabled field.
Num-Selected-Rows = 1 even if we are in an enabled field.
To know when we are in a cell and when we have one row selected will use CURSOR-OFFSET:
if hcol:CURSOR-OFFSET <> ? then we are in a field so will copy the field.
*/
IF hcol:CURSOR-OFFSET <> ? THEN DO: /* copy current cell to clipboard */
CLIPBOARD:VALUE = hcol:SCREEN-VALUE.
END.
ELSE DO: /* copy row */
CLIPBOARD:VALUE = ' '.
DO i = 1 TO hBrowse:NUM-SELECTED-ROWS:
hBrowse:FETCH-SELECTED-ROW(i).
hCol = hBrowse:FIRST-COLUMN.
DO j = 1 TO hBrowse:NUM-COLUMNS:
hField = hBuffer:BUFFER-FIELD(hCol:NAME).
CLIPBOARD:VALUE = CLIPBOARD:VALUE + ' ' + hField:BUFFER-VALUE.
hCol = hCol:NEXT-COLUMN.
END.
CLIPBOARD:VALUE = CLIPBOARD:VALUE + "~n".
END.
END.
MESSAGE CLIPBOARD:VALUE.
END PROCEDURE.