Про VirtualTreeView

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

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

Про VirtualTreeView

Сообщение Сергей Смирнов » 06.12.2007 11:56:58

Писать подробно про компонент virtualtreeview нет смысла - всё уже написано, но лишний раз напомнить уважаемому сообществу о существовании вполне, на первый взгляд, рабочей версии под Lazarus, думаю, будет не лишним.

Итак, сам компонент, лежащий в Lazarus CCR скорее вводит в заблуждение: там какая-то полурабочая древнятина. На самом деле пакет надо брать с сайта LuiPack. Там есть т.н. preview версия, которую можно скачать и установить, но я сразу взял последние исходники с SVN (внимание!!! - пакет лежит в SVN репозитарии Lazarus CCR в ветке virtualtreeview-unstable).

Текущая версия пакета требует предварительной установки двух пакетов: lclextensions-0.2 и multilog-0.4, которые лежат на том же сайте в разделе downloads или их можно снять с SVN (но уже из репозитария самого LuiPack).

Теперь, всё же, в двух словах о том, что это за компонент. Фактически - это универсальный грид, поддерживающий отображение иерархической древовидной структуры. Разобраться с ним довольно непросто, но, поверьте, научившись работать с этим замечательным компонентом вы будете пихать его практически во все проекты :)

Очень хорошую статью, скорее даже документацию, про virtualtreeview на русском языке можно найти тут.
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение Attid » 06.12.2007 14:51:16

промерчик бы (бинарник) нарисовал бы =) чтоб поглядеть вживую.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Сергей Смирнов » 06.12.2007 15:54:22

Там в комплекте демки есть - компиляй на здоровье :)
Ещё можно скриншоты посмотреть тут.
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение Attid » 06.12.2007 23:03:19

компилять это еще компонент поставить =)
а галерея рулит =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Сергей Смирнов » 07.12.2007 00:02:37

Attid писал(а):компилять это еще компонент поставить =)
Во народ ленивый пошел :) Это-ж дело нескольких минут, включая скачивание исходников.
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение Alexander » 07.12.2007 03:05:32

В МСЕ такой компонент тоже не помешал бы :)
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 771
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение debi12345 » 07.12.2007 08:39:07

Alexander писал(а):В МСЕ такой компонент тоже не помешал бы :)

Имеющийся "там" много чего может - но заполняется и рисуется только в коде.
Мартин говорит "один фиг в рантайме заполняется - нафига тогда мучаться с отрисовкой в дизайне ?"
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение Alexander » 07.12.2007 23:09:47

Я не против существующего, но виртуальный не содержит сразу структур
в памяти.

Если надо создать миллиард вхождений он не выделит на них память,
а только увеличит счётчик.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 771
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение RomanS » 10.12.2007 10:19:05

Попытался установить дополнительные пакеты для TreeView, c multilog-0.4 проблем не возникло, а вот lclextensions-0.2 возникли проблемы при компиляции, Lazarus выдает ошибку:
Код: Выделить всё
C:\lazarus\components\lclextensions\oleutils.pas(107,50) Error: Call by var for arg no. 3 has to match exactly: Got "LARGE_INTEGER" expected "Int64"

Ошибка в процедуре:
Код: Выделить всё
function TOLEStream.Seek(Offset: Integer; Origin: Word): Integer;
var
  liResult, liOffset : LARGE_INTEGER;
  Res: HRESULT;
begin
  //soFrom* constants are equal to STREAM_SEEK_* constants. Assume it here
  liOffset.LowPart:=Offset;
  liOffset.HighPart:=0;
  Res:=FSrcStream.Seek(liOffset, Origin, liResult); // здесь компилятор ругается
  Result:=liResult.LowPart;
  if Res <> S_OK then
    Raise Exception.Create('TOLEStream - Error while seeking: '+ErrorString(Res));
end;


В чем может быть проблема?

ОС: Win XP SP2
Lasarus 0.9.23/0.9.24
FPC 2.2.1
RomanS
новенький
 
Сообщения: 33
Зарегистрирован: 10.12.2007 10:08:24

Сообщение ViTality » 10.12.2007 11:07:38

RomanS
навскидку:
все написано в сообщении об ошибке: 3й параметр в функции FSrcStream.Seek должен быть int64 а определен как LARGE_INTEGER.
Попробуй в var определить его как int64. Или перед тем как отдавать в функцию FSrcStream.Seek переведи из одного типа в другой. Да и ваще сначала посмотри что это за тип такой LARGE_INTEGER
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение Сергей Смирнов » 10.12.2007 11:58:02

RomanS писал(а):
В чем может быть проблема?

ОС: Win XP SP2
Lasarus 0.9.23/0.9.24
FPC 2.2.1
FPC, идущий в комплекте релиза Lazarus 0.9.24 компиляет у меня всё без проблем.
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение debi12345 » 10.12.2007 18:26:46

Если надо создать миллиард вхождений он не выделит на них память,
а только увеличит счётчик.
==============
А зачем создавать структуры наперед, да еще целый миллиард, а потом париться - не отожрут ли они память ? Для таких дел пишутся БД-программы. Всему своя область применения. ТриВью должен помещать группы элементов в пределах экрана - а вы тут о миллиарде :)
Опять гонимся за концептуальным идеалом и фичами, которые врядли понадобятся ?
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение Alexander » 11.12.2007 00:56:03

debi12345 писал(а):А зачем создавать структуры наперед, да еще целый миллиард, а потом париться - не отожрут ли они память ? Для таких дел пишутся БД-программы. Всему своя область применения. ТриВью должен помещать группы элементов в пределах экрана - а вы тут о миллиарде

Опять гонимся за концептуальным идеалом и фичами, которые врядли понадобятся ?


Ну почему концептуальными ? Очень много задач, в которых либо неизвестен
размер массива и не хотелось бы столкуться с ограничением в 65535 (файловая
система например), либо с вычисляемыми вещами, которые вообще стоит отрисовывать только у видимых на экране элементов списка/древа.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 771
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение debi12345 » 11.12.2007 08:10:10

Ну почему концептуальными ? Очень много задач, в которых либо неизвестен
размер массива и не хотелось бы столкуться с ограничением в 65535 (файловая
система например),
=============
Ну и причем здесь ТриВью ? Все inodes файловой системы показывать ?
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение dymken » 13.01.2008 13:05:15

Из SVN что-то не компилируется под Lazarus 0.9.24 (FPC 2.2.0). Пробовал разные ревизии скачивать. Ошибки тоже разные :)

В последней ревизии такая ошибка:
VirtualTrees.pas(2203,14) Error: There is no method in an ancestor class to be overridden: "TBaseVirtualTree.DoDragMsg(TDragMessage, POINT, TDragObject, TControl, Boolean):LongInt"

В какой-то предыдущей ревизии такой месседж выходит:
VirtualTrees.pas(8950,30) Error: Identifier not found "DirectMaskBlt"

Либы дополнительные поставил.

Может есть у кого нормальный вариант VirtualTreeView под последний релиз Лазаря?
А который не unstable (CCR) что-то тупит иногда сильно - Header толком не пашет и другие досадные ошибки встречаются...

Или может я что-то не так делаю?
Заранее спасибо!
dymken
новенький
 
Сообщения: 11
Зарегистрирован: 10.01.2008 11:50:14

След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru