Помогите с unicode в самописном контроле

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Помогите с unicode в самописном контроле

Сообщение visualman » 08.02.2011 (Вт) 17:59

Приветствую!

Скриншот Good - работа на XP
Скриншот Bad - работа на Win7

Проблема в Sub OutputCaption. Подскажите, как организовать вывод текста с поддержкой unicode. У меня ни чего не получается (((

Заранее, спасибо!

Контрол взят с psc.
Вложения
OptionBox.rar
Контрол
(2.25 Кб) Скачиваний: 41
Good.jpg
Good.jpg (109.31 Кб) Просмотров: 1668
Bad.jpg
Bad.jpg (108.11 Кб) Просмотров: 1668
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Помогите с unicode в самописном контроле

Сообщение iGrok » 08.02.2011 (Вт) 18:08

Для поддержки юникода надо переписать её (процедуру OutputCaption) с использованием TextOutW вместо TextOutA.
Но на скрине, по-моему, проблема из другой оперы.
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Помогите с unicode в самописном контроле

Сообщение Хакер » 08.02.2011 (Вт) 18:13

iGrok писал(а):Для поддержки юникода надо переписать её (процедуру OutputCaption) с использованием TextOutW вместо TextOutA.


Не обязательно. Юникод можно выводить с помощью A-функций, установив локаль UTF-8.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Re: Помогите с unicode в самописном контроле

Сообщение visualman » 08.02.2011 (Вт) 18:16

iGrok писал(а):Для поддержки юникода надо переписать её (процедуру OutputCaption) с использованием TextOutW вместо TextOutA.
Но на скрине, по-моему, проблема из другой оперы.

Поробовал TextOutW. Крокозябры сменились на квадраты.
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Помогите с unicode в самописном контроле

Сообщение Хакер » 08.02.2011 (Вт) 18:18

visualman писал(а): Крокозябры сменились на квадраты.

Скорее всего функцию неправильно вызываешь.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Помогите с unicode в самописном контроле

Сообщение iGrok » 08.02.2011 (Вт) 18:21

Хакер писал(а):Не обязательно. Юникод можно выводить с помощью A-функций, установив локаль UTF-8.

Да, но для этого у тебя и строка должна быть в utf-8, а не UCS-2, то есть для этого ещё и строку конвертировать придётся.

visualman писал(а):Поробовал TextOutW. Крокозябры сменились на квадраты.

Как-то так, писал по памяти:
Код: Выделить всё
Sub OutputCaption()
    SetTextColor UserControl.hdc, vbWhite

    TextOutW UserControl.hdc, 3, 3, StrConv(mCaption, vbUnicode), Len(mCaption)

    SetTextColor UserControl.hdc, RGB(50, 50, 50)

    TextOutW UserControl.hdc, 3, 2, StrConv(mCaption, vbUnicode), Len(mCaption)
End Sub


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

UPD:
Примерно так:
Код: Выделить всё
Private Declare Function TextOut Lib "gdi32" Alias "TextOutW" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As Long, ByVal nCount As Long) As Long

...

TextOut UserControl.hdc, 3, 2, StrPtr(mCaption), Len(mCaption)
label:
cli
jmp label

visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Re: Помогите с unicode в самописном контроле

Сообщение visualman » 08.02.2011 (Вт) 18:41

Неа. Ни в каком варианте не получается ((( Только смесь крокозябр с квадратами...

Айн момент, люлей получу от шефа и продолжим )

Кто ни будь под 7 попробовал запустить?? Может это только у меня проблема? Или у вас тоже криво показывает?
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Помогите с unicode в самописном контроле

Сообщение Хакер » 08.02.2011 (Вт) 18:44

Шрифт нормальный?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Re: Помогите с unicode в самописном контроле

Сообщение visualman » 08.02.2011 (Вт) 18:45

Хакер писал(а):Шрифт нормальный?

Arial кирилица
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Помогите с unicode в самописном контроле

Сообщение Хакер » 08.02.2011 (Вт) 18:47

visualman писал(а):Arial кирилица

Ты его прямо с помощью SelectObject установил?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Помогите с unicode в самописном контроле

Сообщение Antonariy » 08.02.2011 (Вт) 18:47

То, что на картинке, мало похоже на проблему с юникодом, скорее неправильно выбрана кодовая страница шрифта.
Лучший способ понять что-то самому — объяснить это другому.

visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Re: Помогите с unicode в самописном контроле

Сообщение visualman » 08.02.2011 (Вт) 18:49

Хакер писал(а):
visualman писал(а):Arial кирилица

Ты его прямо с помощью SelectObject установил?


Нет, кодом ни чего не ставил. Ща попробую
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Помогите с unicode в самописном контроле

Сообщение Andrey Fedorov » 11.02.2011 (Пт) 9:41

В TextBox, к примеру, в VB6 можно вывести тот-же французский текст безо всякого API - когда-то давно это делал...

Для этого устанавливаем нужный TextBox.Font.Charset, после чего делаем:

TextBox1 = StrConv(ФранцТекст, vbUnicode) ' Насколько помню

В итоге и получим нужное нам отображение в TextBox-е. Но это прокатывает далеко не со всеми контролами - с тем же Label или Menu, к примеру, не пройдет.

----------
Вообще-же делать на VB6 подобное изврат - ни среда ни компоненты на это не рассчитаны. Логичней подобное писать на NET-языках.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Помогите с unicode в самописном контроле

Сообщение Хакер » 11.02.2011 (Пт) 12:02

Andrey Fedorov писал(а):Логичней подобное писать на NET-языках.

Ну, да, конечно, только у них есть привилегия работать с юникодом... :|
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Помогите с unicode в самописном контроле

Сообщение Денис » 11.02.2011 (Пт) 16:35

Хакер
+1
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Помогите с unicode в самописном контроле

Сообщение Antonariy » 13.02.2011 (Вс) 7:17

Хакер писал(а):
Andrey Fedorov писал(а):Логичней подобное писать на NET-языках.

Ну, да, конечно, только у них есть привилегия работать с юникодом... :|

Им хотя бы не нужны для этого костыли.
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 55

    TopList