Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

Ускорить построение TreeView, как???   Найти похожие ветки 

 
Relaxxx   (2004-07-07 14:37) [0]

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

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

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


 
Reindeer Moss Eater ©   (2004-07-07 14:41) [1]

Не вчитываешься в информативные тексы ошибок


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


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

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


 
Reindeer Moss Eater ©   (2004-07-07 14:52) [3]

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


 
TUser ©   (2004-07-07 15:09) [4]


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


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

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


 
Sandman25 ©   (2004-07-07 15:12) [5]

[4] TUser ©   (07.07.04 15:09)

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


 
Reindeer Moss Eater ©   (2004-07-07 15:13) [6]

Parent"oм.

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


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

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


 
Sandman25 ©   (2004-07-07 15:23) [8]

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


 
Relaxxx   (2004-07-07 15:54) [9]

Вот так

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:58) [10]

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

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

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

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


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

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


 
Relaxxx   (2004-07-07 16:13) [12]


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

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

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


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

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


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

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


 
Sandman25 ©   (2004-07-07 16:23) [14]

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

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

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

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


 
Relaxxx   (2004-07-07 16:32) [15]

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


 
Sandman25 ©   (2004-07-07 16:33) [16]

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

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


 
Amoeba ©   (2004-07-07 16:39) [17]

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


 
TUser ©   (2004-07-07 18:11) [18]

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

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

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

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


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


> TUser ©  

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


 
TUser ©   (2004-07-07 19:49) [20]

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


 
Amoeba ©   (2004-07-08 12:02) [21]

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

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



Страницы: 1 вся ветка

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.025 c
3-1088748804
so_well
2004-07-02 10:13
2004.07.25
база и Rave Reports


1-1089651413
AndersoNRules
2004-07-12 20:56
2004.07.25
V kakom file i kak hraniti peremennuyu tipa: TmyData=record...


1-1089530502
Islander
2004-07-11 11:21
2004.07.25
Как получить текущую модальную форму?


14-1088691594
Копир
2004-07-01 18:19
2004.07.25
Женщина - это мужчина плюс таблетки?


3-1088521244
Sergej
2004-06-29 19:00
2004.07.25
Как заставить грид EhLib обновить значение Footer-а?