Re: PaintCAD для Windows - журнал разработки
Добавлено: Вс июл 03, 2022 4:05 am
Бета 1.5.1.1288 доступна по ссылке http://blackstrip.ru/paintcad.exe
(а также через меню "Помощь" - "Проверить обновления")
1) В дополнение к переключению кодировки (набору символов) по клику левой/правой кнопки мыши теперь средней кнопкой (колесиком) в окне инструмента "Текст" можно ее сбросить в DEFAULT_CHARSET.
2) Алгоритм расчета ширины текста раньше был сделан через подсчет ширины каждого символа через Canvas.TextWidth и суммированием для поиска ширины всей строки. Но он не учитывал, что в некоторых кодировках и у некоторых шрифтов RichEdit добавляет лишние пропуски (как в той иероглифической GB2312, показанной на скриншотах из билда 1286), посчитанная ширина была меньше реальной. Поэтому иногда обрезалось последнее слово введенного текста (тогда приходилось добавить в конец текста пробел-другой чтоб последнее слово появилось), а иногда вообще ширина считалась неправильно (например, при кодировке GB2312).
Но, оказывается, у самого поля ввода RichEdit есть одна из внутренних функций, которая через EM_POSFROMCHAR отдает точное смещение в пикселях любого символа (спасибо коду из ответов на чей-то вопрос https://codeverge.com/embarcadero.delph ... ge/1055278 ). Теперь ширина текста считается правильно и весь текст всегда появляется при использовании инструмента "Текст" без добавления пробелов в конец и других ухищрений, даже в GB2312.
p.s. при отладке в Windows 98 также было обнаружено что смена кодировки превращает русский текст в латиницу, в греческие символы и др. А в Windows 10 все работает как-то иначе и смена кодировки почти ничего не дает, разве что увеличенную высоту-ширину строк, дополнительные пробелы между символами и "китайский" русский шрифт =) видимо, это следствие использования Unicode в Win10
(а также через меню "Помощь" - "Проверить обновления")
1) В дополнение к переключению кодировки (набору символов) по клику левой/правой кнопки мыши теперь средней кнопкой (колесиком) в окне инструмента "Текст" можно ее сбросить в DEFAULT_CHARSET.
2) Алгоритм расчета ширины текста раньше был сделан через подсчет ширины каждого символа через Canvas.TextWidth и суммированием для поиска ширины всей строки. Но он не учитывал, что в некоторых кодировках и у некоторых шрифтов RichEdit добавляет лишние пропуски (как в той иероглифической GB2312, показанной на скриншотах из билда 1286), посчитанная ширина была меньше реальной. Поэтому иногда обрезалось последнее слово введенного текста (тогда приходилось добавить в конец текста пробел-другой чтоб последнее слово появилось), а иногда вообще ширина считалась неправильно (например, при кодировке GB2312).
Но, оказывается, у самого поля ввода RichEdit есть одна из внутренних функций, которая через EM_POSFROMCHAR отдает точное смещение в пикселях любого символа (спасибо коду из ответов на чей-то вопрос https://codeverge.com/embarcadero.delph ... ge/1055278 ). Теперь ширина текста считается правильно и весь текст всегда появляется при использовании инструмента "Текст" без добавления пробелов в конец и других ухищрений, даже в GB2312.
p.s. при отладке в Windows 98 также было обнаружено что смена кодировки превращает русский текст в латиницу, в греческие символы и др. А в Windows 10 все работает как-то иначе и смена кодировки почти ничего не дает, разве что увеличенную высоту-ширину строк, дополнительные пробелы между символами и "китайский" русский шрифт =) видимо, это следствие использования Unicode в Win10