реферат Простые операторы. Характеристика форм.docx. Лр операторы и выражения Delphi
Скачать 1.3 Mb.
|
ЛР4. Опорные классы VCLЗадача этой лабораторной работы — дать студенту общее представление о концепции построения библиотеки и о ключевых классах VCL. В результате вы станете владеть методологией, которая упростит изучение любого класса VCL, и позволит на профессиональном уровне применять компоненты Delphi в своих проектах. На рис. 4.1 представлен фрагмент иерархии наследования классов Delphi. Здесь вы обнаружите наиболее важные классы VCL. Почему поставлен акцент на слово "важные"? Потому, что именно эти классы определяют основные родовые черты своих многочисленных потомков. Изучив опорные классы VCL, мы получим представление о ключевых особенностях всех классов библиотеки. Класс TObject К задачам, решаемым классом TObject, в первую очередь стоит отнести: создание, поддержку и уничтожение объекта; распределение, инициализацию и освобождение памяти, необходимой для этого объекта; возврат всей информации об экземпляре класса, в том числе данных RTTI об опубликованных свойствах и методах объекта; поддержку взаимодействия объекта с внешней средой с помощью сообщений и интерфейсов. Наиболее важными методами для любого из классов VCL считаются конструктор и деструктор — они управляют существованием объекта. constructor Create; //создание объекта destructor Destroy; //разрушение объекта Пока мы видим наиболее простое объявление конструктора и деструктора, в ряде более поздних классов методы усложнятся и дополнятся параметрами. В составе класса TObject имеется ряд полнофункциональных обычных методов и методовкласса (class function), позволяющих получить подробную метаинформацию о классе. Ключевые методы TObject представлены в табл. 4.1. Таблица4.1.Получениесведенийоклассе
... ... ... ... ... Выбрав пункт меню File | New | VCL Forms Application, создайте новое приложение на основе формы. Подключите к строке uses проекта модуль StdCtrls (в нем расположен код стандартных элементов управления). В перечне событий формы Form1 (на вкладке Events Инспектора объектов) находим событие OnShow. Двойной щелчок левой кнопкой мыши в строке напротив названия события заставит Delphi создать код обработчика события, вызываемого в момент показа формы на экране. Вам осталось лишь повторить несколько строк кода, приведенных в листинге 4.1. Листинг 4.1. Демонстрация возможностей конструктора uses ..., StdCtrls; ... procedure TForm1.FormShow(Sender: TObject); var Btn:TButton; //переменная класса кнопки TButton begin Btn:=TButton.Create(Form1); //вызов конструктора класса TButton Btn.Parent:=Form1; //размещаем кнопку на форме end; После запуска приложения в левом верхнем углу формы появится кнопка. Она возникла не из воздуха, это следствие вызова конструктора Create() для экземпляра класса TButton. Класс TPersistent Одну из наиболее значимых ветвей классов в древе VCL начинает ближайший сподвижник TObject — класс TPersistent. Основное предназначение класса — научить своих потомков работать с памятью, что позволит им загружать данные из области в памяти и выгружать данные в область. Именно благодаря TPersistent компоненты и форма проекта приобрели возможность сохранять свое описание в специальный файл с расширением dfm или xfm. Как и в случае с TObject, основу рассматриваемого класса составляют только методы. Среди них наибольшего внимания заслуживают виртуальные методы присвоения данных: procedure Assign(Source: TPersistent); virtual; procedure AssignTo(Dest: TPersistent); virtual; Перечисленные процедуры позволяют разделить одну и ту же область памяти между несколькими объектами — потомками TPersistent. Метод Assign() позволяет одному объекту подключиться к ресурсу другого (листинг 4.2), метод AssignTo() — передать ресурс от одного компонента к другому. Листинг 4.2. Разделение ресурса между двумя компонентами procedure TForm1.Button1Click(Sender: TObject); begin Image2.Picture.Assign(Image1.Picture); end; Основа компонента, класс TComponent Обсудим вклад TComponent в библиотеку VCL. Во-первых, от него берут начало все компоненты VCL, которые вы найдете на палитре компонентов Delphi. Во-вторых, в логику класса заложено понятие "частной собственности". Другими словами, в TComponent предусмотрено право владения, когда один объект выступает владельцем другого объекта. В-третьих, класс расширяет возможности по хранению и обслуживанию данных. В-четвертых, в отличие от своих предков (оперирующих только методами) класс TComponent обладает свойствами. Самое главное свойство, подаренное TComponent своим наследникам, — имя. property Name: TComponentName; // type TComponentName: string; У каждого компонента опубликовано свойство, никогда не используемое системой: property Tag: Longint; Это свойство часто применяется программистами для дополнительной идентификации объекта или хранения ассоциированных с объектом целочисленных значений. Владение компонентомПри разработке проекта на основе формы (класс TForm) мы располагаем на поверхности формы кнопки, строки ввода, метки и другие компоненты, необходимые для работы приложения. Форма (являющаяся дальним потомком класса TControl) становится владельцем (owner) этих компонентов. В свою очередь, каждый из компонентов знает, кому он принадлежит, для этого следует опросить свойство property Owner: TComponent; Для того чтобы любой компонент прямо в момент своего рождения приобретал владельца на уровне класса TComponent, несколько усовершенствован конструктор constructor Create(AOwner: TComponent); В объявлении появился параметр AOwner, благодаря ему устанавливается связь компонента с его владельцем в момент вызова конструктора. Внимание! Уничтожение объекта-владельца влечет за собой уничтожение всех принадлежащих ему объектов. Владелец компонентов имеет представление о числе принадлежащих ему компонентов и в состоянии обратиться к каждому из них. Для этого предназначены соответствующие свойства: property ComponentCount: Integer; //число компонентов property Components[Index: Integer]: TComponent; //список компонентов Создаете новый проект и разместите на его форме несколько любых элементов управления, которые вы найдете на палитре компонентов Delphi, в их числе редактор значений — компонент ValueListEditor1: TValueListEditor (или Memo1 если вы работаете в старых версиях Delphi) и обычная кнопка Button1:TButton. Листинг 4.3 содержит код обработчика события OnClick() по кнопке Button1. Листинг 4.3. Получение списка подчиненных компонентов procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin ValueListEditor1.Strings.Clear; for i:=0 to form1.ComponentCount-1 do ValueListEditor1.Strings.Add( form1.Components[i].ClassName+'='+form1.Components[i].Name); //или Memo1.Lines.Add(… end; В раках цикла осуществляется перебор всех принадлежащих форме Form1 компонентов с выводом их названия класса и имени в редактор значений ValueListEditor1. |