wxWidgets: cómo cambiar el estilo de caret en StyledTextCtrl (enviando un comando a scintilla)

StackOverflow https://stackoverflow.com/questions/800332

Pregunta

wxWidgets tiene wxStyledTextCtrl que (según tengo entendido) usa Scintilla entre bastidores

No sé mucho acerca de la API de Scintilla, pero tengo la idea de que le envías comandos.

En particular, quiero hacer que el cursor tenga un estilo de bloque, encontré en Notepad ++ el siguiente fragmento:

execute(SCI_SETCARETSTYLE, CARETSTYLE_BLOCK)

Quiero hacer lo mismo en StyledTextCtrl, pero no tengo idea de cómo llegar al control de la escinitilla detrás de la escena.

¿Cómo hago esto?

P.S. Estoy trabajando en wxPython, pero supongo que no hay diferencia.

Actualización:

Después de investigar en las fuentes c ++ de wxWidgets, descubrí que la mayoría de las funciones solo llaman a SendMsg , por ejemplo:

// Get the time in milliseconds that the caret is on and off. 0 = steady on.
void wxStyledTextCtrl::SetCaretPeriod(int periodMilliseconds)
{
    SendMsg(2076, periodMilliseconds, 0);
}

Así que pensé que así se enviarían los comandos al componente subyacente de scintilla.

Entonces, tengo los valores que necesito

#define CARETSTYLE_INVISIBLE 0
#define CARETSTYLE_LINE 1
#define CARETSTYLE_BLOCK 2
#define SCI_SETCARETSTYLE 2512
#define SCI_GETCARETSTYLE 2513

Entonces SCI_SETCARETSTYLE es 2512, y el estilo de bloque es 2.

Llamé a SengMsg con estos parámetros:

self.SendMsg(2512, 2)

¡Pero no parecía haber ningún efecto!

¿Cuál podría ser la razón? ¿Cómo puedo depurar esto?

¿Fue útil?

Solución

No escribes qué versión de wxPython / wxWidgets estás usando, pero asumo que es la versión 2.8.x. Esta contiene la versión 1.70 de Scintilla, mientras que la troncal SVN (que se lanzará próximamente como wxWidgets versión 2.9) tiene la versión 1.75 de Scintilla. Un grep sobre los archivos de encabezado de Scintilla revela que SCI_GETCARETSTYLE y SCI_SETCARETSTYLE solo están en el troncal wxWidgets, por lo que esos mensajes no se manejarán en absoluto wxWidgets 2.8.

Otros consejos

Probar

self.SendMsg(msg=2512, lp=2)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top