Всем привет.
Пытаюсь написать юникод текст контроль, вручную рисуя текст. В общем, на одну строку худо-бедно работает, но когда больше одной строки, проблема усложняется во много раз: перенос каретки, разная длина строк и т.п. Возможно, я это как-то решу, но куда проще было бы создать этот контроль с помощью CreateWindowW, а потом привязать к кларионовским циклам.
Естественно, WM_CREATE, где это нужно сделать, Кларион убивает. Вопрос знатокам: можно это как-то обойти?
PS. Если кому интересно, прикрепляю источник. Пока что оно наполовину работает, когда будет готово, вывешу для скачивания. Это не класс - идея в том, чтобы никаких чисток при закрытии делать не надо. Потом добавлю поддержку для таблиц (там вроде только WM_PAINT).
Subclassing и WM_CREATE
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Прохожий
- Сообщения: 3
- Зарегистрирован: 22 Октябрь 2010, 14:17
- Откуда: Мельбурн, Австралия
- Контактная информация:
Subclassing и WM_CREATE
- Вложения
-
- UniCtrl.inc
- (обновлённая версия)
- (310 байт) 450 скачиваний
-
- UniCtrl.clw
- (обновлённая версия)
- (33.54 КБ) 439 скачиваний
Последний раз редактировалось vadimberman 25 Октябрь 2010, 9:40, всего редактировалось 1 раз.
- Дед Пахом
- Старичок
- Сообщения: 3289
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Re: Subclassing и WM_CREATE
А я почему-то думал, что TEXT control - единственный контрол в Clarion чисто родной виндусовый (а не самописный) и поддерживает юникод без всяких.
С уважением, ДП
-
- Прохожий
- Сообщения: 3
- Зарегистрирован: 22 Октябрь 2010, 14:17
- Откуда: Мельбурн, Австралия
- Контактная информация:
Re: Subclassing и WM_CREATE
Я тоже так думал. Иллюзии были разбиты попытками скопировать буфер обмена с китайским текстом.
Вообще-то, так и есть. Но это (A)NSI контрол, а не (W)ide string. Т.е. весь API не как у людей - с окончанием W, а A (DrawTextA, CreateWindowA).
Проблема была решена функцией, которая переводит юникод в нужную кодировку в буфере обмена и выстреливает на EVENT:GainFocus. Т.к. у меня приложение по определению работает с разными языками, пришлось это делать динамически, и тот же фокус был проделан с японским, тайским, греческим.
Но есть языки, у которых вообще нет кодировок. Например, пуштунский, которым я сейчас занимаюсь (арабский скрипт + 6 своих знаков, из-за которых он никуда не влазит). Ближе к разработчикам на этом форуме - грузинский, армянский.
Так что пришлось ваять свою поддержку. Идея в том, чтобы данные хранились в UTF-8 (он совместим с латинским шрифтом), и в контроле переводились в UTF-16, который используется виндовскими функциями, оканчивающимися на W (TextOutW, DrawTextW, ...).
В comp.lang.clarion кто-то опубликовал исходник Олега Руденко, который обращается к внутренностям Клариона. Если есть инфа о внутренних структурах вроде UFO, может, кто-то знает, как добраться до WM_CREATE?
Вообще-то, так и есть. Но это (A)NSI контрол, а не (W)ide string. Т.е. весь API не как у людей - с окончанием W, а A (DrawTextA, CreateWindowA).
Проблема была решена функцией, которая переводит юникод в нужную кодировку в буфере обмена и выстреливает на EVENT:GainFocus. Т.к. у меня приложение по определению работает с разными языками, пришлось это делать динамически, и тот же фокус был проделан с японским, тайским, греческим.
Но есть языки, у которых вообще нет кодировок. Например, пуштунский, которым я сейчас занимаюсь (арабский скрипт + 6 своих знаков, из-за которых он никуда не влазит). Ближе к разработчикам на этом форуме - грузинский, армянский.
Так что пришлось ваять свою поддержку. Идея в том, чтобы данные хранились в UTF-8 (он совместим с латинским шрифтом), и в контроле переводились в UTF-16, который используется виндовскими функциями, оканчивающимися на W (TextOutW, DrawTextW, ...).
В comp.lang.clarion кто-то опубликовал исходник Олега Руденко, который обращается к внутренностям Клариона. Если есть инфа о внутренних структурах вроде UFO, может, кто-то знает, как добраться до WM_CREATE?