Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.18;
Скачать: CL | DM;

Вниз

Назначение Parent у TFrame   Найти похожие ветки 

 
Ega23 ©   (2007-10-24 11:33) [0]

Ситуация следующая:
Есть самописный компонент 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 как-то перекрывать?


 
Reindeer Moss Eater ©   (2007-10-24 11:35) [1]

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


 
Ega23 ©   (2007-10-24 11:40) [2]


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


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

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


 
Reindeer Moss Eater ©   (2007-10-24 11:41) [3]

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


 
Ega23 ©   (2007-10-24 11:43) [4]


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


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


 
Reindeer Moss Eater ©   (2007-10-24 11:49) [5]

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


 
Ega23 ©   (2007-10-24 13:14) [6]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.11.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
15-1192004546
andreoman
2007-10-10 12:22
2007.11.18
прога для контроля инетовского трафика


2-1193663074
Сергей Ю
2007-10-29 16:04
2007.11.18
Помогите составить запрос с условием по времени


15-1192084652
Azize
2007-10-11 10:37
2007.11.18
Microsoft vs Borland


15-1192369598
sdubaruhnul
2007-10-14 17:46
2007.11.18
Электроника, с чего начать?


6-1174478886
Russ
2007-03-21 15:08
2007.11.18
"No command handler found"