12166

Основные объекты в Delphi

Лекция

Информатика, кибернетика и программирование

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

Русский

2013-04-24

84 KB

1 чел.

События формы

  •  OnCreate — происходит сразу после создания формы. Обработчик этого события может установить начальные значения для свойств формы и ее компонентов, запросить у операционной системы необходимые ресурсы, создать служебные объекты, а также выполнить другие действия прежде, чем пользователь начнет работу с формой. Парным для события OnCreate является событие OnDestroy.
  •  OnDestroy — происходит непосредственно перед уничтожением формы. Обработчик этого события может освободить ресурсы, разрушить служебные объекты, а также выполнить другие действия прежде, чем объект формы будет разрушен.
  •  OnShow — происходит непосредственно перед отображением формы на экране. Парным для события OnShow является событие OnHide.
  •  OnHide — происходит непосредственно перед исчезновением формы с экрана. Парным для события OnHide является событие OnShow.
  •  OnActivate — происходит, когда пользователь переключается на форму, т.е. форма становится активной. Парным для события OnActivate является событие OnDeactivate.
  •  OnDeactivate — происходит, когда пользователь переключается на другую форму, т.е. текущая форма становится неактивной. Парным для события OnDeactivate является OnActivate.
  •  OnCloseQuery — происходит при попытке закрыть форму. Запрос на закрытие формы может исходить от пользователя, который нажал на рамке формы кнопку "Закрыть", или от программы, которая вызвала у формы метод Close. Обработчику события OnCloseQuery передается по ссылке булевский параметр CanClose, разрешающий или запрещающий действительное закрытие формы.
  •  OnClose — происходит после события OnCloseQuery, перед закрытием формы.
  •  OnContextPopup — происходит при вызове контекстного меню формы.
  •  OnMouseDown — происходит при нажатии пользователем кнопки мыши, когда указатель мыши наведен на форму. После отпускания кнопки мыши в компоненте происходит событие OnMouseUp. При перемещении указателя мыши над формой периодически возникает событие OnMouseMove, что позволяет отслеживать позицию указателя.
  •  OnMouseWheelUp — происходит, когда колесико мыши проворачивается вперед.
  •  OnMouseWheelDown — происходит, когда колесико мыши проворачивается назад.
  •  OnMouseWheel — происходит, когда колесико мыши проворачивается в любую из сторон.
  •  OnStartDock — происходит, когда пользователь начинает буксировать стыкуемый компонент.
  •  OnGetSiteInfo — происходит, когда стыкуемый компонент запрашивает место для стыковки.
  •  OnDockOver — периодически происходит при буксировке стыкуемого компонента над формой.
  •  OnDockDrop — происходит при стыковке компонента.
  •  OnEndDock — происходит по окончании стыковки компонента.
  •  OnUnDock — происходит, когда пользователь пытается отстыковать компонент.
  •  OnDragDrop — происходит, когда пользователь опускает в форму буксируемый объект.
  •  OnDragOver — периодически происходит при буксировке объекта над формой.
  •  OnCanResize — происходит при попытке изменить размеры формы. Запрос на изменение размеров может исходить от пользователя. Обработчику события OnCanResize передается по ссылке булевский параметр Resize, разрешающий или запрещающий действительное изменение размеров формы.
  •  OnResize — происходит при изменении размеров формы.
  •  OnConstrainedResize — происходит при изменении размеров формы и позволяет на лету изменять минимальные и максимальные размеры формы.
  •  OnShortCut — происходит, когда пользователь нажимает клавишу на клавиатуре (до события OnKeyDown, см. параграф 7.5.5). Позволяет перехватывать нажатия клавиш еще до того, как они дойдут до стандартного обработчика формы.


Понятие компонента

Понятие компонента является фундаментальным для среды Delphi. Существует два взгляда на компоненты.

  •  Взгляд снаружи, точнее из среды визуальной разработки приложений. С этой точки зрения компоненты — это самодостаточные строительные блоки, которые вы берете из палитры компонентов и переносите на форму для создания собственно приложения. Примеры компонентов известны: это кнопки, списки, надписи и др.
  •  Существует еще и взгляд изнутри, то есть взгляд из программы на языке Delphi. С этой точки зрения компоненты — это классы, порожденные прямо или косвенно от класса TComponent и имеющие published-свойства. Экземпляры компонентов — это объекты этих классов, существующие в качестве полей формы. Среди опубликованных свойств компонентов обязательно присутствует имя (Name), под которым экземпляр компонента представляется в окне свойств.

Объединение этих двух точек зрения дает цельное представление о том, что такое компоненты. При работе с компонентами из среды визуальной разработки приложений вы всегда видите их лицевую сторону. Однако как только вы начинаете писать обработчики событий, и управлять компонентами программно, вы соприкасаетесь с программной стороной компонентов, суть которой — объекты. Таким образом, среда Delphi обеспечивает симбиоз визуального и объектно-ориентированного программирования.

При анализе структуры компонента обнаруживается, что его природа троична и лучше всего описывается формулой:

Компонент = состояние (свойства) + поведение (методы) + обратная реакция (события).

  •  Состояние компонента определяется его свойствами. Свойства бывают изменяемые (для чтения и записи) и неизменяемые (только для чтения). Помимо этого, свойства могут получать значения либо на этапе проектирования (design-time), либо только во время выполнения программы (run-time). Первые устанавливаются для каждого компонента в окне свойств и определяют начальное состояние компонента. Во время выполнения приложения эти свойства могут быть изменены программно, соответственно изменится внешний вид и поведение компонента. Вторая группа — это свойства, которые не видны в окне свойств, и управлять которыми можно только программно. С точки зрения языка Delphi различие между этими группами свойств состоит в том, что первые объявлены в секции published, а вторые — в секции public.
  •  Поведение компонента описывается с помощью его процедур и функций (методов). Вызовы методов компонента помещаются в исходный код программы и происходят только во время выполнения приложения. Методы не имеют под собой визуальной основы.
  •  Обратная реакция компонента — это его события. События позволяют, например, связать нажатие кнопки с вызовом метода формы. События реализуются с помощью свойств, содержащих указатели на методы.

Визуальные и невизуальные компоненты

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

  •  Визуальные компоненты (visual components) — это видимые элементы пользовательского интерфейса: кнопки, метки, блоки списков и др. Они выглядят одинаково и на стадии проектирования, и во время работы приложения.
  •  Невизуальные компоненты (non-visual components) — это компоненты, которые на экране не видны. К невизуальным компонентам относятся таймер, компоненты доступа к базам данным и др. В процессе проектирования такие компоненты представляются на форме небольшим значком. Их свойства устанавливаются в уже известном вам окне свойств. Некоторые компоненты хоть и являются невизуальными, могут что-нибудь отображать на экране. Например, невизуальный компонент MainMenu отображает на форме полосу главного меню, а компонент OpenDialog — стандартное диалоговое окно выбора файла.

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

Визуальные компоненты имеют ряд общих свойств:

  •  Left и Top — местоположение визуального компонента внутри формы (или внутри компонента-владельца).
  •  Width и Height — горизонтальный и вертикальный размеры компонента соответственно.
  •  Anchors — позволяет привязать границы компонента к границам формы. Привязанная граница компонента будет следовать за соответствующей границей формы при изменении размеров формы.
  •  BiDiMode — позволяет сделать так, чтобы текст читался справа налево (используется при работе с восточными языками). Компонент либо использует свое собственное значение свойства, либо копирует его из компонента-владельца, если вспомогательное свойство ParentBiDiMode равно значению True.
  •  Caption — надпись компонента.
  •   Constraints — ограничения на размеры компонента. Вложенные свойства MinWidth и MinHeight определяют минимальные ширину и высоту, а вложенные свойства MaxWidth и MaxHeight — максимальные ширину и высоту соответственно.
  •  Color — цвет компонента. Компонент либо использует свой собственный цвет, либо копирует цвет содержащего компонента. Это определяется значением свойства ParentColor. Если свойство ParentColor имеет значение True, то изменение цвета у содержащего компонента (например, формы) автоматически приводит к изменению цвета вложенного компонента (например, кнопки). Однако, если вы измените значение свойства Color, то свойство ParentColor автоматически примет значение False, и компонент получит свой собственный цвет.
  •  Cursor — определяет, какой вид принимает указатель мыши, когда пользователь наводит его на компонент. Каждому варианту указателя соответствует своя целочисленная константа (например, константа crArrow соответствует обычному указателю в виде стрелки).
  •  DragCursor — вид указателя мыши, когда пользователь буксирует объект над компонентом. Этот вид курсора устанавливается лишь в том случае, если объект может быть принят.
  •  DragKind — определяет поведение компонента при буксировке: просто буксировка (dkDrag) или стыковка (dkDock). В зависимости от значения этого свойства возникает та или иная цепочка событий: цепочка событий буксировки или цепочка событий стыковки.
  •  DragMode — определяет режим буксировки компонента по экрану. Если в свойстве установлено значение dmManual (принято по умолчанию), то буксировка должна инициироваться программно. Если же в свойстве установлено значение dmAutomatic, то компонент уже готов к буксировке, пользователю достаточно навести указатель мыши на компонент, нажать кнопку мыши и, удерживая ее, отбуксировать компонент в нужное место.
  •  Enabled — определяет, доступен ли компонент для пользователя. Если свойство имеет значение True, то компонент доступен, а если значение False, то недоступен. Недоступный компонент обычно имеет блеклый вид.
  •  Font — шрифт надписи на компоненте. Параметры шрифта задаются с помощью вложенных свойств CharSet, Color, Name, Size, Style, Height, Pitch, Weight. Компонент либо использует свой собственный шрифт, либо копирует шрифт содержащего компонента. Это определяется значением свойства ParentFont. Если свойство ParentFont имеет значение True, то изменение шрифта у содержащего компонента (например, формы) автоматически приводит к изменению шрифта у вложенного компонента (например, кнопки). Однако, если вы измените значение свойства Font, то свойство ParentFont автоматически примет значение False, и компонент получит свой собственный шрифт для надписи.
  •  HelpType — определяет, каким образом в файле справки будет осуществляться поиск темы, соответствующей компоненту. Когда компонент обладает фокусом ввода, пользователь может нажать клавишу F1, чтобы получить оперативную справку. Поиск соответствующей темы осуществляется либо по номеру, заданному в свойстве HelpContext, либо по ключевому слову, заданному в свойстве HelpKeyword. В первом случае свойство HelpType должно иметь значение htContext, а во втором — htKeyword.
  •  HelpContext — содержит номер соответствующей темы в файле справки. Используется, когда свойство HelpType имеет значение htContext. Если свойство HelpContext имеет значение 0, то номер темы берется из аналогичного свойства компонента-владельца (как правило, формы).
  •  HelpKeyword — содержит ключевое слово для поиска темы в файле справки. Используется, когда свойство HelpType имеет значение htKeyword. Если свойство HelpKeyword имеет пустое значение, то поиск осуществляется по ключевому слову, которое берется из аналогичного свойства компонента-владельца (как правило, формы).
  •  Hint — подсказка, появляющаяся над компонентом, когда пользователь временно задерживает над ним указатель мыши. Появление подсказки может быть разрешено или запрещено с помощью свойства ShowHint. Значение свойства ShowHint может копироваться из содержащего компонента в зависимости от значения свойства ParentShowHint. Если свойство ParentShowHint имеет значение True, то запрет подсказки для содержащего компонента (например, для формы), автоматически приводит к запрету подсказки для вложенного компонента (например, для кнопки). Однако, если вы измените значение свойства ShowHint, то свойство ParentShowHint автоматически примет значение False, и управление запретом подсказки перейдет к компоненту.
  •  PopupMenu — используется для привязки контекстного меню к компоненту. Это меню вызывается щелчком правой кнопки мыши по компоненту.
  •  TabOrder — содержит порядковый номер компонента в пределах своего компонента-владельца. Это номер очереди, в которой компонент получает фокус ввода при нажатии клавиши Tab на клавиатуре. Свойство TabOrder присутствует только в оконных компонентах.
  •  TabStop — определяет, может ли компонент получать фокус ввода. Если свойство имеет значение True, то компонент находится в очереди на фокус ввода, а если значение False, то — нет. Свойство TabStop присутствует только в оконных компонентах.
  •  Visible — определяет видимость компонента на экране. Если свойство имеет значение True, то компонент виден, а если значение False, то — не виден.

Общие события визуальных компонентов

Визуальные компоненты имеют ряд общих событий:

  •  OnClick — происходит в результате щелчка мыши по компоненту.
  •  OnContextPopup — происходит при вызове контекстного меню компонента.
  •  OnDblClick — происходит в результате двойного щелчка мыши по компоненту.
  •  OnEnter — происходит при получении компонентом фокуса ввода. Когда компонент теряет фокус ввода, происходит событие OnExit. События OnEnter и OnExit не происходят при переключении между формами и приложениями.
  •  OnKeyDown — происходит при нажатии пользователем любой клавиши (если компонент обладает фокусом ввода). При отпускании нажатой клавиши происходит событие OnKeyUp. Если пользователь нажал символьную клавишу, то вслед за событием OnKeyDown и до события OnKeyUp происходит событие OnKeyPress. События о нажатии клавиш обычно приходят активному компоненту, обладающему фокусом ввода. Однако с помощью свойства формы KeyPreview можно сделать так, чтобы форма перехватывала клавиатурные события до того, как их получит активный компонент. Для этого свойство KeyPreview устананавливается в значение True.
  •  OnMouseDown — происходит при нажатии пользователем кнопки мыши, когда указатель мыши наведен на компонент. После отпускания кнопки мыши в компоненте происходит событие OnMouseUp. При перемещении указателя мыши над компонентом, в последнем периодически возникает событие OnMouseMove, что позволяет отслеживать позицию указателя.

Для организации буксировки и стыковки, в визуальных компонентах существует еще несколько событий:

  •  OnStartDrag — происходит, когда пользователь начинает что-нибудь буксировать.
  •  OnDragOver — периодически происходит, когда пользователь буксирует что-нибудь над компонентом.
  •  OnDragDrop — происходит, когда пользователь опускает буксируемый объект на компонент.
  •  OnEndDrag — происходит по окончании буксировки объекта.
  •  OnStartDock — происходит, когда пользователь начинает буксировать стыкуемый компонент.
  •  OnEndDock — происходит по окончании стыковки компонента.

Application — главный объект, управляющий приложением

Над всеми формами и компонентами стоит объект Application (класса TApplication), олицетворяющий собой приложение в целом. Это главное “действующее лицо”, которое создается в начале выполнения любого приложения. Объект Application держит в руках все нити управления: создает главную и второстепенные формы, уничтожает их, обслуживает исключительные ситуации. Пример использования приведен ниже:

program SimpleProject;

uses

 Forms,

 SimpleUnit in 'SimpleUnit.pas' {SimpleForm};

{$R *.RES}

begin

 Application.Initialize;

 Application.CreateForm(TSimpleForm, SimpleForm);

 Application.Run;

end.

Объект Application отсутствует в палитре компонентов, поэтому его свойства можно изменять только из программы. Наиболее важные свойства этого объекта приведены ниже:

  •  Active — равно значению True, если приложение активно.
  •  AutoDragDocking — режим автоматической или ручной стыковки форм и компонентов. В автоматическом режиме (значение True) стыковка происходит по окончании буксировки при отпускании кнопки мыши. В ручном режиме (значение False) для стыковки необходимо удерживать клавишу Ctrl при отпускании кнопки мыши.
  •  BiDiKeyboard — раскладка клавиатуры при работе с восточными языками.
  •  CurrentHelpFile — имя файла справки активной формы программы (каждая форма может иметь свой собственный файл справки). Если у активной формы нет своего файла справки, то в свойстве CurrentHelpFile просто дублируется значение свойства HelpFile.
  •  HintColor — цвет фона всплывающей подсказки.
  •  HintHidePause — время, в течение которого всплывающая подсказка задерживается на экране.
  •  HintPause — задержка перед появлением всплывающей подсказки.
  •  HintShortCuts — определяет, включается ли в текст подсказки название комбинации клавиш.
  •  HintShortPause — время, через которое появляется всплывающая подсказка, если в данный момент на экране уже отображена другая подсказка.
  •  MainForm — указывает главную форму приложения. По умолчанию главной считается первая создаваемая форма.
  •  NonBiDiKeyboard — раскладка клавиатуры.
  •  ExeName — содержит полное имя (включая маршрут) выполняемого файла программы. Имя выполняемого файла совпадает с именем главного файла проекта. Если имя проекта не было указано, то по умолчанию выполняемому файлу назначается имя Project1.
  •  Title — содержит название приложения, которое отображается на Панели Задач во время работы. По умолчанию значением свойства является имя главного файла проекта.
  •  HelpFile — содержит имя файла справочника, который используется программой для отображения оперативной справочной информации по формам и компонентам.
  •  HelpSystem — интерфейс к справочной системе.
  •  Icon — содержит значок, отображаемый на Панели Задач во время работы программы. Значок отображается слева от названия (см. Title).
  •  UpdateFormatSettings — включает автоматическое обновление форматных строк в программе вслед за изменением этих параметров в операционной системе. Форматные строки управляют показом даты, времени, денежных единиц и др.
  •  UpdateMetricSettings — включает автоматическое обновление шрифта и фона системных надписей (всплывающих подсказок и подписей значков) при изменении настроек экрана в операционной системе.
  •  Terminated — значение True говорит о том, что программа находится в процессе завершения.

Объект Application имеет несколько полезных событий. Самые важные из них: OnActivate, OnDeactivate, OnException.

  •  OnActionExecute — происходит при выполнении любой команды в компоненте ActionList (см. главу 10).
  •  OnActionUpdate — происходит во время простоя программы для обновления состояния команд в компоненте ActionList (см. главу 10).
  •  OnActivate — происходит, когда программа получает фокус ввода, т.е. когда пользователь переключается на нее с другой программы.
  •  OnDeactivate — происходит, когда программа теряет фокус ввода, т.е. когда пользователь переключается с нее на другую программу.
  •  OnException — происходит, когда в программе возникает необработанная исключительная ситуация. Стандартный обработчик этого события вызывает метод ShowException для отображения окна сообщений с пояснением причины ошибки. Вы можете изменить реакцию на событие OnException, переписав его обработчик.
  •  OnHelp — происходит, когда пользователь вызывает справку.
  •  OnHint — происходит, когда курсор мыши наводится на компонент, содержащий всплывающую подсказку.
  •  OnIdle — периодически происходит во время простоя программы.
  •  OnMessage — происходит при получении программой сообщения операционной системы Windows.
  •  OnMinimize — происходит, когда пользователь сворачивает программу.
  •  OnModalBegin — происходит при отображении монопольной формы на экране.
  •  OnModalEnd — происходит при закрытии монопольной формы.
  •  OnRestore — происходит, когда пользователь восстанавливает свернутую программу.
  •  OnSettingChange — происходит при изменении настроек операционной системы, например, настроек экрана или региональных настроек.
  •  OnShortCut — происходит при нажатии клавиш на клавиатуре (еще до того, как в форме происходит событие OnKeyDown).
  •  OnShowHint — происходит непосредственно перед появлением любой всплывающей подсказки.

Из всех методов объекта Application мы упомянем лишь один — Terminate. Он выполняет штатное завершение приложения. Метод Terminate не вызывает немедленного завершения приложения, давая возможность всем формам корректно себя закрыть. Во время закрытия форм свойство Terminated имеет значение True.

При необходимости используются объекты Screen, Printer и Clipboard. Они также являются глобальными и создаются автоматически при запуске приложения (если, конечно, подключены стандартные модули, где они расположены).

7