wxWidgets:StyledTextCtrlでキャレットのスタイルを変更する方法(コマンドをscintillaに送信)

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

質問

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)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top