Сейчас на форуме: jinoweb (+5 невидимых)

 eXeL@B —› Программирование —› Tiny RichEdit control
Посл.ответ Сообщение

Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 26 ноября 2009 11:29
· Личное сообщение · #1

Доброго времени суток, господа

Разбирал 35 тутор от Iczeleon'а . Столкнулся с проблемой для Русского шрифта. Если в комментариях в его приложении ставить Русский текст, а потом поменять раскладку на английский и продолжить комент - Русский текст похерится. Фоновый останется чорным как положено, а подсветка изменится либо на "?????" либо на невесть бог знает какую кодировку, если убрать свойство "RUSSIAN_CHARSET" при вызове CreateFont. Может кто подскажет где принудительно можно присвоить текст шрифту, которым прорисовывается (подсветка) ? Сам не нашёл. Все функции кроме двух:
ParseBuffer и NewRichEditProc перегнал на си. Поскольку не знаю как разобрать ту вермишель из регистров что в них есть. Если кто силён - помогите пожалуйста
Вот что у меня получилось в итоге:



В принципе смотрится нормально, но очень уж хочется сделать поддержку Русского текста в комментах и ключевых словах. В аттаче исходник библиотеки для подсветки синтаксиса и пример её применения(с выводом дизасма).

p.s.: RAEdit и HiEdit просьба не предлагать.

908e_26.11.2009_CRACKLAB.rU.tgz - RichEdit.rar

-----
все багрепорты - в личные сообщения





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 26 ноября 2009 12:12
· Личное сообщение · #2

запустил RichText.exe
переключил раскладку на Русский
стал писать текст на русском, переключил раскладку на Английский, продолжил писать текст - описанный тобой баг не возникает
ставлю знак ";" перед коментом или нет - без разницы

посмотрел сорс
шрифт задаётся через функцию SetFont
Code:
  1. invoke SelectObject,hdc1,font1

этим шрифтом выводится текст через
Code:
  1. invoke DrawText,hdc1,edi,-1,addr rect1,0


-----
EnJoy!




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 26 ноября 2009 12:21 · Поправил: HandMill
· Личное сообщение · #3

Jupiter, спасибо что посмотрел! А под какой осью?
SetFont - это уже моя функция (новая), пришлось добавить, поскольку изначально такой в исходнике Иксзелеона нет.
Вот он баг во всей красе:



и ещё один, для его воспроизведения добавляем в wordfile.txt русское слово "текст" (я его там написал в секцию "C3"). Набираем текст ... и если даже он подсветился удачно, меняем раскладку на английскую, давим Ctrl + A (выделить весь текст) и потом End/Home для позиционирования курсора в конце/начале текста контрола ... в общем заставить его насильно перерисовать весь текст:



что-то мне подсказывает что у тебя вин 7

-----
все багрепорты - в личные сообщения




Ранг: 36.8 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 26 ноября 2009 13:31
· Личное сообщение · #4

HandMill
Jupiter прав. Погонял прогу и с русского на англ., и наоборот, и в комментах, и вне...бага нет. ОС WinXP SP3, для всех приложений включен ClearType.



Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 26 ноября 2009 14:07 · Поправил: HandMill
· Личное сообщение · #5

У меня уже на втором компе наблюдается этот баг. Ось - WinXP SP3, не сборка. Ещё эта поделка тестилась на какой-то сборке WinXP SP3 - баг присутствовал Как вообще тогда понять когда он возникает то Копать в сторону системных шрифтов или хз куда

add: в 7 вообще никакой подсветки не увидел (правда пользовался подключением к удалённому рабочему столу). Просьба владельцев 7 потестить.

-----
все багрепорты - в личные сообщения




Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 26 ноября 2009 15:35
· Личное сообщение · #6

WinXP SP2, багов не заметил



Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 26 ноября 2009 15:51
· Личное сообщение · #7

crc1, благодарю за тест, удивлён ещё больше, причём не очень то положительно

Перегнал ещё одну функцию с асма на си:

void SetColor()
{
CHARFORMAT cfm1;

SendMessage(hwndRichEdit,EM_SETBKGNDCOLOR,0,BackgroundColor);
RtlZeroMemory(&cfm1,sizeof cfm1);

cfm1.cbSize=sizeof cfm1;
cfm1.dwMask=CFM_COLOR;
cfm1.crTextColor=TextColor;

SendMessage(hwndRichEdit,EM_SETCHARFORMAT,SCF_ALL,(long)&cfm1);

return;
}

Горел надеждой что CHARFORMAT поможет своим полем bCharSet, которому пытался присвоить значение RUSSIAN_CHARSET. Но мои надежды не оправдались ...

-----
все багрепорты - в личные сообщения





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 26 ноября 2009 16:11
· Личное сообщение · #8

у меня постоянно такое было , что то у тебя в реестре может быть с настройками шрифтов , типо региональные настройки, есть программа патч от автора сборки тоталкомандера с самлаб , там есть патч шрифтовый для отображения правильного русского , мне всегда помогал.

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 26 ноября 2009 16:19
· Личное сообщение · #9

HandMill пишет:
А под какой осью?


WinXP SP3 RUS
и выглядит, кстати очень убого - явно можно поиграться с типами сглаживания


HandMill пишет:
p.s.: RAEdit просьба не предлагать.


почему?

-----
EnJoy!




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 26 ноября 2009 16:47
· Личное сообщение · #10

mak пишет:
там есть патч шрифтовый для отображения правильного русского

Угу, протестировал на компе с установленной сборкой тотал коммандера, программа отображает русские шрифты правильно

Jupiter пишет:
и выглядит, кстати очень убого - явно можно поиграться с типами сглаживания

ты имеешь ввиду шрифт? Библиотека то открыта, если Terminal не нравится - бери, да юзай другой шрифт.

Jupiter пишет:
почему?

потому что мне не надо куча фич, которые там есть и я хочу минимальный контрол без использования мфц и т.п. библиотек.

-----
все багрепорты - в личные сообщения




Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 04 июля 2018 22:28
· Личное сообщение · #11

Готово

5664_04.07.2018_EXELAB.rU.tgz - RichEdit.rar

-----
все багрепорты - в личные сообщения


| Сообщение посчитали полезным: dosprog, SReg


Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 06 августа 2018 03:12
· Личное сообщение · #12

HandMill
Быстро же ты кодишь ))

См. вложение, в Wine всё слипается в одну строку

55bf_06.08.2018_EXELAB.rU.tgz - RichEdit_HandMill_highlight.png

Добавлено спустя 7 часов 42 минуты
Скрин примера из 2009 года:


0dc9_06.08.2018_EXELAB.rU.tgz - RichEdit_HandMill_highlight_2009.png

-----
EnJoy!



 eXeL@B —› Программирование —› Tiny RichEdit control
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати