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

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

создание визуальных компонентов [D6, WinME]


Vitalik ©   (2002-10-17 22:06:00) 

привет!
Я создаю некий компонент на основе TPanel
Мне нужно, чтобы когда я кладу мой компонент на форму, то у него автоматически устанавливались некоторые свойства. Я пытаюсь делать вот так:

TMyNewComponent = class (TPanel)

****

constructor TMyNewComponent.Create(AOwner: TComponent);
begin
Inherited Create(AOwner);
BevelOuter := bvLowered;
Caption:= "" ;
end;

Я делаю это так, потому что так делается в TCustomPanel. Там, в частности, устанавливается значение BevelOuter:=bvRaised; А мне надо, чтобы было bvLowered. Так вот как мне всё это делать?
спасибо!


Юрий Зотов   (2002-10-18 09:08:00) [1]

Похоже, что и с невизуальными тоже...
:о)

Конструктор вызывается всегда, но какие же точки останова могут быть в design-time?

Забудьте об этом. В design-time зарегистрированный в Delphi компонент является частью самой Delphi. Встроенный в Delphi дебаггер - тоже часть самой Delphi. Вы хотите, чтобы программа отлаживала сама себя?

Отладка компонента в design-time производится головой и ручками. В особо сложных случаях используется внешний дебаггер, под которым запускается вся Delphi.


Vitalik   (2002-10-18 06:27:00) [2]

Ой, прошу прощения!
На последний мой вопрос я уже знаю ответ!


Vitalik   (2002-10-18 06:13:00) [3]

А ещё такой вопрос.
У компонентов созданных в design-time конструктор вообще вызывается?
Вот сколько я точки останова в этот мой конструктор не ставлю, а никогда на них остановка не происходит. У меня в конструкторе память выделяется. Получается, что компоненты, которые создаются в design-time просто неработоспособны. Я вообще в первый раз с визуальными компонентами работаю, так вот не подскажете ли как мне мне заставить конструктор работать?


Kibitzer   (2002-10-17 23:44:00) [4]


> Юрий Зотов © (17.10.02 23:18)


> Флаг csSetCaption имеет совсем другой смысл. Менять свойство
> Caption он нисколько не мешает.

А ты попробуй создать этот компонент, положить его на форму в DesigTime и посмотри на Caption. Зачем же тогда Caption := "";. Я не просто так написал второе сообщение. Первое я написал до того как создал компонент, а второе после :-)))


Юрий Зотов   (2002-10-17 23:18:00) [5]

> Kibitzer © (17.10.02 23:02)

Не согласен.
:о)

Флаг csSetCaption имеет совсем другой смысл. Менять свойство Caption он нисколько не мешает.

csSetCaption: The control’s Caption should match the Name property if it has not been explicitly set to something else .


Kibitzer   (2002-10-17 23:02:00) [6]


> Юрий Зотов © (17.10.02 22:47)


> Но будет совсем грамотно, если еще и переопределить дефолтные
> значения тех свойств, которые Вы меняете в конструкторе
> на те, которые Вы в нем фактически выставляете
Согласен.

И ещё, я забыл, что так просто свойство Captionне поменять. Нужно делать так:

constructorTMyNewComponent.Create(AOwner: TComponent);
begin
inherited;
BevelOuter := bvLowered;
Caption := "";
ControlStyle:=ControlStyle - [csSetCaption];
end;


Юрий Зотов   (2002-10-17 22:47:00) [7]

Так и делать, все правильно Вы делаете. Но будет совсем грамотно, если еще и переопределить дефолтные значения тех свойств, которые Вы меняете в конструкторе на те, которые Вы в нем фактически выставляете (конечно, только для тех свойств, которые вообще могут иметь дефолтное значение). См. исходники TCustomPanel - там прописаны стандартные дефолтные значения.

type
TMyNewComponent = class(TPanel)
public
constructor Create(AOwner: TComponent); override;
published
property BevelOuter default bvLowered;
end;

constructor TMyNewComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
BevelOuter := bvLowered;
Caption := "";
...
end;


Kibitzer   (2002-10-17 22:43:00) [8]

Всё правильно ты делаешь.


Наверх

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