Главная страница
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.031 c
15-1192109643
hinst
2007-10-11 17:34
2007.11.18
Подскажите сайт


2-1193162827
MAXHo
2007-10-23 22:07
2007.11.18
В чем может быть проблема?


1-1188216598
временный Чайник
2007-08-27 16:09
2007.11.18
Как в Viste удалить файл в Program Files


15-1191926118
нормальный человек
2007-10-09 14:35
2007.11.18
как найти работу студенту 2 курс


2-1193231840
AlexanderMS
2007-10-24 17:17
2007.11.18
Тонкости в сравнении.