![]() |
![]() ![]() ![]() ![]() |
|
Пользовательские вариантыDelphi , Синтаксис , Типы и ПеременныеСтандартный вариант может хранить только одно из значений, указанных в табл. 10.2. В версии Delphi 6 появились так называемые пользовательские варианты, которые фактически снимают ограничения на характер значений варианта. Чтобы познакомиться со свойствами новых вариантов, воспользуемся одним из них - вариантом, способным хранить комплексные числа, преобразовывать их в другие типы и осуществлять над ними нужные действия. Как мы увидим дальше, создание пользовательского варианта может быть весьма трудоемким делом - все зависит от сложности хранимых в нем данных. Мы воспользуемся вариантом, созданным разработчиками Delphi и включенным в модуль VarCmplx. Создайте такой обработчик bbRunClick:
uses VarCmplx; // Эта ссылка обязательна!
procedure TfmExample.bbRunClick(Sender: TObject);
var
VI, V2: Variants - begin
// Создаем два случайных комплексных числа:
VI := VarComplexCreate(Trunc(Random * 1000) / 100,
Trunc(Random * 1000) / 100);
V2 := VarComplexCreate(Trunc(Random * 1000) / 100,
Trunc(Random * 1000) / 100);
with mmOutput.Lines do
begin
// Пустая строка-разделитель
Add(' ');
Add('1-e число: '#09 + V1);
Add('2-е число: '#9 + V2);
Add('Сложение'#9 + (V1 + V2));
Add('Вычитание'#9 + (V1 - V2));
Add('Умножение'#09 + (VI * V2));
Add('Деление'#9#9 + (V1 / V2))
end
end;
Небольшой комментарий: сложная конструкция Trunc (Random*1000) /100 понадобилась только для того, чтобы реальные и мнимые части комплексных чисел содержали по три значащих цифры. Как видим, новый вариант легко справляется с поддержкой комплексных чисел: функция VarComplexCreate создает вариант, содержащий комплексное число, а дальнейшее поведение варианта -стандартное (он поддерживает математические операции и преобразование к строковому типу). Однако эта легкость обманчива: исходный текст модуля VarCmplx, который, собственно, и придал варианту дополнительные свойства (по умолчанию располагается в файле Source\Rtl\Common\VarCmplx.pas), содержит более 30000 байт.. Структура записи TVarData. Два первых байта в этой записи (поле VType) хранят признак значения варианта, остальные 14 могут использоваться для размещения данных. Создание пользовательского варианта проходит в три этапа.
В результате перечисленных шагов вы получаете полноценный вариант, обогащенный новыми свойствами: он может хранить не только те значения, которые перечислены в табл. 10.2, но и любые другие, в том числе свойства и методы! (В этом последнем случае наследником для исполняемого класса нового варианта вместо TCustomVariantType является TInvokeableVariantType или TPublishableVariantType.) В статье описывается создание пользовательских вариантов в Delphi, которые позволяют хранить не только стандартные типы данных, но и любые другие, включая свойства и методы. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш :: Главная :: Типы и Переменные ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||