Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Тут можно читать онлайн Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Советы по Delphi. Версия 1.4.3 от 1.1.2001
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - описание и краткое содержание, автор Валентин Озеров, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать книгу онлайн бесплатно, автор Валентин Озеров
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

functionMatchTopicAndItem(Topic, Item: HSz): Integer;

functionWildConnect(Topic, Service: HSz; ClipFmt: Word): HDDEData;

functionAcceptPoke(Item: HSz; ClipFmt: Word;Data: HDDEData): Boolean;

functionDataRequested(TransType: Word; ItemNum: Integer; ClipFmt: Word): HDDEData;

procedureFormCreate(Sender: TObject);

procedureFormDestroy(Sender: TObject);

procedureFormShow(Sender: TObject);

procedureEnterData1Click(Sender: TObject);

procedureClear1Click(Sender: TObject);

private

Inst : Longint;

CallBack : TCallback;

ServiceHSz : HSz;

TopicHSz : HSz;

ItemHSz : array[1..NumValues] ofHSz;

ConvHdl : HConv;

Advising : array[1..NumValues] ofBoolean;

DataSample : TDataSample;

public

{ Public declarations }

end;

varForm1: TForm1;

implementation

usesDDEDlg; { Форма DataEntry }

{$R *.DFM}

procedureTForm1.Exit1Click(Sender: TObject);

begin

Close;

end;

{ Глобальная инициализация }

const

DemoTitle: PChar = 'DDEML демо, серверное приложение';

MaxAdvisories = 100;

NumAdvLoops : Integer = 0;

{ Локальная функция: Процедура обратного вызова для DDEML }

{ Данная функция обратного вызова реагирует на все транзакции, генерируемые DDEML. Объект "target Window" (окно-цель) берется из глобально хранимых, и для реагирования на данную транзакцию, тип которой указан в параметре CallType, используются подходящие методы этих объектов.}

functionCallbackProc(CallType, Fmt: Word; Conv: HConv; HSz1, HSz2: HSZ; Data: HDDEData; Data1, Data2: Longint): HDDEData; export;

var

ItemNum: Integer;

begin

CallbackProc := 0; { В противном случае смотрите доказательство }

caseCallType of

xtyp_WildConnect:

CallbackProc := Form1.WildConnect(HSz1, HSz2, Fmt);

xtyp_Connect:

ifConv = 0 then begin

ifForm1.MatchTopicAndService(HSz1, HSz2) thenCallbackProc := 1; { Связь! }

end;

{ После подтверждения установки соединения записываем дескриптор связи как родительское окно.}

xtyp_Connect_Confirm:

Form1.ConvHdl := Conv;

{ Клиент запрашивает данные, делает прямой запрос или отвечает на уведомление. Возвращаем текущее состояние данных.}

xtyp_AdvReq, xtyp_Request:

begin

ItemNum := Form1.MatchTopicAndItem(HSz1, HSz2);

ifItemNum > 0 thenCallbackProc := Form1.DataRequested(CallType, ItemNum, Fmt);

end;

{ Отвечаем на Poke-запрос ... данная демонстрация допускает только Pokes для DataItem1. Для подтверждения получения запроса возвращаем dde_FAck, в противном случае 0.}

xtyp_Poke:

begin

ifForm1.AcceptPoke(HSz2, Fmt, Data) thenCallbackProc := dde_FAck;

end;

{ Клиент сделал запрос для старта цикла-уведомления. Имейте в виду, что мы организуем "горячий" цикл. Устанавливаем флаг Advising для указания открытого цикла, который будет проверять данные на предмет их изменения.}

xtyp_AdvStart:

begin

ItemNum := Form1.MatchTopicAndItem(HSz1, HSz2);

ifItemNum > 0 then begin

ifNumAdvLoops < MaxAdvisories then begin

{ Произвольное число }

Inc(NumAdvLoops);

Form1.Advising[ItemNum] := True;

CallbackProc := 1;

end;

end;

end;

{ Клиент сделал запрос на прерывание цикла-уведомления.}

xtyp_AdvStop:

begin

ItemNum := Form1.MatchTopicAndItem(HSz1, HSz2);

ifItemNum > 0 then begin

ifNumAdvLoops > 0 then begin

Dec(NumAdvLoops);

ifNumAdvLoops = 0 thenForm1.Advising[ItemNum] := False;

CallbackProc := 1;

end;

end;

end;

end; { Case CallType }

end;

{ Возращает True, если данные Topic и Service поддерживаются этим приложением. В противном случае возвращается False.}

functionTForm1.MatchTopicAndService(Topic, Service: HSz): Boolean;

begin

Result := False;

ifDdeCmpStringHandles(TopicHSz, Topic) = 0 then

ifDdeCmpStringHandles(ServiceHSz, Service) = 0 thenResult := True;

end;

{ Определяем, один ли Topic и Item поддерживается этим приложением. Возвращаем номер заданного элемента (Item Number) (в пределах 1..NumValues), если он обнаружен, и ноль в противном случае.}

functionTForm1.MatchTopicAndItem(Topic, Item: HSz): Integer;

varI : Integer;

begin

Result := 0;

ifDdeCmpStringHandles(TopicHSz, Topic) = 0 then

forI := 1 toNumValues do

ifDdeCmpStringHandles(ItemHSz[I], Item) = 0 then

Result := I;

end;

{ Отвечаем на запрос wildcard-соединения (дословно - дикая карта, шаблон). Такие запросы возникают всякий раз, когда клиент пытается подключиться к серверу с сервисом или именем топика, установленного в 0. Если сервер обнаруживает использование такого рода шаблона, он возвращает дескриптор массива THSZPair, содержащего найденные по шаблону Service и Topic.}

functionTForm1.WildConnect(Topic, Service: HSz; ClipFmt: Word): HDDEData;

var

TempPairs: array[0..1] ofTHSZPair;

Matched : Boolean;

begin

TempPairs[0].hszSvc:= ServiceHSz;

TempPairs[0].hszTopic:= TopicHSz;

TempPairs[1].hszSvc:= 0; { 0-завершает список }

TempPairs[1].hszTopic:= 0;

Matched := False;

if(Topic= 0) and(Service = 0) thenMatched := True { Шаблон обработан, элементов не найдено }

else

if(Topic = 0) and(DdeCmpStringHandles(Service, ServiceHSz) = 0) thenMatched := True

else if(DdeCmpStringHandles(Topic, TopicHSz) = 0) and(Service = 0) thenMatched := True;

ifMatched then

WildConnect := DdeCreateDataHandle(Inst, @TempPairs, SizeOf(TempPairs), 0, 0, ClipFmt, 0)

elseWildConnect := 0;

end;

{ Принимаем и проталкиваем данные по просьбе клиента. Для демонстрации этого способа используем только значение DataItem1, изменяемое Poke.}

functionTForm1.AcceptPoke(Item: HSz; ClipFmt: Word; Data: HDDEData): Boolean;

var

DataStr: TDataString;

Err: Integer;

TempSample: Integer;

begin

if(DdeCmpStringHandles(Item, ItemHSz[1]) = 0) and(ClipFmt = cf_Text) then begin

DdeGetData(Data, @DataStr, SizeOf(DataStr), 0);

Val(DataStr, TempSample, Err);

ifIntToStr(TempSample) <> Label6.Caption then begin

Label6.Caption:= IntToStr(TempSample);

DataSample[1] := TempSample;

ifAdvising[1] thenDdePostAdvise(Inst, TopicHSz, ItemHSz[1]);

end;

AcceptPoke := True;

end elseAcceptPoke := False;

end;

{ Возвращаем данные, запрашиваемые значениями TransType и ClipFmt. Такое может произойти в ответ на просьбу xtyp_Request или xtyp_AdvReq. Параметр ItemNum указывает на поддерживаемый (в диапазоне 1..NumValues) и требуемый элемент (обратите внимание на то, что данный метод подразумевает, что вызывающий оператор уже установил достоверность и ID требуемого пункта с помощью MatchTopicAndItem). Соответствующие данные из переменной экземпляра DataSample преобразуются в текст и возвращаются клиенту.}

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Валентин Озеров читать все книги автора по порядку

Валентин Озеров - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Советы по Delphi. Версия 1.4.3 от 1.1.2001 отзывы


Отзывы читателей о книге Советы по Delphi. Версия 1.4.3 от 1.1.2001, автор: Валентин Озеров. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x