class DDELink example
This sample application uses a DDE link to send data to a DDE server and optionally receive notification updates. The server program, shown in the class DDETopic example, runs in a second instance of dBASE Plus. For a demonstration of multiple-client DDE interaction, create and run another form using this same code, but change the DDE topic from "TEST" to any other name. At the same time, try linking another DDE client to the dBASE Plus server program using some other Windows program, such as Microsoft Word (code for a Word 95 macro to do just that appears at the bottom of this topic).
** END HEADER -- do not remove this line
//
// Generated on 02/24/00
//
parameter bModal
local f
f = new stockclientForm()
if (bModal)
f.mdi = false // ensure not MDI
f.readModal()
else
f.open()
endif
class stockclientForm of FORM
with (this)
onOpen = class::FORM_ONOPEN
onClose = class::FORM_ONCLOSE
scaleFontBold = false
height = 6
left = 4
top = 2
width = 42
text = "Stock Client 2000"
autoCenter = true
mdi = false
endwith
this.NOTIFYTEXT = new TEXT(this)
with (this.NOTIFYTEXT)
height = 1
left = 2
top = 2
width = 38
border = true
colorNormal = "BtnText"
fontSize = 8
text = "Welcome to Stock Client 2000"
borderStyle = 7 // Client
endwith
this.SHARES = new SPINBOX(this)
with (this.SHARES)
height = 1
left = 2
top = 4
width = 12
picture = "99999"
step = 10
rangeMax = 10000
rangeMin = 1
fontSize = 8
value = 10
rangeRequired = true
borderStyle = 7 // Client
endwith
this.BUYBUTTON = new PUSHBUTTON(this)
with (this.BUYBUTTON)
onClick = class::BUYBUTTON_ONCLICK
height = 1
left = 18
top = 4
width = 10
text = "&Buy"
fontSize = 8
group = true
value = false
endwith
this.SELLBUTTON = new PUSHBUTTON(this)
with (this.SELLBUTTON)
onClick = class::SELLBUTTON_ONCLICK
height = 1
left = 30
top = 4
width = 10
text = "&Sell"
fontSize = 8
group = true
value = false
endwith
this.NOTIFYBUYCHECKBOX = new CHECKBOX(this)
with (this.NOTIFYBUYCHECKBOX)
onChange = class::NOTIFYBUYCHECKBOX_ONCHANGE
height = 0.8636
left = 2
top = 1
width = 16
text = "Notify on Buy"
colorNormal = "WindowText/BtnFace"
fontSize = 8
value = false
group = true
endwith
this.NOTIFYSELLCHECKBOX = new CHECKBOX(this)
with (this.NOTIFYSELLCHECKBOX)
onChange = class::NOTIFYSELLCHECKBOX_ONCHANGE
height = 0.8636
left = 24
top = 1
width = 16
text = "Notify on Sell"
colorNormal = "WindowText/BtnFace"
fontSize = 8
value = false
group = true
endwith
function BUYBUTTON_onClick
form.ddeClientObj.poke("Buy", "" + form.shares.value)
return
function form_onClose
form.ddeClientObj.terminate()
form.ddeClientObj.release() // Destroys parent reference to form
return
function form_onOpen
this.ddeClientObj = new StockDDELink()
with this.ddeClientObj
if initiate("STOCKSERVER", "TEST")
parent = this
timeout = 2000
msgbox("Connecting to " + server ;
+ ". Account holder: " + topic ;
+ ". Current holdings: " + peek("Buy"),;
"Stock Client 2000")
else
msgbox("Could not connect to StockServer", ;
"Connection failed", 16)
form.close()
endif
endwith
function NOTIFYBUYCHECKBOX_onChange
if this.value
form.ddeClientObj.advise("Buy")
else
form.ddeClientObj.unAdvise( "Buy" )
endif
return
function NOTIFYSELLCHECKBOX_onChange
if this.value
form.ddeClientObj.advise("Sell")
else
form.ddeClientObj.unAdvise("Sell")
endif
return
function SELLBUTTON_onClick
form.ddeClientObj.poke("Sell", "" + form.shares.value)
return
endclass
class StockDDELink of DDELink
this.parent = null
function onNewValue(item, value)
this.parent.notifyText.text := "Notified of changes in: " + item + ;
" now: " + value
endclass
This Word for Windows 95 macro also lets you communicate with the dBASE Plus DDE stock server program described in the class DDETopic example. You can use this macro from within Word at the same time as you use the dBASE Plus DDE client application described above to communicate with the dBASE Plus server running in a separate instance.
‘Word 95 macro to communicate with dBASE Plus Stock Server dde sample
Sub MAIN
DDETerminateAll
channel = DDEInitiate("STOCKSERVER", "TEST")
DDEPoke channel, "sell", "150"
DDETerminate channel
End Sub