Рефераты

Программирование на Delphi

Здесь OnMyEvent - поле объекта, содержащее адрес некоторого метода.

Присвоить такому свойству значение - значит указать программе адрес метода,

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

называются обработчиками событий.

Внутри библиотеки времени выполнения Delphi вызовы обработчиков событий

находятся внутри методов, обрабатывающих сообщения Windows. Выполнив

необходимые действия, этот метод проверяет, известен ли адрес обработчика,

и, если это так, вызывает его.

События имеют разное количество и тип параметров, в зависимости от

происхождения и назначения. Общим для всех события является параметр Sender

- он указывает на объект, вызвавший событие. Самое простое событие -

tNotifyEvent - не имеет других параметров.

tNotifyEvent = procedure(Sender:tObject) of object;

Тип метода, предназначенный для извещения о нажатии клавиши,

предусматривает передачу в процедуру кода этой клавиши, о передвижении мыши

- ее текущих координат и т.д.

Имя события в Delphi начинается с префикса On: OnClick, OnCreate,

OnMouseDown и т.д. Имена методов - обработчиков событий состоят из имени

объекта, генерирующего событие, и корня имени события: OkButtonClick.

Дважды щелкнув мышью в инспекторе объектов на странице Events в поле

напротив любого события, вы получите скелетный код (заготовку) этого

события.

Поскольку события - это свойства объекта, их значения можно менять в любой

момент во время выполнения программы. Эта возможность называется

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

одного объекта и присвоить (делегировать) их другому.

Принцип делегирования позволяет избежать трудоемкого процесса порождения

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

подстановкой процедур.

Один и тот же обработчик может обрабатывать события от разных объектов.

Типичный пример - в современных программах одно и то же действие можно

вызвать несколькими способами - через главное меню, контекстное меню и т.

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

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

того же типа.

Более сложный случай - когда внутри обработчика необходимо определить,

какой именно объект вызвал событие. Если объекты, которые потенциально

могут это сделать, имеют разный тип, то именно их тип можно применить в

качестве критерия:

If Sender is tMenuItem then ...

Если же все объекты, разделяющее между собой один обработчик события,

относятся к одному классу, можно использовать свойство tObject.Tag.

Ниже приведены названия некоторых, наиболее употребительных событий Delphi:

Событие - Тип обработчика - Когда возникает

OnClick - TNotifyEvent - При нажатии левой клавиши мыши

OnActivate - TnotifyEvent - После передачи объекту фокуса

OnCreate - TnotifyEvent - После создание объекта

OnDestroy - TnotifyEvent - Перед уничтожением объекта

OnDeactivate - TnotifyEvent - Перед уходом фокуса из объекта

OnKeyPress - TkeyPressEvent - При нажатии клавиши

OnMouseDown - TmouseEvent - При нажатии клавиши мыши

OnMouseMove - TmouseMoveEvent - При движении мыши над объектом

OnMouseUp - TmouseEvent - При отпускании клавиши мыши

а также их типы:

Тип

Описание

TnotifyEvent

type TnotifyEvent = procedure (Sender: TObject) of object;

TkeyPressEvent

type TkeyPressEvent = procedure (Sender: TObject; var Key: Char) of object;

TmouseEvent

TmouseEvent = procedure (Sender: TObject; Button: TmouseButton; Shift:

TShiftState; X, Y: Integer) of object;

TmouseMoveEvent

TmouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState; X, Y:

Integer) of object;

Стандартные события описаны в модуле Classes.

Динамические массивы

В Delphi существуют динамические массивы, то есть массивы, длину которых

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

массивов стояла довольно остро. Стандартных средств для работы с ними не

было, и программистам приходилось вручную создавать подобные структуры (как

правило, на основе динамических переменных). Теперь компилятор Delphi сам

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

сохранились и обычные, статические массивы.

Длина динамических массивов определяется уже во время выполнения программы.

Описав переменную как

var A1:array of real,

мы будем иметь указатель, соответствующий массиву вещественных чисел.

Память под него выделяется процедурой SetLength:

procedure SetLength(var A; NewLength: Integer);

Здесь A - указатель на динамический массив, NewLength - длина массива.

В динамических массивах нумерация индексов начинается только с нуля.

То обстоятельство, что динамические массивы фактически являются

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

них касается присвоения массивов. Запись

Var A1,A2:array[0..4] of real;

A1:=A2;

В случае со статическими массивами, означает, что всем элементам массива A1

присваиваются значения соответствующих элементов массива A2, но при этом,

переменные A1и A2 - разные переменные, хранящиеся в разных областях памяти.

В случае с динамическими массивами присвоение их друг другу - не более чем

присвоение указателей. ассмотрим пример:

Var A1,A2:array of real;

. . .

SetLength(A1,5);

A1[0]:=0.0;

A2:=A1;

A2[0]:=2.0;

Значение A2[0] также изменится и станет равно 2. Это произошло потому, что

после присвоения указатели ссылаются на один и тот же адрес в памяти и

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

Для того, чтобы действительно скопировать элементы в A2, необходимо

использовать функцию Copy:

function Copy(A; Index, Count: Integer): string;

Здесь А - указатель на копируемый массив,

Index - индекс первого копируемого элемента,

Count - число копируемых элементов.

A2:=Copy(A1,0,Length(A1));

Освободить выделенную под массив память можно при помощи процедуры

finalize:

procedure Finalize( var A [; Count: Integer] );

здесь V - указатель на динамический массив, Count - количество массивов (в

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

в одном непрерывном блоке памяти, их можно освободить одним вызовом

Finalize); или просто присвоив указателю на массив значение nil. В этом

случае память не будет потеряна (как могло бы показаться на первый взгляд),

а будет вызвана соответствующая процедура, корректно освобождающая память.

Причем, память освободиться только тогда, когда на нее не уже не ссылается

ни одна динамически созданная структура.

Значения граничных индексов (как статических так и динамических) можно

получить при помощи функций Low(A) - нижний граничный индекс и Hight(A) -

верхний граничный индекс. Число элементов массива - функцией Length:

function Length(A): Integer;

Дальнейшим развитием идеи динамических массивов являются многомерные

динамические массивы.

Var AA: array of arrray of real;

SetLength(AA,10,5);

AA[9,4]:=1;

AA[9][4]:=1;

Можно пойти еще дальше, и создать динамические массивы с переменной длиной

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

размерность по первому индексу:

SetLength(AA,10);

Это означает, что массив будет состоять из десяти строк. Теперь длина

каждой строки задается отдельно:

SetLength(AA[0],5);

SetLength(AA[1],6);

SetLength(AA[2],3);

SetLength(AA[3],8);

. . .

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

передавать их в процедуры как параметры нельзя.

Перегружаемые функции

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

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

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

Перегружаемые функции, также как и методы описываются с ключевым словом

overload. Например:

function OverloadDemo(val : Byte) : string; overload;

function OverloadDemo(val : Char) : string; overload;

Такой подход делает ваш код более простым, его легче сопровождать и

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

похожие действия над разнотипными данными.

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

передаваемого параметра (в приведенном выше примере - Byte или Char) и в

зависимости от этого подставит вызов соответствующего варианта функции.

Параметры функций по умолчанию

Параметры функций по умолчанию пришли в Delphi из С++. Часто при вызове

процедур и функций в них надо передать параметры, обычно имеющие одно и то

же значение. Это имеет место в частности в научных расчетах. Теперь эта

проблема упрощается путем введения параметров по умолчанию. Это означает,

что прямо в объявлении функции можно указать, что те или иные параметры

должны принимать определенные значения, если они не заданы явно. Нарпример,

можно описать функцию

function Test(x:extended; Rz:extended = 6371):extended;

При ее вызове второй параметр можно указать явно:

Test(100,6372);

А можно и не указывать:

Test(100);

В первом случае параметр Rz будет иметь значение 6372, а во втором - по

умолчанию - 6371.

Параметры по умолчанию должны быть сосредоточены в конце списка параметров.

Допускается умалчивать последний, последний и предпоследний, и т.д.

параметры В этом состоит отличие от С++ - там можно опускать любые из

параметров по умолчанию.

При применении параметров по умолчанию следует соблюдать осторожность.

ассмотрим следующий пример:

Procedure Confused(I:integer); overload;

Procedure Confused(I:integer; J:integer = 0); overload;

. . .

Confused(x);

Компилятор не сможет определить, какую именно реализацию Confused следует

вызвать, и выдаст сообщение об ошибке.

2. Приемы работы в среде разработки

Репозиторий

Репозиторий (Repository) представляет собой хранилище разнородных объектов,

объединенных общим предназначением. Основная цель создания репозитория -

предоставление разработчику возможности повторного использования уже

готовых и отлаженных частей программы. Здесь можно найти готовое

стандартное приложение, динамическую библиотеку, форму, модуль, мастера

диалогов и приложений, а также различные вспомогательные программы.

Репозиторий в Delphi представляет собой текстовый файл, в котором данны обо

всех объектах храняться в специальном формате.

Открыть репозиторий можно при помощи команды New меню File главного окна

Delphi.

Рассмотрим некоторые объекты, входящие в репозиторий. Основу любой

разработки в Delphi составляет проект, объединяющий самые разные

структурные элементы в единое приложение. В него чаще всего входят модули и

формы различных видов. Типы приложений представлены исполняемыми

программами, динамическими библиотеками и приложениями для запуска служб.

Особое место занимают приложения для работы с базами данных (БД), поэтому

значительная часть объектов репозитория предназначена для конструирования

таких программ. Для обеспечения удаленного доступа к данным предназначены

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

взаимодействия, в том числе технологии CORBA и Microsoft Transaction Server

(MTS).

Состав объектов репозитория можно обновлять, также можно создавать,

переименовывать страницы и изменять состав объектов для них. едактирование

репозитория осуществляется в диалоговом окне Object Repository которое

появляется при выборе команды Repository меню Tools главного окна Delphi,

или при выборе команды Properties всплывающего меню репозитория. Добавить

новую форму в репозиторий можно командой Add to repository всплывающего

меню формы или перетаскиванием формы в панель репозитория.

Проект и группа проектов

Любая работа в Delphi начинается с создания нового проекта. Как правило, из

одного проекта получается одно приложение. Таким образом, проект

представляет собой фундамент или каркас, на который “крепятся” все нужные

детали. Самый маленький проект представляет собой только один файл с

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

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

В главном файле содержится описание всех модулей и форм, входящих в проект.

Кроме того, в секции begin … end может располагаться любой код, который

должен выполняться перед началом работы приложения или в процессе его

закрытия.

Модулем называется текстовый файл с расширением PAS, в котором содержится

некоторый исходный код на языке Object Pascal. С модулем может быть связана

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

на нем интерфейсными элементами. Служебная информация о формах хранится в

файлах с расширением DFM. В общем случае, в состав проекта могут входить

модули, не имеющие связанных с ними форм.

В репозитории содержится несколько заготовок для форм (страница Forms), а

также некоторые стандартные диалоги, которые с точки зрения

пользовательского интерфейса являются модальными формами (страница

Dialogs). В проекте Delphi помимо модулей и форм могут присутствовать

различные служебные файлы. Среди них важное место занимают ресурсы

(расширение RES), которые хранят значки, курсоры, строки сообщений

информацию о версии программы и т.д.

Репозиторий предлагает на выбор несколько типов проектов: например проекты

с многодокументным (MDI) и однодокументным (SDI) интерфейсом. При

необходимости создания динамической библиотеки также можно воспользоваться

соответствующей заготовкой из репозитория.

Помимо проекта в Delphi пристствует и более важная структурная единица -

группа проектов, которая , как видно из названия, объединяет для совместной

разработки несколько проектов. Файл группы проектов имет расширение BPG и

представляет собой текстовый файл с системной информацией и описанием

проектов, входящих в группу.

Работа с группой проектов практически ничем не отличается от работы с

отдельным проектом, необходимо только следить за принадлежностью отдельных

форм и модулей и овремя переключаться на нужный проект в Диспетчере

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

списка на панели инструментов Delphi или Диспетчера проектов.

Диспетчер проекта предназначен для управления составными частями проекта

или группы проектов. В группе можно добавить или удалить отдельный проект,

в проекте - добавить или удалить отдельный модуль.

Управление проектом осуществляется кнопками на панели инструментов

диспетчера проекта или командами всплывающего меню.

Вызывается диспетчер командой Project Manager меню View главного окна

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

диспетчера проекта. Возможность объединения групп или включения групп в

другие группы отсутствует.

В целом, параметры проекта доступны в диалоговом окне, которое открывается

при выборе команды Project Options меню Project главного окна Delphi.

Палитра компонентов

Основная палитра компонентов Delphi имеет двенадцать страниц.

Standard. Большинство компонентов на этой странице являются аналогами

экранных элементов самой Windows. Меню, кнопки, полосы прокрутки — здесь

есть все. Но компоненты Delphi обладают также некоторыми удобными

дополнительными встроенными возможностям.

Additional. Эта страница содержит более развитые компоненты. Например,

компонент Outline удобен для отображения информации с иерархической

структуройДанная страница также содержит компоненты, главное назначение

которых — отображение графической информации. Компонент Image загружает и

отображает растровые изображения, а компонент Shape позволяет рисовать

графические примитивы - окружности, квадраты и т.д.

System. Страница System содержит неотображаемые системные компоненты:

Timer, MediaPlayer, компоненты, реализующие механизм DDE. Страница System

также содержит компоненты, обрабатывающие обмен высокого уровня между

программами посредством OLE (Object Linking and Embedding).

Win32. Эта страница содержит компоненты, позволяющие созданным с помощью

Delphi программам использовать такие нововведения в пользовательском

интерфейсе 32-разрядной Windows, как просмотр древовидных структур,

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

Dialogs. Windows 3.1 ввела в употребление стандартные диалоговые окна для

операций над файлами, выбора шрифтов, цветов и т.д. Однако для

использования их в обычной программе Windows может потребоваться написать

немало вспомогательного кода. Страница Dialogs предоставляет программам

Delphi простой доступ к этим стандартным диалоговым окнам.

Data Access и Data Controls. Delphi использует механизм баз данных компании

Borland (Borland Database Engine, BDE) для организации доступа к файлам баз

данных различных форматов. Компоненты этих двух страниц облегчают

программам Delphi использование сервиса баз данных, предоставляемого BDE,

например многопользовательского считывания, записи, индексации и выдачи

запросов для таблиц dBASE и Paradox.

С использованием этих компонентов создание программы просмотра и

редактирования базы данных почти не требует программирования.

Win 3.1. На этой странице находятся компоненты Delphi 1.0, возможности

которых перекрываются аналогичными компонентами Windows 95.

Internet. Эта страница предоставляет компоненты для разработки приложений,

позволяющих создавать HTML-файлы непосредственно из файлов баз данных и

других типов, взаимодействующих с другими приложениями для Internet. Delphi

4 дает вам возможность создавать приложения для Web-сервера в виде DLL-

файлов : (Dynamic Link Library — Динамически компонуемая библиотека),

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

Internet довольно просто создавать обработчики событий для обращения к

определенному URL (Uniform Resource Locator — Унифицированный локатор

ресурса), представлению документов в HTML-формате и пересылки их клиент-

программе.

Samples. Эта страница содержит компоненты, которые не встроены в Delphi, но

демонстрируют мощь системы компонентов. Для этих компонентов нет встроенной

интерактивной справки. Все же они не менее полезны, чем компоненты с других

страниц.

ActiveX. Эта страница содержит компоненты ActiveX, разработанные

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

средство проверки правописания.

QReport. Эта страница предоставляет компоненты баз данных. Здесь содержатся

особые версии надписей, полей, примечаний и других элементов управления.

Midas и Decision Cube. Здесь собраны компоненты для доступа к удаленным

серверам и осуществления SQL – запросов.

Размещение компонентов

Размещать компоненты на форме очень просто. Требуется только щелкнуть на

нужной вкладке палитры компонентов, затем на кнопке с пиктограммой

соответствующего компонента и после этого щелкнуть в окне формы. Если

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

форме — компонент появится внутри этого прямоугольника. Если размеры

компонента поддаются изменению, при появлении на форме он заполнит собой

прямоугольник.

Если вы забыли, на какой странице расположен конкретный компонент, выберите

пункт Component List из меню View , и на экране появится список компонентов

в алфавитном порядке. Если щелкнуть на компоненте в палитре компонентов,

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

кнопка вернется в исходное состояние: только один компонент может быть

выбран в каждый момент времени. Для того чтобы все кнопки оказались в

исходном состоянии, и было восстановлено нормальное использование мыши,

следует щелкнуть на кнопке со стрелкой выбора, которая появляется с левой

стороны каждой страницы палитры. Для размещения нескольких копий компонента

при выборе компонента необходимо нажать и удерживать клавишу Shift. Если

дважды щелкнуть на пиктограмме компонента, то компонент автоматически

появится в центре активной формы проекта.

При перемещении и изменении размера компоненты выравниваются по точкам

координатной сетки формы. Как правило, это хорошо — такая возможность

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

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

Options меню Tools. Первая страница параметров предназначена для настройки

пользователем параметров среды. На этой странице имеется группа Form

designer, флажки опций Display grid и Snap to grid которой определяют,

видна ли координатная сетка и активна ли она. Можно также изменить значения

параметров Grid Size X (Шаг по оси X) и Grid Size Y (Шаг по оси Y), что

приведет к изменению шага координатной сетки по горизонтали и вертикали,

соответственно.

Не каждый компонент виден на форме во время запуска программы. Например,

размещение на форме компонента MainMenu приводит к появлению в

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

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

окна общего назначения, вообще никак не визуализируются во время работы

программы. азмеры невидимого компонента в процессе разработки не

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

Инспектор объектов

Инспектор объектов предназначен для установки доступных на этапе

проектирования свойств компонентов (то есть свойств, объявленных как

published). Окно инспектора состоит из трех основных частей:

. Селектора компонентов

. Страницы свойств (Properties)

. Страницы событий (Events)

Селектор компонентов представляет собой выпадающий комбинированный список и

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

использовании селектора нет необходимости, так как выделенный компонент

появляется в инспекторе объектов автоматически. Селектор компонентов

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

Например, кнопка с именем OkButton будет представлена как «OkButton:

TButton».

Страница Properties инспектора объектов отображает все свойства выбранного

компонента, доступные на стадии проектирования. Страница разделена на два

столбца. Столбец Property слева показывает имя свойства, столбец Value

справа - значение этого свойства. Если свойство имеет тип класса, записи,

или множества, то слева от его имени отображается знак +. Дважды щелкнув на

имени такого свойства, можно получить доступ к отдельным его полям. Того же

эффекта можно достичь, выбрав пункт Expand в контекстном меню инспектора

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

дважды щелкнуть на имени свойства, либо использовать пункт Collapse в

контекстном меню инспектора объектов. Во многих случаях редактор отображает

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

объекты (экземпляры классов VCL) существуют две возможности для

редактирования. Во-первых, можно, щелкнув на кнопке с многоточием (…) в

столбце Value свойства вызвать редактор соответствующего свойства; либо,

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

описано выше. Если на форме выделено несколько компонентов, инспектор

объектов покажет их общие свойства. Это дает возможности менять свойства

нескольких компонентов одновременно.

Страница Events редактора объектов содержит список событий, которые может

обрабатывать данный компонент. Для создания обработчика события необходимо

дважды щелкнуть на столбце Value рядом с именем этого события. При этом

Delphi создаст метод, со всеми параметрами, необходимыми для обработки

события. Активизируется окно редактора кода с курсором, расположенным

внутри обработчика события. Остается только ввести код обработчика! Обычно

имя обработчика события генерируется автоматически, однако, можно вручную

задать требуемое имя в столбце Value напротив имени события. После нажатия

клавиши Enter произойдет генерация скелетного кода обработчика события с

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

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

соответствующей кнопки в столбце Value напротив имени события. В список

включаются только обработчики событий, совпадающие по типу с данным

событием.

Редактор кода

Основные средства упрощения процесса создания исходного кода приложе- ний

собраны в едакторе кода (Code Editor), который из окна для отображе- ния и

редактирования кода модулей приложения превратился в удобное сред- ство с

многочисленными справочными и вспомогательными возможностями.

Шаблоны компонентов

Шаблоны компонентов предоставляют удобный способ использования наи- более

часто применяемых групп компонентов (например, часто требуется объединить

пояснительную надпись, поле редактирования и кнопку). При этом сделанные

при создании шаблона настройки свойств составляющих его компонентов

сохраняются и переносятся на новую форму вместе с этими компонентами.

Создание шаблона включает следующие шаги:

1. На форме необходимо разместить требуемые компоненты, выровнять их и

настроить нужные свойства.

2. Выделить на форме компоненты, которые предполагается включить в шаблон,

в группу.

3. Выбрать в меню Components Главного окна среды разработки команду Create

Component Template.

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

страницу Палитры компонентов, на которой шаблон будет доступен. Нажать

кнопку ОК.

Теперь шаблон можно использовать обычным способом: после выбора его на

странице Палитры компонентов и переноса, на форме появляется заданный набор

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

Шаблоны кода

Шаблоны кода предназначены для быстрой вставки в исходные код моду-. лей

проекта стандартных (или часто используемых) комбинаций операторов языка

Object Pascal. Для вызова шаблона кода используется комбинация клавиш иш

+, после нажатия которой появляется список доступных в настоящее время

шаблонов.

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

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

Стандартная поставка Delphi включает несколько типовых шаблонов с наиболее

распространенными наборами операторов.

Опция завершения кода

Опция завершения кода применяется при необходимости использовать в исходном

коде проекта свойства и методы стандартных компонентов Delphi. Включение

механизма завершения кода происходит после ввода символа точки за названием

класса или объекта. едактор кода автоматически разворачивает список всех

свойств и методов компонента. После выбора нужного элемента списка и

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

Так как многие классы обладают. внуши- тельным списком свойств, доступных

программисту, то при выборе нужного элемента из списка можно

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

свойства или метода осуществляется автоматическое позиционирование списка

на первый похожий элемент.

Опция включается на странице Code Insight в диалоговом окне команды

Environment Options меню Tools Главного меню среды разработки при помощи

флажка Сне Completion (рис. 2.1).

Опция параметров

Опция параметров осуществляет вывод справочной информации о количестве и

типах параметров, входящих в состав любой процедуры или функции, название

которой есть в исходном коде проекта в окне едактора кода. Справочные

данные появляются при позиционировании курсора на названии процедуры или

функции.

Опция включается на странице Code Insight в диалоговом окне команды

Environment Options меню Tools Главного меню среды разработки при помощи

флажка Соде Parameters (рис. 2.1).

Опция заполнения класса

Эта функция автоматически генерирует исходный код для любых составных

частей нового класса (свойств и методов), которые уже объявлены в секции

interface, а также создает объявление для тех элементов, которые уже

описаны в секции implementation.

Чтобы создать описание объявленных свойств и методов, необходимо установить

курсор в любое место объявления класса в секции interface и нажать

комбинацию клавиш ++.

После этого Delphi, во-первых, создаст для объявленных свойств класса не-

обходимые свойства и методы для чтения и записи в секции private. Во-

вторых, в секции implementation будет сгенерировано описание необходимых

методов.

Например, имеется простейший класс:

type

TSimpleObject = class (TObject)

property Empty: Integer;

function ClearEmpty: Boolean;

end;

Тогда, после нажатия комбинации клавиш ++, исходный код в секции interface

будет приведен к следующему виду:

type

TSimpleObject = class (TObject)

property Empty: Integer read FEmpty write SetEmpty;

function ClearEmpty: Boolean;

private

FEmpty: Integer;

procedure SetEmpty(const Value: Integer);

end;

А в секции implementation появятся следующие строки:

function TSimpleObject.ClearEmpty: Boolean;

begin

end;

procedure TSimpleObject.SetEmpty(const Value: Integer);

begin

FEmpty := Value;

end;

3. Межпрограммное взаимодействие

Часто возникает необходимость организовать взаимодействие программ,

написанных разными людьми или даже разными фирмами. Задача решается в

рамках идеологии «клиент-сервер», когда одно приложение должно реагировать

на запросы других приложений. Наконец, с развитием сетей совершенно обычной

стала задача взаимодействия приложения на разных машинах.

Для организации взаимодействия между задачами существует очень много

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

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

двумя программами можно установить таким образом, что изменения в одном

приложении будут отражаться во втором. Например, если Вы меняете число в

электронной таблице, то во втором приложении данные обновятся автоматически

и отобразят изменения. Кроме того, можно из своего приложения управлять

другими приложениями такими, как Word for Windows, Excel и др.

Dynamic Data Exchange (DDE)

DDE дает возможность перейти через рамки приложения и взаимодействовать с

другими приложениями и системами Windows. Dynamic Data Exchange получило

свое имя потому, что позволяет двум приложениям обмениваться данными

(текстовыми, через глобальную память) динамически во время выполнения. DDE

- давний и прижившийся протокол обмена данными, появившийся еще на заре эры

Windows. Ниша, занимаемая DDE - это оперативная передача и синхронизация

данных в приложениях.

Приложения, использующие DDE, подразделяются на две категории: клиенты и

серверы. Оба участника процесса совершают контакты (conversations) по

определенным темам (topics), при этом в рамках темы производится обмен

элементами данных (items). Устанавливает контакт DDE-клиент, который

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

контакта всякое изменение элемента данных на DDE-сервере передается

элементу данных клиента. Одно и то-же приложение может быть одновременно и

сервером, и клиентом (например, MicroSoft Word).

DDE-серверы

Для построения DDE-сервера в Delphi имеются два объекта, расположенные на

странице System Палитры Компонент - TDdeServerConv и TDdeServerItem. Обычно

в проекте используется один объект TDdeServerConv и один или более

TDdeServerItem. Для получения доступа к сервису DDE-сервера, клиенту

потребуется знать несколько параметров: имя сервиса (Service Name) - это

имя приложения (обычно - имя выполняемого файла без расширения EXE,

возможно с полным путем); Topic Name - в название темы; Item Name –

название элемента данных.

Назначение объекта TDdeServerConv - общее управление DDE и обработка

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

обработчике события OnExecuteMacro, например, как это сделано ниже:

procedure TDdeSrvrForm.DoMacro(Sender: TObject;Msg: TStrings);

var

Text: string;

Begin

Text := '';

if Msg.Count > 0 then Text := Msg.Strings[0];

MessageDlg ('Executing Macro - ' + Text, mtInformation, [mbOK], 0);

End;

Важнейшим свойством компонента TDdeServerConv является название темы,

содержащееся в свойстве Name. Клиент должен знать это имя при установлении

контакта, за исключением случая, когда он подключается к данным контакта,

скопированным в буфер обмена.

В моменты открытия и закрытия контакта возникают события:

Property OnOpen: tNotifyEvent;

Property OnClose: tNotifyEvent;

Объект TDdeServerItem связывается с TDdeServerConv посредством свойства

Property ServerConv:tDDEServerConv,

и определяет, что, собственно, будет пересылаться по DDE. В принципе,

потокол DDE подразумевает обмен любыми данными, формат которых

зарегистрирован в системе для передачи через буфер обмена. Однако для

рассматриваемых компонентов эти возможности ограничиваются только

текстовыми данными. Для этого у компонента TDdeServerItem есть свойства

Text и Lines (Text имеет то же значение, что и Lines[0]).

Property Text:string;

Property Lines:tStrings;

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

обновленных данных во все приложения-клиенты, установившие связь с

сервером.

Данный компонент позволяет также осуществлять установление связи через

буфер обмена (Clipboard). Для этого служит метод CopyToClipboard.

Необходимая информации помещается в через буфер обмена и может быть вызвана

из приложения-клиента при установлении связи. Обычно, в DDE-серверах для

этого есть специальный пункт меню Paste Special или Paste Link.

DDE-клиенты

Для построения DDE-клиента в Delphi используются два компонента

TDDEClientConv и TDDEClientItem. Аналогично серверу, в программе обычно

используется один объект TDDEClientConv и один и более связанных с ним

TDDEClientItem.

TDDEClientConv служит для установления связи с сервером и общим управлением

DDE-связью. Установить связь с DDE-сервером можно как во время разработки,

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

- заполнить вручную необходимые свойства компонента. Это DdeService,

DdeTopic и ServiceApplication. Если во время разработки дважды щелкнуть на

одном из первых двух свойств в Инспекторе Объектов - появится диалог для

определения DDE-связи. Для установления связи через Clipboard в диалоге

есть специальная кнопка Past Link. Ей можно воспользоваться, если Вы

запустили DDE-сервер, сохранили каким-то образом информацию о связи и вошли

Страницы: 1, 2, 3


© 2010 БИБЛИОТЕКА РЕФЕРАТЫ