Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба2.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.62 Mб
Скачать

Событие OnDestroy

    Событие OnDestroy возникает на финальной стадии закрытия формы и может быть вызвано с помощью методовDestroy или Free либо закрытием главной формы приложения. Это событие имеет тип TNotifyEvent.

    К началу

Событие OnHide

    Событие OnHide возникает при "скрытии" формы, то есть когда ее свойство Visible принимает значение False. Это событие имеет тип TNotifyEvent.

    К началу

Событие OnPaint

    Событие OnPaint возникает при необходимости перерисовки содержимого формы. Например, оно может возникнуть при получении формой фокуса. Обработчик этого события может отображать информацию в рабочей области формы. Сообщение OnPaint имеет тип TNotifyEvent.

    В следующем примере показано, как загружать графическое изображение в обработчике события OnPaint:

unit Un_4_4;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs;

type

TForm1 = class(TForm)

procedure FormPaint(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

TheBMP: TBitmap;//Создание ссылки на изображение.

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

//Обработчик события OnPaint.

procedure TForm1.FormPaint(Sender: TObject);

begin

Form1.Canvas.Draw(0,0,TheBMP);//Вывод изображения.

end;

//Обработчик события OnCreate.

procedure TForm1.FormCreate(Sender: TObject);

begin

TheBMP:=TBitmap.Create;//Создание нового объекта.

//Загрузка изображения.

TheBMP.LoadFromFile('C:\Windows\SYSTEM\pdbrowse.bmp');

end;

end.

Текст этого примера можно взять здесь.

    К началу

Событие OnResize

    Событие OnResize возникает при изменении размеров формы во время работы приложения. Обработчик этого события необходим только в том случае, если вы планируете выполнять какие-либо действия при изменении размеров формы. Например, это может быть перемещение интерфейсных элементов или другие действия. Сообщение OnResizeимеет тип TNotilyEvent.

    К началу

Событие OnShow

    Событие OnShow возникает, когда форма отображается (то есть когда ее свойство Visible принимает значениеTrue). Это событие имеет тип TNotifyEvent.

На этом шаге мы перечислим основные свойства визуальных компонентов. 

    Напомним, что компонент - это разновидность объекта, который можно перенести на форму из специальной палитры компонентов. Также можно изменять его свойства, не меняя кода программы.

    Существуют визуальные и невизуальные компоненты.

    Визуальные компоненты видимы при работе программы; они используются непосредственно пользователем.Невизуальные компоненты не отображаются на форме в процессе работы приложения, поэтому они недоступны пользователю. К визуальным компонентам относятся кнопки, строка редактирования и т.д. Примеры невизуальных компонентов: таблицы, SQL-запросы и т.д.

    В таблице 1 перечислены основные свойства визуальных компонентов. В дальнейшем при рассмотрении конкретных компонентов мы будем указывать только их специфические свойства.

Таблица 1. Основные свойства визуальных компонентов

Свойство

Описание

property Align: TAlign; type TAlign = (alNone, alTop, alBottom, alLeft, alRight, alClient, alCustom);

Задает тип выравнивания компонента внутри формы. Использовать это свойство рекомендуется тогда, когда требуется, чтобы данный компонент располагался в определенной части формы вне зависимости от ее размеров. Возможные значения:

  • alNone - выравнивание отсутствует;

  • alTop - компонент размещается в верхней части формы и его ширина становится равной ширине формы;

  • alBottom - компонент размещается в нижней части формы и его ширина становится равной ширине формы;

  • alLeft - компонент размещается в левой части формы и его высота становится равной высоте формы;

  • alRight - компонент размещается в правой части формы и его высота становится равной высоте формы;

  • alClient - компонент занимает всю рабочую область формы.

Свойство удобно использовать для создания, например, панели инструментов. У компонента TPanel, который может использоваться для размещения кнопок, это свойство можно установить в alTop. Это приведет к автоматическому изменению ширины этого компонента при изменении ширины формы.

property Color:TColor;

Задает цвет фона формы или цвет компонента.

property Ctl3D: Boolean;

Задает вид компонента: False - двухмерный вид; True - трехмерный вид.

property Cursor:TCursor;

Определяет вид курсора мыши, который будет отображаться при нахождении курсора в рабочей области компонента.

propertyDragCursor:TCursor;

Определяет вид курсора мыши, который будет отображаться при перетаскивании объекта.

property Enabled: Boolean;

Если True, то компонент реагирует на сообщения от клавиатуры, мыши и таймера. В противном случае они игнорируются. Другими словами, в этом случае компонент является недоступным.

property Font:TFont;

Определяет шрифт и его характеристики.

property Height: Integer;

Задает высоту компонента или формы.

property Hint: string;

Задает текст, который будет отображаться, если курсор находится в области компонента. Работает в паре со свойством ShowHint.

property Left: Integer;

Определяет горизонтальную координату левого верхнего угла компонента (в пикселях).

propertyParentColor: Boolean;

Задает цвет отображения компонента на экране. Если значение равно True, то компонент использует цвет родительского компонента, иначе используется значение собственного свойства Color. Если значение свойства Color изменено, то значение свойства ParentColor автоматически изменяется на False.

propertyParentCtl3D: Boolean;

Позволяет указать, будет ли компонент трехмерным, или нет. Если оно имеет значениеTrue, то вид компонента задается свойством Ctl3D его владельца. В противном случае - собственным значением свойства Ctl3D.

property ParentFont: Boolean;

Если значение этого свойства True, то используется шрифт, заданный у владельца компонента. В противном случае используется шрифт, заданный собственным свойством Font.

propertyParentShowHint: Boolean;

Определяет, какую подсказку использовать: содержащуюся у этого компонента или у родителя. Если True, то контроль передается совйству ShowHint предка. В противном случае - собственному свойству ShowHint.

propertyPopupMenu: TPopupMenu;

Задает название локального меню, которое отображается при нажатии правой кнопки мыши на компоненте. Это меню отображается только в том случае, если свойствоAutoPopup самого локального меню имеет значение True.

property ShowHint: Boolean;

Определяет, будет ли отображаться текст, находящийся в свойстве Hint (True - будет отображаться). При изменении значения этого свойства на True, значение свойстваParentShowHint автоматически меняется на False.

property TabOrder: TTabOrder; type TTabOrder = -1..32767;

Изменяет порядок получения компонентами фокуса при нажатии клавиши TAB.

property TabStop: Boolean;

Позволяет определить, может ли компонент получать фокус (True - может получать).

property Tag: Longint;

Позволяет "привязать" к компоненту числовое значение. Изменение этого свойства никак не отображается на компоненте.

property Top: Integer;

Задает вертикальную координату левого верхнего угла компонента (для формы - относительно экрана).

property Visible: Boolean;

Определяет видимость компонента на экране (True - компонент видим).

property Width: Integer;

Задает ширину компонента в пикселях.

На этом шаге мы перечислим основные свойства формы. Некоторые свойства рассмотрены более подробно на шаге 34

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

    В таблице 1 перечислены основные свойства формы.

Таблица 1. Основные свойства формы

Свойство

Описание

propertyActiveControl: TWidgetControl;

Задает компонент, который получает фокус при активизации формы.

propertyAutoScroll: Boolean;

Задает наличие полос прокрутки, если все компоненты не помещаются в текущий размер формы. Если значение этого свойства True, то полосы прокрутки включаются автоматически. В противном случае при уменьшении размера окна пользователь теряет доступ к компонентам, не поместившемся на его поле.

propertyBorderStyle: TFormBorderStyle;

Определяет общий вид окна и операции с ним, которые разрешено выполнять пользователю. Это свойство может принимать следующие значения:

  • bsSizeable - обычный вид окна Windows с полосой заголовка, с возможностью для пользователя изменять размеры окна с помощью кнопок, расположенных в заголовке или с помощью мыши. Это значение задается по умолчанию;

  • bsDialog - неизменяемое по размерам окно (диалоговое окно);

  • bsSingle - окно, размер которого пользователь не может изменить, потянув курсором мыши за край окна, но может менять кнопками в полосе заголовка;

  • bsToolWindow - то же, что и bsSingle, но с полосой заголовка меньшего размера;

  • bsSizeToolWin - то же, что и bsSizeable, но с полосой заголовка меньшего размера и отсутствием в ней кнопок изменения размера;

  • bsNone - без строки заголовка. Окно не только не допускает изменения размера, но и не позволяет переместить его по экрану.

propertyBorderIcons: TBorderIcons;

Определяет набор кнопок, которые имеются в полосе заголовка. Множество кнопок задается элементами:

  • biSystemMenu - кнопка системного меню (для Windows 95/98 и NT это кнопка с крестиком, закрывающая окно);

  • biMinimize - кнопка Свернуть, сворачивает окно до пиктограммы;

  • biMaximize - кнопка Развернуть, разворачивает окно на весь экран;

  • biHelp - кнопка справки.

Следует отметить, что не все кнопки могут появляться при любых значениях BorderStyle. Некоторую дополнительную информацию по использованию перечисленных значений можно посмотреть здесь.

property Caption: TCaption;

Определяет текст заголовка формы. По умолчанию значение этого свойства эквивалентно значению свойства Name.

propertyClientHeight: Integer;

Задает высоту рабочей области формы.

propertyClientWidth: Integer;

Задает ширину рабочей области формы.

propertyFormStyle: TFormStyle;

Задает тип формы. Возможные значения:

  • fsNormal - окно обычного приложения. Это значение принято по умолчанию;

  • fsMDIForm - родительская форма приложения с дочерними окнами, используемого при работе с несколькими документами одновременно;

  • fsMDIChild - дочерняя форма приложения MDI;

  • fsStayOnTop - окно, остающееся всегда поверх остальных оконо Windows.

    Значение fsStayOnTop делает окно всегда остающимся на экране поверх остальных окон не только данного приложения, но и всех других приложений, в которые может перейти пользователь. Это значение лучше задавать для отображения окон сообщений пользователю о каких-то аварийных ситуациях. Некоторую дополнительную информацию по использованию перечисленных значений можно посмотреть здесь.

propertyHorzScrollBar:TControlScrollBar;

Определяет параметры горизонтальной полосы прокрутки.

property Icon: TIcon;

Задает иконку для данной формы. Дополнительную информацию по этому свойству можно посмотреть здесь.

propertyKeyPreview: Boolean;

Позволяет передать событие, возникающее сразу же после нажатия клавиши на клавиатуре в форму, не обращая внимания на то, какой компонент в данный момент был активным.

property Menu: TMainMenu;

Содержит имя меню, соответствующее данной форме.

property Name: TComponentName;

Имя формы.

propertyPixelsPerInch: Integer;

Задает количество пикселей в одном дюйме в системе. Используется со свойством Scaled. Дополнительную информацию можно посмотреть здесь.

property Position: TPosition;

Определяет положение формы на экране. Возможные значения:

  • poDesigned - первоначальные размеры и положение окна во время выполнения те же, что во время проектирования. Это значение принимается по умолчанию, но обычно его следует изменить;

  • poScreenCenter - окно располагается в центре экрана. Размер окна тот, который был спроектирован. В мультимедийных приложениях, работающих одновременно с несколькими мониторами (начиная с Delphi 4) эта центральная позиция может быть несколько изменена;

  • poDesktopCenter - это значение предусмотрено, начиная с Delphi 4. Окно располагается в центре экрана. Размер окна тот, который был спроектирован. Этот режим не используется в приложениях со множеством мониторов;

  • poDefault - местоположение и размер окна определяет Windows, учитывая размер и разрешение экрана. При последовательных показах окна его положение сдвигается немного вниз и вправо;

  • poDefaultPosOnly - местоположение окна определяет Windows. При последовательных показах окна его положение сдвигается немного вниз и вправо. Размер окна - спроектированный;

  • poDefaultSizeOnly - размер окна определяет Windows, учитывая размер и разрешение экрана. Положение окна - спроектированное;

  • poMainFormCenter - это значение предусмотрено, начиная с Delphi 5. Окно располагается в центре главной формы. Размер окна тот, который был спроектирован. Этот режим не приспособлен к приложениям со смножеством мониторов. Используется только для вторичных форм. Для главной формы действует так же, как poScreenCenter.

    Рассмотренные свойства работают тогда, когда WindowState=wsNormal. Дополнительную информацию можно получить здесь.

property Scaled: Boolean;

Определяет, масштабировать форму или нет. Если значение этого свойства равно True, то масштабирование осуществляется в соответствии со значением свойства PixelPerInch. Дополнительную информацию можно посмотреть здесь.

propertyVertScrollBar:TControlScrollBar;

Определяет параметры вертикальной полосы прокрутки.

propertyWindowState: TWindowState;

Определяет вид, в котором окно первоначально предъявляется пользователю при выполнении приложения. Имеет следующие значения:

  • wsNormal - нормальный вид окна (значение по умолчанию);

  • wsMinimized - окно свернутое;

  • wsMaximized - окно развернутое на весь экран.

общие понятия о классах и рассмотрим описание классов в Delphi.

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

    Экземпляр типа класс принято называть объектом. Объекты класса всегда распределяются в куче в отличие от экземпляров объектового типа. Итак, класс - это описание, объект - то, что создано в соответствии с этим описанием.

    Тип класс - это структура данных, состоящая из полей, методов, свойств. Поля содержат данные определенного типа. Методы - это функции и процедуры, описанные внутри класса и предназначенные для операций над его полями. Свойства - это специальный механизм классов, регулирующий доступ к полям. Свойство описывает один или два метода, которые осуществляют некоторые действия над данными того же типа, что и свойство. Например, обычная кнопка в окне приложения обладает такими свойствами, как цвет, размеры, положение. Для экземпляра класса "кнопка" значения этих свойств представлены специальными переменными, определяемыми ключевым словом Property. Цвет может задаваться свойством Color, размеры - свойствами Width и Height и т.д.

    Так как свойство обеспечивает обмен данными с внешней средой, то для доступа к его значению используются специальные методы класса. Например:

Туре

TMyObject = class(TObject)

Function GetColor : ТSomeType;

Procedure SetColor (ANewValue: TSomeType);

Property MyColor : TSomeType Read GetColor Write SetColor;

end;

    Для того чтобы использовать новый тип в программе, нужно объявить переменную этого типа:

Var

MyObjесt: TMyObjесt;

    В данном примере доступ к значению свойства MyColor осуществляется через вызовы методов GetColor иSetColor. К методам в явном виде не обращаются, достаточно записать:

MyObject.MyColor := <значение>;

или

<переменная>:= MyObject.MyColor;

и компилятор оттранслирует эти операторы в вызовы соответствующих методов: записи (SetColor) и чтения (GetColor).

    Особым видом свойств являются события. В Object Pascal событие - свойство процедурного типа, предназначенное для создания пользовательской реакции на то или иное входное воздействие:

Property OnMyEvent: TMyEvent Read FOnMyEvent1 Write FOnMyEvent2 default asValue;

Здесь:

  • OnMyEvent - имя свойства;

  • TMyEvent - тип свойства;

  • FOnMyEvent1 - поле процедурного типа. Вызывается при чтении значения свойства;

  • FOnMyEvent2 - поле процедурного типа. Вызывается при записи нового значения свойства;

  • asValue - значение свойства по умолчанию (может отсутствовать).

    FOnMyEvent1, FOnMyEvent2 - поля, содержащие адреса некоторых методов. Присвоить такому свойству значение - значит, указать объекту адрес метода, который будет вызываться в момент наступления события. Такие методы называют обработчиками событий. Таким образом, обработчик события - фрагмент программы, который выполняется в ответ на определенное изменение в программе или в Windows.

    Каждый новый класс в Delphi должен быть объявлен глобально. Для этого используется зарезервированное словоClass. Объявление определяет функциональные возможности класса. Объявление классов в модуле производится в разделе объявления типов. Пример объявления класса и объекта в Delphi:

Туре

TForm1 = class (TForm)

Label1: TLabel;

Edit1: TEdit;

CloseBtn: TBitBtn;

OkBtn: TBitBtn;

end;

Var

Form1 : TForm1;

    В объявлении типа определен новый класс - TForm1, наследуемый от класса TForm, содержащегося в библиотеке визуальных компонентов. На это указывает зарезервированное слово Class. Данный тип содержит указатели на компоненты, которые были помещены на форму:

  • один компонент Label1 - объект типа TLabel (иначе говоря, экземпляр класса TLabel),

  • один компонент Edit1 - объект типа TEdit (экземпляр класса TEdit) и

  • два экземпляра класса TBitBtn.

    Область видимости идентификатора компонента, объявленного в описании класса, простирается от его объявления до конца определения класса, а также распространяется на все потомки этого класса и на все блоки реализации методов класса. Область видимости идентификатора компонента зависит от раздела, в котором объявлен этот идентификатор.

    В объявлениях типов класса имеются разделы частных (private), общих (public), защищенных (protected) и опубликованных (published) объявлений.

    В разделе частных объявлений размешаются поля данных и методы, недоступные за пределами данного класса. Данные, описанные в этом разделе, могут обрабатываться только путем вызова методов класса.

    Поля данных и методы, объявленные в разделе общих объявлений, доступны для всех процедур, программный код которых расположен в области видимости данного объекта. В разделе общих объявлений должны быть объявлены поля данных и методы, к которым будут иметь доступ методы других классов.

    Поля, свойства и методы, объявленные в разделе защищенных объявлений доступны только внутри модуля с описываемым классом, но также они доступны и в классах-потомках, в том числе и в других модулях.

    Свойства, расположенные в разделе опубликованных объявлений, отображаются в Инспекторе объектов (Object Inspector).

иерархии классов в Delphi.

    Все классы Object Pascal порождены от единственного родителя - класса TObject. Этот класс не имеет полей и свойств, но включает в себе методы самого общего назначения, обеспечивающие весь жизненный цикл любых объектов - от их создания до уничтожения. Новый класс можно создать на основе этого базового класса.

    Принцип наследования приводит к созданию дерева классов, постепенно разрастающегося при перемещении отTObject к его потомкам. Каждый потомок дополняет возможности своего родителя новыми свойствами и передает их своим потомкам. В состав Delphi входят более 300 различных классов. Для примера приведем небольшой фрагмент дерева классов Delphi:

Рис.1. Фрагмент дерева классов Delphi

    Класс TPersistent обогащает возможности своего родителя TObject; он умеет сохранять данные в файле и получать данные из него. Класс TComponent умеет взаимодействовать со средой разработчика и передает это умение своим потомкам. Класс TComponent является базовым для создания не визуальных компонентов. TControl не только способен работать с файлами и средой разработчика, но он уже умеет создавать и обслуживать видимые на экране изображения. Класс TControl является базовым для создания визуальных компонентов. Потомок этого классаTWinControl может создавать Windows-окна т.д.

 Класс TObject инкапсулирует основные функции, свойственные всем объектам Delphi. Интерфейс TObjectобеспечивает:

  • возможность создания, управления и разрушения экземпляров объектов, включая выделение под них памяти, инициализацию и освобождение памяти после их уничтожения;

  • поддержку информации об объектах и типах;

  • поддержку обработки сообщений.

    Все классы в Delphi являются прямыми или косвенными наследниками TObject. Прямое наследование используется только при объявлении простых классов, объекты которых не являются компонентами, не могут присваиваться друг другу и не участвуют в операциях обмена с потоками. Подавляющее большинство классов являются косвенными наследниками TObject и образуются от производных классов. Если при объявлении нового типа объектов не указывается класс-предок, то Delphi считает TObject предком нового класса.

    Во всех объектах, которые используются в программах, допустимо применять методы, определенные в классеTObject. Перечислим основные из них (таблица 1):

   

Таблица 1. Основные методы TObject

Метод

Описание

constructor Create;

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

destructor Destroy;virtual;

Деструктор. Производит действия по уничтожению экземпляра объекта. Рекомендуется вызывать не Destroy, а Free.

procedure Free;

Уничтожает объект и освобождает выделенную под него память. Автоматически вызывает Destroy, если объект существует.

class functionNewInstance: TObject;virtual;

Выделяет область памяти под объект и возвращает указатель на нее. Автоматически вызывается всеми конструкторами. Использует InstanceSize. Может перегружаться в классах-наследниках.

class procedureInitInstance (Instance: Pointer) : TObject;

Инициализирует экземпляр объекта и указатель на его таблицу виртуальных методов. Вызывается автоматически методом NewInstance. Не может быть перегружен.

procedureFreeInstance; virtual;

Освобождает память, выделенную ранее методом NewInstance. Автоматически вызывается деструктором Destroy. Непосредственный вызов пользователем не требуется. Должен быть перегружен, если перегружен метод NewInstance. ИспользуетInstanceSize для определения размера выделенной области памяти.

function ClassType: TClass;

Возвращает указатель на класс вызвавшего объекта.

class functionClassName: string;

Возвращает строку с именем класса.

class functionClassParent: TClass;

Возвращает указатель на класс-предок.

class functionClassInfo: Pointer;

Возвращает указатель на структуру, содержащую информацию о классе.

class functionInstanceSize: LongInt;

Возвращает размер экземпляра объекта.

class functionInheritsFrom(AClass: TClass): Boolean;

Проверяет, является ли данный класс порожденным от класса AClass и возвращает соответствующее логическое значение.

class functionClassNameIs(constName: string): Boolean;

Возвращает True, если передаваемое в функцию имя совпадает с именем данного класса.

class functionMethodAddress (constName: string): Pointer;

Возвращает адрес метода вызвавшего объекта с заданным именем.

class functionMethodName(Address: Pointer): string;

Возвращает имя метода с заданным адресом.

function FieldAddress (const Name: string): Pointer;

Возвращает адрес поля вызвавшего объекта с заданным именем.

свойства и методы класса TComponent

    Предком для всех компонентов библиотеки является класс TComponent. Он инкапсулирует наиболее общие свойства и методы компонентов, включая:

  • возможность включать компонент в палитру компонентов и работать с ним при визуальном проектировании;

  • способность быть владельцем других компонентов или управляться другими компонентами;

  • возможность обмена с потоками и файлами;

  • возможность служить оболочкой элементов ActiveX и других объектов.

    Объекты типа TComponent не создаются. Этот класс используется как базовый при объявлении класса невизуального компонента, который может присутствовать в палитре компонентов и применяться в процессе проектирования.