FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Richedit5 SendMsg
Posts: 166
Joined: Mon Dec 12, 2005 09:56 AM
Richedit5 SendMsg
Posted: Wed Aug 11, 2021 05:20 PM

Hola, he hecho una aplicación que ejecutan en móviles y tablets, a través de terminal server, y en ella tengo unos RichEdit5.
El problema del que se me queja el cliente es que la edicción de los RichEdit, sobre todo el copiar/pegar, que es lo que hacen más a menudo es muy dificultosa en los móviles, concretamente seleccionar el texto que quieren pegar.

He intentado que se pueda marcar la posición de inicio y la de final que se quiere seleccionar, añadiendo un array que contine un rect, guardando las coordenadas cuando hacen doble click (en el método LDblClick) y luego cuando hacen click (en el método LButtonDown) de manera que ahí ya tengo las cuatro coordenadas del rect. Pensaba que enviando un ::SendMsg( EM_SETRECT, 0, @arect ) se quedaría seleccionado el texto que me interesa, pero no, no hace nada. Las coordenadas las he guardado tanto con ::GetRow()/::GetCol como con ::aPos[1]/aPos[2], es decir en pixeles y en lineas/columna, ordenando el array {row_inicio,colum_izquierda,row_final,colum_derecha},pero no funciona.

Resumiendo, ¿hay alguna forma de seleccionar parte del texto de un RichEdit mediante programación?, no me sirven los métodos SelectAll() ni SelectLine(). O alguna forma de cambiar la manera de seleccionar el texto a como se hace en el movil, porque es verdad que aunque se puede seleccionar pulsando dos veces la pantalla e inmediatamente deslizando el dedo, es sumamente dificil y poco practico.

Saludos

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Richedit5 SendMsg
Posted: Wed Aug 11, 2021 05:29 PM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Richedit5 SendMsg
Posted: Thu Aug 12, 2021 07:21 AM

Sebastian, no he llegado a utilizar este control en otro dispositivo que no sea un ordenador/portátil, por lo que no puedo comentar la problemática que planteas, pero, en cualquier caso, cuando estuve desarrollando esta clase, si me planteé poder hacer una selección rectangular al estilo que hago con FivEdit ( scintilla ), y, buscando documentación en la web, encontré ésto que quizás te ayude a darle un mejor enfoque a lo que necesitas ( quizás no porque lo que busques sea hacer una selección de ese tipo, pero sí cómo llevan esa selección al portapapeles ). Espero te ayude.

https://www.codeproject.com/Articles/38 ... it-control

Pd.: si saco un rato, intentaré establecer ese entorno de trabajo a ver si puedo probarlo y comprobar la problemática que planteas

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 166
Joined: Mon Dec 12, 2005 09:56 AM
Re: Richedit5 SendMsg
Posted: Thu Aug 12, 2021 09:52 AM
Gracias Antonio, gracias Cristobal. No, no consigo hacer lo que quiero, he probado con lo que proponeis, pero nada.
Básicamente lo ideal sería que la selección de texto se hiciera como en las tablets/moviles (o algo parecido), es decir que se muestren "las manijas" de selección y el usuario pueda moverlas a su antojo.

Invertigando un poco me he encontrado con que existe un mensaje que se le puede enviar a RichEdit precisamente para mostrar/ocultar esas "manijas" (creo), pensado para los dispositivos tactiles:
https://docs.microsoft.com/en-us/windows/win32/controls/em-settouchoptions

he intenado:
#DEFINE EM_SETTOUCHOPTIONS 1335
#DEFINE EM_GETTOUCHOPTIONS 1334
orichedit:SendMsg( EM_SETTOUCHOPTIONS, 1, .t. )

sin embargo no hace nada, le pido que me devuelva el valor:
nvalor := orichedit:SendMsg( EM_GETTOUCHOPTIONS, 1, 0 )
y siempre me devuelve 0 (falso)
https://docs.microsoft.com/en-us/windows/win32/controls/em-gettouchoptions

Bueno, gracias de todos modos, seguiré con ello y si lo consigo ya os lo diré.
Saludos
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Richedit5 SendMsg
Posted: Thu Aug 12, 2021 02:58 PM
Que tal algo asi:

Code (fw): Select all Collapse
   SendMessage(hWn, EM_SETSEL, 0, -1)
   SendMessage(hWn, WM_COPY, 0, 0)
   buf:=oClp:GetText()


Regrads, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Richedit5 SendMsg
Posted: Thu Aug 12, 2021 05:32 PM

Sebastian,

Prueba PostMsg() en vez de SendMsg()

Prueba tambien con:
orichedit:SendMsg( EM_SETTOUCHOPTIONS, 1, 1 ) // ya que el tercer parámetro tiene que ser numérico

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion