Comunidad Gambas-es
Petición de ayuda sobre TextEdit. - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forumdisplay.php?fid=3)
+--- Foro: General (https://gambas-es.org/forumdisplay.php?fid=4)
+--- Tema: Petición de ayuda sobre TextEdit. (/showthread.php?tid=441)

Páginas: 1 2 3


Petición de ayuda sobre TextEdit. - Shordi - 05-06-2021

Y una petición de ayuda para el manejo del TextEdit:

En un textEdit, cuando haces click izquierdo sobre un punto de un texto, el cursor se desplaza a él y se actualiza la propiedad .pos a ese punto.
Sin embargo, cuando haces click derecho, este comportamiento no se produce y lo que se hace es abrir el popupmenu del control.

Eso obliga a que para poder sacar la lista de sugerencias en la revisión ortográfica, se tenga que hacer una de estas dos cosas:

a) Hacer un click sobre la palabra marcada como errónea (para situarse) y luego hacer un segundo click derecho para sacar la lista de sugerencias

o

b) Utilizar otro gesto de ratón o combinación de teclas para sacar dicha lista. (Ahora mismo lo que está programado es esta opción, usando doble Click)

Lo que quiero es que, una vez marcada la palabra como errónea, situando el ratón sobre ella y pulsando directamente click derecho, se seleccionase la palabra y se desplegase la lista de sugerencias. Es decir, la opción a) pero sólo con una pulsación, que es el comportamiento usual en todos los editores.

No os cuento todo lo que he probado porque sería interminable y condicionante y sólo os llevaría a callejones sin salida, como a mí.

Adjunto mini proyecto de ejemplo de lo que hay y lo que se desea.

Saludos


RE: Petición de ayuda sobre TextEdit. - tincho - 05-06-2021

ok, le echo un vistazo y te digo algo
Saludos.


RE: Petición de ayuda sobre TextEdit. - vuott - 05-06-2021

Ehmmm... por ahora sólo con Confused una línea de texto:

GAMBAS
  1.  
  2. Public Sub Form_Open()
  3.   
  4.   m = New Menu(Me)
  5.   m.Name = "vacio" 'para que no se despliegue el popupmenu. En condiciones reales este menú sería otro
  6.   TxtEdit.PopupMenu = m.Name
  7.   TxtEdit.Text = "Tityre, tu patulae recubans sub tegmine fagi"
  8.  
  9.  
  10. Public Sub TxtEdit_MouseDown()
  11.  
  12.   Dim c As Short
  13.     
  14.   If Mouse.Right Then ' Para situar el cursor en la línea de texto con el botón derecho del ratón
  15.     For c = 1 To Len(TxtEdit.Text)
  16.       If TxtEdit.Font.TextWidth(String.Left(txtedit.Text, c)) > Mouse.X Then
  17.         TxtEdit.Pos = c - 1
  18.         Exit
  19.       Else
  20.         TxtEdit.Pos = Len(TxtEdit.Text)
  21.       Endif
  22.     Next
  23.   





RE: Petición de ayuda sobre TextEdit. - Shordi - 06-06-2021

Mmmm... casi, casi. Funciona si el texto sólo tiene una línea, pero si pruebas con cualquier texto que necesite varias líneas... la cosa no pita bien.

Me has dado alguna idea, no obstante. Seguiré buscando.

Gracias!

Es todavía más complejo de lo que creía. Jugando con la propuesta de Vuott, veo que no sirve por cuanto el ancho de la fuente puede ser cambiado en cualquier párrafo o palabra, con lo que los cálculos de división por tamaño de caracteres pueden no ser válidos.
Por otra parte, hallar la fila en la que se hace click a partir de lo que se ve en pantalla es imposible porque la pantalla puede estar mostrando sólo parte del texto.

El control tiene las propiedades:
.Paragraph que se muestra/establece el número de párrafo (<P>) en que se encuentra el cursor
.index que creo que se muestra/establece el número de caracter dentro del párrafo donde se encuentra el cursor
.Pos que inidica la posición del cursor dentro del texto (ojo, no del richtext)
Y los métodos
toParagraph 
toIndex y
toPos
 Que parecen ser los que permiten mover el cursor dentro del richtext... pero que no sé muy bien qué hacen (resulta que mi sistema no tiene qt4, sólo qt5 y no me muestra la ayuda del control, que sólo existe para qt4).
He probado todo lo que se me ha ocurrido y fracaso total.

Creo que me voy a rendir con esto...


RE: Petición de ayuda sobre TextEdit. - tincho - 06-06-2021

Una pregunta, ¿Es posible generar un evento artificial por código?
Si por ejemplo, si el control textedit recibe un mousedown este cambia su posicion del cursor solo si es el boton izquierdo del mouse, pero si cuando se hace click con el derecho se genera un evento artificial digamos con el boton izquierdo lo que cambiaria la posicion del cursor.
¿Como lo ven?
Es que ayer intente dar con una solución pero no logre sacar nada en claro.
Saludos.


RE: Petición de ayuda sobre TextEdit. - vuott - 06-06-2021

(06-06-2021, 13:52)tincho escribió:  pero si cuando se hace click con el derecho se genera un evento artificial digamos con el boton izquierdo lo que cambiaria la posicion del cursor.

Sí, también había pensado en este truco; pero... Sad cómo decir "artificialmente" en Gambas y a Gambas, engañándolo, que se ha hecho clic en el botón izquierdo del ratón?

Uhmmm... Undecided quizás enviando un comando apropiado a través de la función externa "ioctl()", que puede comunicarse a nivel bajo con el sistema.
Pero ... Confused vale la pena todo este lío?


RE: Petición de ayuda sobre TextEdit. - Shordi - 06-06-2021

"Pero ... Confused vale la pena todo este lío? ", Ipse dixit: Creo que no... pero es una pena, ciertamente. Nos auto-educamos en una serie de gestos y maneras y es duro renunciar a ellas.

Muchas gracias por los esfuerzos.


RE: Petición de ayuda sobre TextEdit. - vuott - 06-06-2021

(06-06-2021, 17:20)Shordi escribió:  es duro renunciar a ellas

...quizás usando "Desktop.Sendkeys()".........


RE: Petición de ayuda sobre TextEdit. - Shordi - 06-06-2021

(06-06-2021, 19:44)vuott escribió:  
(06-06-2021, 17:20)Shordi escribió:  es duro renunciar a ellas

...quizás usando "Desktop.Sendkeys()".........
mmmm... no veo cómo ¿Qué tecla habría que pulsar?


RE: Petición de ayuda sobre TextEdit. - vuott - 06-06-2021

(06-06-2021, 21:28)Shordi escribió:  no veo cómo

Me imaginé tal cosa:
GAMBAS
  1. Public Sub TextEdit1_MouseDown()
  2.  
  3.   If Mouse.Right Then Desktop.SendKeys("[Pointer_DownLeft]")
  4.  


pero no funciona. Sad