![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Синхронизация компонентов [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]а формы могут быть видимы одновременно?