Saludos de nuevo..
Ahora te voy a adjuntar el código que yo utilizo en un cuadro de edición. Creo que es mas sencillo de hacer. Observa también debes buscar las imágenes que se muestran al lado del Menú. Te anexo algunas imágenes en el archivo rar, sin embargo puedes poner las que mas te gusten. Y además de copiar cortar y pegar puedes insertar la fecha, cambiar los colores de las letras, del fondo, etc. Además es fácil llamar a un procedimiento, puse como ejemplo hablar. Seleccionas algo y el computador lo lee.
Hay ejemplos muy pero muy buenos en el portal comunidad de programadores .. aqui mismo... del Maestro Luis María.
* Procedimiento RightClick
*------------------------------
lnRow = MROW()+0.5
lnCol = MCOL()
* Teoría del Menú contextual
* --------------------------------
*!* Color Código
*!* Black N
*!* Blue B
*!* Brown GR
*!* Cyan BG
*!* Green G
*!* Magenta RB
*!* Red R
*!* White W
*!* Yellow GR+
*!* Elemento de la lista Sentido
*!* 1 elemento deshabilitado
*!* 2 elemento habilitado
*!* 3 Borde
*!* 4 Título
*!* 5 mensaje
*!* 6 Item seleccionado
*!* 7 indicador de tecla de acceso directo
*!* 8 Sombra
*!* 9 Control Activado
*!* 10 control deshabilitado,
* Ejemplo de colores
*!* DEFINE POPUP Shortcut COLOR ;
*!* G/W* ;
*!* RGB(0,0,255,255,255,255),,,, ;
*!* RGB(255,255,255,128,128,0)
*!* RGB(128,255,255) azul claro
*!* RGB(197,252,228) Azul mas claro
*!* RGB(0,0,0) Negro
*This.ForeColor = RGB(0,0,255)
DEFINE POPUP mPoPup;
shortcut FONT '@Microsoft JhengHei UI', 16 ;
STYLE 'BI' COLOR ;
G/W*, ;
,;
,;
RGB(0,0,255,255,255,0),;
,;
W+/G TITLE 'Seleccione una Opción' ;
FROM lnRow, lnCol
SET MARK OF POPUP mPoPup TO CHR(3)
* RGB(197,252, 228,0,0,0)
* COLOR GR+ / W *, * , W / B, N /W , , + W/GR
* FONT "@Microsoft JhengHei UI , 12" STYLE "BI";
* SHADOW COLOR SCHEME 4
* COLOR R/W*, W/B ,R/W ,R/W ,R/W ,GR+/R
DEFINE BAR 1 OF mPoPup PROMPT "Leer con Narrador seleccionado" MARK CHR(3) ;
PICTURE "c:\hielo\bmp\boton_Rojo.PNG"
DEFINE BAR 2 OF mPoPup PROMPT "Insertar Fecha" MARK CHR(3) ;
PICTURE "c:\hielo\bmp\boton_Rojo.PNG"
* COLOR R/W*, W/B , , , ,GR+/R
DEFINE BAR _med_cut OF mPoPup PROMPT "Cor\<tar" ;
KEY CTRL+X, "Ctrl+X" ;
MESSAGE "Cortar el texto y ponerlo en el portapapeles" ;
PICTURE "c:\hielo\bmp\_cut.bmp"
DEFINE BAR _med_copy OF mPoPup PROMPT "\<Copiar" ;
KEY CTRL+C, "Ctrl+C" ;
MESSAGE "Copia la selección al portapapeles" ;
PICTURE "c:\hielo\bmp\_copy.bmp"
DEFINE BAR _med_paste OF mPoPup PROMPT "\<Pegar" ;
KEY CTRL+V, "Ctrl+V" ;
MESSAGE "Pega el texto al portapapeles" ;
PICTURE "c:\hielo\bmp\_paste2.bmp"
DEFINE BAR _med_slcta OF mPoPup PROMPT "Se\<lecciona Todo" ;
KEY CTRL+A, "Ctrl+A" ;
MESSAGE "Selecciona todo el texto" ;
PICTURE "c:\hielo\bmp\_ok3.bmp"
DEFINE BAR _med_undo OF mPoPup PROMPT "\<Deshacer" ;
KEY CTRL+Z, "Ctrl+Z" ;
MESSAGE "Deja todo como estaba" ;
PICTURE "c:\hielo\bmp\_undo.bmp"
DEFINE BAR 3 OF mPoPup PROMPT "Mayúscula Inicial" MARK CHR(3) ;
PICTURE "c:\hielo\bmp\Boton_Rojo.PNG"
* COLOR R/W*, W/B , , , ,GR+/R
opcion = 0
ON SELECTION BAR 1 OF mPoPup opcion = 1
ON SELECTION BAR 2 OF mPoPup opcion = 2
ON SELECTION BAR 3 OF mPoPup opcion = 3
ACTIVATE POPUP mPoPup
DO CASE
CASE opcion = 1
Thisform.hablar (This.Parent.detalle1) && Lo mando con el nombre del objeto
CASE opcion = 2
_cliptext = TRANSFORM (DATETIME() )
KEYBOARD '{CTRL+V}'
CASE opcion = 3
_cliptext = PROPER(this.SelText)
KEYBOARD '{CTRL+V}'
ENDCASE
* diga = this.SelText
* lo.SelText = UPPER(lo.SelText)
*!* SelStart
*!* Devuelve el punto inicial de una selección de texto realizada por el usuario
*!* en un área de entrada de texto de un control o indica la posición del punto
*!* de inserción si no hay texto seleccionado. También especifica el punto
*!* inicial de una selección de texto en un área de entrada de texto
*!* de un control. No está disponible en tiempo de diseño; es de lectura
*!* y escritura en tiempo de ejecución.
*!*
*!* SelLength (Propiedad)Vea también
*!* Se aplica a: ComboBox | EditBox | Spinner | TextBox
*!* Devuelve el número de caracteres que el usuario selecciona
*!* en un área de entrada de texto de un control o especifica el
*!* número de caracteres que se van a seleccionar. No está disponible
*!* en tiempo de diseño; es de lectura y escritura en tiempo de ejecución.
*!* SelText
*!* Devuelve el texto seleccionado por usuario en una área de entrada
*!* de texto de un control o devuelve una cadena de caracteres
*!* vacía ("") si no hay caracteres seleccionados. Especifica la cadena
*!* que contiene el texto seleccionado. No esta disponible en tiempo de
*!* diseño; es de lectura y escritura en tiempo de ejecución.