Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

Ускорить построение 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.07 c
1-1089700940
MisteRR
2004-07-13 10:42
2004.07.25
Word.Application


14-1088889684
Baron
2004-07-04 01:21
2004.07.25
Моя девушка смерти моей хочит.


6-1085499576
DmitryA
2004-05-25 19:39
2004.07.25
Интенсивная передача через Windows Socket


1-1089577711
DeOptric2
2004-07-12 00:28
2004.07.25
TreeView save


14-1088987464
Sanek_metaller
2004-07-05 04:31
2004.07.25
Resourse Kit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский