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

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

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

Ответить
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

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

Сообщение Sharfik »

Есть аналоги, которые могли бы заменить virtualstringtree? По функционалу пусть даже хуже?
Требования:
-Заполнение таблиц
-Выделение строк
-Возможность рисования по ячейкам
-Возможность хранить Pointer на источник данных и брать из него данные в процессе
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

не пробовал, возможно и подойдет: https://github.com/benibela/treelistview
п.с.
а чем VT не подходит?
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

Возможно, человек не справился с первоначальным освоением VT.
После того, как алгоритм использования прописывается в мозгу, пользовать VT становится легко.
iN0k
постоялец
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

Сообщение iN0k »

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

очень классный и НУЖНЫЙ компонент, хочется чтобы он жил
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

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

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

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

Сообщение sign »

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

А подробней?

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

Было бы хорошо, если бы вы поделились своими подозрениями.
А вдруг, есть решение?
iN0k
постоялец
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

Сообщение iN0k »

есть хорошие новости ...
по ходу его поддержку кто-то подхватил :D :P :D :P :D
http://forum.lazarus.freepascal.org/ind ... 12042.html
VolRus
незнакомец
Сообщения: 1
Зарегистрирован: 24.03.2016 23:40:33

Сообщение VolRus »

Версия 5.5.3 очень забагованая (много ложных событий с неверными указателями на ячейки). Лучше используйте 4.8.7 R2 провереный временем :D .
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

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

1. При полностью заполненном данными окне самая нижняя строчка выделяется при клике, но алгоритм выбора выделенных нодов видит строку только если кликали выше середины нода. (У меня измененная высота нодов).
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

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

"Virtual Treeview - Latest Version 5.2.2"
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

у меня 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, а гораздо глубже всегда. Так, что толку от стека вызовов ноль почти.
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

Если VTV вылетает - 100% косяк в программе.
Я уже многажды в этом убеждался.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Sharfik
Ты бы сделал минимальные примеры с ошибками - глядишь ченить решилось бы. От абстрактных "выдирок" кода толку никакого нет
Ответить