Hallo,
Ik heb een vraag over Dynamic Data Exchange (DDE) onder Delphi.
Zoals vele mensen vast wel weten zijn de componenten voor DDE in Delphi nou niet de meest uitgebreidde. Veel meer dan data uitlezen en schrijven kunnen ze niet. Nu is dit normaal geen probleem maar ware het niet dat ik graag meer wil.
Kon op GoT/Google niet zoveel vinden over DDE en Delphi, het meeste gaat over Visual Basic waar zo'n check al ingebouwd zit. een andere componentenset bestaan wel voor DDE dingen onder delphi (Klik) Maar deze krijg ik niet geinstalleerd. Daarom probeer ik hetzelf te maken.
Ik wil graag weten of een DDE server nog leeft, oftewel of hij nog wel data schrijft waar de DDE client bijkan. De DDE server kan ik qua source-code niet veranderen, anders had ik daar een extra veldje ingebouwd die om de zoveel seconden werd veranderd. Daarom ben ik gebonden aan de client.
Ik had zelf bedacht dat als ik een waarde in een veld uitlees, die opsla. Dan in datzelfde veld een vreemde waarde weer schrijf, die waarde weer uitlezen. Dan de 2 uitgelezen waardes vergelijken. Zijn die verschillend dan leeft de server nog, zijn ze hetzelfde dan doet de server niks meer.
De volgende code hoorde bij mijn gedachte:
Sorry voor de naamgeving (Form1, tempdata) maar het is maar een testprogje.
Nou ging dit vrij goed... yes dacht ik
Het enige probleem is dat als de server(Excel in dit geval) gesloten wordt en dan deze functie uitgevoerd wordt, dat dan mijn progje een excecptie geeft. Dit is wel af te vangen dus okay.
Maar het volgende is dat als ik het progje gestart heb, zonder dat de DDEserver aanstaan, dan check of de server leeft, dan de DDEserver opstart en dan nog een keer een check uitvoer dat ie dan nog steeds vermeldt dat ie niet leeft
Wegens bovenstaande heb ik dus de ConnectModes erbij gezet, zodat het progje telkens opnieuw de link probeert te maken, dit werkte alweer wat beter maar nu komt het vreemde: Soms wil hij niet meer connecten, dat komt er weer een exceptie met het bericht dat de DDE-Server niet bestaat. En dit terwijl de Server wel aanstaan en dat de instellingen niet gewijzigd zijn.
Weet iemand een oplossing hiervoor??
Ik heb een vraag over Dynamic Data Exchange (DDE) onder Delphi.
Zoals vele mensen vast wel weten zijn de componenten voor DDE in Delphi nou niet de meest uitgebreidde. Veel meer dan data uitlezen en schrijven kunnen ze niet. Nu is dit normaal geen probleem maar ware het niet dat ik graag meer wil.
Kon op GoT/Google niet zoveel vinden over DDE en Delphi, het meeste gaat over Visual Basic waar zo'n check al ingebouwd zit. een andere componentenset bestaan wel voor DDE dingen onder delphi (Klik) Maar deze krijg ik niet geinstalleerd. Daarom probeer ik hetzelf te maken.
Ik wil graag weten of een DDE server nog leeft, oftewel of hij nog wel data schrijft waar de DDE client bijkan. De DDE server kan ik qua source-code niet veranderen, anders had ik daar een extra veldje ingebouwd die om de zoveel seconden werd veranderd. Daarom ben ik gebonden aan de client.
Ik had zelf bedacht dat als ik een waarde in een veld uitlees, die opsla. Dan in datzelfde veld een vreemde waarde weer schrijf, die waarde weer uitlezen. Dan de 2 uitgelezen waardes vergelijken. Zijn die verschillend dan leeft de server nog, zijn ze hetzelfde dan doet de server niks meer.
De volgende code hoorde bij mijn gedachte:
Delphi:
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
| function TForm1.CheckAlive: boolean; var tempData1, tempData2: PChar; Data: array[0..79] of Char; begin with DdeClientConv1 do begin DdeService := 'Excel'; DdeTopic := '[Map1]Blad1'; SetLink(DdeService,DdeTopic); ConnectMode := ddeAutomatic; end; tempData1 := DDEClientConv1.RequestData('R1K1'); tempData2 := tempData1; StrPCopy(Data, 'Woei'); DDEClientConv1.PokeData('R1K1', Data); tempData1 := DDEClientConv1.RequestData('R1K1'); if tempData1 <> tempData2 then result := true else begin result := false; DdeClientConv1.ConnectMode := ddeManual; end; end; |
Sorry voor de naamgeving (Form1, tempdata) maar het is maar een testprogje.
Nou ging dit vrij goed... yes dacht ik
Maar het volgende is dat als ik het progje gestart heb, zonder dat de DDEserver aanstaan, dan check of de server leeft, dan de DDEserver opstart en dan nog een keer een check uitvoer dat ie dan nog steeds vermeldt dat ie niet leeft
Wegens bovenstaande heb ik dus de ConnectModes erbij gezet, zodat het progje telkens opnieuw de link probeert te maken, dit werkte alweer wat beter maar nu komt het vreemde: Soms wil hij niet meer connecten, dat komt er weer een exceptie met het bericht dat de DDE-Server niet bestaat. En dit terwijl de Server wel aanstaan en dat de instellingen niet gewijzigd zijn.
Weet iemand een oplossing hiervoor??
What a fine day for Science! | Specs