Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

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

 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;
Обмен сообщениями
Как  уже  упоминалось  ранее,  операционная  система  Windows®  основана  на
сообщениях,  возникающих  в  результате  действий  пользователя,  аппаратуры
компьютера  или  других   программ.   Поведение   каждого   окна   полностью
определяется тем, какие оно принимает сообщения и  как  их  обрабатывает.  В
большинстве  случаев,  обработка  сообщений  в  Delphi   выполняется   через
события. Однако, бывают ситуации, когда может  потребоваться  послать  и/или
обработать сообщение самостоятельно. Существуют два типа сообщений,  которые
могут потребовать обработки в обход обычной системы сообщений Delphi:


Сообщения Windows®, не обрабатываемые VCL

Сообщения, определяемые пользователем
В принципе, сообщения делятся на две категории:


Командные сообщения

Уведомляющие сообщения
Командные сообщения используются как программистами,  тек  и  Windows®.  Они
управляют  элементам   операционной   системы   и   прикладным   программам.
Уведомляющие сообщения  содержат  информацию  об  изменении  состояния  окон
Windows®, их отдельных элементов и устройств системы. Они посылаются  только
самой средой окон Windows®.
Каждое сообщение имеет два параметра: WPARAM и LPARAM. В 32-х  битной  среде
оба эти параметра имеют размер  32  бита  (longword).  В  16-битной  Windows
WPARAM - это 16 битное число (word), а LPARAM - 32-битное (longint).
Для отправки сообщений API Windows® содержит две функции:


function PostMessage( HWND hWnd, // handle of destination window

UINT Msg, // message to post

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

):BOOLEAN;


function SendMessage( HWND hWnd, // handle of destination window

UINT Msg, // message to send

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

): LRESULT;
Первая  из  них  отправляет  сообщение  в  очередь  сообщений   Windows®   и
немедленно возвращает управление. PostMessage возвращает  TRUE,  если  вызов
функции прошел успешно и FALSE в противном случае.
Функция SendMessage отличается от PostMessage тем,  что,  послав  сообщение,
она не возвратит управление до тех пор, пока сообщение не будет доведено  до
получателя.
Обе функции имеют одинаковые параметры: HWND  -  дескриптор  окна,  которому
предназначается сообщение, UINT - сообщение, которое  должно  быть  послано,
WPARAM и LPARAM - параметры сообщения.
В следующем примере главной форме проекта посылается  сообщение  о  закрытии
приложения:


PostMessage(Handle,WM_QUIT,0,0);
В дополнение к функциям API Windows® VCL  содержит  метод  Perform,  который
можно использовать для посылки сообщений любому окну VCL.


function Perform(Msg: Cardinal; WParam, LParam: Longint): Longint;
Perform обходит систему передачи сообщений Windows® и  направляет  сообщение
непосредственно  механизму  обработки   данного   окна.   С   использованием
предыдущий пример будет выглядеть следующим образом:


Perform(WM_QUIT,0,0);
VCL  имеет  события  примерно  лишь  для  20%  наиболее  часто  используемых
сообщений  Windows®.   У   программиста   может   возникнуть   необходимость
обработать сообщения, для  которых  в  VCL  события  не  предусмотрены.  Для
обработки сообщений ОС, не имеющих соответствующих  событий  в  Delphi  есть
ключевое слово message. С его помощью  конкретный  метод  в  коде  программы
может быть  связан  с  любым  сообщением  Windows®.  Когда  окно  приложения
получает это сообщение  вызывается  соответствующий  метод.  Для  реализации
обработки сообщения на этом уровне необходимо:
1. Включить объявление метода для обработки сообщения в  объявление  класса,
указав ключевое слово message и название сообщения, для  обработки  которого
данный метод редназначен.
2. Включить определение метода в раздел implementation.
Приведем    пример    определения    метода,    обрабатывающего    сообщение
WM_ERASEBKGND:


Procedure WmEraseBkgnd(var Msg:tWMEraseBkgnd); message WM_ERASEBKGND;
Ключевое слово message указывает на то, что данный  метод  используется  для
обработки сообщения ОС, имя которого указано после  этого  ключевого  слова:
WM_ERASEBK
Пред.678910След.
скачать работу

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

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ