wxWidgets:StyledTextCtrlでキャレットのスタイルを変更する方法(コマンドをscintillaに送信)
質問
wxWidgetsにはwxStyledTextCtrlがあり、(私が理解しているように)舞台裏でScintillaを使用しています
Scintilla APIについてはあまり知りませんが、コマンドを発行するという考えが少しあります。
特に、カーソルをブロックスタイルにしたいのですが、Notepad ++で次のスニペットを見つけました:
execute(SCI_SETCARETSTYLE, CARETSTYLE_BLOCK)
StyledTextCtrlでも同じことをしたいのですが、舞台裏でscinitillaコントロールに到達する方法がわかりません。
これを行うにはどうすればよいですか
PS私はwxPythonで作業していますが、違いはないと思います。
更新:
wxWidgetsのc ++ソースを掘り下げた後、ほとんどの関数が SendMsg
を呼び出すだけであることがわかりました。たとえば、
// Get the time in milliseconds that the caret is on and off. 0 = steady on.
void wxStyledTextCtrl::SetCaretPeriod(int periodMilliseconds)
{
SendMsg(2076, periodMilliseconds, 0);
}
だから、これが基礎となるシンチラコンポーネントにコマンドを送信する方法だと考えました。
つまり、必要な値を取得しました
#define CARETSTYLE_INVISIBLE 0 #define CARETSTYLE_LINE 1 #define CARETSTYLE_BLOCK 2 #define SCI_SETCARETSTYLE 2512 #define SCI_GETCARETSTYLE 2513
つまり、 SCI_SETCARETSTYLE
は2512で、ブロックスタイルは2です。
だから私はこれらのパラメーターで SengMsg
を呼び出しました:
self.SendMsg(2512, 2)
しかし、何の効果もなかったようです!
理由は何ですか?これをデバッグするにはどうすればよいですか?
解決
使用しているwxPython / wxWidgetsのバージョンは記述しませんが、2.8.xバージョンであると想定しています。これにはScintillaバージョン1.70が含まれていますが、SVNトランク(wxWidgetsバージョン2.9としてリリースされる予定)にはScintillaバージョン1.75が含まれています。 Scintillaヘッダーファイルの grep は、 SCI_GETCARETSTYLE および SCI_SETCARETSTYLE がwxWidgetsトランクのみにあることを示しているため、これらのメッセージはまったく処理されません。 wxWidgets 2.8。
他のヒント
試用
self.SendMsg(msg=2512, lp=2)