Интерфейс сервера определен списком имен (Service, Topic и Items) в отдельном модуле с именем DataEntry (DATAENTR.TPU). Сервер делает Items доступными в формате cf_Text; они преобразовываются и хранятся локально как целые. }
unit
interface
uses
const
type
{ Структура данных, представленная в примере }
TDataSample = array
TDataString = array
{ Главная форма }
TForm1 = class
MainMenu1: TMainMenu;
File1: TMenuItem;
exit1: TMenuItem;
DDE1: TMenuItem;
RequestUpdate1: TMenuItem;
AdviseofChanges1: TMenuItem;
PokeSomeData: TMenuItem;
N1: TMenuItem;
PaintBox1: TPaintBox;
procedure
procedure
procedure
procedure
procedure
procedure
procedure
procedure
procedure
private
{ Private declarations }
public
Inst: Longint;
CallBackPtr: ^TCallback;
ServiceHSz : HSz;
TopicHSz : HSz;
ItemHSz : array
ConvHdl : HConv;
DataSample : TDataSample;
end
var
implementation
const
DataEntryName : PChar = 'DataEntry';
DataTopicName : PChar = 'SampledData';
DataItemNames : array
{$R *.DFM}
{ Локальная функция: Процедура обратного вызова для DDEML }
function
begin
CallbackProc := 0; { В противном случае смотрите доказательство }
case
xtyp_Register:
begin
{ Ничего ... Просто возвращаем 0 }
end
xtyp_Unregister:
begin
{ Ничего ... Просто возвращаем 0 }
end
xtyp_xAct_Complete:
begin
{ Ничего ... Просто возвращаем 0 }
end
xtyp_Request, Xtyp_AdvData:
begin
Form1.Request(Conv);
CallbackProc := dde_FAck;
end
xtyp_Disconnect:
begin
ShowMessage('Соединение разорвано!');
Form1.Close;
end
end
end
{ Посылка DDE запроса для получения cf_Text данных с сервера. Запрашиваем данные для всех полей DataSample, и обновляем окно для их отображения. Данные с сервера получаем синхронно, используя DdeClientTransaction.}
procedure
var
hDdeTemp : HDDEData;
DataStr : TDataString;
Err, I : Integer;
begin
if
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT