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

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

Добавить компонент в класс


Страницы:   1 2

oleg1963 ©   (2009-12-25 10:29:00) 

Здравствуйте уважаемые Мастера! Создал свой класс на основе компонента TBevel

type
 TBevel1 = class(TBevel)
 private
 protected
 public
   { Public declarations }
    ElemBevel : TBevel;
    constructor Create(AOwner:TComponent);override;
    destructor Destroy;override;
 end;

implementation

constructor TBevel1.Create(AOwner: TComponent);
var Visible : boolean;
begin
   inherited;
   ElemBevel:=TBevel.Create(AOwner);
end;

destructor TBevel1.Destroy;
begin
    ElemBevel.Free;
    inherited;
end;

Мне это нужно для создания массивов элементов, выводимых на экран, (тут был вопрос о "Пробежать опросом по компонентам ЭДИТ, из этой же серии).
Собственно вопрос: как добавить элемент (CheckBox,Button etc) в класс. Создать внутри конструктора TBevel ? Создать отдельным конструктором?
А как его вызывать ? Bevel.CheckBox.Top:=10 ? Подскажите как это делается. Почесывание затылка и умный вид лица не помогают :(


oleg1963   (2009-12-25 14:36:00) [1]

> А теперь ручками поставь чекбоксу Left:=455
У меня на значении 600 только начинает закатываться за границу, но думаю что и при значении 650 тоже будет видно. Больше нет. Попробуй сам. Не получается ли у нас с тобой "А где вы были? Я у аптеки" :))


oldman   (2009-12-25 14:26:00) [2]


> oleg1963 ©   (25.12.09 14:22) [19]
> > Его просто не видно, блин... Он за границами Bevel[1]
>
> Не поленился, ручками кинул бевел на форму с Left = 145,
>  сделал ширину 300, влепил чекбокс и у меня еще место остается
> для пары батонов стандартного размера. Так что "за границами"
> не катит.


А теперь ручками поставь чекбоксу Left:=455


Palladin   (2009-12-25 14:26:00) [3]


>  Bevel[i].ChBox.Create(Owner);

Конструктор метод класса, он возвращает ссылку на созданный объект, которая в свою очередь присваивается идентификатору.


oleg1963   (2009-12-25 14:22:00) [4]

> Его просто не видно, блин... Он за границами Bevel[1]

Не поленился, ручками кинул бевел на форму с Left = 145, сделал ширину 300, влепил чекбокс и у меня еще место остается для пары батонов стандартного размера. Так что "за границами" не катит. Кста 300 пунктов это примерно сантиметров 10.Немного. Просто звучит громко.

Если работает      Bevel[i]:=TBevel1.Create(Owner);
                         Bevel[i].Parent:=(Panel5);

то почему не работает      Bevel[i].ChBox.Create(Owner);
                                      Bevel[i].ChBox.Parent:=(Panel5); ?


Amoeba   (2009-12-25 13:19:00) [5]

>Но не визиблируется почему

TBevel не является оконным контролом, и посему его нельзя присвоить св-ву Parent другого контрола (что необходимо, чтобы он отрисовывался) - в данном случае дочернему CheckBox.


MBo   (2009-12-25 13:02:00) [6]

>Но не визиблируется почему
см [8]


oldman   (2009-12-25 12:28:00) [7]


>      Bevel[i].Left:=Left;
>      Bevel[i].ChBox.Left:=Left+Bevel[i].Width+10;


Для i=1
 Bevel[1].Left = 145
 Bevel[1].Width = 300 (145-445 занимает Bevel[1])
 Bevel[1].ChBox.Left = 455

Его просто не видно, блин... Он за границами Bevel[1]


Медвежонок Пятачок   (2009-12-25 12:23:00) [8]

Но не визиблируется почему.То...

потому что ответы не читаешь


oleg1963   (2009-12-25 12:16:00) [9]

> В конструкторе вызов свойств чекбокса работает, но извне - нет.

Пардон, уже работает :)
Вот код


Left:=145;
 Top:=15;
 for i:=1 to 6 do
   begin
     Bevel[i]:=TBevel1.Create(Owner);
     Bevel[i].Parent:=(Panel5);
     Bevel[i].ChBox.Create(Owner);
     Bevel[i].Left:=Left;
     Bevel[i].Top:=Top;
     Bevel[i].Width:=300;
     Bevel[i].Height:=20;
     Bevel[i].Visible:=True;
     Bevel[i].Style:=bsRaised;

     Bevel[i].ChBox.Left:=Left+Bevel[i].Width+10;
     Bevel[i].ChBox.Top:=Top;
     Bevel[i].ChBox.Visible:=True;
     Top:=Top+30;
   end;

Но не визиблируется почему.То...


oldman   (2009-12-25 12:04:00) [10]


> В конструкторе вызов свойств чекбокса работает, но извне
> - нет.


Покажи хоть, как вызываешь...


Медвежонок Пятачок   (2009-12-25 12:01:00) [11]

подсказки кода перестают работать при наличии ошибок в синтаксисе.


oleg1963   (2009-12-25 11:55:00) [12]

Пустотааа..... В конструкторе вызов свойств чекбокса работает, но извне - нет. Т.е. я вижу его как поле типа чекбокс и все. Опять же метод inherited.
Насколько я понимаю он выполняет операции создания базового класса, а потом уже я создаю свой. Как его увязать с двумя разными компонентами?


Andy BitOff   (2009-12-25 11:40:00) [13]

А если нажать точку после ChkBox?


oleg1963   (2009-12-25 11:37:00) [14]

> А не TCheckBox.Create(AOwner); ?

Пардон, ошибся при написании письма.

Все равно не понятно.
Когда в теле программы при нажатии точки после имени переменной Bevel вываливается список свойств и методов объекта, в том числе и свойство ChkBox типа ТСheckBox. И все. А свойства чекбокса недоступны. Как это сделать?


Медвежонок Пятачок   (2009-12-25 11:18:00) [15]

По любому ChkBox  на форме не видатью

после этого работать со свойствами созданного экземпляра

например со свойством парент


oldman   (2009-12-25 11:16:00) [16]


> ChBox:=TBevel.Create(AOwner);


А не TCheckBox.Create(AOwner); ?


oleg1963   (2009-12-25 11:14:00) [17]

Класс я дописал так

TBevel1 = class(TBevel)
private
protected
public
   ElemBevel : TBevel;
   ChBox : TCheckBox;
   constructor Create(AOwner:TComponent);override;
   destructor Destroy;override;
end;

constructor TBevel1.Create(AOwner: TComponent);
begin
   inherited;
   ElemBevel:=TBevel.Create(AOwner);
   ChBox:=TBevel.Create(AOwner);
end;


Создается без ошибки. Но, во-первых как быть с наследованием inhthbnted
для разных компонентов, а во-вторых как добраться до свойств ChkBox.
По любому ChkBox  на форме не видатью


Медвежонок Пятачок   (2009-12-25 10:58:00) [18]

какой вопрос добавления?
вопрос создания наверное?
так это тебе конструктор вызвать нужно.
после этого работать со свойствами созданного экземпляра


oleg1963   (2009-12-25 10:56:00) [19]

Например TPanel подойдет? Я согласен, что лепить елку из компонентов нанизанных на компонент есть извращение с тяжкими последствиями, вплоть до лоботомии. Это я исправлю. Однако вопрос добавления компонента остается.


Медвежонок Пятачок   (2009-12-25 10:50:00) [20]

любой оконный посоветую.


Страницы:   1 2

Наверх

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