Comunidad Gambas-es

Versión completa: Petición de ayuda sobre TextEdit.
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2 3
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
ok, le echo un vistazo y te digo algo
Saludos.
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.   


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...
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.
(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?
"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.
(06-06-2021, 17:20)Shordi escribió: [ -> ]es duro renunciar a ellas

...quizás usando "Desktop.Sendkeys()".........
(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?
(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
Páginas: 1 2 3