Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как через родителя обратится к компоненту. [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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо