Опция заполнения класса
Эта функция автоматически генерирует исходный код для любых составных частей нового класса (свойств и методов), которые уже объявлены в секции 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-сервер, сохранили каким-то образом информацию о связи и вошли в этот диалог. Например, если DDE-сервером является DataBase Desktop, то нужно загрузить в него какую-нибудь таблицу Paradox, выбрать любое поле и выбрать пункт меню Edit|Copy. Свойство ServiceApplication заполняется в том случае, если в поле DDEService содержится имя, отличное от имени программы, либо если эта программа не находится в текущей директории. В этом поле указывается полный путь и имя программы без расширения (.EXE). Данная информация нужна для автоматического запуска сервера при установлении связи по DDE, если тот еще не был запущен.
Имена сервера DDE и темы содержатся в свойствах: Property DDEService:string; Property DDETopic:string;
Способ вхождения в контакт определяется свойством Property ConnectMode:tDataMode; Type tDataMode = (DDEAutomatic,DDEManual);
Метод Function SetLinc(const Service: string; const Topic: string):Boolean; Присваивает свойствам DDEService и DDETopic соответствующие значения, а в случае, если задан режим DDEAutomatic, и устанавливает контакт. В режиме DDEManual для установления контакта необходимо дополнительно вызвать метод Function OpenLink: Boolean; Этот метод сначала закрывает предыдущий контакт, затем пытается связаться с сервером DDEService на тему DDETopic. Если это не удается сразу, предпринимается попытка загрузить приложение с именем, определенным в свойстве: Property ServiceApplication: string; Можно связаться с сервером, поместившим данные в буфер обмена с помощью метода Function PasteLink: boolean;
Ниже приведен пример процедуры, осуществляющей связь с сервером. procedure TMainForm.doNewLink(Sender: TObject); begin DdeClient.SetLink(AppName.Text, TopicNameEdit.Text); DdeClientItem.DdeConv := DdeClient; DdeClientItem.DdeItem := ItemName.Text; end; procedure TMainForm.doPasteLink(Sender: TObject); var Service, Topic, Item : String; begin if GetPasteLinkInfo (Service, Topic, Item) then begin AppName.Text := Service; TopicName.Text := Topic; ItemName.Text := Item; DdeClient.SetLink (Service, Topic); DdeClientItem.DdeConv := DdeClient; DdeClientItem.DdeItem := ItemName.Text; end; end;
После того, как установлена связь, нужно позаботиться о поступающих по DDE данных, это делается в обработчике события OnChange объекта TDdeClietItem: procedure TFormD.DdeClientItemChange(Sender: TObject); begin DdeDat.Lines := DdeClientItem.Lines; end;
Это единственная задача объекта TDdeClientItem.
Свойство
Property DDEConv: TddeClientConv
Этого компонента предназначено для связи с соответствующим объектом DdeClientConv. А свойство
Property DDEItem:string;
Должно содержать имя элемента данных.
Свойства Property Text: string; Property Lines: tStrings;
Аналогичны соответствующим свойствам tDDEServerItem и содержат данные.
На объект TDdeClientConv возлагаются еще две задачи: пересылка данных на сервер и выполнение макросов. Для этого у данного объекта есть соответствующие методы. Function ExecuteMacroLines(Cmd:tStrings, WaitFlg:Boolean):Boolean; Function PokeDataLines(const Item:string,Data:tStrings):Boolean;
Страницы: 1, 2, 3, 4, 5, 6, 7, 8