Главная страница
Навигация по странице:

  • Класс

  • Таблица

  • Метод Описание class

  • Листинг

  • реферат Простые операторы. Характеристика форм.docx. Лр операторы и выражения Delphi


    Скачать 1.3 Mb.
    НазваниеЛр операторы и выражения Delphi
    Дата17.04.2023
    Размер1.3 Mb.
    Формат файлаdoc
    Имя файлареферат Простые операторы. Характеристика форм.docx.doc
    ТипПрограмма
    #1067638
    страница17 из 26
    1   ...   13   14   15   16   17   18   19   20   ...   26

    ЛР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.Получениесведенийоклассе


    Метод

    Описание

    class function ClassName: string;

    Функции возвратят текстовую строку с названием класса

    class function UnitName: string;

    Имя модуля, в котором описан класс

    function ClassType: TClass; inline;

    Возвратит описание класса

    class function ClassNameIs(const Name:

    string): Boolean;

    Проверка, является ли объект экземпляром класса

    Name

    class function InheritsFrom(AClass: TClass): Boolean;

    Проверка, является ли объект потомком класса AClass

    class function ClassParent: TClass;

    Возвратит непосредственного предка объекта

    class function MethodName(Address: Pointer): string;

    Возвращает имя метода по указателю. Метод должен быть опубликован в секции published


    ...

    ...

    ...

    ...

    ...
    docshape232
    docshapegroup237

    Выбрав пункт меню 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.
    1   ...   13   14   15   16   17   18   19   20   ...   26


    написать администратору сайта