Форум: "Начинающим";
Текущий архив: 2010.02.28;
Скачать: [xml.tar.bz2];
ВнизДобавить компонент в класс Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.004 c