/**************/ /* autoldd2.c */ /**************************************************************************** ** PROGRAM: autoldd2 ** PURPOSE: Autolaskuri mallina DDE-palvelimesta ja asiakkaasta. ** Mahdollisuus kopioida leikekirjaan valmis viite. ** Toinen ikkuna, johon saadaan DDE-asiakas. ** Asiakas ikkunan linkit voidaan ottaa leikekirjasta ** tai Edit-ikkunaan kirjoitetun linkin mukaan. ** Yksinkertaistettu versio. ** USAGE: ** Esim EXCELissä kirjoitetaan kaava =AUTOLDDE|LKM!HA ** Quattro Prossa kaava @DDELINK([AUTOLDDE|LKM]"HA") ** Tässä tapauksessa nämä kaavat voidaan kopoida automaattisesti ** aktivoimalla joku laskurin nappula ja Edit/Copy ** Sitten esim. taulukkolaskennassa Edit/Paste Link ja DDE-linkki ** on valmis! ** Asiakas ikkunan 2 pientä linkkikenttää saadaan aktivoimalla ** jompikumpi niistä ja valitsemalla sen jälkeen Edit/Paste Link ** Mikäli kumpikaan ei ole valittu tulee linkki aina isoon ikkunaan. ** Ison ikkunan linkki saadaan myös edit-ikkunan tekstin mukaan ** valitsemalla Edit/Do Edit Link. ** ** HUOM! ** Toteutuksessa on molemmille ikkunoille laiskuuden vuoksi ** sama menu. Oikeassa ohjelmassa tämä ei ole suotavaa! ** Mallissa palvelin toimii toisesta ikkunasta ja asiakas ** toisesta. Tarvittaessa molemmat voivat toimia samassa ** ikkunassa! ** ** Tämä malli toimii vain Windows 3.1:ssä, koska siinä on ** käytetty read-only Edit-kenttiä. Poistamalla read-only, ** pitäisi toimia myös Win 3.0:ssa ** ** Editor: Vesa Lappalainen ( DDE-palvelin yleiskäytöiseksi+leikekirja) ** ( DDE-asiakas ) ** Kari Heikkilä ( DDE-palvelin ) ** ** DDE palvelimen (server) vaatimat lisäykset merkitty ds ** DDE asiakkaan (client) vaatimat lisäykset merkitty dc ** ** Projektiin tarvitaan ** autoldde.c - tämä tiedosto ** autoldde.def - moduulin määrittely ** autoldde.rc - resurssit ** ddeser.c - dde-palvelin ** ddecli.c - dde-asiakas ** clipboard.c - leikekirjan käsittely ** ****************************************************************************/ //#define MYGETDATA1 /* Jos palvelua varten funktio */ #define MYGETDATA2 /* Jos palvelua varten funktio */ //#define MYFUNC /* Jos oma funktio sn:n perusteella */ #define SNLINK /* Jos linkkaus osataan tehdä sn:n perust. */ #define AUTOSERVER #include /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include #include "ddeser.h" /* ds */ #include "ddecli.h" /* dc */ #include "autoldde.h" #define WTITLE "Laskuri" #define LASKUREITA 2 #define SERVICE "AutolDDE" /* ds */ #define TOPIC "Lkm" /* ds */ static int laskurit[LASKUREITA] = {0,0}; static HWND hcWnd; /* ds */ #ifdef MYGETDATA1 static char *LkmItem[] = {"ha","ka"}; /* ds */ #define MYGETDATA /***************************************************************************/ int MikaLaskuri(char *item) { int i; /* Etsitään, mitä laskuria pyydetty */ for ( i=0; i < LASKUREITA; i++ ) if ( strcmpi(item, LkmItem[i]) == 0 ) return i; return -1; } /***************************************************************************/ char *MyGetData(char *topic, char *item, UINT wFmt, int query) { /* ds */ static char s[10]; int i; if ( wFmt != CF_TEXT ) return NULL; if ( strcmpi(topic,TOPIC) ) return NULL; i = MikaLaskuri(item); if ( i < 0 ) return NULL; if ( query ) return s; wsprintf(s,"%d\r\n",laskurit[i]); return s; } #endif #ifdef MYGETDATA2 #define MYGETDATA /***************************************************************************/ char *MyGetData(char *topic, char *item, UINT wFmt, int query) { /* ds */ static char s[10]; int i,summa=0; if ( wFmt != CF_TEXT ) return NULL; if ( strcmpi(topic,TOPIC) ) return NULL; if ( strcmpi(item,"sum") ) return NULL; if ( query ) return s; for (i=0; i