Delphi 6 программирование

         

МЕХАНИЗМ ДЕЙСТВИЙ ACTION



17.7. МЕХАНИЗМ ДЕЙСТВИЙ ACTION

В Delphi 4...6 введен специальный механизм действий, дающий удобное средство централизованной реакции программы на те или иные действия пользователя. Для реализации действий в страницу Standard палитры компонентов включен специальный компонент

TActionList (CM. П. 18.1.15),

а в объект TComponent - свойство Action:

property Action: TBasicAction;

Централизация необходима потому, что подавляющее большинство промышленных программ для Windows содержат два или более интерфейсных элемента, реализующих одно и то же действие. Например, в среде Delphi некоторые команды главного меню дублируются соответствующими пиктографическими кнопками (в принципе любая команда меню Delphi может иметь кнопочный эквивалент).

Компонент TActionList содержит список названий действий и связанных с ними имен подпрограмм, которые эти действия реализуют. Чтобы связать компонент с нужным действием, достаточно раскрыть список его опции Action (этот список содержит имена всех действий во всех компонентах TActionList) и выбрать нужное название. При этом обычно меняется пиктографическое изображение и/или надпись на компоненте, а также связанная с ним оперативная подсказка (Hint). Свойство Action используется только после создания и наполнения списка (списков) TActionList.



ИНТЕРФЕЙС DRAG&DROP



17.8. ИНТЕРФЕЙС DRAG&DROP

Операционная система Windows широко использует специальный прием связывания программ с данными, который называется Drag&Drop (перетащи и отпусти). Такой прием в Проводнике windows используется для копирования или перемещения файлов, а также для запуска обрабатывающей программы. Если, например, файл с расширением doc “перетащить” на пиктограмму WinWord, автоматически запустится текстовый редактор word for windows и в его окне появится текст из этого файла.

В Delphi реализован собственный интерфейс Drag&Drop, позволяющий компонентам обмениваться данными путем “перетаскивания” их мышью. Этот интерфейс определяется двумя свойствами и тремя событиями, доступными каждому видимому компоненту.[ В Delphi б события могут дублировать сложные свойства и наоборот. Сложными в данном случае называются свойства, ссылающиеся на внутренние объекты. ]

Свойство

TDragMode = (dmManual, dmAutomatic);

property DragMode: TDragMode;

определяет, как будет выполняться весь комплекс действий, связанных С Drag&Drop: dmManual - Вручную (программой); dmAutomatic -автоматически (свойствами и методами компонентов). Значение dmManual означает, что все необходимые для обслуживания интерфейса события генерируются программой, dmAutomatic - события инициируются свойствами и методами компонентов. Во всех случаях программист должен написать обработчики этих событий (см. ниже).

Свойство property DragCursor: TCursor;

определяет вид указателя мыши в момент, когда над компонентом “протаскиваются данные”. Если компонент готов принять данные, он устанавливает в это свойство значение crDrag l3, в противном случае - crNoDrag 0. Установка этих свойств осуществляется автоматически, если DragMode = dmAutomatic. Событие TDragState = (dsDragEnter, dsDragLeave, dsDragMove) ;

TDragOverEvent = procedure(Sender, Source: TObject;



X, Y: Integer; State: TDragState; var Accept: Boolean)

of object; property OnDragOver: TDragOverEvent;

возникает в момент перемещения указателя мыши “с грузом” над компонентом. Здесь sender - компонент, который возбудил событие (обычно это Self - сам компонент-получатель; при ручном управлении механизмом Drag&Drop это может быть не так); source - компонент-отправитель “груза”; х, y - текущие координаты указателя мыши в пикселях клиентской области компонента; State - состояние указателя (dsDragEnter - только что появился на компонентом; dsDragLeave -только что покинул компонент или бьша отпущена кнопка мыши;

dsDragMove - перемещается над компонентом). В параметре Accept обработчик сообщает, готов ли компонент принять данные (т rue - готов).

Событие

TDragDropEvent = procedure(Sender, Source: TObject;

X, Y: Integer) of object;

property OnDragDrop: TDragDropEvent;

означает, что пользователь “бросил” данные на компонент. Параметры обработчика совпадают по назначению с одноименными параметрами OnDragOver.

Наконец, при завершении перетаскивания (вне зависимости от того, приняты данные или нет) возникает событие TEndDragEveht = procedure(Sender, Target: TObject;X, Y: Integer) of objects; property OnEndDrag: TEndDragEvent;

где sender - отправитель данных; Target - получатель данных или nil, если никто не принял “посылку”; X, Y - координаты мыши в момент отпускания левой кнопки.

Чтобы проиллюстрировать использование механизма Drag&Drop, загрузите описанную в гл. 5 учебную программу, установите во всех ее компонентах в свойство DragMode значение dmAutomatic и создайте такой обработчик события OnDragOver для метки:

procedure TfmExample.IbOutputDragOver(Sender, Source: TObject;

X, Y: Integer; State: TDragState;

var Accept: Boolean);

begin

Accept := True;

lbOutput.Caption := (Source as TComponent).Name

end;

Теперь перетаскивание любого компонента на метку IbOutput заставит ее показать имя перетаскиваемого компонента (Рисунок 17.5).



ИНТЕРФЕЙС DRAG&DOCK



17.9. ИНТЕРФЕЙС DRAG&DOCK

В Delphi введена поддержка специального интерфейса Drag&Dock (перетащи и причаль), с помощью которого можно перетаскивать мышью компоненты на новое место. В среде Delphi этот интерфейс используется для настройки кнопок инструментальных панелей (см. гл. 2).

В интерфейсе Drag&Dock участвуют два компонента: принимающий компонент (всегда - потомок TWinControl) и перетаскиваемый компонент (потомок TControl).

Принимающий компонент должен иметь значение True в своем свойстве Docksite. Поскольку Drag&Dock является разновидностью более общего интерфейса Drag&Drop, в TControi введено дополнительное свойство

property DragKind: TDragKind;

type TDragKind = (dkDrag, dkDock) ;

с помощью которого различаются способы использования мыши: для Drag&Drop (dkDrag) или для Drag&Dock (dkDock). И у перетаскиваемого компонента, и у компонента-приемника эти свойства должны иметь значения dkDock.

Количество установленных на форме перетаскиваемых компонентов (Т. С. компонентов, у которых DragKind=dkDock И DockSite=False) Определяется свойством DockClientCount, а их список хранится в индексированном свойстве DockClients.

Для реализации Drag&Dock в класс TControl введены такие дополнительные свойства и события.

property AutoSize: Boolean;

Разрешает (True) или запрещает (False) оконному компоненту менять свои размеры автоматически в зависимости от количества и размеров содержащихся в нем дочерних компонентов. Свойство

property FloatingDockSiteClass: TWinControlClass;

определяет класс окна, в которое будет погружен дочерний элемент вне границ оконного элемента. Неоконные компоненты могут не только перетаскиваться в оконные компоненты-приемники, но и покидать их. После “отчаливания” от компонента-приемника неоконные элементы автоматически окружаются окном, тип которого содержит свойство FloatingDockSiteClass. По умолчанию это окно содержит уменьшенный по высоте заголовок и системную кнопку закрытия. В свойстве

property DockOrientation: TDockOrientation;

type TDockOrientation = (doNoOrient,doHorizontal,doVertical);

можно установить (или получить) ориентацию, которую будет иметь “причаливаемый” компонент в окне родителя: doNoOrient -сохраняется исходная ориентация перемещаемого компонента; do-Horizontal (dovertical) - компонент будет иметь горизонтальную (вертикальную) ориентацию. С помощью свойства

property LRDockWidth: Integer;

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

property TBDockHeight: Integer;

- высоту последнего вертикально расположенного компонента.

Свойства

property UndockHeight: Integer; property UndockWidth: Integer;

определяют соответственно высоту и ширину последнего “отчалившего” компонента. Свойство

property Constraints: TSizeConstraints;

с помощью объекта класса TSizeConstraints накладывает ограничения на возможные размеры “причаливаемого” компонента (задает максимальные и минимальные величины для высоты и ширины).

События

property OnDockDrop: TDockDropEvent;

property OnDockOver: TDockOverEvent;

type TDockOverEvent = procedure(Sender: TObject; Source:

TDragDockObject; X, Y: Integer; State: TDragState;

var Accept:

Boolean) of object;

аналогичны событиямиOnDragDrop и OnDragOver (CM. П.17.7). Co6ытие

property OnGetSiteInfo: TGetSiteInfoEvent;

возникают перед событием OnDragDrop. Его обработчик должен сообщить объекту TDragDockObject, который автоматически связывается с перемещаемым объектом, некоторую дополнительную информацию (размеры, которые будет иметь принимаемый объект, будет ли он погружен в “плавающее” окно и т. п.). Наконец, событие

property OnUnDock: TUnDockEvent;

type TUnDockEvent = procedure (Sender: TObject; Client: TControl;

var Allow: Boolean) of object;

возникает при “отчаливании” неоконного компонента от своего родителя. Обработчик этого события должен поместить в Allow значение True, если компонент client может покинуть границы своего владельца sender.

Все указанные события обрабатываются автоматически, если оба компонента (клиент и сервер) содержат значение dmAutomatic в своем свойстве DragMode.

Чтобы познакомиться в действии с технологией Drag&Dock, поместите на пустую форму панель трапе! и кнопку TButton, установите для панели значение True в свойство Docksite, установите для обоих компонентов Значение dkDock в свойстваа DragKind И dmAutomatic в свойства DragMode. После запуска программы перетащите кнопку на панель, а затем стащите ее обратно.



ПОДДЕРЖКА СПРАВОЧНОЙ СЛУЖБЫ



17.10. ПОДДЕРЖКА СПРАВОЧНОЙ СЛУЖБЫ

Все видимые элементы имеют свойства

property Hint: String;

property ShowHint: Boolean;

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

Чтобы компонент смог показать ярлычок, нужно поместить текстовую строку в его свойство Hint и присвоить свойству showHint значение True. Обычно ярлычок содержит максимально лаконичный текст, чтобы не отнимать слишком большую площадь экрана. Вы можете дополнить этот текст развернутым сообщением в любом компоненте, который способен отображать текст. Как правило, это панель статуса, занимающая нижнюю часть формы. Чтобы отобразить <<длинное” сообщение, его нужно прежде всего поместить в строку Hint сразу после “короткого” и отделить обе части символом “[”.

Например:

MyControl.Hint := 'Подсказка!Развернутое сообщение';

Далее, необходимо в самом начале программы (обычно в обработчике события Oncreate главной формы) указать программе метод, который будет обрабатывать событие onHint. Это событие возникает в момент появления ярлычка и предназначено для отображения длинного сообщения, которое метод-обработчик может получить в свойстве Hint глобального объекта Application.

Например:

type

TFor.gif" >




ПОДДЕРЖКА СОМ



17.11. ПОДДЕРЖКА СОМ

Модель компонентных объектов СОМ (Component Object Model) представляет собой технологию обмена объектами между разными приложениями и даже между разными сетевыми машинами. Эта технология усиленно развивается Microsoft и в перспективе может привести к тому, что ваша программа сможет использовать объект (напомню, что объект - это фрагмент исполняемого кода), установленный на машине, находящейся в другой части света и не относящейся к тому же классу, что и ваша машина, т. е. написанный на другом языке программирования и реализованный другим набором машинных инструкций!

В основе СОМ лежат те же идеи, что и в OLE, с той разницей, что СОМ-сервер может выполнять обработку СОМ-клиента на машине сервера.

Разумеется, и сервер, и клиент в технологииСОМ могут быть установлены на одной и той же машине, однако в OLE это фактически является обязательным требованием. Если клиент и сервер выполняются на разных машинах, реализуется распределенный вариант СОМ - DCOM (Distributed Component Object Model).

В Delphi включены средства поддержки СОМ как в виде готовых компонентов (например, DCOMConnection), так и на уровне класса TComponent, т. е. относящиеся ко всем компонентам Delphi.

Свойство этого класса

property ComObject:IUnknown;

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

Свойство

property VCLComObject: Pointer;

предназначено для внешнего использования (т. е. для экспорта СОМ-объекта) и поставляет ссылку на СОМ-объект Delphi.



СВОЙСТВА РАЗНОГО НАЗНАЧЕНИЯ



17.12. СВОЙСТВА РАЗНОГО НАЗНАЧЕНИЯ

Узнать текущее состояние любого управляющего элемента на этапе прогона программы можно с помощью свойства

type TControlState = set of (csLButtonDown, csClicked, csPalette, csReadingState, csAlignmentNeeded, csFocusing, csCreat-ing, csCustomPaint, ceDestroyingHandle);

property ControlState: TControlState;

класса TControl.

Элементы множества TControlState имеют следующий смысл:

csLButtonDow Над элементом была нажата и еще не отпущена левая кнопка мыши
n csClicked То же, что csLButtonDown, но устанавливается, если стиль компонента (см. ниже) содержит флаг csClickEvents и означает, что нажатие кнопки интерпретируется как щелчок
csPalette Элемент или его родитель получил сообщение

WMPALETTCHANGED

csReadingState Элемент читает данные из потока
csAlignmentNeeded Элемент нуждается в перерисовке, т. к. изменилось его свойство Alignment
csFocusing Программа пытается передать элементу фокус ввода
csCreating Элемент и/или его родительские и дочерние элементы находятся в стадии создания. Флаг очищается после завершения процесса
csCustomPaint Элемент перерисовывается
csDestroyingHandle Разрушается Windows-дескриптор элемента

Свойство

type TControlStyle = set of (csAcceptsControls, csCaptureMouse, csDesignInteractive, csFramed, csClickEvents, csSetCaption, csOpaque, csDoubleClicks, csFixedWidth, csFixedHeight, csNoDesignVisible, csReplicatable, csNoStdEvents, csDisplayDraglmage, csReflector, csActionClient, csMenu.gif" >




TColorBox список выбора цвета



18.2.17. TColorBox - список выбора цвета

Компонент введен в версии 6. Он представляет собой комбинированный список, опциями которого являются цвета, т. е. предназначен для отображения и выбора цвета. В отличие от компонентов

TColorGrid (страница Samples) и TColorDialog (страница Dialogs) состав отображаемых им цветов может меняться.

Многие свойства, методы и события компонента совпадают с одноименными свойствами, методами и событиями его ближайшего родственника - компонента TCоmbоВох (см. п. 18.1.10).

Специфичные свойства компонента:

property ColorNames[Index: Inte

ger]: Strings;

Возвращает имя цвета по его индексу в списке выбора
property Colors[Index: Integer]:

TColor;

Содержит список цветов
property DefaultColorColor:

TColor;

Указывает умалчиваемый цвет. Свойство Style должно включать флаги cbSystem Colors И cbIncludeDefault
property NoneColorColor: TColor; Указывает цвет “нет цвета”. Свойство Style должно включать флаги cbSystem Colors и cbIncludeNone
property Selected: TColor; Указывает текущий выбранный цвет
type TColorBoxStyles =

(cbStandardColors, cbExtendedColors, cbSystemColors, cblnclude None, cbIncludeDefault, cbCustomColor, cbPrettyNames);

TColorBoxStyle = set of TColor

BoxStyles; property Style: TColorBoxStyle

Определяет отображаемые компонентом цвета: cbStandardColors - список содержит 16 основных цветов; cbExtendedColors -список содержит дополнительные цвета, определенные в модуле Graghics; cbSystemColors - в списке отображаются цвета cIMoneyGreen,cISkyBlue,cICream и cIMedGray; cbIncludeNone -список содержит опцию cINone;cbIncludeDefault -список содержит опцию cIDefault; cbCus tomcolor - первая опция списка открывает стандартный диалог TColorDialog; cbPrettyNames - имена цветов отображаются без префикса cl


TCoolBar и TCoolBand инструментальная



18.3.17. TCoolBar и TCoolBand - инструментальная панель и полосы для нее

Компонент TCoolBar предназначен для создания настраиваемых инструментальных панелей. Для каждого размещаемого на нем элемента TCoolBar создает объект класса TCoolBand (полоса), который может изменять свои размеры и положение в пределах границ компонента.

Следует сразу же заметить, что в отличие от TcontrolBar (страница Additional палитры компонентов) компонент TCoolBar предназначен для примерно таких же задач, но и в версии 2, где он появился впервые, и в версии б он все еще кажется “сырым”, плохо отлаженным.

Центральным свойством компонента является Bands - массив созданных в компоненте полос TCoolBand. Каждая полоса может иметь текст, пиктограмму и произвольный управляющий элемент. В отличие от ттоо1ваг или TControiBar полоса в TCoolBar всегда содержит только один интерфейсный элемент, но ничто не мешает этому элементу быть элементом-контейнером для размещения нескольких компонентов. Размещенный на полосе компонент окружен специальным окном TCoolBar и всегда стремится занять левый верхний угол полосы, при этом остальные размеры полосы изменяются так, чтобы полностью охватить элемент.

Поясним сказанное несложным примером.

Поместите на пустую форму компонент TCoolBar - он тотчас же займет верхнюю часть формы, так как по умолчанию его свойства Alignment содержит alTop. Щелкните по компоненту левой кнопкой и выберите Bands Editor (редактор полос). Окно редактора похоже на многие другие используемые в Delphi окна-редакторы: щелкните по кнопке, чтобы вставить в компонент новую полосу. В окне Инспектора объектов можете задать текст для полосы и связанную с ней пиктограмму свойствами соответственно Text и imageindex (предварительно компонент в свойстве images должен уже содержать ссылку на связанный с ним контейнер TimageList). Свойство BitMap используется для заполнения полосы чередующимся узором. Для простоты ограничьтесь указанием текста полоса i и закройте редактор полос. Поместите ниже полосы, но в тот же контейнер CoollBar1 любой управляющий элемент, например, редактор TEdit. Подобно полосе он растянется вдоль верхнего края и будет окружен специальным окном с полосой-кнопкой для реализации механизма Drag&Dock. Вновь раскройте редактор полос, щелкните по ранее установленной полосе и в Инспекторе объектов раскройте список в свойстве Control - в нем окажется только что вставленный в форму компонент TEdit. Щелкните по нему - и он “перепрыгнет” на первую полосу, оставив ранее занимавшую им полосу TCoolBar пустой. Таким способом происходит связывание полосы TCooiBar с компонентом. Освободившуюся полосу можно связать с новым управляющим элементом (например, ComboBox) и т. д. Вид работающей программы показан на Рисунок 18.33.

КОМПОНЕНТЫ СТРАНИЦЫ STANDARD



18.1. КОМПОНЕНТЫ СТРАНИЦЫ STANDARD

18.1.1. TFrame - рама и шаблоны компонентов

Этот компонент впервые введен в Delphi 5. Он определяет раму -контейнер для размещения других компонентов. В функциональном отношении компонент почти повторяет свойства формы и отличается от нее в основном лишь тем, что его можно помещать на формы или в другие рамы. Фактически рама представляет собой удобное средство создания шаблонов - произвольных наборов компонентов, максимально приспособленных для нужд конкретного пользователя. Раз созданный шаблон может подобно любому другому компоненту размещаться на форме или другой раме (допускается неограниченная вложенность рам). Замечу, что любые изменения в базовой раме (т. е. в раме, сохраненной в палитре) тут же отображаются во всех проектах, использующих данную раму.

Примечание
Примечание

Создание шаблонов - отнюдь не исключительная особенность Delphi 5 и б - соответствующие механизмы были включены и в две предыдущие версии 3 и 4. Рамы лишь упрощают процесс создания шаблонов. В конце параграфа приводится простая методика создания и использования шаблонов без рам, т. е. так, как это возможно сделать в версиях 3 и 4.

Первоначально проекту ничего не известно о, возможно, ранее созданных рамах, поэтому попытка поместить на пустую форму компонент-раму вызовет сообщение:

No frames in project.

To create a frame select File New Frame.

(В проекте нет рам. Чтобы создать раму выберите File | New Frame.)

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

Создадим простую раму, содержащую две кнопки - mbOk и mbCancel. Такой шаблон может пригодится при конструировании различных диалоговых окон.

Создайте новый Проект (File | New Application). если он все еще связан с учебной формой, определенной в гл. 5, предварительно вызовите окно редактора Репозитория (Tools | Repository), в окне pages щелкните по For.gif" > а)

КОМПОНЕНТЫ СТРАНИЦЫ ADDITIONAL



18.2. КОМПОНЕНТЫ СТРАНИЦЫ ADDITIONAL

18.2.1. TBitBtn - кнопка с изображением

Пиктографическая кнопка TBitBtn представляет собой популярную разновидность стандартной кнопки TButton. Ее отличительная особенность - свойство Glyph, с помощью которого определяется растровое изображение, рисуемое на поверхности кнопки. В состав поставки Delphi входит множество рисунков, разработанных специально для размещения в этих кнопках (по умолчанию для старших версий Delphi эти рисунки размещаются в папке program Files |

Common Files | Borland Shared | Images | Buttons, для остальных версий - в папке images l Buttons каталога размещения Delphi).

Свойство Kind определяет одну из 11 стандартных разновидностей кнопки, показанных на Рисунок 18.9.



TPageControl набор страниц с закладками



18.3.2. TPageControl - набор страниц с закладками

Компонент TPageControl в отличие от TTabControl может содержать несколько перекрывающих друг друга панелей класса ттаь-Sheet. Каждая панель выбирается связанной с ней закладкой и может содержать свой набор помещенных на нее компонентов.

Чтобы на этапе конструирования добавить новую панель или выбрать ранее вставленную, щелкните по компоненту правой кнопкой мыши и выберите New page (новая панель), Next page (следующая панель) или previous page (предыдущая панель). Смена панелей идет циклически, т. е. после показа последней показывается первая и наоборот.

Помимо свойств HotTrack, MultiLine, ScrollOpposite, TabHeight, TabPosition и TabWidth, которые аналогичны одноименным свойствам TTabcontrol, компонент имеет следующие специфичные свойства:

property ActivePage: TTab-Sheet; Содержит ссылку на активную панель. Установка нового значения ActivePage размещает соответствующую панель поверх остальных. Для выбора новой панели следует использовать методы SelectNextPage и FindNextPage
property ActivePageIndex: Integer; Содержит индекс активной панели
property PageCount: Integers; Содержит количество панелей (только для чтения)
property Pages[Index: Integer] : TTabSheet; Возвращает ссылку на панель по ее индексу (только для чтения)

Методы компонента:



function FindNextPage (CurPage: TTabSheet; GoFor.gif" >


Компонент TTabControl представляет собой контейнер



18.3. КОМПОНЕНТЫ СТРАНИЦЫ WIN32

18.3.1. TTabControl - набор закладок

Компонент TTabControl представляет собой контейнер с закладками. Свойство Tabs определяет названия и количество закладок. Событие onchange. возникает при выборе новой закладки и позволяет управлять содержимым окна компонента. Для примера на Рисунок 18.22 показано использование компонента для управления календарем (с помощью TTabControl созданы закладки с названиями месяцев).

Свойства компонента:

property DisplayRect: TRect; Определяет рабочую зону компонента, предназначенную для размещения других компонентов. Клиентская часть компонента содержит зону закладок и рабочую зону
property HotTrack: Boolean; Если содержит True, название закладки автоматически выделяется цветом при перемещении над ней указателя мыши
property Images: TCustomImageList; Определяет объект - хранилище изображений, которые будут прорисовываться слева от текста
property Multi-Line: Boolean; Разрешает расположение закладок в несколько рядов. Если содержит False и закладки не умещаются в границах компонента, в зону закладок автоматически вставляются кнопки прокрутки
property OwnerDraw: Boolean; Разрешает программную прорисовку закладок
property ScrollOpposite: Boolean;

Разрешает/запрещает перемещение неактивных рядов закладок на противоположную сторону компонента. Учитывается, если количество рядов больше 2
type TTabStyle = (tsTabs, tsButtons, tsFlatButtons) ;

property Style: TTabStyle;

Определяет стиль закладок: tsTabs - обычные надписи; tsButtons -трехмерные кнопки; tsFlat Buttons - плоские кнопки

property TabHeight: Smallint; Определяет высоту каждой закладки в пикселях. Если содержит 0, высота закладок выбирается автоматически в зависимости от выбранного шрифта

property Tablndex: Integer; Определяет индекс выбранной закладки или содержит -1, если ни одна закладка не выбрана. Индексация начинается с 0
TTabPosition = (tpTop, tpBottom) ;

property TabPosition: TTab

Position;

Определяет положение зоны закладок относительно рабочей зоны компонента (tpTop - вверху, tpBottom - ВНИЗУ)
property Tabs: TStrings; Определяет надписи на закладках и их количество. Чтобы добавить или удалить закладку, нужно добавить ее надпись к списку Tabs или удалить надпись из списка

property TabWidth: Smallint; Определяет ширину каждой закладки в пикселях. Если содержит 0, ширина каждой закладки выбирается индивидуально в зависимости от длины ее надписи



КОМПОНЕНТЫ СТРАНИЦЫ SYSTEM



18.4. КОМПОНЕНТЫ СТРАНИЦЫ SYSTEM

В этом разделе не описаны расположенные на этой странице компоненты TDDEClient, TDDEClientItem, TDDEServer И TDDEServerItem.

Они рассчитаны на поддержку устаревшей технологии межпрограммного обмена данными DDE - Dynamic Data Exchange (динамический обмен данными), которая в современных программах полностью вытеснена технологией OLE.



КОМПОНЕНТЫ СТРАНИЦЫ DIALOGS



18.5. КОМПОНЕНТЫ СТРАНИЦЫ DIALOGS

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

Работа со стандартными диалоговыми окнами осуществляется в три этапа.

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

На втором этапе осуществляется вызов стандартного для диалогов метода Execute, который создает и показывает на экране диалоговое окно. Вызов этого метода обычно располагается внутри обработчика какого-либо события. Например, обработчик выбора опции меню

Открыть файл может вызвать метод Execute Диалога TOpenDialog, обработчик нажатия инструментальной кнопки сохранить может вызвать такой же метод у компонента TSaveDialog и т. д. Только после обращения к Execute на экране появляется соответствующее диалоговое окно. Окно диалога является модальным окном, поэтому сразу после обращения к Execute дальнейшее выполнение программы приостанавливается до тех пор, пока пользователь не закроет окно. Поскольку Execute - логическая функция, она возвращает в программу True, если результат диалога с пользователем был успешным.

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

Проиллюстрируем сказанное следующим примером. Создадим простую программу для просмотра содержимого текстового файла. Для этого на пустую форму поместите компонент TOpenDialog, a также кнопку TButton и редактор TMето. При работе программы щелчок по кнопке будет сигналом о необходимости загрузить в редактор новый файл. Создайте такой обработчик события OnClick этой кнопки:

procedure TFor.gif" >




имеют более совершенные аналоги



18.6. КОМПОНЕНТЫ СТРАНИЦЫ WIN3.1

Многие компоненты страницы win3. 1 имеют более совершенные аналоги в виде компонентов страницы Win32. Если вы работаете с windows 32, рекомендуется использовать вместо компонентов Win 3.1 компоненты Win32.




КОМПОНЕНТЫ СТРАНИЦЫ SAMPLES



18.7. КОМПОНЕНТЫ СТРАНИЦЫ SAMPLES

Компоненты этой страницы включены в Delphi как образцы (samples) разработки нестандартных компонентов, однако многие из них имеют вполне самостоятельное значение.





TChart построитель графиков



18.2.18. TChart - построитель графиков

Этот компонент предназначен для графического представления числовых данных. На Рисунок 18.18 показан пример использования компонента.

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

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

Вначале компонент помещается на форму. После щелчка по нему правой кнопкой мыши вызывается его вспомогательное меню, которое в числе прочих содержит опцию Edit chart - с помощью этой опции вызывается многолистное окно редактора компонента. Закладка Series этого окна открывает доступ к так называемым сериям - объектам класса TChartSeries, которые, собственно, и будут отображать наборы чисел в графическом виде. Чтобы отобразить данные, нужно создать как минимум одну серию - для этого следует в окне редактора нажать кнопку Add и выбрать подходящий тип графика (Рисунок 18.19).

После закрытия редактора компонент будет содержать примерный вид графика. Однако его реальный вид зависит от фактических данных, которые создаются в работающей программе и добавляются к серии с помощью методов AddX, AddY или AddXY объекта TChartSeries (получить доступ к нужной серии можно с помощью индексированного свойстваSeriesList - первая созданная серия имеет индекс 0, вторая 1 и т. д.). Например, такой обработчик события OnActivate формы создал график, показанный на Рисунок 18.18:

procedure TFor.gif" >



TPageScroller панель с прокруткой



18.3.18. TPageScroller - панель с прокруткой

Компонент служит контейнером для размещения длинных узких компонентов наподобие TToolBar. Его отличительная черта - наличие небольших стрелок прокрутки по сторонам контейнера в случае, если ширина (высота) дочернего окна превышает соответствующий размер компонента. Чтобы увидеть компонент в действии, щелкните по странице Win32 галереи компонентов Delphi (сам компонент TPageScroller на этой странице обычно не виден[ Для разрешения экрана 800х600. ]), и, чтобы получить к нему доступ, следует щелкнуть по кнопке с небольшой стрелкой в правой части страницы.

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

Свойства компонента:

property AutoScroll: Boolean; Разрешает/запрещает автоматическую

прокрутку при перемещении указателя

мыши над кнопкой прокрутки

property ButtonSize: Integer; Определяет размер в пикселях кнопок про

крутки: для горизонтальной ориентации -

ширину, для вертикальной - высоту

property Control: TWinControl; Содержит ссылку на прокручиваемое окно
property DragScroll: Boolean; Указывает, будет ли компонент приемни ком в операциях Drag&Drop. Если содержит True, компонент будет прокручивать дочернее окно при перемещении над ним указателя мыши с “грузом”
property Margin: Integer; Указывает расстояние в пикселях от границы компонента до соответствующей стороны дочернего окна
type TPageScrollerOs-xentation =

(soHorizontal, soVertical) ;

property Orientation: TPageS crollerOrientation;

Определяет ориентацию компонента: soHorizontal -по горизонтали; soVertical -по вертикали
property Position: Integer; Определяет текущее положение прокручиваемого окна относительно границ компонента


РАЗНОВИДНОСТИ ФОРМ



19.1. РАЗНОВИДНОСТИ ФОРМ

Разновидности форм определяются значениями их свойств For.gif" >




СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ ФОРМ



19.3. СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ ФОРМ

Для подключения новой формы к проекту достаточно обратиться к репозиторию и выбрать нужную разновидность формы. Менеджер проекта автоматически подключает новую форму к списку используемых форм и обеспечивает все необходимые действия по ее инициации. Самая первая подключенная к проекту форма (стандартное имя формы - For.gif" >

Pис 19.1. Окно управления проектом

Каждое следующее окно становится видно только после обращения к его методу show или showModal. Чтобы обратиться к этим методам, нужно сослаться на объект-окно, который автоматически объявляется в интерфейсном разделе связанного с окном модуля. Для этого, в свою очередь, главное окно должно знать о существовании другого окна, что достигается ссылкой на модуль окна в предложении uses. Если, например, в ходе выполнения одного из методов главного окна программист захочет вызвать окно с именем fmFor.gif" >



ПРОГРАММЫ С МНОГИМИ ФОРМАМИ



19.4. ПРОГРАММЫ С МНОГИМИ ФОРМАМИ

Сложные программы подчас требуют создания множества форм, каждая из которых решает ту или иную конкретную задачу. Например, при создании систем управления базами данных типичным для проекта будет разработка от 50 до 100 и более форм. Процесс создания такого проекта обычно растягивается на несколько месяцев, а над его реализацией трудятся одновременно несколько программистов. Все это затрудняет ориентацию программиста, его способность быстро вспомнить назначение той или иной формы. В этом случае существенную помощь может оказать файл проекта. Как уже говорилось, рядом с описанием включенного в проекта модуля содержится строка комментария, в которой Delphi указывает имя файла формы. Этот комментарий появляется в диалоговом окне после щелчка по инструментальной кнопке выбора формы Я или выбора опции view | For.gif" >



TActionManager менеджер действий



18.2.19. TActionManager - менеджер действий

Вместе с тремя другими компонентами страницы Additional -

TActionMainMenu.gif" >



TComboBoxEx список выбора с расширенными возможностями



18.3.19. TComboBoxEx - список выбора с расширенными возможностями

Этот компонент впервые введен в версии 6. По сравнению с TCоmboBох (см. п. 18.1.11) он способен рисовать слева от элемента списка небольшое изображение и выводить элемент с заданным отступом от левого края списка (Рисунок 18.34). Кроме того, с каждым элементом можно связать указатель на произвольные данные, размещенные в динамической памяти.



APPLICATION



20.1. APPLICATION

Объект Application относится к классу TAppiication и инкапсулирует важнейшие свойства и методы программы как таковой. Он создается автоматически и доступен любой программе. Объект не помещен в палитру компонентов, поэтому его свойства недоступны на этапе конструирования, но становятся доступны при прогоне программы[ Некоторые свойства программы (в том числе ее пиктограмма, сведения о версии и используемом языке) могут устанавливаться с помощью менеджера проекта (опция project | Options и страница Application). ].

Application является посредником между программой и операционной системой. В частности, с его помощью осуществляется диспетчеризация сообщений Windows, реализуется контекстно-чувствительная справочная служба, он обрабатывает клавиши-акселераторы, исключительные ситуации и т. д.

Ниже описываются некоторые свойства Application для приложения Windows (для приложения Linux объект Application несколько отличается). Опущенные свойства предназначены в основном для прямого обращения к API-функциям Windows.



property Active: Boolean; Содержит True, если любое окно программы имеет фокус ввода
property BiDiMode: TBiDiMode; Определяет свойство bidiMode (см. п. 17.12) для программы в целом
property CurrentHelpFile: Strings; Определяет имя текущего справочного файла
property ExeName: Strings; Содержит полное имя (с маршрутом доступа) исполняемого файла программы
property HelpFile: String; Определяет имя файла справочной службы
property Hint: String; Содержит длинную часть оперативной подсказки
property HintColor: TColor; Определяет цвет фона ярлычка оперативной подсказки
property HintHidePause: Integers; Определяет паузу (в миллисекундах) от момента появления ярлычка до его исчезновения
property HintPause: Integer; Определяет паузу (в миллисекундах) от момента остановки указателя мыши до появления ярлычка
property HintShortPause: Integers; Определяет паузу (в миллисекундах) появления ярлычка при переходе с одного компонента на другой
property Icon: TIcon; Определяет пиктограмму программы
property MainFor.gif" >


SCREEN



20.2. SCREEN

Объект screen класса TScrеen инкапсулирует свойства и методы, упрощающие работу с дисплеем ПК, в том числе с его помощью оперативно изменяется вид используемого программой указателя мыши. Как правило, программа устанавливает указатель в виде песочных часов перед началом длинной по времени работы и восстанавливает умалчиваемую форму после ее завершения. Для этого используется свойство Cursor объекта Screen:

Screen.Cursor := crHourGlass;

// Выполняем длительную работу:

….

// Восстанавливаем умалчиваемую срорму:

Screen.Cursor :== crDefault;

Свойства объекта Screen:



property ActiveControl: TWinCon-

trol;

Содержит ссылку на элемент с фокусом ввода
property ActiveFor.gif" >


PRINTER



20.3. PRINTER

Объект Printer автоматически создается, если в программе указана ссылка на модуль printers. Этот объект предоставляет программисту все необходимое для того, чтобы научить программу выводить данные на один из подключенных к ПК принтеров.

Вывод на принтер в Windows ничем не отличается от вывода на экран: в распоряжение программиста предоставляется свойство сап-vas объекта printer, содержащее набор чертежных инструментов и методы, свойственные классу TCanvas. Размер листа бумаги в пикселях принтера определяют свойства Height и Width, а набор принтерных шрифтов - свойство Fonts.

Свойства объекта printer:

property Aborted: Boolean; Содержит True, если выполнение предыдущего задания на печать было досрочно прекращено
property Canvas: TCanvas; Канва принтера - основной инструмент создания изображения на листе бумаги
type TPrinterCapability =

(pcCopies, pcOrientation, pcCollation) ; TPrinterCapabilities = set of

TPrinterCapability;

property Capabilities: TPrinter

Capabilities;

Содержит возможности текущей настройки драйвера принтера: pcCopies - может печататься несколько копий документа; pcOrien tation -драйвер поддерживает разную ориентацию листа бумаги; pcCollation -документ печатается в подбор по экземплярам
property Copies: Integer; Указывает требуемое количество копий документа
property Fonts: TStrings; Содержит список всех доступных принтеру шрифтов
TPrinterOrientation =

(poPortrait, poLandscape) ;

property Orientation: TPrinterOrientation;

Определяет ориентацию листа бумаги:

poPortrait вертикальная; poLandscape -

горизонтальная

property PageHeight: Integer; Содержит высоту листа бумаги в пикселях принтера
property PageNumber: Integers; Содержит номер печатаемой страницы документа (начинается с 1)
property PageWidth: Integer; Содержит ширину листа бумаги в пикселях принтера
property Printerlndex: Integer; Содержит индекс умалчиваемого принтера в списке Printers
property Printers: TStrings; Содержит список всех доступных принтеров
property Printing: Boolean; Содержит True, если принтер занят печатью документа
property Title: String; Содержит имя задания на печать
Методы объекта printer:
procedure Abort; Досрочно прекращает печать документа
procedure BeginDoc; Начинает печать документа
procedure EndDoc; Завершает печать документа
procedure NewPage; Начинает печать новой страницы документа

Вот как, например, можно напечатать текст, содержащийся в редакторе Memo 1:

procedure TFor.gif" >



CLIPBOARD



20.4. CLIPBOARD

В Windows широко используется буфер межпрограммного обмена данными Clipboard. Если программа Delphi сослалась на модуль Сlipbrd, для нее становится доступным автоматически созданный объект clipboard, инкапсулирующий методы и свойства для работы с буфером.

Свойства объекта clipboard:



property AsTex-t: Strings; Рассматривает содержимое буфера как текстовую строку длиной до 255 символов. Для обмена с буфером более длинными строками следует использовать его методы SetTextBuf и GetTextBuf
property For.gif" >


НАСТРОЙКА ПРОГРАММ



20.5. НАСТРОЙКА ПРОГРАММ

Удобным средством хранения индивидуальных параметров настройки программы являются широко используемые в Windows З.х файлы инициации (файлы с расширением ini). Для Windows 32 индивидуальная настройка программ реализуется с помощью системного реестра. В этом разделе рассматриваются оба способа, т. к. даже если вы работаете с Windows 32, перенос программ на другие ПК проще реализовать с помощью ini-файлов.



TActionMainMenu gif" >



18.2.20. TActionMainMenu.gif" >




ЭТАПЫ РАЗРАБОТКИ



21.1. ЭТАПЫ РАЗРАБОТКИ

Разработка Help-службы требует решения следующих основных задач.

Планирование системы справок. На этом этапе составляется перечень разделов справочной службы и необходимых перекрестных ссылок. Создание текстовых файлов, содержащих описания справочных разделов. Текстовые файлы готовятся с помощью любого текстового редактора, поддерживающего расширенный текстовый формат RTF. В них включаются специальные управляющие символы для создания перекрестных ссылок и подключения растровых изображений. Разработка проектного файла, содержащего специальные команды для Help-компилятора. Проектный файл описывает структуру справочной службы в целом, в нем каждому разделу присваивается уникальный целочисленный идентификатор. Разработка файла содержания. Содержание активизируется при запуске HLP-файла, а также после щелчка по кнопке содержание в окне справочной службы. Компиляция Help-файлов. Тестирование и отладка Help-службы. Связь программы с разделами Help-службы.

ПЛАНИРОВАНИЕ СИСТЕМЫ СПРАВОК



21.2. ПЛАНИРОВАНИЕ СИСТЕМЫ СПРАВОК

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

Любой раздел может содержать список подчиненных или связанных разделов, т. е. разрешается произвольная иерархия справочной службы. Полезно структурировать разделы по роду предоставляемой ими информации. Например, предусмотреть разделы для начинающего пользователя с пошаговыми инструкциями, выделить примеры использования программы, предоставить информацию опытным пользователям с точным и детальным описанием каждой программной функции, а также информацию о “продвинутых” возможностях программы и т. п. Каждый раздел должен, по возможности, отображаться в одном распахнутом окне. Избегайте слишком длинных пояснений, лучше разбейте такой комментарий на несколько разделов. Учтите, что согласно исследованиям лишь менее 30% людей могут читать текст на экране так же легко и быстро, как на бумаге. Старайтесь описывать справочную информацию простым и ясным языком. Избегайте использования профессионального жар- гонизма, а также фраз типа “как вам это известно”. Юмор, безусловно, увеличит эффективность справки, однако его чрезмерное количество может навредить главному - помощи пользователю. Структурируйте текст, вставляйте в него больше рисунков, выделяйте важную информацию шрифтами и цветом. Помните, что монотонный текст (как и чрезмерно “раскрашенный”) резко увеличивает утомляемость пользователя и затрудняет усвоение информации.

СОЗДАНИЕ ТЕКСТОВЫХ ФАЙЛОВ



21.3. СОЗДАНИЕ ТЕКСТОВЫХ ФАЙЛОВ

Вся справочная информация помещается в один или несколько текстовых файлов в формате RTF. Для их создания может использоваться любой текстовый редактор, поддерживающий этот формат.

При создании текстовых файлов учтите следующие особенности их подготовки:

Количество RTF-файлов может быть произвольным. Вы можете поместить всю справочную информацию в один файл или предусмотреть для каждого раздела отдельный файл - все зависит от объема и структуризации Help-службы и ваших личных пристрастий. В пределах одного файла каждый раздел отделяется от другого служебным символом конца страницы (с помощью Word этот символ вставляется клавишами Ctrl+Enter). Любой раздел, доступный с помощью перекрестных ссылок или индексных указателей, должен иметь связанный с ним идентификатор - уникальную текстовую строку. Раздел может иметь название и связанный с ним список ключевых слов.

В текстовый файл включаются такие управляющие символы:

Сноска “#” Перечеркнутый или дважды подчеркнутый текст Подчеркнутый текст Указывает идентификатор раздела Определяет отображение связанного с текстом раздела (перекрестной ссылки) в стандартном справочном окне

Определяет отображение раздела перекрестной ссылки в окне пояснений (“всплывающем” окне)

Скрытый текст Определяет идентификатор раздела, связанного с перекрестной ссылкой
Сноска “$” Задает название раздела
Сноска “К” Указывает список ключевых слов для поиска раздела
Сноска “+” Задает порядковый номер раздела в списке просмотра связанных разделов
Сноска “ /\ ” Определяет условие компиляции раздела
Сноска “>” Определяет тип дополнительного окна, в котором будет отображаться раздел
Сноска “!” Указывает макрокоманду, которая будет выполняться при открытии окна с разделом


РАЗРАБОТКА ПРОЕКТНОГО ФАЙЛА



21.4. РАЗРАБОТКА ПРОЕКТНОГО ФАЙЛА

Проектный файл служит основным управляющим документом для Help-компилятора. В Windows 32 он создается с помощью утилиты Microsoft Help Workshop (MS HW) и представляет собой AS-CII-текстовый файл, содержащий несколько секций. Секция - это фрагмент текста, состоящий из заголовка и одной или нескольких следующих за ним строк (опций) вида

ИМЯ_ПАРАМЕТРА = ЗНАЧЕНИЕ,

подобно тому как организованы файлы инициации ini.

Для запуска MS HW следует загрузить файл help | tools | hcw.exe из папки размещения Delphi. Если файл проекта уже был ранее создан, для работы с ним используется опция File | open или соответствующая кнопка инструментальной панели MS HW. Для создания нового проектного файла выберите File | New и в дополнительном диалоговом окне - Help project; после указания имени создаваемого Help-файла в стандартном диалоговом окне save File окно MS HW приобретет вид, показанный на Рисунок 21.6.

Всю центральную часть окна занимает текст проектного файла, который первоначально состоит из единственной секции [options]. В отличие от обычных текстовых редакторов это окно недоступно для клавиатурного ввода: чтобы вставить в него текст или изменить уже введенные секции, используются расположенные справа кнопки.



ФАЙЛ СОДЕРЖАНИЯ СПРАВОЧНОЙ СЛУЖБЫ



21.5. ФАЙЛ СОДЕРЖАНИЯ СПРАВОЧНОЙ СЛУЖБЫ

Содержание справочной службы оформляется в файле с расширением сыт и становится доступным после нажатия кнопки содержание в справочном окне. Для создания/редактирования содержания используется утилита MS HW.

В строках Default filename (and window) И Default title В верхней части окна нужно указать соответственно имя ньр-файла, для которого создается содержание, и тип окна для отображения оглавлений, а также заголовок основного окна справочной службы. Замечу, что заголовок Default title, если он задан, переопределяет заголовок, указанный в секции [Options] файла проекта (см. п. 21.4.1).

Эти параметры можно установить вручную, но удобнее для ввода использовать вспомогательное диалоговое окно, которое раскрывается кнопкой Edit справа от строки Default title. При ручном вводе в строке Default filename (and window) имя файла отделяется от имени окна символом “>”.

Например:

HelpTest.hlp>WIND

Элементы содержания могут быть темами и разделами. Темы служат узлами в иерархической структуре содержания. В окне справочной службы слева от названия темы указывается пиктограмма в виде раскрытой или захлопнутой книги. Раздел - конечный элемент содержания. Слева от него указывается пиктограмма.

Для вставки в файл элемента содержания нужно щелкнуть по кнопке Add Above или Add Below. В первом случае элемент вставляется перед текущим элементом, во втором - после него.

Переключатели в верхней части окна определяют тип вставляемого элемента:

Heading - вставляется тема; при выборе этого переключателя все расположенные ниже строки, кроме Title, становятся недоступными;

Topic - вставляется раздел;

Macro - вставляется макрокоманда; эта макрокоманда будет выполняться при выборе элемента в окне содержания;

include - вставляется ASCII-текстовый файл с элементами содержания.

Четыре строки ниже переключателей используются только при вставке раздела. При вставке темы или включаемого файла доступна только первая строка, при вставке макрокоманды - первая и вторая, которая в этом случае снабжается надписью Macro.

В строке Title вводится произвольный текст длиной до 127 символов, который будет представлять элемент в окне содержания. В этой строке также указывается имя включаемого файла, если выбран переключатель Include. Во второй строке указывается идентификатор раздела или имя макрокоманды. В строке Help file нужно указать ньр-файл, если справочная система использует несколько файлов, а в строке window type - тип окна для отображения раздела.

Для смещения элемента оглавления на один уровень иерархии вниз используется клавиша Move Right, а на один уровень вверх -Move Left. Элемент сдвигается вместе со всеми другими элементами, расположенными ниже него. Максимальное количество уровней иерархии - 9.

Следует заметить, что файл содержания представляет собой AS-СН-текстовый файл, каждая строка которого соответствует элементу содержания. В начале строки указывается цифра, определяющая уровень иерархии, на котором располагается элемент. На Рисунок 21.8 для примера показано содержание справочной службы What's New in Delphi и соответствующий ей сnт-файл.



КОМПИЛЯЦИЯ ТЕСТИРОВАНИЕ И СВЯЗЬ С ПРОГРАММОЙ



21.6. КОМПИЛЯЦИЯ, ТЕСТИРОВАНИЕ И СВЯЗЬ С ПРОГРАММОЙ

Компиляция и тестирование справочной службы не составляют проблемы: с помощью MS HW создайте (или загрузите) проектный файл и щелкните по кнопке save and compile или по инструментальной кнопке . После этого появляется окно, показанное на Рисунок 21.9.

При компиляции MS HW сворачивает свое окно и вновь раскрывает его после завершения работы компилятора, если отмечен переключатель Minimize window while compiling. После окончания компиляции в нем будут показаны сообщения компилятора. Если компилятор обнаружил ошибки, он сообщает о них, причем некритические ошибки сопровождаются предупреждениями (warnings) и замечаниями (notes), а критические - прерывают компиляцию.



МАКРОКОМАНДЫ WINHELP



21.7. МАКРОКОМАНДЫ WINHELP

Справочная служба Windows 32 - WinHelp имеет встроенные макрокоманды, которые доступны из справочной службы программы. Макрокоманды могут выполняться в следующих случаях:

при открытии справочного файла (определяются в секции Соnfig); при открытии окна с разделом (определяются сноской “!”); при выборе ключевого слова (определяются на странице Macros окна options).

В этом разделе описываются некоторые часто используемые макрокоманды WinHelp, для удобства разделенные по функциональному назначению. Полное описание всех макрокоманд вы найдете в справочной службе MS HW. Формат определения макрокоманд соответствует формату определения функций в языке С. Если макрокоманда не имеет параметров обращения, за ее именем требуется задать пару пустых скобок так, как это указано ниже в описании макрокоманд.



Макрокоманда Назначение
Управление инструментальными кнопками
Back.gif" >


TActionTollBar полоса кнопок для действий



18.2.21. TActionTollBar - полоса кнопок для действий

Компонент служит настраиваемым контейнером для связанных с действиями инструментальных кнопок. Кнопки реализуются техникой “перетаскивания” действий из окна менеджера действий (Рисунок 18.20).

Большое количество свойств компонента связано с динамически создаваемыми внутренними объектами, имеющими, в свою очередь, множество свойств (методов и событий). За подробной информацией о свойствах компонента и связанных с ними классами обратитесь к справочной службе.



TCustomizeDIg диалог настройки интерфейса



18.2.22. TCustomizeDIg - диалог настройки интерфейса

Этот компонент служит для активизации окна менеджера действий (Рисунок 18.20). Для этого у него имеется единственный метод

procedure Show;

Свойство

property ActionManager: TCustomActionManager;

определяет экземпляр менеджера действий, окно которого нужно активизировать. Поскольку это окно не модальное, оно может перекрываться другими окнами. Если в свойство компонента

property StayOnTop: Boolean;

установить True, окно менеджера действий всегда будет располагаться поверх других окон.

Для вызова метода show проще всего использовать дополнительное меню контейнера опций или кнопок. Например:

procedure TFor.gif" >




А) вид рамы на этапе конструирования



Рисунок 18.1. а) вид рамы на этапе конструирования: 6) окно регистрации рамы в палитре компонентов


Установленные параметры создадут минимальную по размерам раму с двумя именованными кнопками. Так как свойство Anchors рамы содержит значения [akRight, akBottoms], рама будет все время отслеживать свое положение относительно правого нижнего угла контейнера, в который она будет помещена.

Щелкните по раме правой кнопкой мыши и выберите в локальном меню Add To palette - на экране появится диалоговое окно с предложением сохранить модуль шаблона в дисковом файле. Сохраните шаблон в файле с именем, DigBtnsF в папке для ваших программ. На экране появится окно регистрации шаблона в палитре компонентов, показанное на Рисунок 18.1, б. В окне предлагается установить для нового компонента имя класса и страницу палитры компонентов, в которую он помещен. Обратите внимание на автоматически созданное умалчиваемое имя Заготовки - TFramelTamplate. Т. к. это имя будет появляться в ярлычке Hint при высвечивании компонента мышью, следует дать ему более осмысленное имя, например, TDiaiogButtons. И еще одно замечание - в качестве страницы палитры компонентов в окне предлагается страница Templates (шаблоны), которая отсутствует в начальном наборе страниц палитры. Если вы сохраните это имя, в Delphi будет создана новая страница компонентов. Задайте имя класса шаблона и страницу его размещения, после чего щелкните по кнопке ок - шаблон готов для использования. После закрытия окна регистрации сам шаблон (Рисунок 18.1, а) останется на экране. Подобно дополнительной форме его модуль стал составной частью проекта, поэтому размещение шаблона на форме не вызовет проблем. Щелкните по пиктограмме Ю на странице Standard палитры компонентов и затем по пустому месту в форме For.gif" > а)

/B> а) окно выбора доступного



Рисунок 18.2 . а) окно выбора доступного шаблона; б) форма с размещенным на ней шаблоном


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

Компонент TFrame является потомкам TScrollingWinControl, от которого ему достались три описываемых ниже специфичных свойства (остальные свойства, события и методы унаследованы от rwin-controi и описаны в гл. 17):

property AutoScroll: Boolean;property HorzScrollBar: TControlScrollBar; Определяет свойства горизонтальной полосы прокрутки
property VertScrollBar: TControlScrollBar; Определяет свойства вертикальной полосы прокрутки

Класс TControlScrollBar, к которому принадлежат свойства HorzScrollBar и VertScrollBar, устанавливает все необходимые свойства и методы для полос прокрутки.

Свойства TControlScrollBar:

property Margin: Word; Определяет минимальное расстояние от полосы до края компонента, в котором она расположена
property ButtonSize: Integer; Определяет размер кнопок полосы прокрутки
property Color: TColor; Определяет цвет полосы
type=(sbHorizontal,sbVertical) ; property Kind: ScrollBarKind; Указывает ориентацию полосы (это свойство - только для чтения)
type TScrollBarInc = 1..32767; property Increment: TScrollBarInc; Указывает перемещение бегунка при щелчке мышью на концевой кнопке полосы
property ParentColor: Boolean; Если содержит True, цвет полосы определяется системными установками Windows. Установка значения в свойство color при

водит к автоматической установке значения

False в свойство ParentColor

property Position: Integer; Определяет положение бегунка на полосе прокрутки
property Range: Integer; Определяет размер скроллируемой области
property ScrollPos: Integers; Определяет положение скроллируемой области
property Size: Integer; Определяет ширину полосы в пикселях
property Smooth: Boolean; Если содержит True, прокрутка осуществляется стандартным образом: щелчок по концевой кнопке вызывает смещение приблизительно на 1/10 части всей прокручиваемой области. Если содержит False, смещение определяется свойством Increment
TScrollBarStyle = (ssRegular,

ssFlat, ssHotTrack);

Определяет стиль полосы: ssRegular обычная полоса; ssFlat - плоская полоса;
property Style: TScrollBarStyle; ssHotTrack - плоская полоса, ее компоненты выделяются цветом при перемещении над ней указателя мыши
property ThumbSize: Integer; Определяет ширину бегунка в пикселях
property Tracking: Boolean; Разрешает/запрещает динамическую прокрутку при перемещении ползунка
property Visible: Boolean; Определяетвидимость полосы


/B> Диалоговое окно регистрации формы в архиве



Рисунок 5.2 . Диалоговое окно регистрации формы в архиве


Не советую пользоваться опцией меню Project | Add то Repositiry, т. к. в этом случае в репозиторий будет добавлен проект, а не форма. Проекты из репозитория копируются целиком вместе с многочисленными родительскими классами, что замедляет время создания нового проекта и приводит к неоправданным затратам дисковой памяти.

В строке Title напишите имя формы fmExample, В Строке Description — пояснение, например, прототип главной формы для учебной программы, раскройте список page и выберите в нем For.gif" >



/B> Файл проекта с многими формами



Рисунок 19.3 Файл проекта с многими формами




/B> Форма со вставленной кнопкой



Рисунок 3.2 Форма со вставленной кнопкой


Этот фрагмент должен представлять собой последовательность текстовых строк, в которых программист указывает, что именно должна делать программа в ответ на нажатие кнопки. Фрагмент оформляется в виде специальной подпрограммы языка Object Pascal - процедуры.

Чтобы заставить Delphi самостоятельно сделать заготовку для процедуры обработчика события OnClick, дважды подряд без заметной паузы щелкните мышью по вновь вставленному компоненту[ У начинающего пользователя Windows не всегда получается двойной щелчок. Этот нехитрый прием широко используется и в Windows, и в Delphi, так что вам придется потренироваться в его освоении: без него Delphi не вставит заготовку процедуры, и вам понадобится самостоятельно писать не только этот текст, но и производить дополнительные манипуляции с Инспектором объектов и окном кода. ]. В ответ Delphi активизирует окно кода, и вы увидите в нем такой текстовый фрагмент:

procedure TFor.gif" >




/B> Окно определения маски компонента MaskEdit



Рисунок 5.6 . Окно определения маски компонента MaskEdit


В строке Input Mask введите

#99999999;1;

В окошке Character for Blanks вместо умалчиваемого символа-заполнителя “_” укажите пробел и закройте окно кнопкой ок. Сформированная нами маска заставит компонент автоматически контролировать ввод пользователя и отвергать любые символы, кроме знаков + или - в первой позиции (элемент маски “#”) и цифр (элементы “9”).

Теперь все готово к кодированию программы.

Дважды щелкните по кнопке bbResuit и введите такой код для обработчика события OnClick этой кнопки:

procedure TfniExample.bbResultClick( Sender: TObject) ;

// Обработка ввода 2-го операнда

begin // Преобразуем текст из edinput в целое число:

Y := StrToInt(Trim(edinput.Text));

// Сообщаем в Memo о вводе 2-го операнда:

mmOutput.Lines.Add('2-й операнд:'+edInput.Text);

// Вычисляем и показываем результат:

mmOutput.Lines.Add('Результат: '+ IntToStr(X)+' * '+IntToStr(Y)+' = '+IntToStr(X*Y));

edinput.Text := ''; // Очищаем ввод

edinput. SetFocus;

// и возвращаем ему фокус

IbOutput.Caption := 'Введите 1-й операнд; bbResuit.Hide;

// Прячем кнопку

bbResuit bbRun.Show;

// и показываем bbRun

end;

Для ввода обработчика события onciick кнопки bbRun нужно сначала с помощью списка выбора в верхней части окна Инспектора объектов отыскать и выбрать компонент bbRun (напомню, он полностью закрыт кнопкой bbResuit), затем дважды щелкнуть в правом столбце строки onciick на странице Events и ввести такой код:

procedure TfmExample.bbRunClick(Sender: TObject);

// Обработка ввода 1-го операнда

begin

// Преобразуем текст из edinput в целое число

Х := StrToInt(Trim(edinput.Text));

// Сообщаем в Memo о вводе 1-го операнда

mmOutput.Lines.Add('1-й операнд: '+edInput.Text);

edinput.Text := ''; // Очищаем ввод

edInput.SetFocus;// и возвращаем ему фокус

IbOutput.Caption := 'Введите 2-й операнд:';

bbResult.Show; // Показываем кнопку bbResult

bbRun.Hide; // и прячем bbRun

end;

Осталось передать фокус ввода компоненту edinput в момент старта программы и определить переменные х и y для хранения операндов. Разыщите в самом начале окна кода программы описание класса TfmExample и отредактируйте его следующим образом:

private

{ Private declarations } X,Y: Integer;.

Затем с помощью списка выбора в окне Инспектора объектов выберите форму fmExampie и после двойного щелчка на строке опАс-tivate страницы Events введите такой обработчик события:

procedure TfmExample.For.gif" >




/B> Окно просмотра печатного документа



Рисунок 20.1 . Окно просмотра печатного документа



/B> Окно редактора с готовым изображением указателя



Рисунок 17.4 . Окно редактора с готовым изображением указателя



/B> Окно установки параметров секции Options



Рисунок 21.7 . Окно установки параметров секции Options


if users paste... - определяет текст, который будет добавляться в конце копируемой через Clipboard или печатаемой справочной информации.

Страница Compession

Эта страница управляет сжатием результирующего файла.

None - результирующий файл не сжимается;

Maximum - результирующий файл максимально сжимается;

Custom - выбирает алгоритм сжатия результирующего файла.

Страница Sorting

Задает язык и способ сортировки ключевых слов.

Language of Help file - определяет используемый для сортировки ключевых слов язык;

Other - определяет язык сортировки по его индексу;

Non-spacing marks - если переключатель выбран, при сортировке игнорируются кавычки и апострофы; Symbols - если переключатель выбран, при сортировке игнорируются пробелы и знаки препинания; separate index... - содержит перечень символов, которые используются для указания нижних уровней сортировки.

Страница Files

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

Help File - имя результирующего нlр-файла; это имя должно быть указано обязательно;

Log File - имя ASCII-текстового файла, в который компилятор будет помещать свою информацию (может не указываться);

RTF-files - определяет имена исходных файлов с текстами справок; замечу, что изменение имен файлов фактически приводит к изменению секции [Files] (см. ниже п. 21.4.2);

contents file - указывает имя файла содержания, если такой файл создан (см. п. 21.5);

тмр folder - определяет папку для хранения временных файлов компилятора;

substitute path prefix - указывает имя маршрута доступа к rtf и вмр-файлам; используется при перемещении этих файлов в другую папку, чтобы не исправлять множество ссылок во всей справочной информации.

Страница FTS

Управляет созданием индекса для быстрого поиска по отдельным словам или фразам справочного текста. Этот индекс создается при первом обращении к окну поиск.

Generate full text search index - Создавать индекс по всем словам справочных фалов;

Include untitled topics in index - включает в индекс разделы без названия;

Enable search for word only - разрешить поиск только по словам;

Enable search for phrase - разрешить поиск по фразам;

Enable display of matching phrase - разрешить поиск по списку выделенных фраз;

Enable search for similar topics - разрешить поиск по альтернативным словам.

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

Страница Macros

Определяет макрокоманды, автоматически выполняемые при выборе того или иного ключевого слова.

Keywords - содержит список ключевых слов, для которых определены макрокоманды;

Title that appears... - указывает заголовок окна Найденные разделы при выборе соответствующего слова;

Macro (s) associated with... - связанная со словом макрокоманда;

Add - позволяет добавить слово к списку Keywords;

Remove - удаляет слово из списка Keywords;

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

Страница Build Tags

Содержит список условий, включающих разделы в результирующий файл (верхний список) или исключающих их из него (нижний список). Условия касаются только тех разделов, которые помечены ссылкой “*” (см. п. 21.3.4).

Страница Fonts

Определяет шрифты, используемые в справочной системе.

character set - определяет используемый в результирующем файле набор символов (он может отличаться от набора символов на инструментальной машине);

Font in winHelp Dialog boxes - определяет шрифт, используемый в диалоговых окнах справочной службы;

substitute this fonts.. - содержит перечень подстановок, указывающих, какой шрифт в исходном RTF-файле будет заменен при отображении в окне справки и на какой шрифт он будет заменен.



/B> Окно запуска компилятора



Рисунок 21.9 . Окно запуска компилятора


Для тестирования скомпилированного справочного файла используется одна из опций меню Test:

contents File - тестирует файл содержания;

close All Help - закрывает все ранее открытые нlр-файлы;

send a macro - посылает в winHelp нужную макрокоманду;

WinHelp api - вызывает нужный раздел справочной службы по присвоенному ему в секции map числовому идентификатору.

Тестирование файла содержания заключается в автоматическом вызове всех указанных в содержании разделов. Если какой-либо раздел не вызывается, выдается сообщение (Рисунок 21.10), позволяющее найти и устранить ошибку.

Связь с программой реализуется с помощью свойств HelpContext видимых компонентов, в которые следует поместить числовые идентификаторы нужных разделов справочной службы так, как они определены. В секции MAP. Кроме того, в свойство Application. HelpFile нужно поместить имя нlр-файла. Обычно эта связь устанавливается в обработчике события ОnCreat главной формы программы. После такой настройки пользователь программы сможет с помощью клавиши F1 получить контекстно-чувствительную справку, т. к. при нажатии F1 автоматически вызывается раздел, числовой идентификатор которого помещен в свойство HeipContext компонента с фокусом ввода. Если Heipcontext компонента с фокусом ввода содержит 0, вызывается раздел, указанный в HelpContext его владельца, а если и у того это свойство не определено, используется HelpContext активной формы (если во всей цепочке владельцев, включая активную форму, свойство HelpContext не определено, нажатие F1 игнорируется).



/B> Списки свойств упорядоченные по категориям



Рисунок 2.6 . Списки свойств упорядоченные по категориям


Любые категории можно сделать невидимыми. Для этого нужно в локальном меню выбрать view и затем в дополнительном меню убрать флажок слева от категории.

В отличие от предыдущих версий Delphi в версии 6 сложные свойства, ссылающиеся на объекты, выделяются в окне Инспектора объектов цветом и показываются на странице Events. Если такое свойство определено, слева от него появляется кнопка “+”, позволяющая увидеть (и при необходимости изменить) свойства и обработчики событий связанного объекта. Для примера на Рисунок 2.7 показано, как с помощью окна Инспектора объектов, связанного с формой For.gif" >

Рисунок 2.7. Установка обработчика OnClick опции меню для формы For.gif" >




/B> Стили л иний



Рисунок 16.2 . Стили л иний