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

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

Назначение Parent у TFrame [D7]


Ega23 ©   (2007-10-24 11:33:00) 

Ситуация следующая:
Есть самописный компонент TDBTreeView, наследник TCustomTreeView.
Проблема заключается в том, что когда он лежит на фрейме, а фрейму ещё пока не задан парент, то после задания фрейму парента я не вижу данных.
В случае одного фрейма я обходился следующим образом:


procedure TLogicalTreeViewFrame.SetParent(parent: TWinControl);
begin
if Assigned(parent) then
 begin
   inherited;
   if Assigned(FDataSource) then
     dbtvLogObjects.DataSource := FDataSource;
 end
else
 begin
   if assigned(dbtvLogObjects) then
     dbtvLogObjects.DataSource := nil;
   inherited;
 end;
end;


Здесь dbtvLogObjects : TDBTreeView

В данной ситуации всё работает нормально.
Проблема проявляется тогда, когда данный фрейм УЖЕ лежит на другом фрейме, которому ещё не задан парент.

Так вот, вопрос, собственно, состоит в следующем: каким образом на уровне TWinControl (или на крайняк на уровне TFrame) можно перехватить тот момент, когда он должен начать отрисовываться?

SetVisible как-то перекрывать?


Ega23   (2007-10-24 13:14:00) [1]

Ну вот смотри.
Есть некий фрейм. На фрейме, например, лежит только это дерево и какая-нибудь кнопка.
Я в какой-то момент времени фрейм создал (допустим, на этапе инициализации программы). Я ему подал нужный DataSource (означает, что дерево заполнилось. Кстати - действительно заполняется, отладчиком смотрел, всё корректно.)

Потом уже после всего этого, на главной форме какая-нибудб кнопка, по которой вызывается модальная форма. В OnCreate модальной формы стоит Frame.Parent : =Self; Frame.Align := alClient;
Так вот, не вижу я нарисованного дерева, хотя ноды там железно есть.
У дерева в конструкторе  уже после inherited Create жёстко прописано CreateWndRestores := False;


Reindeer Moss Eater   (2007-10-24 11:49:00) [2]

а задание датасорса когда?


Ega23   (2007-10-24 11:43:00) [3]


> Пока мне кажется, что инициализация дерева привязана к событию,
>  обработчик которого не вызвается на рантайме.


Инициализация дерева происходит в момент задания ему DataSource.


Reindeer Moss Eater   (2007-10-24 11:41:00) [4]

Пока мне кажется, что инициализация дерева привязана к событию, обработчик которого не вызвается на рантайме.


Ega23   (2007-10-24 11:40:00) [5]


> транслировать события с верхнего фрейма всем фреймам которые
> на нем.


Ну этот путь, в общем-то, понятен.
Вопрос несколько в другом: если я на фрейм вместо своего компонента кладу обычный TTreeView, до назначения фрейму парента добавляю в дерево несколько узлов, то после назначении фрейму парента я прекрасно вижу все узлы.
А вот у моего компонента - нет (хотя вся разница - в том, что я узлы добавляю по набору данных).

Вот может я где-то накололся?


Reindeer Moss Eater   (2007-10-24 11:35:00) [6]

транслировать события с верхнего фрейма всем фреймам которые на нем.


Наверх

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