Гповальный объект Application
ОбъектApplication относится к классуTApplication и инкапсулирует важнейшие свойства и методы программы как таковой. В частности, с его помощью осуществляется диспетчеризация сообщений Windows, реализуется контекстная справочная служба, он обрабатывает клавиши быстрого доступа, исключительные ситуации и т.д. Основные свойства класса TApplication приведены в табл. 6.1. Ряд свойств объектаApplication могут быть изменены командлйProject-->Options.
Таблица 6.1
Свойство | Описание |
property Active: Boolean read FActive; | РавноTrue, если любое окно программы имеет фокус ввода |
property ExeName: string read GetExeName; | Имя исполняемого файла с путем |
property HelpFile: string read FHelpFile write FHelpFile; | Имя файла справочной службы |
property Hint: string read FHint write SetHint; | Длинная часть оперативной подсказки. |
property HintColor: TColor read FHintColor write SetHintColor; | Цвет фона окна оперативной подсказки |
property HintHidePause: Integer read FHintHidePause write FHintHidePause; | Пауза (в мс) от появления оперативной подсказки до ее исчезновения |
property HintPause: Integer read FHintPause write FHintPause; | Пауза (в мс) от момента остановки мыши до появления оперативной подсказки |
property HintShortCuts: Boolean read FHintShortCufcs write FHintShortCuts; | Если содержитTrue, текст оперативной подсказки автоматически дополняется информацией о горячих клавишах |
property HintShortPause: Integer read FHintShortPause wri te FHintShortPause; | Пауза (в мс) появления оперативной подсказки при переходе с одного компонента на другой |
property Icon: TIcon read Ficon write Setlcon; | Значок программы |
Окончание табл. 6.1
property MainForm: TForm read FMainForm; | Главное окно программы |
property ShowHint: Boolean read FShowHint write SetShowHint; | Разрешает/запрещает показ оперативной подсказки |
property ShowMainForm: Boolean read FShowMainForm write FShowMainForm; | Разрешает/запрещает показ главного окна в момент старта программы |
property Terminated: Boolean read FTerminate; | True если программа должна прекратить работу. |
property Title: string read GetTitle write SetTitle; | Определяет текст на кнопке свернутой программы |
property UpdateFormatSettings: Boolean read FOpdateFormatSettings write FOpdateFormatSettings; | ЕслиTrue, программа автоматически использует новые параметры формата Windows (например, разделитель целой и дробной частей числа), при их изменении в момент работы программы |
property OpdateMetricSettings: Boolean read FOpdateMetrxcSettings write FOpdateMetricSettings; | ЕслиTrue, программа автоматически учитывает новые метрические установки Windows (например, новый системный шрифт) при их изменении в момент работы программы |
Методы классаTApplication приведены в табл. 6.2.
Таблица 6.2 '
Метод | Описание | ||
procedure ActivateHint (CursorPos: TPoint); | Показывает оперативную подсказку в заданной координатамиCursorPos позиции экрана | ||
procedure BringToFront; | Помещает окно, которое было активным в последний раз, поверх остальных окон | ||
procedure CancelHint; | Запрещает показ оперативной подсказки | ||
procedure CreateForm (InstanceClass: TComponentClass; var Reference); | Создает объект-окно: вызывает конструктор классаTFormClass и связывает созданный с его помощью объект с переменнойReference. | ||
procedure HandleException (Sender: TObject); | Осуществляет обработку исключительных ситуаций, заданную по умолчанию. | ||
procedure HandleMessaga; | Приостанавливает работу программы до тех пор, пока не будут обработаны все сообщения, после чего генерируется событиеOnldle | ||
function HelpCammand (Command: Integer; Data: Longint): Boolean; | Посылает справочной службе команду Command и параметрData | ||
function HelpContext (Context: THelpContext): Boolean; | Вызывает разделContext справочной службы, и возвращает значениеTrue, если такой раздел существует | ||
function HelpJump(const JumpID: string): Boolean; | Вызывает раздел справочной службы по еп> идентификаторуJumpID и возвращает значение True, если такой раздел существует | ||
procedure HideHint; | Убирает текущую оперативную подсказку | ||
TWindowHook = function (var Message: TMessage): Boolean of object; procedure HookMainWindow (Hook: TWindowHook); | Регистрирует оконную процедуру для передачи сообщений Windows. | ||
procedure Initializer- | Проверяет глобальную переменнуюInitProcмодуляForms; если переменная ссылается на процедуру без параметров, выполняет ее. | ||
function MessageBox(const Text, Caption: PChar; Flags: Longint = MB_OK): Integer; | Создает и показывает окно с текстом и кнопками:Text- сообщение в окне,Caption-заголовок окна,Flags - атрибуты окна. | ||
procedure Minimize; | Свертывает программу | ||
procedure NormalizeTopMosts; | Приостанавливает действие стиляfsTopMost(поместить окно поверх остальных) для всех окон, кроме главного | ||
procedure Normal izeAHTopMosts ; | Распространяет действие NormalizeTopMosts на главное окно | ||
procedure ProcessMessages; | То же, чтоHandleMessages, но событие Onldle не генерируется. | ||
procedure Restorer- | Восстанавливает размеры всех окон программы, имевшие место до ее свертывания. | ||
procedure RestoreTopMosts ; | Восстанавливает действие стиляfsTopMostдля всех окон программы | ||
procedure Run; | Запускает цикл получения и обработки всех сообщений Windows | ||
procedure ShowException(E: Exception); | Реализует обработку исключительных ситуаций, заданную по умолчанию. | ||
procedure Terminate; | Завершает работу программы | ||
procedure UnhookMainWindow(Hook: TWindowHook); | Удаляет перехватчик сообщений, ранее установленный методомHookMainWindow. Параметр Hook — имя той же функции перехвата, что и при обращении к методуHookMainWindow. | ||
может временно приостановить свою работу до тех пор, пока не будут обработаны все предназначенные ей сообщения Windows. Это бывает необходимо для обновления видимых компонентов в процессе отображения длительного времени цикла работы (например,ProgressBar).
ФункцияMessageBox дает удобное средство вывода на экран небольшого сообщения. ПараметрFlags задает количество и тип кнопок на окне (ОК, Cancel, Abort, Retry, Yes, No), а также кнопку по умолчанию; он же определяет вид изображений в окне (восклицательный знак, буква i и т.п.) и другие параметры окна. ФункцияMessageBox возвращает целое значение от 1 до 6, определющее тип нажатой клавиши или О-в случае ошибки.
События классаTAppli.cati.on представлены в табл. 6.3.
Таблица б.З
Событие | Описание |
property OnActivate: TNotifyEvent read FOnActivate write FOnActivate; | Возникает, когда программа получает фокус ввода |
property OnDeactivate: TUotifyEvent read FOnDeactivate write FOnDeactivate; | Возникает, когда программа теряет фокус ввода |
TExcaptionEvent « procedure (Sender: TObject; B: Exception) of object; property OnException: TExceptionEvent read FOnException write FOnException; | Обработчик этого события реализует обработку исключительных ситуаций, заданную по умолчанию |
THelpEvent = function(Command: Word; Data: Longint; var CallHelp: Boolean): Boolean of object; property OnHelp: THelpEvent read FOnHelp write FOnHelp; | Возникает при каждом обращении к справочной системе |
property OnHint: TNotifyEvent read FOnHint write FOnHint; | Возникает при необходимости отобразить длинную часть всплывающей подсказки |
TIdleEvent = procedure (Sender: TObject; var Done: Boolean) of object; property Onldle: TIdleEvent read FOnldle write FOnldle; | Обработчик этого события реализует фоновую работу |
TMessageEvent = procedure (var Msg: TMsg; var Handled: Boolean) of object; property OnMessage: TMessageEvent read FOnMessage write FOnMessage; | Возникает при получении программой сообщения Windows, что позволяет обработать сообщения до того, как их получит активная форма |
property OnMinimize: TNotifyEvent read FOnMinimize write FOnMinimize; | Возникает при свертывании программы |
property OnReatore: TNotifyEvent read FOnBestore write FOnRestore; | Возникает после восстановления программы после ее свертывания |
property OnShowHint: TShowHintEvent read FOnSbowHint write FOnShowHint; | Возникает при необходимости отобразить окно с оперативной подсказкой |
Событиеonldla возникает, когда программа обнаруживает, что ее очередь сообщений пуста. Обработчик .этого события может незаметно для пользователя выполнить вспомогательную работу, например, проверить орфографические
ошибки или собрать и обработать статистические данные. При этом выполняемая в обработчике работа не должна занимать много времени. Если фоновая работа занимает много времени, ее следует разбить на части и периодически вызывать методHandleMessage. Обработчик в параметреDone сообщает о необходимости продолжить фоновую работу(Done=Falsa) или об ее завершении. В первом случае программа просмотрит очередь сообщений и после ее очистки вернет управление обработчикуonldle. Во втором случае программа будет ожидать поступления новых сообщений. Вообще, в 32-разрядных версиях Windows рекомендуется вместо этого способа организовывать отдельный поток команд и фоновую работу осуществлять в нем.
Гповальный объект Screen
ОбъектScreen классаTScreen инкапсулирует свойства и методы, упрощающие работу с дисплеем компьютера, например с для изменения указателя мыши используется его свойствоCursor (см. §4.6). Большинство свойств объектаScreen доступны только для чтения. Наиболее важные свойства приведены в табл. 6.4.
Таблица 6.4
Свойство | Описание | |
property ActiveControl: TWinControl; | Ссылка на элемент с фокусом ввода | |
property ActiveForm: TForm ; | Ссылка на окно с фокусом ввода | |
property Cursor: TCursor; | Текущий указатель мыши для окон программы | |
property Cursors[Index: Integer]: HCursor; | Открывает доступ к зарегистрированным указателям мыши по индексам | |
property DataModuleCount: Integer; | Количество модулей данных в программе | |
property DataModules [Index: Integer]: TDataModule; | Список модулей данных | |
property DefaultKbLayout: HKL; | Исходная раскладка клавиатуры | |
proj. 3rty DesktopHeight: Integer; | Высота экрана относительно высоты экрана первичного монитора | |
property DesktopLeft: Integer; | Горизонтальное положение левого верхнего угла экрана левого верхнего угла экрана первичного монитора | |
property DesktopTop: ! Integer; | Вертикальное положение левого верхнего угла экрана относительно левого верхнего угла экрана первичного монитора | |
!property DesktopWidth: Integer; | Ширина экрана относительно ширины экрана первичного монитора | |
property Fonts: TStrings; | | Список имен всех установленных шрифтов | |
property FormCount: Integer; | Общее количество всех показываемых на экране окон программы | |
property Forms[Index: Integer]: TForm; | Открывает доступ к окну программы по его индексу | |
property Height: Integer; | Высота экрана в пикселах | |
property HintFont: TFont; | Шрифт оперативной подсказки | |
property IconFont: TFont; | Шрифт надписи на кнопке свернутой программы | |
property MenuFont: TFont; | Шрифт команд меню | |
property MonitorCount: Integer; | Количество мониторов в операционной системе | |
property Monitors[Index: Integer]: TMonitor; | Открывает индексированный доступ к монитору | |
property PixelsPerlnch: Integer; | Содержит разрешающую способность экрана в пикселах на линейный дюйм | |
property Width: Integer; | Ширина экрана в пикселах |
При работе под управлением W2000/XP программа может работать со множеством мониторов, которые в совокупности образуют первичный монитор, составленный из остальных слева направо и сверху вниз. Ряд свойств DesJctopXXXX определяют положение и размеры текущего монитора в координатах первичного. Если программа работает с единственным монитором, значения этих свойств и свойствХХХХ (Height, Width и т.д.) совпадают. СвойствоMonitorCount содержит общее количество обслуживаемых мониторов.
С объектомScreen связаны 2 события: property OnActiveControД.Change: TNotifyEve.it; - возникаетПри переходефокуса ввода от одного элемента другому;
property OnActiveFoxmChange: TNotifyEvent; - возникает при переходе фокуса ввода от одной формы к другой;
Глобальный объект Printer
ОбъектPrinter классаTPrinter автоматически создается, если в программе есть ссылка на модульPrinter». При помощи свойств и методов этого класса можно распечатывать не только тексты, но и графику. Настроить принтер можно с помощью специального компонента VCL - стандартного системного диалогаTPrinterSetupDialog (см.§4.1). Вывод на принтер в Windows ничем не отличается от вывода на экран: рисование осуществляется с использованием свойстваCanvas объектаPrinter. Размер листа в пикселах определяют свойстваHeight иWidth, а набор принтерных шрифтов - свойство Fonts. Основные свойства объектаPrinter приведены в табл. 6.5.
Свойство | Описание |
property Aborted: Boolean; | СодержитTrue, если выполнение предыдущего задания на печать было досрочно прекращено |
property Canvas: TCanvas; | Канва принтера - основной инструмент создания изображения на листе бумаге |
TPrinterCapability = (pcCopies, pcOrientation, pcCollation); TPrinterCapabilities = set of TPrinterCapability; property Capabilities: TPrinterCapabilities; | Содержит текущие параметры драйвера принтера: pcCopies - может печататься несколько копий док-та; pcOrientation - драйвер поддерживает разную ориентацию листа pcCollation - документ печатается в подбор по экземплярам |
property Copies: Integer; | Указывает требуемое количество копий документа |
property Fonts: TStrings; | Содержит список доступных принтеру шрифтов |
TPrinterOrientatiOn = (poPor.trai t, poLandscape) ; property Orientation: TPrinterOrientatiOn; | Определяет ориентацию листа бумаги |
property PageHeight: Integer; | Содержит высоту листа бумаги в пикселах принтера |
property PageNumber: Integer; | Содержит номер печатаемой страницы документа (с 1) |
property PageWidth: Integer; | Содержит ширину листа бумаги в пикселах принтера |
property Printerlndex: Integer; | Содержит индекс принтера, назначенного принтером по умолчанию в спискеPrintersокна параметров печати |
property Printers: TStrings; | Содержит список всех доступных принтеров |
property Printing: Boolean; | СодержитTrue, если принтер занят печатью документа |
property Title: string; | Содержит имя задания на печать |
Методы объектаPrinter представлены в табл. 6.6.
Таблица 6.6
Метод | Описание |
procedure Abort; | Досрочно прекращает печать документа |
procedure BeginDoc; | Начинает печать документа |
procedure EndDoc; | Завершает печать документа |
procedure NewPage; | Начинает печать новой страницы документа |
Глобальный объект Clipboard
Класс TClipboard предоставляет программисту интерфейс с буфером, обмена Windows. При использовании модуляClipbrd, становится доступным глобальный объектClipboard классаTClipboard, инкапсулирующий свойства и методы для работы с буфером обмена. Свойства объектаClipboardприведены в табл. 6.7.
Таблица 6.7
Свойство | Описание |
property AsText: string; | Рассматривает содержимое буфера обмена как текстовую строку неограниченной длины |
property FormatCount: Integer; | Содержит число форматов, в буфере на данный момент. |
property Formats[Index: Integer]: Word; | Открывает доступ к данным по формату, указанному индексомIndex |
Методы объектаClipboard приводятся в табл. 6.8.
___________________________________________________________ Таблица 6.8
Метод | Описание |
procedure Assign (Source: TPersistent); | Копирует изображение в буфер обмена |
procedure Clear; | Очищает буфер обмена |
procedure Close; | Уменьшает на 1 счетчик блокировок буфера обмена и закрывает его, если счетчик содержит 0. |
function GetTextBuf (Buffer: PChar; BufSire: Integer): Integer; | Копирует из буфера обмена не болееBufSizeсимволов в текстовый буферBuffer и возвращает действительное число скопированных символов |
procedure HasFormat (Format: Word) : Boolean; | Возвращает значениеTrue, если буфер обмена содержит данные в форматеFormat: CF_TEXT - текст с CR-LF в конце каждой строки. Нулевой символ означает конец текста. CF_BITMAP - BMP-файл. CF~MBTAFILEPICT - WMF-файл. CF_PICTURE - Объект типа TPicture. CF COMPONENT - Объект - наследник TPersistent. |
procedure Open; | Увеличивает на 1 счетчик блокировок буфера обмена и открывает его, если он еще не был открыт |
procedure SetTextBuf (Buffer: PChar); | Помещает в буфер обмена содержимое текстового буфераBuffer |
Большая nactb компонентов, предназначенных для хранения текста и/или изображений, имеют собственные методы для работы с буфером обмена. Например, текстовые поляTEdit, ТМешо, TRichEdit имеют методы CopyToClipboard, CutToClipboard, PasteFramClipboaxd. Компонент 'IImage имеет свойствоPicture классTPicture, которое инкапсулирует
методыLoadFromClipboardFormat, S aveToC 1 ipbos rdForma t и RegisterClipboardFormat - с помощью этих методов компонент обменивается с буфером изображениями определенного формата и может зарегистрировать в нем новый формат изображения. Тем не менее эти и другие компоненты для работы с буфером могут использовать свойствоAsText объекта Clipboard и его методыAssign, GetTextBuffer, SetTextBuf f er.
Для копирования в буферобмена графических и текстовых данных используются различные методы. Чтобы поместить в буфер обмена изображение, необходимо обратиться к методуAssign буфера. Clipboard.Open;
Clipboard.Assign (Image1.Picture); Clipboard.Close;
Для копирования изображения из буфера обмена можно воспользоваться методомAssign компонентаTImage: CI ipboard.Open;
Imagel.picture.Assign (Clipboard) ; Clipboard.Close;
Для работы с текстовой информацией используются методыSetTextBuf и GetTextBuf. Также можно копировать текст напрямую через свойствоAsText.Например:
Clipboard. Open ;
Labell.Caption:» Clipboard.AsText; Clipboard.Close;
Можно поместить в буфер обмена содержимое свойстваCaption метки: CI ipboard. Open ;
Clipboard.AsText :=* Labell.Caption; Clipboard.Close;
ИБЛИОГРАФИЧЕСКИЙ СПИСОК
· Александровский А.Д. Delphi 4: Шаг в будущее,- М.: ДМК, 1999.-524 е.
· Архангельский А.Я. 100 компонентов общего назначения библиотеки Delphi 5.-М : БИНОМ, 1999.-215 с.
· Архангельский А.Я. Интегрированная среда разработки Delphi. От версии 1 до версии 5.- М.: БИНОМ, 1999.-266 с.
· Архангельский А.Я. Программирование в Delphi 4.- М.: БИНОМ, 1999.— 761 с.
· Архангельский А.Я. Разработка прикладных программ для Windows в Delphi 5 - М.: БИНОМ, 1999.-250 с.
· Архангельский А.Я. Object Pascal в Delphi 5.- М.: БИНОМ, 1999.-219 с.
· Баас Р., Фервай М., Гюнтер X. Delphi 5 - Киев: Ирина: BHV, 2000.-494 с.
· Дантеманн Д., Мишел Д., Тейлор Д. Программирование в среде Delphi. - Киев: НИПФ «ДиаСофт Лтд.», 1995 .-608 с.
· Дарахвелидзе П.Г., Марков Е.П. Delphi 4.- СПб.: BHV-Санкт-Петербург, 1999.-802 с.
· Дарахвелидзе П.Г., Марков Е.П., Котенок О.А. Программирование в Delphi 5.- СПб.: BHV-Санкт-Петербург, 2000.-748 с.
П.Елманова Н.З., Трепалин С.В. Delphi 4: Технология COM: OLE. ActiveX. Автоматизация. MIDAS. Microsoft Transaction Server.- M.: Диалог-МИФИ, 1999.-318 с.
. Епанешникоз A.M., Епанешников B.A. DELPHI 4: Среда разработки,- M.: Диалог-МИФИ, 1999.-304 с.
. Иваноьа Г.С., Ничушкина Т.Н., Пугачев Е.К. Объектно-ориентированное программирование,- М.: Изд-во МГТУ им. Н.Э. Баумана, 2001.-320 с.
. Культин Н. Delphi 3: Программирование на Object Pascal.- СПб.:ВНУ- Саякт-Петербург, 1998.-304 с.
. Канту М., Гуч Т., Лэм Д.Ф. Delphi: Руководство разработчика.- М.; Киев: Энтроп: Десс: Век+, 1999.-749 с.