Richedit5 SendMsg

Richedit5 SendMsg

Postby Sebastián Almirón » Wed Aug 11, 2021 5: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
User avatar
Sebastián Almirón
 
Posts: 157
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Richedit5 SendMsg

Postby Antonio Linares » Wed Aug 11, 2021 5:29 pm

regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Richedit5 SendMsg

Postby cnavarro » Thu Aug 12, 2021 7: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
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Richedit5 SendMsg

Postby Sebastián Almirón » Thu Aug 12, 2021 9: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
User avatar
Sebastián Almirón
 
Posts: 157
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Re: Richedit5 SendMsg

Postby karinha » Thu Aug 12, 2021 2:58 pm

Que tal algo asi:

Code: Select all  Expand view  RUN

   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
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Richedit5 SendMsg

Postby Antonio Linares » Thu Aug 12, 2021 5: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: jmartial and 71 guests