АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Разработка DDE-сервера

Читайте также:
  1. II этап. Разработка модели.
  2. RAND RESEARCH AND DEVELOPMENT CORPORATION (“Корпорация Рэнд” — “Корпорация по научно-исследовательским и опытно-конструкторским разработкам”)
  3. RAND RESEARCH AND DEVELOPMENT CORPORATION («Корпорация Рэнд» – «Корпорация по научноисследовательским и опытноконструкторским разработкам»)
  4. Анализ опасных факторов и разработка контрольных и предупреждающих действий.
  5. ГЛАВА 3. РАЗРАБОТКА РЕКОМЕНДАЦИЙ ПО УПРАВЛЕНИЮ ЖИЗНЕННЫМ ЦИКЛОМ ТОВАРА «IPHONE» КОМПАНИИ «APPLE INC.» И ОЦЕНКА ИХ ЭФФЕКТИВНОСТИ
  6. Глава 9 - Разработка скоростной метлы
  7. Глава девятая Разработка скоростной метлы
  8. Инженерная разработка мер защиты от избыточного тепла
  9. Источник: собственная разработка
  10. Источник: собственная разработка
  11. Источник: собственная разработка
  12. Крах Третьей республики во Франции. Разработка и принятие Конституции 1946 г.

Приложение, получающее данные из другого приложения по DDE и/или управляющее другим приложением с помощью команд через DDE является DDE-клиентом. В этом случае второе приложение является DDE-сервером. Рассмотрим проект DDE-сервера, выполненного на языке программирования Borland Delphi 6.

На рис.20 представлено окно DDE-сервера во время дизайна в среде Delphi

 

Рис. 20. Окно DDE-сервера на стадии проектирования в Delphi

 

Для построении DDE-сервера в Delphi имеются два объекта, расположенные на странице System Палитры Компонент - TDdeServerConv и TDdeServerItem. Обычно в проекте используется один объект TDdeServerConv и один или более TDdeServerItem. Для получения доступа к сервису DDE-сервера, клиенту потребуется знать несколько параметров: имя сервиса (Service Name) - это имя приложения (обычно - имя выполняемого файла без расширения EXE, возможно с полным путем); Topic Name - в Delphi это имя компоненты TDdeServerConv; Item Name - в Delphi это имя нужной компоненты TDdeServerItem. Назначение объекта TDdeServerConv - общее управление DDE и обработка запросов от клиентов на выполнение макроса.

Объект TDdeServerItem связывается с TDdeServerConv и определяет, что, собственно, будет пересылаться по DDE. Для этого у него есть свойства Text и Lines. (Text имеет то же значение, что и Lines[0].) При изменении значения этих свойств автоматически происходит пересылка обновленных данных во все приложения-клиенты, установившие связь с сервером.

При запуске приложения происходит выполнение процедуры TDDEServe.FormActivate:

 

procedure TDDEServe.FormActivate(Sender: TObject);

var nidata: TNotifyIconData;

begin

Application.ShowMainForm:= False;

ShowWindow(Application.Handle, SW_HIDE);

ShowWindow(Application.MainForm.Handle, SW_HIDE);

with nidata do

begin

cbSize:= SizeOf(TNotifyIconData);

Wnd:= Self.Handle;

uID:= 1;

uFlags:= NIF_ICON or NIF_MESSAGE or NIF_TIP;

uCallBackMessage:= WM_MYICONNOTIFY;

hIcon:= Application.Icon.Handle;

StrPCopy(szTip,Application.Title);

end;

Shell_NotifyIcon(NIM_ADD, @nidata);

ru:=10;

end;

 

В этой процедуре приложение сворачивается в системный Tray, а форма становится невидимой. Окончание работы DDE-сервера вызывается путём нажатия левой или правой кнопкой мыши на иконке приложения в области системного Tray. Обработка этого события выполняется в процедуре TDDEServe.WMICON:

 

procedure TDDEServe.WMICON(var msg: TMessage);

begin

case msg.LParam of

WM_RBUTTONDOWN,WM_LBUTTONDOWN: close;

end;

end;

 

При этом, при закрытии окна приложения вызывается процедура TDDEServe.FormDestroy, в которой происходит удаление иконки из системного Tray:

 

procedure TDDEServe.FormDestroy(Sender: TObject);

var nidata: TNotifyIconData;

begin

with nidata do

begin

cbSize:= SizeOf(TNotifyIconData);

Wnd:= Self.Handle;

uID:= 1;

end;

Shell_NotifyIcon(NIM_DELETE, @nidata);

end;

 

Работа приложения в целом строится посредством вызова процедуры TDDEServe.Timer1Timer по прерыванию таймера.

 

implementation

{$R *.DFM}

uses ComObj, activex, ShellApi, shlobj, registry;

var

xsin: integer;

ru:real;

boolka:boolean;

 

procedure TDDEServe.Timer1Timer(Sender: TObject);

var LPTbyte: byte;

begin

xsin:=xsin+1;

if xsin>1000 then xsin:=xsin-1000;

DDEItem100.Text:=inttostr(5*(xsin-20*trunc(xsin/20))); //пилообразный сигнал

asm

mov dx,379h

in al,dx

and al,80h

mov LPTbyte,al

end;

DDEItem200.Text:=inttostr(LPTbyte*100); //состояние линии LPT-порта

DDEItem300.Text:=inttostr(round(50+50*sin(xsin/20)));

if (xsin/5)=trunc(xsin/5) then

if (ru<round(50+50*sin(xsin/20))) then

begin

boolka:=true;

ru:=ru+20

end else

begin

boolka:=false;

ru:=ru-20

end;

if boolka then DDEItem400.Text:='100' else DDEItem400.Text:='0';

end;

 

Для обеспечения DDE-обмена задекларированы следующие константы:

‘DDEServer’ – имя сервиса (Service Name);

‘DDETopic’ – Topic Name;

‘DDEItem100’ – переменная обмена;

‘DDEItem200’ – переменная обмена;

‘DDEItem300’ – переменная обмена;

‘DDEItem400’ – переменная обмена.

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)