Форум: "Основная";
Текущий архив: 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.045 c