1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| function SVDdeCallBack(
CallType, Fmt : UINT; //transaction type ; format atom of the data sent from the server
Conv: HConv; //a handle the conversation
hsz1, hsz2: HSZ; // hsz1: topic name ; hsz2: item name
Data: HDDEData; //a handle to the data associated with the topic and item name pair
Data1, Data2: DWORD) //
: HDDEData; stdcall;
var
pData: Pointer;
Len: Integer;
begin
Result := 0;
// Check if the calltype is the monitoring DDE call
if CallType = XTYP_MONITOR then
begin
// Get the DDE data
pData := DdeAccessData(Data, @Len);
// Je reçois une valeur totalement différente sur une machine 32 bits
if pData <> nil then
begin
// If data is a posted message
if Data2 = MF_POSTMSGS then
begin
try
// Check if the message was an acknowledge message
if TMonMsgStruct(pData^).wMsg = WM_DDE_ACK then
begin
// Detect only the acknowledge messages with no busy flag
if ((TMonMsgStruct(pData^).dmhd.uilo and DDE_FACK) = DDE_FACK) and
((TMonMsgStruct(pData^).dmhd.uilo and DDE_FBUSY) = 0) then
begin
// The DDE command has terminated
// ApplData.Waitstat is a "global" variable in the application
ApplData.WaitStat := False;
end
else
begin
// Acknowledge with BUSY Flag <> 0'
end;
if TMonMsgStruct(pData^).wMsg = WM_DDE_TERMINATE then
begin
//DDE_terminate message'); |
Partager