Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Синхронизация компонентов [D7, WinXP]


Кабанчик ©   (2006-09-04 14:47:00) 

Допустим существует два компонента TTreeView, которые находяться на разных формах, причём одна из форм может быть инициализирована а другая нет.  Оба компонента TTreeView оттображают одну и туже информацию и содержание их может модифицироваться. Необходимо что все изменения в одном TTreeView тут же фиксировались в другои TTreeView. Как это наиболее грамотно релизовать ?


Сергей М.   (2006-09-06 08:18:00) [1]

Ничего не надо "качать".
Первым параметром передается ссылка на TreeView, вторым - ссылка на TreeNode (созданный/измененный/удаленный)


StriderMan   (2006-09-05 14:56:00) [2]


> Сергей М. ©   (05.09.06 14:38) [17]

ссылки на данные? так все равно возвращаемся к той же самой задаче КАК данные в TreeView обновить. не когда(по получению HWND_BROADCAST), а КАК? качать из некоего общего TreeView, или в параметр пихать ссылку на тот TreeView в котором обновилось, и чтобы другие из него качали.


Сергей М.   (2006-09-05 14:38:00) [3]


> как данные из одного TreeView попадут в другой?


А на что параметры в бродкасте, как думаешь ?


StriderMan   (2006-09-05 12:09:00) [4]


> Loginov Dmitry ©   (04.09.06 18:33) [15]
> > StriderMan ©   (04.09.06 15:25) [9]
> А что происходит при изменении родителя для TTreeView? Тоже
> самое. Происходит копирование всех нодов (зачем - ХЗ. Так
> реализовано в винде)

у TreeView родитель не поменяется. он будет лежать на своей форме. А у формы уже будет родитель меняться. Для формы это же только перерисоваться и все.


Loginov Dmitry   (2006-09-04 18:33:00) [5]

> StriderMan ©   (04.09.06 15:25) [9]
>
> что спорить, заглянем в VCL:


А что происходит при изменении родителя для TTreeView? Тоже самое. Происходит копирование всех нодов (зачем - ХЗ. Так реализовано в винде). Поэтому от изменения Parent'a выигрыша в скорости нету.


StriderMan   (2006-09-04 17:30:00) [6]


> Сергей М. ©   (04.09.06 16:08) [13]

а как данные из одного TreeView попадут в другой? Новые узлы например, объекты связанные... Я че-то не догоняю.


Сергей М.   (2006-09-04 16:08:00) [7]

SendMessage(HWND_BROADCAST, .. параметры ..)


isasa   (2006-09-04 16:04:00) [8]

А положить один компонентв один фрейми грузить в нужную форму?


StriderMan   (2006-09-04 15:51:00) [9]


> Сергей М. ©   (04.09.06 15:33) [10]
> Бродкастом сообщений об изменении дерева в контексте приложения.

а подробнее можно?


Сергей М.   (2006-09-04 15:33:00) [10]


> Как это наиболее грамотно релизовать ?


Бродкастом сообщений об изменении дерева в контексте приложения.


StriderMan   (2006-09-04 15:25:00) [11]


> 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;


Elen   (2006-09-04 15:20:00) [12]


> но я бы предпочел свой способ

Respect самостоятельным !!!


Jack128_from_Tuapse   (2006-09-04 15:18:00) [13]


> если большой Tree - быстрее будет работать.

не думаю.  Примерно тоже самое по скорости должно быть..


StriderMan   (2006-09-04 15:15:00) [14]


> Elen ©   (04.09.06 15:06) [5]

Да, пардон, это будет работать. Для этого специально все предусмотрено (ComCtrls.pas):

procedure TCustomTreeView.SetTreeNodes(Value: TTreeNodes);
begin
 Items.Assign(Value);
end;


но я бы предпочел свой способ. если большой Tree - быстрее будет работать.


Elen   (2006-09-04 15:06:00) [15]


> StriderMan

У меня работает.


StriderMan   (2006-09-04 15:02:00) [16]


> Elen ©   (04.09.06 14:58) [3]

я думаю это не будет работать. даже не скомпилится.
если уж по такому пути идти, тогда Assign

предлагаю такой вариант:

TreeView кладется на отдельную форму (назовем frmTree). При отображении форм Form1 и Form2 в обработчике FormShow делать что-то типа frmTree.Parent := Form1 (или Form2 соответственно). При необходимости можно класть на панельку.


Elen   (2006-09-04 14:58:00) [17]

ИМХО Form2.treeView.items:=Form1.treeView.items


Кабанчик   (2006-09-04 14:57:00) [18]

Нет формы не могут быть видны одновременно


StriderMan   (2006-09-04 14:51:00) [19]

а формы могут быть видимы одновременно?


Наверх

Титульная страница Поиск, карта сайта Написать письмо