Notifying the Client that Data Has Changed
When the client establishes a link by using the
WM_DDE_ADVISE message, with the
fDeferUpd member not set (that is, equal to zero) in the
DDEDATA structure, the client has requested the server send the data item each time
the item's value changes. In such cases, the server renders the new value of the
data item in the previously specified format and sends the client a
WM_DDE_DATA message, as shown in the following example.
/*
* Allocate the size of a DDE data header, plus data (a string),
* plus a <CR><LF><NULL>
*/
if (!(hData = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
sizeof(DDEDATA) + lstrlen(szItemValue) + 3)))
return;
if (!(lpData = (DDEDATA FAR*) GlobalLock(hData))) {
GlobalFree(hData);
return;
}
lpData->fAckReq = bAckRequest; /* as specified in original */
/* WM_DDE_ADVISE message */
lpData->cfFormat = CF_TEXT;
lstrcpy(lpData->Value, szItemValue); /* copies value to be sent */
lstrcat(lpData->Value, "\r\n"); /* CR/LF for CF_TEXT format */
GlobalUnlock(hData);
if ((atomItem = GlobalAddAtom(szItemName)) != 0) {
if (!PostMessage(hwndClientDDE,
WM_DDE_DATA,
(WPARAM) hwndServerDDE,
PackDDElParam(WM_DDE_DATA, (UINT) hData, atomItem))) {
GlobalFree(hData);
GlobalDeleteAtom(atomItem);
FreeDDElParam(WM_DDE_DATA, lParam);
}
}
if (atomItem == 0) {
.
. /* error handling */
.
}
In this example, the client processes the item value as appropriate. If the
fAckReq flag for the item is set, the client sends the server a positive
WM_DDE_ACK message.
When the client establishes the link, with the
fDeferUpd member set (that is, equal to 1), the client has requested that only a
notification, not the data itself, be sent each time the data changes. In such cases,
when the item value changes, the server does not render the value but simply
sends the client a
WM_DDE_DATA message with a null data handle, as illustrated in the following example.
if (bDeferUpd) { /* checking whether the flag was originally */
/* set in the WM_DDE_ADVISE message */
if ((atomItem = GlobalAddAtom(szItemName)) != 0) {
if (!PostMessage(hwndClientDDE,
WM_DDE_DATA,
(WPARAM) hwndServerDDE,
PackDDElParam(WM_DDE_DATA, 0,
atomItem))) { /* NULL data */
GlobalDeleteAtom(atomItem);
FreeDDElParam(WM_DDE_DATA, lParam);
}
}
}
if (atomItem == 0) {
.
. /* error handling */
.
}
As necessary, the client can request the latest value of the data item by
issuing a normal
WM_DDE_REQUEST message, or it can simply ignore the notice from the server that the data has
changed. In either case, if
fAckReq is equal to 1, the client is expected to send a positive
WM_DDE_ACK message to the server.
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database