1

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

2512もそうSCI_SETCARETSTYLEです、そしてブロックスタイルは2です。

だから私はSengMsgこれらのパラメータで呼び出しました:

self.SendMsg(2512, 2)

しかし、効果はなかったようです!

理由は何でしょうか?どうすればこれをデバッグできますか?

4

2 に答える 2

2

使用しているwxPython/wxWidgetsのバージョンは記述していませんが、2.8.xバージョンであると思います。これにはScintillaバージョン1.70が含まれていますが、SVNトランク(まもなくwxWidgetsバージョン2.9としてリリースされます)にはScintillaバージョン1.75が含まれています。Scintillaヘッダーファイルをgrepすると、SCI_GETCARETSTYLEとSCI_SETCARETSTYLEwxWidgetsトランクにのみ存在するため、これらのメッセージはwxWidgets2.8ではまったく処理されないことがわかります。

于 2009-04-29T19:16:28.087 に答える
0

試す

self.SendMsg(msg=2512, lp=2)
于 2009-04-29T13:06:32.733 に答える