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