Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Класс для работы с ActiveX TreeView от Микрософта (число прочтений - 10797 )
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Класс для работы с ActiveX TreeView от Микрософта
03. Января 2008 :: 10:00
Печать  
Выбор деревьев у нас (пользователей 1С++ и FormEx) есть, и дерево Sadovnikov-а, и ДеревоЗначений от АЛьФ-а, но мне по необходимости нужно было просто дерево (без дополнительных колонок), да к тому же чтобы оно отображало нормально пиктограммы (а то 1С любит резать цвета). В итоге я покопался и сделал класс для работы с TreeView. Из особенностей...
1. Дерево формируется аналогично ДеревуЗначений АЛьФ-а, т.е. если ТЗ передаваемая имеет структуру:
- 3 колонки (1 вложенная ветка, 2 номер пиктограммы, 3 значение ветки) + 1 колонка (моя собственная) со строковым представлением раскраски (опять таки аналогично АЛьФ-овскому методу, т.е. просто передается строка FONT[]... и т.д.). Итого должно быть 4 колонки.
2. Метод ЗначениеВДерево меняет значение в дереве "на лету". Обновление дерева не происходит.
3. Метод ОбновитьДерево уничтожает данную структуру и создает новую на основании переданной ТаблицыЗначений

Обновление от 24.01.08:
Новые методы:
СохранитьСостояниеДерева(), сохраняет текущее состояние дерева (свернутые, развернутые узлы)
ВосстановитьСостояниеДерева(), восстанавливает состояние дерева (свернутые, развернутые узлы)
СвернутьУзел(НомерСтроки = ""), сворачивает узел (если НомерСтроки = "" сворачивает текущую строку)
РазвернутьУзел(НомерСтроки = ""), развернуть узел (если НомерСтроки = "" разворачивает текущую строку)
УзелРазвернут(НомерСтроки = ""), 1-развернут, 0-свернут (если НомерСтроки = "" возвращает состояние текущей строки)
ЗначениеРодителяТекущейСтроки(), возвращает значение родительского узла
ПолучитьСтрокуРодителя(), возвращает полный адрес строки родителя текущего узла
ПолучитьНомерВПределахРодителя(), возвращает номер строки в ТЗ которой принадлежит текущий узел
НачатьРедактирование(), начинает редактирование текущего узла дерева. Для редактирования необходимо наличие следующих процедур в модуле формы: ИДКонтрола_AfterLabelEdit(ФСО,НовоеЗначение), ИДКонтрола_BeforeLabelEdit(ФСО)

Изменения:
метод ОбновитьДерево(ТаблЗначений) пытается вернуть дерево в исходное состояние.

Что касается документации... ее уже в архиве нет  Подмигивание Если вдруг кто не захочет разбираться, пишите, набросаю вечером из дома.
« Последняя редакция: 25. Января 2008 :: 03:32 - vandalsvq »  

TreeVeiw_001.rar ( 6 KB | Загрузки )

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микросо
Ответ #1 - 03. Января 2008 :: 10:01
Печать  
Ну и скриншот, чтобы трафику сожрать малость  Очень довольный
  

TreeView.jpg ( 71 KB | Загрузки )
TreeView.jpg

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микросо
Ответ #2 - 03. Января 2008 :: 10:13
Печать  
забыл в описание:
Атрибуты:

РежимВыделения
Тип: Число
Описание: 1 - выделение полной строки, 0 - выделение только текстовой части

ТаблицаДанных:
Тип: ТаблицаЗначений
Описание: таблица значений на основании которой создано дерево

Кое-что на заметку:
Атрибут ТаблицаДанных таже таблица значений что и переданная при создании, но с измененной структурой. Добавлена колонка "Дерево_Узел", которая хранит объект "Узел". Сам атрибут нужен в общем то для технических нужд лично мне. Т.к. наверняка таблицу данных будут хранить в модуле формы.
Если дерево уже создано и есть необходимость добавить пиктограммы (дерево создано без пиктограмм) тогда надо установить картинки дерева и после этого обновить дерево.

И если найдете ошибки плиз сообщайте. Писалось в буквальном смысле "на коленке" для быстрой реализации задачи. Поэтому ошибки возможны, и скорее всего вероятность большая.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микросо
Ответ #3 - 03. Января 2008 :: 11:56
Печать  
Покопайся в реестре, посмотри какая dll-ка его реализует.
Мож че еще прийдется доставлять....
  
Наверх
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микросо
Ответ #4 - 03. Января 2008 :: 12:01
Печать  
trdm писал(а) 03. Января 2008 :: 11:56:
Покопайся в реестре, посмотри какая dll-ка его реализует.
Мож че еще прийдется доставлять....

Копаться не зачем. Этот контрол реализован в MSCOMCTL.OCX.

Именно на нем Степан и сделал первоначальный пример к своему классу.
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микросо
Ответ #5 - 04. Января 2008 :: 11:38
Печать  
vandalsvq, картинки же удобнее хранить вместе с ert, например, в таблице (объект "Таблица"), чтобы не таскать за собой лишние файлики Улыбка
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микросо
Ответ #6 - 06. Января 2008 :: 17:03
Печать  
spock писал(а) 04. Января 2008 :: 11:38:
vandalsvq, картинки же удобнее хранить вместе с ert, например, в таблице (объект "Таблица"), чтобы не таскать за собой лишние файлики Улыбка


можно и там, а можно и просто создавая объекты картинка на форме
просто не подумал Улыбка
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микросо
Ответ #7 - 24. Января 2008 :: 17:48
Печать  
Обновление к классу (у меня теплится надежда что кто-то его пользует  Подмигивание)

Новые методы:
СохранитьСостояниеДерева(), сохраняет текущее состояние дерева (свернутые, развернутые узлы)
ВосстановитьСостояниеДерева(), восстанавливает состояние дерева (свернутые, развернутые узлы)
СвернутьУзел(НомерСтроки = ""), сворачивает узел (если НомерСтроки = "" сворачивает текущую строку)
РазвернутьУзел(НомерСтроки = ""), развернуть узел (если НомерСтроки = "" разворачивает текущую строку)
УзелРазвернут(НомерСтроки = ""), 1-развернут, 0-свернут (если НомерСтроки = "" возвращает состояние текущей строки)
ЗначениеРодителяТекущейСтроки(), возвращает значение родительского узла
ПолучитьСтрокуРодителя(), возвращает полный адрес строки родителя текущего узла
ПолучитьНомерВПределахРодителя(), возвращает номер строки в ТЗ которой принадлежит текущий узел
НачатьРедактирование(), начинает редактирование текущего узла дерева. Для редактирования необходимо наличие следующих процедур в модуле формы: ИДКонтрола_AfterLabelEdit(ФСО,НовоеЗначение), ИДКонтрола_BeforeLabelEdit(ФСО)

Изменения:
метод ОбновитьДерево(ТаблЗначений) пытается вернуть дерево в исходное состояние.
  

TreeVeiw.rar ( 6 KB | Загрузки )

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микросо
Ответ #8 - 25. Января 2008 :: 02:41
Печать  
vandalsvq писал(а) 24. Января 2008 :: 17:48:
Обновление к классу (у меня теплится надежда что кто-то его пользует  Подмигивание)

Новые методы:
СохранитьСостояниеДерева(), сохраняет текущее состояние дерева (свернутые, развернутые узлы)
ВосстановитьСостояниеДерева(), восстанавливает состояние дерева (свернутые, развернутые узлы)
СвернутьУзел(НомерСтроки = ""), сворачивает узел (если НомерСтроки = "" сворачивает текущую строку)
РазвернутьУзел(НомерСтроки = ""), развернуть узел (если НомерСтроки = "" разворачивает текущую строку)
УзелРазвернут(НомерСтроки = ""), 1-развернут, 0-свернут (если НомерСтроки = "" возвращает состояние текущей строки)
ЗначениеРодителяТекущейСтроки(), возвращает значение родительского узла
ПолучитьСтрокуРодителя(), возвращает полный адрес строки родителя текущего узла
ПолучитьНомерВПределахРодителя(), возвращает номер строки в ТЗ которой принадлежит текущий узел
НачатьРедактирование(), начинает редактирование текущего узла дерева. Для редактирования необходимо наличие следующих процедур в модуле формы: ИДКонтрола_AfterLabelEdit(ФСО,НовоеЗначение), ИДКонтрола_BeforeLabelEdit(ФСО)

Изменения:
метод ОбновитьДерево(ТаблЗначений) пытается вернуть дерево в исходное состояние.

Ты бы это того самого Улыбка, правил бы первый пост, а то потом ищи по всей теме какая версия последняя Печаль
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микросо
Ответ #9 - 25. Января 2008 :: 03:27
Печать  
Nick писал(а) 25. Января 2008 :: 02:41:
Ты бы это того самого Улыбка, правил бы первый пост, а то потом ищи по всей теме какая версия последняя Печаль


нет проблем, исправлюсь
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
qop_akaki
Junior Member
**
Отсутствует



Сообщений: 40
Местоположение: Красноярск
Зарегистрирован: 12. Июля 2010
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микрософта
Ответ #10 - 12. Июля 2010 :: 05:40
Печать  
А кто ведет доработку ЭлементыФормы.ДеревоАктивИкс?
« Последняя редакция: 12. Июля 2010 :: 16:12 - qop_akaki »  

Всем спасибо, я не понял!
Наверх
IP записан
 
qop_akaki
Junior Member
**
Отсутствует



Сообщений: 40
Местоположение: Красноярск
Зарегистрирован: 12. Июля 2010
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микрософта
Ответ #11 - 13. Июля 2010 :: 08:00
Печать  
Подскажите как сделать, чтоб при двойном клике не сворачивались узлы?
  

Всем спасибо, я не понял!
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микрософта
Ответ #12 - 13. Июля 2010 :: 08:07
Печать  
На текущий момент я эту "разработку" изжил везде, поэтому не веду фактически. Можешь себе забрать мне не жалко Подмигивание.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
qop_akaki
Junior Member
**
Отсутствует



Сообщений: 40
Местоположение: Красноярск
Зарегистрирован: 12. Июля 2010
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микрософта
Ответ #13 - 13. Июля 2010 :: 08:20
Печать  
А все таки, как реализовать чтоб на нужных узлах по двойному клику не разворачивалось дерево.

У тебя в классе есть обработка событие Expand(Узел).
Как в ней перехватить?

Если не сложно:?

Заранее спасибо.  Очень довольный
  

Всем спасибо, я не понял!
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс для работы с ActiveX TreeView от Микрософта
Ответ #14 - 13. Июля 2010 :: 08:29
Печать  
Слушай, ну мне вспоминать надо, если сам никак не найдешь то обращайся. А сегодня мне точно некогда этот вопрос даже глянуть.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать