If Assigned(ToDestroy) then begin — КиберПедия 

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

If Assigned(ToDestroy) then begin

2017-06-02 238
If Assigned(ToDestroy) then begin 0.00 из 5.00 0 оценок
Заказать работу

SelectNext(ToDestroy,false,true);

ToDestroy.Free;

ToDestroy:=nil;

end;

Caption:=Format('Кнопок %d',[TMyButton.GetCount]);

end;

End.

Вариант решения получим таким же, как на рис. 35. Однако в данном варианте, нажимая неоднократно на клавишу BackSpace, можно удалить все кнопки, построенные на форме.

Все переменные типа класс (например, ToDestroy) по сути являются указателями, поэтому для проверки, существует ли тот или иной объект, применяется функция Assigned (обработчик Timer1Timer) которая проверяет, равна ли переменная значению “пустой указатель” (т.е. nil) или нет.

 

ТИПЫ ССЫЛКИ НА КЛАСС

 

Такой программный элемент, как тип обычной переменной, представляющий собой правила обращения с теми или иными переменными, существует только во время компиляции программы. Эти правила не могут измениться во время выполнения программы. Типы ссылки на класс, которые синтаксически объявляются как Class of TmyClass позволяют нарушить указанные правила. С помощью этих типов можно обращаться к объектным типам во время выполнения программы. Для некоторого заданного типа объектный тип – это значение, которое можно записать в переменную типа ссылки на класс. Во время выполнения программы в разных её участках переменной данного типа можно присваивать в качестве значения различные объектные типы и, таким образом, строить нужные объекты, вызывая тот или иной виртуальный конструктор.

 

СВОЙСТВА

 

Свойства представляют интерфейс с внутренними полями данных того или иного объекта. Внутренние поля обычно объявляются в разделе Private. Их имена, как правило, начинаются с буквы F, например поле FColor. Соответственно свойство, с помощью которого осуществляется доступ к заданному полю FColor, имеет имя Color. Свойства могут объявляться с различной степенью доступа. Если требуется, чтобы они отображались в окне инспектора объектов, их объявляют в разделе Published.

Свойства могут создаваться с помощью различных типов данных, а именно:

1) Simple – простые свойства;

2) Enumerated – перечисляемые;

3) Set – множества;

4) Object – объектного типа;

5) Array – индексированные свойства.

Разные типы свойств по-разному отображаются в инспекторе объектов и имеют свои собственные редакторы для изменения значений свойств. Далее рассмотрим синтаксис записи различных видов свойств.

 

СВОЙСТВА SIMPLE

 

Простые свойства включают числовые, символьные и строковые типы данных. Наиболее часто используются свойства типа integer и string. Например, свойства Width, Height имеют тип integer, свойство Caption имеет тип string. Объявим для демонстрации синтаксиса записи простых свойств следующий класс:

Type

TSimple=class(TCustomControl)

Private

FString: string;

Published

Property StringProp:string

read FString write FString;

end;

Как следует из этого примера, свойства имеют тип поля, в котором хранится значение данного свойства. Кроме того, для свойства необходимо указывать способ чтения информации из соответствующего поля и способ записи данных в поле. Если отсутствует или способ чтения или способ записи данных, то соответствующее свойство имеет доступ или только по чтению или только по записи.

 

СВОЙСТВА ENUMERATED

 

Свойстваenumerated определяются типом перечень и логическим типом Boolean. Обычно все возможные значения данного типа свойств некоторым способом помечаются, например, как в объявлениях ниже:

Type

TEnumProp=(epZero, epOne, epTwo, epThree);

TEnum=class(TCustomControl)

Private

FEnumProp: TEnumProp;

Published

Property EnumProp: TEnumProp

read FEnumProp write FEnumProp;

end;

 

СВОЙСТВА SET

 

Элементы свойства Set (множество) в инспекторе объектов заключаются в квадратные скобки. Для развёртывания элементов базового множества, включающего в себя все возможные варианты, имеется знак + (плюс), расположенный слева от наименования свойства. Включить или не включить тот или иной элемент из базового множества в рабочее множество, выбирается путём указания true или false. Рабочее множество определяет значение данного свойства. Рассмотрим пример объявления свойства Set. При этом используется тип TEnumProp, объявленный выше.

Type

TSetProp=set of TEnumProp

TSetClass=class(TCustomControl)

Private

FSetProp:TSetProp;

Published

Property SetProp:TsetProp

read FSetProp write FSetProp;

End;

СВОЙСТВА OBJECT

 

Свойства Object в инспекторе объектов помечаются или знаком + или кнопкой с многоточием (×××). Например свойство Font имеет объектный тип. Для того, чтобы привести пример объявления свойства объектного типа, необходимо предварительно сформировать объект какого-либо класса и выбрать предка для этого класса. На практике в большинстве случаев в качестве предка выбирается встроенный класс TPersistent. Объявим класс, который будет определять далее в примере тип свойства.

Type

TObjectDop=class(TPersistent)

Private

FMyInt:integer;

Public

Property MyProp:integer read FMyInt write FMyInt;

End;

В данном случае нужно решить одну проблему. Объявленный выше класс (TObjectDop) должен войти как составная часть в класс, который должен будет содержать свойство заданного объектного типа TObjectDop. Соответственно потребуется задавать этому свойству значение, а это означает, что потребуется объект типа TObjectDop, для которого необходимо обеспечить выделение памяти и освобождение памяти. Стандартных методов выделения и освобождения памяти в данном случае недостаточно. Для выделения памяти создадим конструктор Create, а для высвобождентя памяти – деструктор Destroy.

Type

TObjectProp=class(TCustomControl)

Private

FObjectProp: TObjectDop;

Public

Constructor Create(AOwner:TComponent);override;

Destructor Destroy;override;

Published


Поделиться с друзьями:

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.015 с.