wxWidgets: como mudar o estilo acento circunflexo em StyledTextCtrl (enviando um comando para scintilla)

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

Pergunta

wxWidgets tem wxStyledTextCtrl que (como eu entendo) usa Scintilla nos bastidores

Eu não sei muito sobre Scintilla API, mas eu meio que tem a idéia de que você emite comandos a ele.

Em particular, eu quero fazer o cursor têm um estilo bloco, que encontrei no Notepad ++ o seguinte trecho:

execute(SCI_SETCARETSTYLE, CARETSTYLE_BLOCK)

Eu quero fazer o mesmo no StyledTextCtrl, mas não tenho idéia de como chegar ao controle scinitilla por trás da cena.

Como posso fazer isso?

P.S. Eu estou trabalhando em wxPython, mas suponho que não faz a diferença.

Update:

Depois de algumas escavações no c ++ fontes de wxWidgets, descobri que a maioria das funções é só chamar SendMsg, por exemplo:

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

Então eu percebi que esta é a forma como se poderia enviar comandos para o componente scintilla subjacente.

Então, eu tenho os valores que eu preciso

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

Assim SCI_SETCARETSTYLE é 2512, e estilo do bloco é 2.

Então eu chamei SengMsg com estes parâmetros:

self.SendMsg(2512, 2)

Mas não parecia haver qualquer efeito!

O que poderia ser a razão? Como eu posso depurar isso?

Foi útil?

Solução

Você não escrever a versão do wxPython / wxWidgets você está usando, mas eu suponho que é a versão 2.8.x. Este contém Scintilla versão 1.70, enquanto o tronco SVN (que em breve será lançado como wxWidgets versão 2.9) tem Scintilla versão 1.75. A grep sobre os arquivos de cabeçalho Scintilla revela que SCI_GETCARETSTYLE e SCI_SETCARETSTYLE são apenas no tronco wxWidgets, então essas mensagens não serão tratadas em tudo em wxWidgets 2.8.

Outras dicas

Tente

self.SendMsg(msg=2512, lp=2)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top