Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
 Аватар для kebot
9 / 9 / 4
Регистрация: 11.07.2012
Сообщений: 200

Многострочность в Virtual String Tree

14.11.2017, 08:09. Показов 6354. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток всем
просьба откликнуться тех кто имел практическуий опыт работы с VST (а конкретно включал многострочность для узлов дерева)

есть подробная инструкция - как включить (создать обработчиеки 2х событий у VST)

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        procedure TAdminForm.VST_rightsInitNode(Sender: TBaseVirtualTree; ParentNode,
                 Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
        begin
           // Включаем/выключаем поддержку многострочности
               Include(InitialStates,ivsMultiline);
 
         end;
 
        procedure TAdminForm.VST_rightsMeasureItem(Sender: TBaseVirtualTree;
           TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer);
        begin
        if Sender.MultiLine[Node] then
          begin
            TargetCanvas.Font := Sender.Font;
            NodeHeight := VST_rights.ComputeNodeHeight(TargetCanvas, Node, 0) + 10;
          end;
       end;
У меня версия VT - 6.7 (в 4.3.1 вроде как был глюк с высотой строк при многострочности)
На данный момет у меня отображается дерево с 4 колонками и еирархической структурой из таблицы БД
но при этом текст в колонках который не проходит по ширине обрезается с тремя точками на конце
свойства в Header
MainColum=0
Options -> hoAutoResize = true
так же почемуто нет реакции на включение вызова встроенного редактора для узлов дерева
свойсво Tree Options -> Misc Options -> toEditable = true (по узлам щелкаю - редактора не вижу)

Помогите разобраться, в данных вопросах вероятно есть какие то ньюансы не освещенные в инструкциях.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2017, 08:09
Ответы с готовыми решениями:

Обращение к элементу по индексу в Virtual String Tree
Приветствую всех. Получаю у элемента AbsoluteIndex. Как далее осуществить обращение к элементу по его абсолютному индексу (на подобии...

Virtual Tree View в Lazarus
Изучаю Lazarus, но так и не получается установить Virtual Tree View. Не могу понять где ошщибаюсь по этому весь перечень вопросов и...

public static string TypeName сделать virtual
Как в C# сделать статическое поле "виртуальным". Например, есть два класса родительский Obj и дочерний Client. Дочерний переписывает...

6
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
14.11.2017, 12:08
Два раза кликаешь по VST --> появляется окошко Editing VST.Columns --> кликаешь по жёлтой папке(добавляешь столбцы).
Для 0-столбца устанавливаешь свойства [coParentBidiMode,coResizable,coShowDropM ark] (всё остальное снимаешь галочки, то есть он будет невидимый, без фокуса, недоступный и т.п.). 0-столбцом считается тот, который отображает линии дерева(узлов).
Для остальных устанавливаешь свойство WrapCaption.

Добавлено через 27 секунд
Редактирование узлов не делается так.

Добавлено через 4 минуты
Пишешь сообщение:
Delphi
1
2
3
4
5
6
7
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,  VirtualTrees, Menus,..., Editors, DBAccess, Buttons;
 
const
  WM_STARTEDITING = WM_USER + 778;
В private пишешь:
Delphi
1
procedure WMStartEditing(var Message: TMessage); message WM_STARTEDITING;
Сам текст процедуры:
Delphi
1
2
3
4
5
6
7
procedure TForm1.WMStartEditing(var Message: TMessage);
var
  Node: PVirtualNode;
begin
  Node := Pointer(Message.WParam);
  VirtualStringTree1.EditNode(Node, VirtualStringTree1.FocusedColumn)
end;
Добавлено через 5 минут
Далее, чтобы отображался текст в ячейках(какой-то), ты должен использовать OnGetText. То,что отправишь в CellText, то и отобразится.
Для распределения разрешений на редактирование,есть событие OnEditing. Вот его пример:
Delphi
1
2
3
4
5
procedure TForm1.VirtualStringTree1Editing(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; 
var Allowed: Boolean);
begin
  Allowed := Column > 0; // все Column начинаются с 1. Эта строка означает, что открываем редактирование для всего дерева
end;
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
14.11.2017, 12:13
Чтобы поместить комбобоксы/лабелы(обычный текст) в дерево, используй файл:
Вложения
Тип файла: zip Editors.zip (3.8 Кб, 31 просмотров)
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
14.11.2017, 12:20
Лучший ответ Сообщение было отмечено kebot как решение

Решение

Все нюансы в основном можно почерпнуть из примеров в папке Demos\Advanced. Эта папка поставляется вместе с пакетом Virtual String Tree.

Добавлено через 2 минуты
Цитата Сообщение от kebot Посмотреть сообщение
if Sender.MultiLine[Node] then
Эта строка непонятно вообще к чему. Нигде не видел, чтобы так писали..

Добавлено через 2 минуты
Будут вопросы - спрашивай
1
 Аватар для kebot
9 / 9 / 4
Регистрация: 11.07.2012
Сообщений: 200
14.11.2017, 14:15  [ТС]
Спасибо огромное, теперь у меня много информации для размышления.
А основная проблема почему не работало - была вот в этом:
Tree Options -> Misc Options -> toVariableNodeHeight = false

Добавлено через 28 минут
Matan! c сообщением не совсем понятно, обработчик вижу , а место где оно отправляется нет.
Ведь что бы сработал обработчик - должно прийти сообщение, как это произойдет ?
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
14.11.2017, 15:06
Ну, лично я использую его так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.VSTFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex);
begin
  if Sender.FocusedColumn > 0 then
  begin
    MyClass.ValueType := ValueTypes[0, 0]; // ValueTypes[0, 0] взято из Editors.pas. 
                                                             // [0, 0] - означает, что в ячейки просто вводится текст 
 
    if Length(MyClass.Arr[Node.Index]) - 1 >= Sender.FocusedColumn - 1 then
    begin
      MyClass.Value := MyClass.Arr[Node.Index][Sender.FocusedColumn - 1].Value;
      MyClass.ValueId := 0;
    end;
    PostMessage(Self.Handle, WM_STARTEDITING, WPARAM(Node), 0); // <==  вот пример
  end;
end;
0
 Аватар для kebot
9 / 9 / 4
Регистрация: 11.07.2012
Сообщений: 200
14.11.2017, 15:43  [ТС]
Спасибо, так намного проще )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.11.2017, 15:43
Помогаю со студенческими работами здесь

NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()'
Вылетает приложение из-за этой ошибки. Сразу скажу, что я в java вообще нуб :) есть класс storage для хранения информации через...

NullPointerException - Attempt to invoke virtual method 'java.lang.String MainActivity.getString(int)
На 9-м андроиде приложение крашится с разной периодичностью при выполнении одних и тех же действий. Причем, в консоли вообще ничего не...

Определить предикат maxelem(Tree, Max), чтобы Max равнялось наибольшему из чисел, входящих в дерево Tree
1# Определить предикат maxelem(Tree,Max) так , чтобы Max равнялось наибольшему из чисел, входящих в дерево Tree. 2# Запрограммируйте...

Tree.FullExpand; Tree.FullCollapse;
Я кладу на форму компонент TreeView и строю дерево. И мне нужно чтобы при двойном нажатии на элемент дерева в строковую переменную...

Многострочность в TreeView
Доброго дня! Не подскажите - возможен ли в этом компоненте перенос текста на другую строку в пределах одного узла при наличие в первой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru