Текущий архив: 2006.10.15;
Скачать: CL | DM;
ВнизСинхронизация компонентов Найти похожие ветки
← →
Кабанчик (2006-09-04 14:47) [0]Допустим существует два компонента TTreeView, которые находяться на разных формах, причём одна из форм может быть инициализирована а другая нет. Оба компонента TTreeView оттображают одну и туже информацию и содержание их может модифицироваться. Необходимо что все изменения в одном TTreeView тут же фиксировались в другои TTreeView. Как это наиболее грамотно релизовать ?
← →
StriderMan © (2006-09-04 14:51) [1]а формы могут быть видимы одновременно?
← →
Кабанчик (2006-09-04 14:57) [2]Нет формы не могут быть видны одновременно
← →
Elen © (2006-09-04 14:58) [3]ИМХО Form2.treeView.items:=Form1.treeView.items
← →
StriderMan © (2006-09-04 15:02) [4]
> Elen © (04.09.06 14:58) [3]
я думаю это не будет работать. даже не скомпилится.
если уж по такому пути идти, тогда Assign
предлагаю такой вариант:
TreeView кладется на отдельную форму (назовем frmTree). При отображении форм Form1 и Form2 в обработчике FormShow делать что-то типа frmTree.Parent := Form1 (или Form2 соответственно). При необходимости можно класть на панельку.
← →
Elen © (2006-09-04 15:06) [5]
> StriderMan
У меня работает.
← →
StriderMan © (2006-09-04 15:15) [6]
> Elen © (04.09.06 15:06) [5]
Да, пардон, это будет работать. Для этого специально все предусмотрено (ComCtrls.pas):procedure TCustomTreeView.SetTreeNodes(Value: TTreeNodes);
begin
Items.Assign(Value);
end;
но я бы предпочел свой способ. если большой Tree - быстрее будет работать.
← →
Jack128_from_Tuapse (2006-09-04 15:18) [7]
> если большой Tree - быстрее будет работать.
не думаю. Примерно тоже самое по скорости должно быть..
← →
Elen © (2006-09-04 15:20) [8]
> но я бы предпочел свой способ
Respect самостоятельным !!!
← →
StriderMan © (2006-09-04 15:25) [9]
> Jack128_from_Tuapse (04.09.06 15:18) [7]
> не думаю. Примерно тоже самое по скорости должно быть..
что спорить, заглянем в VCL:procedure TTreeNodes.Assign(Source: TPersistent);
var
TreeNodes: TTreeNodes;
MemStream: TMemoryStream;
begin
ClearCache;
if Source is TTreeNodes then
begin
TreeNodes := TTreeNodes(Source);
Clear;
MemStream := TMemoryStream.Create;
try
TreeNodes.WriteData(MemStream);
MemStream.Position := 0;
ReadData(MemStream);
finally
MemStream.Free;
end;
end
else inherited Assign(Source);
end;
← →
Сергей М. © (2006-09-04 15:33) [10]
> Как это наиболее грамотно релизовать ?
Бродкастом сообщений об изменении дерева в контексте приложения.
← →
StriderMan © (2006-09-04 15:51) [11]
> Сергей М. © (04.09.06 15:33) [10]
> Бродкастом сообщений об изменении дерева в контексте приложения.
а подробнее можно?
← →
isasa © (2006-09-04 16:04) [12]А положить один компонент в один фрейм и грузить в нужную форму?
← →
Сергей М. © (2006-09-04 16:08) [13]SendMessage(HWND_BROADCAST, .. параметры ..)
← →
StriderMan © (2006-09-04 17:30) [14]
> Сергей М. © (04.09.06 16:08) [13]
а как данные из одного TreeView попадут в другой? Новые узлы например, объекты связанные... Я че-то не догоняю.
← →
Loginov Dmitry © (2006-09-04 18:33) [15]> StriderMan © (04.09.06 15:25) [9]
>
> что спорить, заглянем в VCL:
А что происходит при изменении родителя для TTreeView? Тоже самое. Происходит копирование всех нодов (зачем - ХЗ. Так реализовано в винде). Поэтому от изменения Parent"a выигрыша в скорости нету.
← →
StriderMan © (2006-09-05 12:09) [16]
> Loginov Dmitry © (04.09.06 18:33) [15]
> > StriderMan © (04.09.06 15:25) [9]
> А что происходит при изменении родителя для TTreeView? Тоже
> самое. Происходит копирование всех нодов (зачем - ХЗ. Так
> реализовано в винде)
у TreeView родитель не поменяется. он будет лежать на своей форме. А у формы уже будет родитель меняться. Для формы это же только перерисоваться и все.
← →
Сергей М. © (2006-09-05 14:38) [17]
> как данные из одного TreeView попадут в другой?
А на что параметры в бродкасте, как думаешь ?
← →
StriderMan © (2006-09-05 14:56) [18]
> Сергей М. © (05.09.06 14:38) [17]
ссылки на данные? так все равно возвращаемся к той же самой задаче КАК данные в TreeView обновить. не когда (по получению HWND_BROADCAST), а КАК? качать из некоего общего TreeView, или в параметр пихать ссылку на тот TreeView в котором обновилось, и чтобы другие из него качали.
← →
Сергей М. © (2006-09-06 08:18) [19]Ничего не надо "качать".
Первым параметром передается ссылка на TreeView, вторым - ссылка на TreeNode (созданный/измененный/удаленный)
Страницы: 1 вся ветка
Текущий архив: 2006.10.15;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.082 c