wxWidgets: comment changer le style de curseur dans StyledTextCtrl (envoi d'une commande à scintilla)

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

Question

wxWidgets a wxStyledTextCtrl qui (si je comprends bien) utilise Scintilla en coulisse

Je ne connais pas grand chose à propos de l'API Scintilla, mais j'ai un peu l'idée que vous lui donniez des commandes.

En particulier, je souhaite que le curseur ait un style de bloc. J'ai trouvé dans Notepad ++ l'extrait suivant:

execute(SCI_SETCARETSTYLE, CARETSTYLE_BLOCK)

Je veux faire la même chose dans StyledTextCtrl, mais je ne sais pas comment accéder au contrôle scinitilla derrière la scène.

Comment puis-je faire cela?

P.S. Je travaille dans wxPython, mais je suppose que cela ne fait aucune différence.

Mise à jour:

Après avoir fouillé dans les sources c ++ de wxWidgets, j’ai constaté que la plupart des fonctions n’appelaient que SendMsg , par exemple:

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

J'ai donc pensé que c'était ainsi que l'on enverrait des commandes au composant scintilla sous-jacent.

Donc, j'ai les valeurs dont j'ai besoin

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

Donc SCI_SETCARETSTYLE est égal à 2512 et le style de bloc est égal à 2.

J'ai donc appelé SengMsg avec ces paramètres:

self.SendMsg(2512, 2)

Mais il ne semblait y avoir aucun effet!

Quelle pourrait être la raison? Comment puis-je déboguer cela?

Était-ce utile?

La solution

Vous n'écrivez pas la version de wxPython / wxWidgets que vous utilisez, mais je suppose que c'est la version 2.8.x. Ceci contient la version 1.70 de Scintilla, tandis que le tronc SVN (bientôt disponible sous la version wxWidgets version 2.9) possède la version 1.75 de Scintilla. Un grep sur les fichiers d'en-tête Scintilla révèle que SCI_GETCARETSTYLE et SCI_SETCARETSTYLE ne sont que dans le coffre de wxWidgets. Par conséquent, ces messages ne seront pas traités du tout dans. wxWidgets 2.8.

Autres conseils

Essayez

self.SendMsg(msg=2512, lp=2)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top