Аналог, замена VirtualStringTree есть?
Модератор: Модераторы
Аналог, замена VirtualStringTree есть?
Есть аналоги, которые могли бы заменить virtualstringtree? По функционалу пусть даже хуже?
Требования:
-Заполнение таблиц
-Выделение строк
-Возможность рисования по ячейкам
-Возможность хранить Pointer на источник данных и брать из него данные в процессе
Требования:
-Заполнение таблиц
-Выделение строк
-Возможность рисования по ячейкам
-Возможность хранить Pointer на источник данных и брать из него данные в процессе
Возможно, человек не справился с первоначальным освоением VT.
После того, как алгоритм использования прописывается в мозгу, пользовать VT становится легко.
После того, как алгоритм использования прописывается в мозгу, пользовать VT становится легко.
кстати ... интересует судьба сей чудного компонента ...
пользуюсь им давно, еще с дельфей ...
очень классный и НУЖНЫЙ компонент, хочется чтобы он жил
пользуюсь им давно, еще с дельфей ...
очень классный и НУЖНЫЙ компонент, хочется чтобы он жил
pupsik писал(а):а чем VT не подходит?
некоторыми глюками в процессе работы
sign писал(а):После того, как алгоритм использования прописывается в мозгу, пользовать VT становится легко.
я его хорошо знаю, на Laz не имея его не сел бы, но для одной задачи есть подозрения что он не годится.
Sharfik писал(а):некоторыми глюками в процессе работы
А подробней?
Sharfik писал(а):но для одной задачи есть подозрения что он не годится.
Было бы хорошо, если бы вы поделились своими подозрениями.
А вдруг, есть решение?
есть хорошие новости ...
по ходу его поддержку кто-то подхватил
http://forum.lazarus.freepascal.org/ind ... 12042.html
по ходу его поддержку кто-то подхватил
http://forum.lazarus.freepascal.org/ind ... 12042.html
Версия 5.5.3 очень забагованая (много ложных событий с неверными указателями на ячейки). Лучше используйте 4.8.7 R2 провереный временем
.
sign писал(а):А подробней?
1. При полностью заполненном данными окне самая нижняя строчка выделяется при клике, но алгоритм выбора выделенных нодов видит строку только если кликали выше середины нода. (У меня измененная высота нодов).
Попробовал повторить.
Сделал строки разной высоты.
Вашу ситуацию, либо я что-то не понял, либо...
У меня всё кликается нормально.
"Virtual Treeview - Latest Version 5.2.2"
Сделал строки разной высоты.
Вашу ситуацию, либо я что-то не понял, либо...
У меня всё кликается нормально.
"Virtual Treeview - Latest Version 5.2.2"
у меня 5.5.1
Баг 1.
см. скриншот
https://yadi.sk/i/skyEcHX2sZBLo
Если кликать в зеленой зоне, то справа в инспекторе появляются выбранные объекты. Если в красной зоне, то выделяется строка, но кол-во выделенных объектов не меняется. Сейчас через таймер с задержкой сделал этот алгоритм, и все вроде хорошо, но в другом окне, где нет такой задержки все по прежнему.
Баг 2.
С заголовками столбцов я вот не разобрался. Программа падает, если делаю обновление содержимого компонента вместе с пересозданием заново заголовков. Она при одни действиях работает, при других падает. Например если в списке TreeView выбираю нужный мне вариант таблицы, то VST заполняется. Десять раз кликаю, десять раз работает. Тут же нажимаю "обновить" через контекстное меню - падаем. Как только исправил код, исключив
на такой код
все работает везде.
Как вариант, проблема в моей неопытности и тонкостях распределения памяти у компонента. Но его в таких ситуациях очень сложно отлаживать, потому что вылетает не на моем коде или коде VST, а гораздо глубже всегда. Так, что толку от стека вызовов ноль почти.
Баг 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, а гораздо глубже всегда. Так, что толку от стека вызовов ноль почти.
Если VTV вылетает - 100% косяк в программе.
Я уже многажды в этом убеждался.
Я уже многажды в этом убеждался.
Sharfik
Ты бы сделал минимальные примеры с ошибками - глядишь ченить решилось бы. От абстрактных "выдирок" кода толку никакого нет
Ты бы сделал минимальные примеры с ошибками - глядишь ченить решилось бы. От абстрактных "выдирок" кода толку никакого нет
