Что нового

Что из себя представляет компонент 'Scintilla'?

ArtistTo

Новичок
Сообщения
42
Репутация
2
Не нужно кидать код на Си, хотелось бы видеть ответ на человеческом языке.
Я предполагаю, что редактор создает массив для хранения символов $chrs[10000][1000], где 10000 кол-во возможных строк, а 1000 символов в строке (например). Затем создает N кол-во label, для отображения видимой части текста. При перемещении курсора, в label'ы записываются соответствующие значения из $chrs[][] массива.

Подсветка в таком случае может реализовываться элементарно, получится функция похожая на поиск пикселя, только это будет поиск определенных совпадений по label'ам, при нахождении определенных совпадений, подсветить эти label'ы красным, например. По такому принципу не придется подсвечивать весь многотонный текст, будет подсвечиваться только видимая часть. Я правильно рассуждаю или нет? Может быть разработчик Scintilla использовал какие-то готовые элементы?
А может быть существует какой-то базовый элемент типа SuperRichEdit или MegaCoolMemo, который умеет адекватно работать с текстом, без постоянной нужды выделять текст и применять к нему свойства?
P.S. RichEdit - это недоэлемент, что я легко могу доказать, я знаю почти все его функции еще с Delphi.
 
Автор
A

ArtistTo

Новичок
Сообщения
42
Репутация
2
Даже админы не знают? Аууу, мне нужно понять на пальцах, по какому алгоритму работает элемент 'Scintilla' в этом вашем SciTe, ну или хотя бы узнать, юзает ли этот элемент какие-то готовые решения, типа Memo, Edit... или полностью с 0 написан и даже мигающий курсор написан с 0?
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Δαηy Δαηy [?]
Я предполагаю, что редактор создает массив для хранения символов $chrs[10000][1000], где 10000 кол-во возможных строк, а 1000 символов в строке (например).
У редактора нет лимита на количество строк и символов в них. Ограничение лишь по объему доступной памяти.

Затем создает N кол-во label, для отображения видимой части текста.
Тоже не верно. Текст по сути рисуется на экране в одном контроле а не в множестве. Контрол создается функцией CreateWindowEx с именем класса "scintilla".


А может быть существует какой-то базовый элемент типа SuperRichEdit или MegaCoolMemo
Даже если он существовал то его кто-то должен был создать, верно? Так почему же вы думаете что не могли с нуля написать Scintilla? Да, работы много но на нее было потрачено больше 10 лет!
Начните с нуля и может в 2025 тоже напишите аналог Scintilla.
 
Автор
A

ArtistTo

Новичок
Сообщения
42
Репутация
2
Prog сказал(а):
Δαηy Δαηy [?]
Я предполагаю, что редактор создает массив для хранения символов $chrs[10000][1000], где 10000 кол-во возможных строк, а 1000 символов в строке (например).
У редактора нет лимита на количество строк и символов в них. Ограничение лишь по объему доступной памяти.

Затем создает N кол-во label, для отображения видимой части текста.
Тоже не верно. Текст по сути рисуется на экране в одном контроле а не в множестве. Контрол создается функцией CreateWindowEx с именем класса "scintilla".


А может быть существует какой-то базовый элемент типа SuperRichEdit или MegaCoolMemo
Даже если он существовал то его кто-то должен был создать, верно? Так почему же вы думаете что не могли с нуля написать Scintilla? Да, работы много но на нее было потрачено больше 10 лет!
Начните с нуля и может в 2025 тоже напишите аналог Scintilla.

Все ясно, нет спасибо, я обойдусь простеньким редактором на основе HTML или RichEdit...
P.S. Контрол не может быть монолитным, он состоит скорее всего из N и M кол-ва частей... Иначе как можно осуществлять подсветку отдельных элементов?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Модератор.
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Δαηy Δαηy [?]
Контрол не может быть монолитным, он состоит скорее всего из N и M кол-ва частей... Иначе как можно осуществлять подсветку отдельных элементов?
И тем не менее он монолитный. Скачайте исходники и посмотрите.

Если они сложны для понимания, можно взглянуть на код в архиве простого редактора. Он состоит из одного контрола с классом "Canvas". Текст на нем рисуется, т. е. получается что это картинка с нарисованным на ней текстом. Фрагменты текста могут иметь разный цвет. В памяти хранится информация какой фрагмент текста окрашивать в какой цвет. По похожему принципу работает Scintilla, RichEdit и т. д.
 

Вложения

  • MyEditor.zip
    58.7 КБ · Просмотры: 16
Верх