wxвиджеты:как изменить стиль курсора в StyledTextCtrl (отправка команды в сцинтиллу)

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

Вопрос

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

Я мало что знаю об API Scintilla, но мне кажется, что вы отправляете ему команды.

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

execute(SCI_SETCARETSTYLE, CARETSTYLE_BLOCK)

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

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

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)

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

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

Это было полезно?

Решение

Вы не пишете, какую версию 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.

Другие советы

Пытаться

self.SendMsg(msg=2512, lp=2)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top