Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
Вниз
создание визуальных компонентов Найти похожие ветки
← →
Vitalik (2002-10-17 22:06) [0]привет!
Я создаю некий компонент на основе TPanel
Мне нужно, чтобы когда я кладу мой компонент на форму, то у него автоматически устанавливались некоторые свойства. Я пытаюсь делать вот так:
TMyNewComponent = class (TPanel)
****
constructor TMyNewComponent.Create(AOwner: TComponent);
begin
Inherited Create(AOwner);
BevelOuter := bvLowered;
Caption:= "" ;
end;
Я делаю это так, потому что так делается в TCustomPanel. Там, в частности, устанавливается значение BevelOuter:=bvRaised; А мне надо, чтобы было bvLowered. Так вот как мне всё это делать?
спасибо!
← →
Kibitzer (2002-10-17 22:43) [1]Всё правильно ты делаешь.
← →
Юрий Зотов (2002-10-17 22:47) [2]Так и делать, все правильно Вы делаете. Но будет совсем грамотно, если еще и переопределить дефолтные значения тех свойств, которые Вы меняете в конструкторе на те, которые Вы в нем фактически выставляете (конечно, только для тех свойств, которые вообще могут иметь дефолтное значение). См. исходники 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 23:02) [3]
> Юрий Зотов © (17.10.02 22:47)
> Но будет совсем грамотно, если еще и переопределить дефолтные
> значения тех свойств, которые Вы меняете в конструкторе
> на те, которые Вы в нем фактически выставляете
Согласен.
И ещё, я забыл, что так просто свойствоCaption
не поменять. Нужно делать так:
constructor TMyNewComponent.Create(AOwner: TComponent);
begin
inherited;
BevelOuter := bvLowered;
Caption := "";
ControlStyle:=ControlStyle - [csSetCaption];
end;
← →
Юрий Зотов (2002-10-17 23:18) [4]> 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:44) [5]
> Юрий Зотов © (17.10.02 23:18)
> Флаг csSetCaption имеет совсем другой смысл. Менять свойство
> Caption он нисколько не мешает.
А ты попробуй создать этот компонент, положить его на форму в DesigTime и посмотри на Caption. Зачем же тогдаCaption := "";
. Я не просто так написал второе сообщение. Первое я написал до того как создал компонент, а второе после :-)))
← →
Vitalik (2002-10-18 06:13) [6]А ещё такой вопрос.
У компонентов созданных в design-time конструктор вообще вызывается?
Вот сколько я точки останова в этот мой конструктор не ставлю, а никогда на них остановка не происходит. У меня в конструкторе память выделяется. Получается, что компоненты, которые создаются в design-time просто неработоспособны. Я вообще в первый раз с визуальными компонентами работаю, так вот не подскажете ли как мне мне заставить конструктор работать?
← →
Vitalik (2002-10-18 06:27) [7]Ой, прошу прощения!
На последний мой вопрос я уже знаю ответ!
← →
Юрий Зотов (2002-10-18 09:08) [8]Похоже, что и с невизуальными тоже...
:о)
Конструктор вызывается всегда, но какие же точки останова могут быть в design-time?
Забудьте об этом. В design-time зарегистрированный в Delphi компонент является частью самой Delphi. Встроенный в Delphi дебаггер - тоже часть самой Delphi. Вы хотите, чтобы программа отлаживала сама себя?
Отладка компонента в design-time производится головой и ручками. В особо сложных случаях используется внешний дебаггер, под которым запускается вся Delphi.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
Память: 0.78 MB
Время: 2.931 c