![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Добавить компонент в класс
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]любой оконный посоветую.