Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.28;
Скачать: CL | DM;

Вниз

Добавить компонент в класс   Найти похожие ветки 

 
oleg1963 ©   (2009-12-25 10:29) [0]

Здравствуйте уважаемые Мастера! Создал свой класс на основе компонента 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 ? Подскажите как это делается. Почесывание затылка и умный вид лица не помогают :(


 
Медвежонок Пятачок ©   (2009-12-25 10:34) [1]

как добавить элемент (CheckBox,Button etc) в класс

контейнер для этого у тебя неподходящий.


 
oleg1963 ©   (2009-12-25 10:43) [2]

А какой посоветуете? По сути, мне нужна структура наподобие записи
<Идентификатор>.<Компонент>.<Свойство>


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

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


 
oleg1963 ©   (2009-12-25 10:56) [4]

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


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

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


 
oleg1963 ©   (2009-12-25 11:14) [6]

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

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  на форме не видатью


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


> ChBox:=TBevel.Create(AOwner);


А не TCheckBox.Create(AOwner); ?


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

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

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

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


 
oleg1963 ©   (2009-12-25 11:37) [9]

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

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

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


 
Andy BitOff ©   (2009-12-25 11:40) [10]

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


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

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


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

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


 
oldman ©   (2009-12-25 12:04) [13]


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


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


 
oleg1963 ©   (2009-12-25 12:16) [14]

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

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


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;

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


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

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

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


 
oldman ©   (2009-12-25 12:28) [16]


>      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]


 
MBo ©   (2009-12-25 13:02) [17]

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


 
Amoeba ©   (2009-12-25 13:19) [18]

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

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


 
oleg1963 ©   (2009-12-25 14:22) [19]

> Его просто не видно, блин... Он за границами 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); ?


 
Palladin ©   (2009-12-25 14:26) [20]


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

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


 
oldman ©   (2009-12-25 14:26) [21]


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


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


 
oleg1963 ©   (2009-12-25 14:36) [22]

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



Страницы: 1 вся ветка

Текущий архив: 2010.02.28;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
15-1261171198
TUser
2009-12-19 00:19
2010.02.28
Искривление времени?


2-1261750036
Андрей Пл
2009-12-25 17:07
2010.02.28
как программно прервать процесс до наступления опред. события?


13-1124615958
Darklight
2005-08-21 13:19
2010.02.28
Экземпляр класса ещё не создан как проверить его на null referenc


2-1261744929
Андрей Пл
2009-12-25 15:42
2010.02.28
Вопрос по потокам, максимально грузит процессор!


11-1188293775
Bast
2007-08-28 13:36
2010.02.28
http