TreeView не хочет отображать Unicode Format

Создание, использование компонентов ActiveX
Tran Thang
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 03.03.2004 (Ср) 19:46

TreeView не хочет отображать Unicode Format

Сообщение Tran Thang » 03.03.2004 (Ср) 21:28

Почему TreeView не может отображать Unicode?

Хотел отображать unicode в ActiveX Treeview (SP4) (в Access XP), попытал включить следующие коды:
======================

Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
wParam As Any, _
lParam As Any) As Long

Public Const CCM_FIRST = &H2000
Public Const CCM_SETUNICODEFORMAT = (CCM_FIRST + 5)
Public Const CCM_GETUNICODEFORMAT = (CCM_FIRST + 6)

TVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT
TVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT

Private Sub Form_Load()

Dim rsItems As DAO.Recordset

Call SendMessage(Me.ocxTreeView.hwnd, TVM_SETUNICODEFORMAT, ByVal CLng(True), 0)

‘Загрузить данные формата Unicode в Рекордсет
Set rsItems = CurrentDb.OpenRecordset("tbl_Items", dbOpenDynaset)

rsItems.MoveFirst

‘Добавить текст формата unicode в контрол ocxTreeView
strTemp = rsItems![Description]
Call Me.ocxTreeView.Nodes.Add(, , "ID-1", strTemp)
rsItems.MoveNext
strTemp = rsItems![Description]
Call Me.ocxTreeView.Nodes.Add(, 4, "ID-2", strTemp)
rsItems.MoveNext
strTemp = rsItems![Description]
Call Me.ocxTreeView.Nodes.Add("ID-1", 4, "ID-3", strTemp)
rsItems.MoveNext
strTemp = rsItems![Description]
Call Me.ocxTreeView.Nodes.Add("ID-1", 4, "ID-4", strTemp)
rsItems.MoveNext
strTemp = rsItems![Description]
Call Me.ocxTreeView.Nodes.Add(, 4, "ID-5", strTemp)
rsItems.MoveNext
strTemp = rsItems![Description]
Call Me.ocxTreeView.Nodes.Add("ID-2", 4, "ID-6", strTemp)

rsItems.Close

End Sub

==========================

Все таки, TreeView не хочет отображать unicode.

Дальше, я записал обратно таблицу базы данных все тексты из Nodes контрола TreeView. Записаные данные является UnicodeFormat. Это значит, что TreeView хранит данные в формате Unicode.
Дальше, я проверил статус (режим) поддержки Unicode контрола TreeView c использованием Message TVM_GETUNICODEFORMAT и получил результат (-1), что контрол TreeView находится в режиме UnicodeFormat.

А все таки, нет отображения unicode на TreeView
Подскажите, пожалуйста, причину, почему TreeView не хочет отображать UnicodeFormat?

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 04.03.2004 (Чт) 17:47

Порадовать ничем не могу - знаю точно, что VB TreeView unicode не поддерживает :( :x
А исследование интересное... Что там у него внутри творится.... :roll:
На Гугле говорят, что хранит он строки в своем формате...
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 30.03.2004 (Вт) 17:55

Я извиняюсь, но ты на какой оси сидишь?

Tran Thang
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 03.03.2004 (Ср) 19:46

Сообщение Tran Thang » 31.03.2004 (Ср) 11:43

Кажется, что я нашел причину !!!

Для проверки того, что поддреживает ли TreeView control формат Unicode, я включил в коды формы API функцию IsWindowUnicode. Эта функция проверяет и возрашает Nonzero, если контрол поддерживает Unicode, и 0 если неподдерживает.
Для реализации в Access, к сожалению, эта функция применяется только для конрол Form, и ActiveX. Но это достаточно для проверки интерусующий нас стутус TreeView


Private Declare Function IsWindowUnicode Lib "user32.dll" (ByVal hwnd As Long) As Long

==================

Для проверки режима Unicode для Form:

Msgbox IsWindowUnicode(Me.hwnd)

Для контрола TreeView

Msgbox IsWindowUnicode(Me.ocxTreeView.hwnd)

Результаты следующие:
- Первый message: 1, что Form поддреживает Unicde
- Второй message: 0, что TreeView не поддерживает Unicode.

Единственная причина заключается в том, что при регистрации класса Window, Form (и стандартные контролы Access) использует функцию: RegistryClass, в то время, TreeView вызывает функцию RegisterClassExA. Изменить этого, к сожалению, я не умею.

=========================

Так, что печальное заключение, ActiveX TreeCode не отображает Unicode.

Для отображения другие Charset, по моему соображению, есть 2 способа:
1. Использовать Font Arial и соответствующий Charset (с помощью функции CreateFont, а потом передать этот font в Treeview. В этом случае, возможно получить национальные charaters (и только) :-(

2. Содать сам Treeview c помощью API-функций, но это трудоемкая работа. :-(, что время не позволяет.

Мудрые люди, знаете ли Вы другие пути для отображения Unicode в TreeView/

С уважением,


Вернуться в Компоненты

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList