Consultor Eletrônico



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.