wxWidgets: как изменить стиль каретки в StyledTextCtrl (отправка команды в scintilla) - PullRequest
1 голос
/ 29 апреля 2009

wxWidgets имеет wxStyledTextCtrl, который (как я понимаю) использует Scintilla за кулисами

Я не знаю много о Scintilla API, но у меня есть идея, что вы даете ему команды.

В частности, я хочу, чтобы курсор имел стиль блока, я нашел в Notepad ++ следующий фрагмент:

execute(SCI_SETCARETSTYLE, CARETSTYLE_BLOCK)

Я хочу сделать то же самое в StyledTextCtrl, но я не знаю, как добраться до элемента управления scinitilla за сценой.

Как мне это сделать?

P.S. Я работаю в 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)

Но, похоже, никакого эффекта не было!

В чем может быть причина? Как я могу отладить это?

Ответы [ 2 ]

2 голосов
/ 29 апреля 2009

Вы не пишете, какую версию wxPython / wxWidgets вы используете, но я предполагаю, что это версия 2.8.x. Он содержит Scintilla версии 1.70, в то время как ствол SVN (скоро будет выпущен как wxWidgets версии 2.9) имеет версию Scintilla 1.75. grep над заголовочными файлами Scintilla показывает, что SCI_GETCARETSTYLE и SCI_SETCARETSTYLE находятся только в стволе wxWidgets, поэтому эти сообщения вообще не будут обрабатываться в wxWidgets 2.8.

0 голосов
/ 29 апреля 2009

Попробуйте

self.SendMsg(msg=2512, lp=2)
...