wxWidgets: come cambiare lo stile del cursore in StyledTextCtrl (inviando un comando a scintilla)

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

Domanda

wxWidgets ha wxStyledTextCtrl che (come ho capito) usa Scintilla dietro le quinte

Non so molto dell'API di Scintilla, ma ho l'idea che gli invii dei comandi.

In particolare, voglio fare in modo che il cursore abbia uno stile a blocchi, ho trovato in Notepad ++ il seguente frammento:

execute(SCI_SETCARETSTYLE, CARETSTYLE_BLOCK)

Voglio fare lo stesso in StyledTextCtrl, ma non ho idea di come ottenere il controllo scinitilla dietro la scena.

Come posso farlo?

P.S. Sto lavorando in wxPython, ma suppongo che non faccia differenza.

Aggiornamento:

Dopo aver scavato nelle fonti c ++ di wxWidgets, ho scoperto che la maggior parte delle funzioni chiama semplicemente SendMsg , ad esempio:

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

Quindi ho pensato che fosse così che si sarebbero inviati i comandi al componente scintilla sottostante.

Quindi, ho i valori di cui ho bisogno

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

Quindi SCI_SETCARETSTYLE è 2512 e lo stile del blocco è 2.

Quindi ho chiamato SengMsg con questi parametri:

self.SendMsg(2512, 2)

Ma non sembra esserci alcun effetto!

Quale potrebbe essere la ragione? Come posso eseguire il debug di questo?

È stato utile?

Soluzione

Non scrivi quale versione di wxPython / wxWidgets stai usando, ma suppongo che sia la versione 2.8.x. Questo contiene Scintilla versione 1.70, mentre il trunk SVN (che presto verrà rilasciato come wxWidgets versione 2.9) ha Scintilla versione 1.75. Un grep sopra i file di intestazione di Scintilla rivela che SCI_GETCARETSTYLE e SCI_SETCARETSTYLE sono solo nel trunk wxWidgets, quindi quei messaggi non verranno gestiti affatto in wxWidgets 2.8.

Altri suggerimenti

Prova

self.SendMsg(msg=2512, lp=2)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top