Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ускорить построение TreeView, как??? [D6, Win2k]


Страницы:   1 2

Relaxxx ©   (2004-07-07 14:37:00) 

Здраствуйте мастера!
Вот нашол компонент, вернее просто THETreeView, он не визуальный, а просто пас файл. Так вот я незнаю как его использовать.

Я например леплю на форму TTreeView с именем  MainTree и после думал сделать так
var
My_tree: THETreeView;
...
My_Tree:=FastTree.THETreeView.Create(MainTree);
и уже через My_Tree работать с компонентом, но мне выдает ошибку, что-то типа: class EInvalidOperation with message 'Control' has no parent window

что я делаю так???


Amoeba   (2004-07-08 12:02:00) [1]

Есть готовые компоненты, как отдельно, так и в составе бесплатных библиотек, например:

JVCL - http://jvcl.sourceforge.net/
VGLib - http://www.vglib.com/
Polaris - http://polesoft.narod.ru/download.html


TUser   (2004-07-07 19:49:00) [2]

хорошо. жди вечера.


Relaxxx   (2004-07-07 19:17:00) [3]


> TUser ©  

БУДУ ОЧЕНЬ ПРИЗНАТЕЛЕН!!!
вот адресс - programer@armtec.com.ua


TUser   (2004-07-07 18:11:00) [4]

Могу выслать свой юнит, в котором сторится дерево из БД. Только вечером - он у меня дома.

ЗЫ. Оффтоп, конечно, но все-таки

> http://www.delphikingdom.com/asp/viewitem.asp?catalogid=488

Я тоже туда сходил, никак не пойму, зачем там в SQL запросах пишут WHERE 0=0


Amoeba   (2004-07-07 16:39:00) [5]

Посмотри вот эту статью:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=488


Sandman25   (2004-07-07 16:33:00) [6]

Например так,

MyField := FieldByName('myfield');
while not DataSet.Eof do
begin
 MyField.AsXXX
...


Relaxxx   (2004-07-07 16:32:00) [7]

Нащет выделения памяти понял, но не понял что плохого в DataSet'е в цикле, если он тормозит, как мне его обойти, вообще кто-то занимался построением с базы данных бооольших деревьев с учетом того что программы будут работать на не очень сильных машинах и нужно оптимизировать как можно лучше


Sandman25   (2004-07-07 16:23:00) [8]

>а как именно,

Неоптимально используется DataSet. Все эти FieldByName в цикле, TreeDS.DataSet...

>или я не прав?

В данном случае нужно выделять память через New(P), где P: PMyRecord. Иначе получается ссылка на локальную строку, которая тут же очищается (память, выделенная под нее, освобождается).


Reindeer Moss Eater   (2004-07-07 16:15:00) [9]

"главным образом"


Relaxxx   (2004-07-07 16:13:00) [10]


> Нужно оптимизировать. И довольно много.

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

Я сделал, так как Вы описали чтение, но мне пишет что ошибка чтения памяти?
А заношу я идентификатор итемса когда строю дерево так
Tree.Items[i].Data:=Pointer(TreeDS.DataSet.FieldByName('OWNCAT').AsString);
или я не прав?


> Собственно тормозит у тебя г.о. не treeview

что такое г.о.


TUser   (2004-07-07 16:08:00) [11]

Собственно тормозит у тебя г.о. не treeview, а бд. А то что этот компонент нфига не разгоняет - я писал. Сам однажды пытался "ускорить".


Sandman25   (2004-07-07 15:58:00) [12]

Нужно оптимизировать. И довольно много.

>а вот как прочитать то что я записал я не знаю

type
 PMyRecord = ^TMyRecord;
 TMyRecord = record
  xxx
 end;

PMyRecord(MainTree.Items[1].Data)^.xxx


Relaxxx   (2004-07-07 15:54:00) [13]

Вот так

procedure TMainForm.BuildMainTree(Tree: TTreeView;Sender: TObject; Tord:integer);
var
i, CountTree:integer;
t:Ttime;
begin
 t:=time;
 TreeBuild:=0;
 Tree.Items.BeginUpdate;
 Tree.Items.Clear;

 TreeQ.Close;
 TreeQ.SQL.Clear;
 TreeQ.SQL.Add('SELECT * FROM '+AliasName+'.dbcattree WHERE dbid=55 ORDER BY tord');
 TreeQ.Open;
 TreeQ.First;
 Tree.Items.Add(nil, TreeDS.DataSet.FieldByName('OWNCAT').AsString);
 TreeQ.Next;

 while not TreeDS.DataSet.Eof do
  begin
   i:=0;
   while  Tree.Items[i].Text<>TreeDS.DataSet.FieldByName('CATID').AsString do i:=i+1;
    Tree.Items.AddChild(Tree.Items[i], TreeDS.DataSet.FieldByName('OWNCAT').AsString);
    TreeQ.Next;
  end;

  TreeQ.First;
  for i:=0 to Tree.Items.Count-1 do
  begin
    Tree.Items[i].Text:=TreeDS.DataSet.FieldByName('DESCR').AsString;
    TreeQ.Next;
  end;

 Tree.FullCollapse;
 Tree.Selected:=Tree.Items[Tord];
 Tree.Items.EndUpdate;
 TreeBuild:=1;
 t:=t-time;
ShowMessage(FormatDateTime('ss.zzz', t));
end;


Да и еще одно, я знаю что к каждому итемсу можно прикрепить идентификатор MainTree.Items[1].Data, а вот как прочитать то что я записал я не знаю, так как там хранится ссылка на мое число, я так понял


Sandman25   (2004-07-07 15:23:00) [14]

Как дерево строите? Может замедление не в нем? может Вы данные из БД читаете?


Relaxxx   (2004-07-07 15:18:00) [15]

Заработал у меня этот  компонент, но что-то увеличения скорости нет вообще, вообще возможно как-то ускорить построение дерева(строить по открытию ветки не катит, нужно вначале все дерево построить)???


Reindeer Moss Eater   (2004-07-07 15:13:00) [16]

Parent'oм.

Оунером может вообще никто не быть.


Sandman25   (2004-07-07 15:12:00) [17]

[4] TUser ©   (07.07.04 15:09)

ИМХО Owner'ом должна быть именно форма. Если, конечно, один экземпляр не используется на нескольких формах.


TUser   (2004-07-07 15:09:00) [18]


> Вот нашол компонент, вернее просто THETreeView, он не визуальный,
> а просто пас файл


Возможно я ошибаюсь, но кажется он все-таки визуальный. А ошибку выдает потому, что в Create надо написать Application (там ведь наверняка параметр Owner стоит), а потом написать Parent:=YourForm.
Это такой вроде компонент, который обещается работает быстрее обычного? Если да, то не верь - я особого ускорения не заметил.

ЗЫ. Закройте вторую ветку.


Reindeer Moss Eater   (2004-07-07 14:52:00) [19]

...
My_Tree:=FastTree.THETreeView.Create(MainTree);
My_Tree.Parent := Something;


Семен Сорокин   (2004-07-07 14:51:00) [20]


> Ускорить построение TreeView, как???

TreeView1.Items.BeginUpdate;
try
 // построение
finally
 TreeView1.Items.EndUpdate
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо