powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Название узла в TreeView в несколько строк
7 сообщений из 7, страница 1 из 1
Название узла в TreeView в несколько строк
    #34649087
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сабж. Возможно?
...
Рейтинг: 0 / 0
Название узла в TreeView в несколько строк
    #34650623
Анатолий Кудрявцев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет.

P.S.
вариант перехвата собщений прорисовки (типа WM_PAINT) и подмены его обработчика рассматривать не будем. :-)
...
Рейтинг: 0 / 0
Название узла в TreeView в несколько строк
    #34651102
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КД,
возможно, но потребует кое-чего:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Option Explicit

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

Private Const TV_FIRST                 As Long = &H1100  ' TreeView messages
Private Const TVM_GETNEXTITEM          As Long = (TV_FIRST +  10 )
Private Const TVM_SETITEMA             As Long = (TV_FIRST +  13 )
Private Const TVM_SETITEM              As Long = TVM_SETITEMA

Private Const TVGN_CARET               As Long = &H9

Private Type TVITEMEX
    mask As Long
    hItem As Long
    state As Long
    stateMask As Long
    pszText As String
    cchTextMax As Long
    iImage As Long
    iSelectedImage As Long
    cChildren As Long
    lParam As Long
    iIntegral As Long
End Type
Private Const TVIF_INTEGRAL            As Long = &H80

Private Sub Command1_Click()
 TV.Nodes.Clear
 TV.Nodes.Add , , "n1", "Node 1"
 TV.Nodes.Add "n1", tvwChild, "n1.1", "Node 1.1"
 TV.Nodes.Add , , "n2", "Node 2"
 
 Dim ie As TVITEMEX
 TV.Nodes("n1.1").Selected = True
 ie.hItem = SendMessage(TV.hWnd, TVM_GETNEXTITEM, TVGN_CARET, ByVal  0 &)
 
 ie.iIntegral =  3  'высота элемента - 3 строки
 ie.mask = TVIF_INTEGRAL
 SendMessage TV.hWnd, TVM_SETITEM,  0 , ie
End Sub
А "кое-что" - это custom draw элемента, что означает subclassing и копание в MSDN Library. :)
...
Рейтинг: 0 / 0
Название узла в TreeView в несколько строк
    #34655118
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Буду разбираться.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Название узла в TreeView в несколько строк
    #35561252
Фотография Andrew_nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бенедикт ,

Ты говоришь, что таким образом можно установить представление узла дерева в 3 строки, но по сути Integral устанавливает только лишь высоту элемента.
Может ты знаешь как установить перенос текста?

P.s.
Искал ответ в MSDN, но не нашел ничего подходящего.
...
Рейтинг: 0 / 0
Название узла в TreeView в несколько строк
    #35562040
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrew_nikТы говоришь, что таким образом можно установить представление узла дерева в 3 строки, но по сути Integral устанавливает только лишь высоту элемента.Да. В чём противоречие? Common controls предоставляют способ для самостоятельной отрисовки элементов списка. Способ называется custom draw. Для того, чтобы им воспользоваться, надо уметь перехватывать сообщения WM_NOTIFY, которые common control посылает своему родительскому окну (эта техника называется subclassing). Твоя программа, когда получит соответствующее сообщение, должна уметь отрисовать элемент списка в неком прямоугольнике в некотором контексте устройства. Но нестандартный размер прямоугольника надо уметь задать.

Как реализуется custom draw для TreeView конкретно, можно посмотреть на сайте vbaccelerator.com . Рекомендую разобраться с тем, как это (subclassing+custom draw) работает в VB6, прежде чем переносить в Access, который добавляет свои гадости. Как их обойти, поговорим позже, если желание останется. Andrew_nikМожет ты знаешь как установить перенос текста?Можно использовать для отрисовки элемента функцию DrawText() с флагом DT_WORDBREAK. Эта же функция с флагом DT_CALCRECT полезна для вписывания текста в прямоугольник известной ширины, кстати.

P.s.
Andrew_nikИскал ответ в MSDN, но не нашел ничего подходящего.Странно, так как набрав в строке поиска на сайте MSDN "custom draw" treeview первой же ссылкой находится нужное.
...
Рейтинг: 0 / 0
Название узла в TreeView в несколько строк
    #35562122
Фотография Andrew_nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо. Попробую разобраться на VB.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Название узла в TreeView в несколько строк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]