Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Как обратиться к объекту


Автор: SanLLIer 8.2.2011, 20:05
На форме есть PageControl. По ходу динамически создаю в нем табы.
Код

      tab:=TTabSheet.Create(Self);
      tab.Caption:='...';  
      tab.PageControl:=mainForm.PageControl; 

Потом динамически создаю  на этом табе кнопки и прочие контролы. 
Код

   with TImage.Create(tab) do
      begin
        Parent:=TabSheet;
        Height:=50;
        Width:=50;
        Stretch:=false;
        Top:=1;
        Left:=tab.Width-100; 
        Name:='img'+index;     
      end;

Собственно вопрос в том как мне теперь обратиться к этим созданным компонентам. В частности к Image`у?
Делаю так:
Код

  TImage(PageControl.ActivePage.FindComponent('img'+index)).Left:=PageControl.ActivePage.Width-200;


Но программы падает с access violation. Где туплю? Как исправить?

Автор: CodeMonkey 8.2.2011, 20:14
Цитата(SanLLIer @  8.2.2011,  21:05 Найти цитируемый пост)
Собственно вопрос в том как мне теперь обратиться к этим созданным компонентам. В частности к Image`у?


Не использовать with.

Код
FImage := TImage.Create(tab);


Как несложно догадаться, "обратиться к этим созданным компонентам. В частности к Image`у" можно путём обращения к переменной FImage.

Цитата(SanLLIer @  8.2.2011,  21:05 Найти цитируемый пост)
 Где туплю? Как исправить? 


А на ошибки проверять кто будет? Если FindComponent возвращает nil?

Впрочем, это значения не имеет, ибо тебе это не надо. См. выше.

Автор: SanLLIer 8.2.2011, 20:28
просто я не знаю сколько вкладок будет использоваться в работе программы... поэтому думал обойтись без использования переменных. тогда придется создавать массив с объектами.

Автор: CodeMonkey 8.2.2011, 21:46
Ты можешь создать наследника TTabSheet, добавить в него поле для Image.

TabSheet ты получишь у PageControl. Преобразованием типа получишь своего наследника. Ну а у него есть поле Image.

Красиво и без массивов.

P.S. И я бы ввёл наследника для PageControl, так чтобы не нужно было делать преобразование. Наследник для PageControl вводится http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1367.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)