Страницы: 1
RSS
Функция выделения жирным, Функция выделения жирным
 
Доброго времени, суток!
Удачи Всем во всех делах!

На просторах интернета нашлась интересная функция выделения жирным, но работает только с латиницей, так как использует таблицу ASCII. Прошу помощи с тем, чтобы функция и русский язык понимала.  
 
Код
Function Bold(sIn As String)
       Dim sOut As String, Char As String
       Dim Code As Long, i As Long
       Dim Bytes(0 To 3) As Byte

       Bytes(0) = 53
       Bytes(1) = 216

       For i = 1 To Len(sIn)
           Char = Mid(sIn, i, 1)
           Code = Asc(Char)
           If (Code > 64 And Code < 91) Or (Code > 96 And Code < 123) Then
               Code = Code + IIf(Code > 96, 56717, 56723)
               Bytes(2) = Code Mod 256
               Bytes(3) = Code \ 256
               Char = Bytes
           End If
           sOut = sOut & Char
       Next i
       Bold = sOut
End Function
Изменено: mv-alexeenko - 09.07.2020 07:58:20
 
Должно помочь :)
 
mv-alexeenko, код следует оформлять соответствующим тегом. Ищите такую кнопку (см. скрин) и исправьте своё сообщение.
 
Доброе время суток
Цитата
_Igor_61 написал:
Должно помочь
Игорь - это вряд ли. Автор кода что-то глубокое знает про Unicode 32. По быстрому не удалось найти, как обеспечивается подобная полужирнизация. Хотя насколько это употребимо? Шрифт для ячейки Times New Roman, а функция Bold явно заставляет использовать некий другой шрифт :)
P. S. Может Владимир Sokol92 подтянется - он корифей в этом деле.
Изменено: Андрей VG - 08.07.2020 23:00:20
 
Андрей, привет! Да все просто. 4х байтовые Математические буквы (Символы, выделенные жирным шрифтом)
К примеру вот код обычной Латинская строчная буква "a" U+0061 в кодировке UTF-16BE 00 61 (два байта)
а вот Математическая жирная заглавная "A" U+1D400 в кодировке UTF-16BE D8 35 DC 00 (4 байта).
Я сначала не понял зачем здесь формируется 4 байта, если обычно используется для Юникода 2.
Потом понял этот "Лайфхак"...

Боюсь с русскими так может не получится, ну или перебрать всю таблицу юникода, вдруг где-то отыщутся заглавные и прописные жирные русские символы )
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
Андрей VG написал:
Шрифт для ячейки Times New Roman, а функция Bold явно заставляет использовать некий другой шрифт
шрифт то-же самый, код символа другой. Я вообще удивлен, что этот шрифт поддерживает эти коды (4х байтовые).
Причем все шрифты, которые я тестировал поддерживают эти символы, кроме самых экзотических, см. рис.
Кстати на нем же видно, что это разные символы.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
Андрей VG написал:
Sokol92 подтянется
Не уверен, возраст уже не тот... :)

Здравствуйте, коллеги. Собственно, Виталий уже всё написал. Несколько ссылок.

Последняя версия таблиц Unicode всегда хранится здесь, описание таблиц здесь. Собственно символы и их свойства хранятся в этом текстовом файле (понятном и удобном для просмотра, а также для импорта в Excel). Математическим символам (буквам латинского и греческого алфавитов во всех регистрах и начертаниях, цифрам...) соответствует диапазон символов Unicode 1D400-1D7FF. Кириллицу в этом месте я не нашел.

Windows использует при работе с Unicode внутренний формат UTF-16LE. Указанные выше математические символы представляются "суррогатными парами" и занимают во внутреннем формате 4 байта каждый. В кодировке UTF-8 также требуется 4 байта.

Трюк из #1 можно использовать только для "изобразительских" целей, поскольку буквы латинского алфавита меняются на совершенно иные знаки и работа с ними в Excel может привести к непредсказуемым (для тех, кто не знает тонкости Unicode) результатам.
Изменено: sokol92 - 09.07.2020 18:10:39
Владимир
 
Виталий, Владимир, огромное спасибо за исследование!
 
Добрый вечер!

Всех благодарю за проделанную работу.

С уважением, Михаил Алексеенко
Страницы: 1
Наверх