![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как через родителя обратится к компоненту. [D6, XP]
Andrey K © (2010-08-14 00:38:00)На главной форме положен компонент pcProg: TPageControl;
Динамически добавляю страницы и на каждую кладу фрейм frUn:
with pcProg do
begin
with TTabSheet.Create(Self) do
begin
PageControl := pcProg;
end;
frUn := TfrUn.Create(Self);
frUn.Parent := Pages[PageCount-1]; //Назначаю родителя
На фрейме frUn присутствуют компоненты. Как из главного модуля обратится к свойствам компонента на фрейме, конкретной странице pcProg?
Мне предложили конструкцию: TMemo(TFrame(fmTurn.pcProg.Pages[x].Components[0]).Components[0])
Но до свойств TMemo так не добраться. По всей видимости, надо как-то через Name.
Andrey K (2010-08-16 22:51:00) [1]Спасибо всем, за помощь. Прошел вариант, который предложил sniknik. С Tag покопался, но до ума не довёл, не очень удобно при последующем использовании.
Я блудил из-за не понимания процесса :(.
Вызывая TTabSheet.Create(Self). PageControl:=, в этот момент мы создаём страницу и сразу назначаем родителя? На русском описания не нашел, а с английским у меня не очень.
И ещё вопросик, почему система при введении точки автоматически не предлагает варианты TfrUn(pcProg.Pages[i].Controls[0]).reProg.Font.Assign(FoDi.Font); начиная уже после скобки.
sniknik (2010-08-14 11:15:00) [2]> Мне предложили конструкцию:
в теории верно (по "ссылкам" можно добраться до нужного), но на практике нужно учитывать свою реализацию. в смысле не копировать код бездумно
вот так будет работать
procedure TForm1.Button1Click(Sender: TObject);
begin
TTabSheet.Create(self).PageControl:= PageControl1;
with PageControl1 do
TFrame1.Create(self).Parent:= Pages[PageCount-1];
TFrame1(PageControl1.ActivePage.Controls[0]).Memo1.Text:= 'test'
end;
_Юрий (2010-08-14 10:27:00) [3]можно так:
Ссылку на фрейм сохраняем в поле Tag страницы:
with TTabSheet.Create(Self) do
begin
PageControl := pcProg;
frUn := TfrUn.Create(Self);
Tag:=Integer(frUn);//в данном случае используется Tag от TTabSheet
end;
Доступ - через приведение типов
var
frUn : TfrUn;
begin
frUn :=TfrUn(fmTurn.pcProg.Pages[x].tag);
frUn.Memo1.Text:='blablabla';
Германн (2010-08-14 01:35:00) [4]
> Мне предложили конструкцию: TMemo(TFrame(fmTurn.pcProg.Pages[x].
> Components[0]).Components[0])
Кто предложил, где предложил, как предложил?
> По всей видимости, надо как-то через Name
Только не через Name. Это извращение. Свойство Name имеет смысл только в design-time.