Subclassing и WM_CREATE

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
vadimberman
Прохожий
Сообщения: 3
Зарегистрирован: 22 Октябрь 2010, 14:17
Откуда: Мельбурн, Австралия
Контактная информация:

Subclassing и WM_CREATE

Сообщение vadimberman »

Всем привет.

Пытаюсь написать юникод текст контроль, вручную рисуя текст. В общем, на одну строку худо-бедно работает, но когда больше одной строки, проблема усложняется во много раз: перенос каретки, разная длина строк и т.п. Возможно, я это как-то решу, но куда проще было бы создать этот контроль с помощью CreateWindowW, а потом привязать к кларионовским циклам.

Естественно, WM_CREATE, где это нужно сделать, Кларион убивает. Вопрос знатокам: можно это как-то обойти?

PS. Если кому интересно, прикрепляю источник. Пока что оно наполовину работает, когда будет готово, вывешу для скачивания. Это не класс - идея в том, чтобы никаких чисток при закрытии делать не надо. Потом добавлю поддержку для таблиц (там вроде только WM_PAINT).
Вложения
UniCtrl.inc
(обновлённая версия)
(310 байт) 450 скачиваний
UniCtrl.clw
(обновлённая версия)
(33.54 КБ) 439 скачиваний
Последний раз редактировалось vadimberman 25 Октябрь 2010, 9:40, всего редактировалось 1 раз.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3291
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Subclassing и WM_CREATE

Сообщение Дед Пахом »

А я почему-то думал, что TEXT control - единственный контрол в Clarion чисто родной виндусовый (а не самописный) и поддерживает юникод без всяких.
С уважением, ДП
vadimberman
Прохожий
Сообщения: 3
Зарегистрирован: 22 Октябрь 2010, 14:17
Откуда: Мельбурн, Австралия
Контактная информация:

Re: Subclassing и WM_CREATE

Сообщение vadimberman »

Я тоже так думал. Иллюзии были разбиты попытками скопировать буфер обмена с китайским текстом.

Вообще-то, так и есть. Но это (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?
Ответить