Аналог, замена VirtualStringTree есть?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Аналог, замена VirtualStringTree есть?

Сообщение Sharfik » 31.05.2016 13:58:32

Есть аналоги, которые могли бы заменить virtualstringtree? По функционалу пусть даже хуже?
Требования:
-Заполнение таблиц
-Выделение строк
-Возможность рисования по ячейкам
-Возможность хранить Pointer на источник данных и брать из него данные в процессе
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 763
Зарегистрирован: 20.07.2013 01:04:30

Re: Аналог, замена VirtualStringTree есть?

Сообщение pupsik » 31.05.2016 16:37:01

не пробовал, возможно и подойдет: https://github.com/benibela/treelistview
п.с.
а чем VT не подходит?
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Аналог, замена VirtualStringTree есть?

Сообщение sign » 01.06.2016 06:38:37

Возможно, человек не справился с первоначальным освоением VT.
После того, как алгоритм использования прописывается в мозгу, пользовать VT становится легко.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Аналог, замена VirtualStringTree есть?

Сообщение iN0k » 01.06.2016 08:12:54

кстати ... интересует судьба сей чудного компонента ...
пользуюсь им давно, еще с дельфей ...

очень классный и НУЖНЫЙ компонент, хочется чтобы он жил
iN0k
постоялец
 
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

Re: Аналог, замена VirtualStringTree есть?

Сообщение Sharfik » 02.06.2016 23:07:04

pupsik писал(а):а чем VT не подходит?

некоторыми глюками в процессе работы
sign писал(а):После того, как алгоритм использования прописывается в мозгу, пользовать VT становится легко.

я его хорошо знаю, на Laz не имея его не сел бы, но для одной задачи есть подозрения что он не годится.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 763
Зарегистрирован: 20.07.2013 01:04:30

Re: Аналог, замена VirtualStringTree есть?

Сообщение sign » 03.06.2016 06:44:49

Sharfik писал(а):некоторыми глюками в процессе работы

А подробней?

Sharfik писал(а):но для одной задачи есть подозрения что он не годится.

Было бы хорошо, если бы вы поделились своими подозрениями.
А вдруг, есть решение?
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Аналог, замена VirtualStringTree есть?

Сообщение iN0k » 03.06.2016 11:50:31

есть хорошие новости ...
по ходу его поддержку кто-то подхватил :D :P :D :P :D
http://forum.lazarus.freepascal.org/ind ... 12042.html
iN0k
постоялец
 
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

Re: Аналог, замена VirtualStringTree есть?

Сообщение VolRus » 04.06.2016 18:17:51

Версия 5.5.3 очень забагованая (много ложных событий с неверными указателями на ячейки). Лучше используйте 4.8.7 R2 провереный временем :D .
VolRus
незнакомец
 
Сообщения: 1
Зарегистрирован: 25.03.2016 00:40:33

Re: Аналог, замена VirtualStringTree есть?

Сообщение Sharfik » 08.06.2016 02:54:23

sign писал(а):А подробней?

1. При полностью заполненном данными окне самая нижняя строчка выделяется при клике, но алгоритм выбора выделенных нодов видит строку только если кликали выше середины нода. (У меня измененная высота нодов).
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 763
Зарегистрирован: 20.07.2013 01:04:30

Re: Аналог, замена VirtualStringTree есть?

Сообщение sign » 08.06.2016 07:39:34

Попробовал повторить.
Сделал строки разной высоты.
Вашу ситуацию, либо я что-то не понял, либо...
У меня всё кликается нормально.

"Virtual Treeview - Latest Version 5.2.2"
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Аналог, замена VirtualStringTree есть?

Сообщение Sharfik » 17.06.2016 03:22:34

у меня 5.5.1

Баг 1.
Код: Выделить всё
...
vstMainTree.OnClick                      :=@vstMainSelectNode;
....
procedure TFEditor.vstMainSelectNode(Sender: TObject);
begin
     SelectedItem(Sender);
end;
...
procedure TFEditor.SelectedItem(Sender: TObject);
var
  Item:TObject;
  Tree:TVirtualStringTree;
  LastNode:PVirtualNode;
  DataNode:PVirtualRecord;
begin
Tree:=vstMainTree;
Item:=nil;

SelectList.Clear;
LastNode:=Tree.GetFirstSelected;
while Assigned(LastNode) do
begin
  DataNode := Tree.GetNodeData(LastNode);
  if (Assigned(DataNode)and Assigned(DataNode^.Item)) then
  begin
            Item:=TObject(DataNode^.Item);
            if (SelectList.IndexOf(Item)=-1)then
            begin
              SelectList.Add(Item);
            end;
  end;
  LastNode:=Tree.GetNextSelected(LastNode);
end;

ShowInspector(Sender);
StatusBar1.Panels.Items[0].Text:=format('Выбрано: %d',[SelectList.Count]);
end;

см. скриншот
https://yadi.sk/i/skyEcHX2sZBLo

Если кликать в зеленой зоне, то справа в инспекторе появляются выбранные объекты. Если в красной зоне, то выделяется строка, но кол-во выделенных объектов не меняется. Сейчас через таймер с задержкой сделал этот алгоритм, и все вроде хорошо, но в другом окне, где нет такой задержки все по прежнему.

Баг 2.
С заголовками столбцов я вот не разобрался. Программа падает, если делаю обновление содержимого компонента вместе с пересозданием заново заголовков. Она при одни действиях работает, при других падает. Например если в списке TreeView выбираю нужный мне вариант таблицы, то VST заполняется. Десять раз кликаю, десять раз работает. Тут же нажимаю "обновить" через контекстное меню - падаем. Как только исправил код, исключив
Код: Выделить всё
vstMainTree.Header.Columns.Clear;

на такой код
Код: Выделить всё
procedure TFEditor.QueryInitHeader(Sender: TObject);
var
  i        :integer;
  Column   :TVirtualTreeColumn;
begin

  for i:=0 to high(qdHeaders) do
  begin
        if vstMainTree.Header.Columns.Count<=i then
        Column                :=vstMainTree.Header.Columns.Add
        else
        Column                :=vstMainTree.Header.Columns.Items[i];

        qdHeaders[i].ColumnID :=Column.ID;
        Column.Text           :=qdHeaders[i].Caption;
        Column.Width          :=qdHeaders[i].Width;
        Column.Hint           :=qdHeaders[i].Hint;
  end;

  for i:=vstMainTree.Header.Columns.Count-1 downto Length(qdHeaders) do
  begin
      vstMainTree.Header.Columns.Delete(i);
  end;
end;

все работает везде.

Как вариант, проблема в моей неопытности и тонкостях распределения памяти у компонента. Но его в таких ситуациях очень сложно отлаживать, потому что вылетает не на моем коде или коде VST, а гораздо глубже всегда. Так, что толку от стека вызовов ноль почти.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 763
Зарегистрирован: 20.07.2013 01:04:30

Re: Аналог, замена VirtualStringTree есть?

Сообщение sign » 17.06.2016 06:44:50

Если VTV вылетает - 100% косяк в программе.
Я уже многажды в этом убеждался.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Аналог, замена VirtualStringTree есть?

Сообщение zub » 17.06.2016 12:28:10

Sharfik
Ты бы сделал минимальные примеры с ошибками - глядишь ченить решилось бы. От абстрактных "выдирок" кода толку никакого нет
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru