Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1260967450
dr_creigan
2009-12-16 15:44
2010.02.28
debug под Vista


15-1261161523
Washington
2009-12-18 21:38
2010.02.28
Алгоритмы работы с видео


2-1261655795
Делфиец
2009-12-24 14:56
2010.02.28
Помогите понять природу ошибки запроса SQL


2-1261721535
Б
2009-12-25 09:12
2010.02.28
Получить mouse-wheel.


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский