Páginas (3): 1 2 3   
Shordi   05-06-2021, 10:11
#1
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
Archivos adjuntos
.gz
EjemplotextEdit-0.0.1.tar.gz (Tamaño: 13 KB Descargas: 8)

No podemos regresar
tincho   05-06-2021, 22:11
#2
ok, le echo un vistazo y te digo algo
Saludos.

1 Saludo.
vuott   05-06-2021, 22:45
#3
Ehmmm... por ahora sólo con Confused una línea de texto:

Código:
Private m As Menu

Public Sub Form_Open()
  
  m = New Menu(Me)
  m.Name = "vacio" 'para que no se despliegue el popupmenu. En condiciones reales este menú sería otro
  TxtEdit.PopupMenu = m.Name
  TxtEdit.Text = "Tityre, tu patulae recubans sub tegmine fagi"

End

Public Sub TxtEdit_MouseDown()

  Dim c As Short
    
  If Mouse.Right Then ' Para situar el cursor en la línea de texto con el botón derecho del ratón
    For c = 1 To Len(TxtEdit.Text)
      If TxtEdit.Font.TextWidth(String.Left(txtedit.Text, c)) > Mouse.X Then
        TxtEdit.Pos = c - 1
        Exit
      Else
        TxtEdit.Pos = Len(TxtEdit.Text)
      Endif
    Next
  Endif
  
End
Última modificación: 05-06-2021, 23:14 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
Shordi   06-06-2021, 12:52
#4
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...
Última modificación: 06-06-2021, 13:46 por Shordi.

No podemos regresar
tincho   06-06-2021, 13:52
#5
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.

1 Saludo.
vuott   06-06-2021, 15:30
#6
(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?
Última modificación: 06-06-2021, 19:43 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
Shordi   06-06-2021, 17:20
#7
"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.

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

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

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
Shordi   06-06-2021, 21:28
#9
(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?

No podemos regresar
vuott   06-06-2021, 22:39
#10
(06-06-2021, 21:28)Shordi escribió: no veo cómo

Me imaginé tal cosa:
Código:
Public Sub TextEdit1_MouseDown()

  If Mouse.Right Then Desktop.SendKeys("[Pointer_DownLeft]")

End
pero no funciona. Sad

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
Páginas (3): 1 2 3   
  
Usuarios navegando en este tema: 9 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.