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
Richedit5 SendMsg
- Sebastián Almirón
- Posts: 157
- Joined: Mon Dec 12, 2005 9:56 am
- Location: Moralzarzal - Spain
- Antonio Linares
- Site Admin
- Posts: 42450
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 20 times
- Been thanked: 58 times
- Contact:
Re: Richedit5 SendMsg
Sebastian,
Has probado con EM_SETSEL ?
https://docs.microsoft.com/en-us/windows/win32/controls/em-setsel
Has probado con EM_SETSEL ?
https://docs.microsoft.com/en-us/windows/win32/controls/em-setsel
Re: Richedit5 SendMsg
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
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
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
- Sebastián Almirón
- Posts: 157
- Joined: Mon Dec 12, 2005 9:56 am
- Location: Moralzarzal - Spain
Re: Richedit5 SendMsg
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
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
- karinha
- Posts: 7928
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 3 times
- Contact:
Re: Richedit5 SendMsg
Que tal algo asi:
Regrads, saludos.
Code: Select all | Expand
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
- Antonio Linares
- Site Admin
- Posts: 42450
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 20 times
- Been thanked: 58 times
- Contact:
Re: Richedit5 SendMsg
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
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