Текущий архив: 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