Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.033 c
2-1159642613
ProgRAMmer Dimonych
2006-09-30 22:56
2006.10.15
Совместное использование процедур юнита и компонента


2-1159519479
wild_arg
2006-09-29 12:44
2006.10.15
IBEvent


2-1159173443
laronov
2006-09-25 12:37
2006.10.15
послать Ctrl+S в другое приложение


5-1139388585
Perfect
2006-02-08 11:49
2006.10.15
TPersisten массив свойств и вызов методов хозяина


3-1155737650
Neo Trinitron
2006-08-16 18:14
2006.10.15
Create temporary table