Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Вниз

Синхронизация компонентов   Найти похожие ветки 

 
Кабанчик   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.039 c
15-1159002956
Furyz
2006-09-23 13:15
2006.10.15
*.bat компиляция


1-1157281395
Проггер из библиотеки
2006-09-03 15:03
2006.10.15
Что-то вроде TMemo


15-1158740215
Ega23
2006-09-20 12:16
2006.10.15
Зачем по уентральным каналам крутят рекламу ГазПрома?


2-1158926772
did_elena
2006-09-22 16:06
2006.10.15
вычисление даты


2-1159615368
AriCK
2006-09-30 15:22
2006.10.15
2 listbox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский