现在的位置: 首页 > 综合 > 正文

一个消息提示托盘程序的开发历程

2014年03月05日 ⁄ 综合 ⁄ 共 12056字 ⁄ 字号 评论关闭

一个消息提示托盘程序的开发历程(采用socket技术,附源代码)二...

一个消息提示托盘程序的开发历程(采用socket技术,附源代码)二...:

娑堟伅鎻愮ず宸ュ叿婧愮爜锛?br>鏈嶅姟绔細
msg.h
/*
 * create date: 2004-12-01 
 * create by: 鏉庢槬闆?br> * purpose: 鍗忚鐢ㄨ嚜瀹氫箟娑堟伅缁撴瀯:
 *          messageinfo:浠诲姟娑堟伅
 *          msgtype娑堟伅澶达細0xa鐧婚檰鎴愬姛,0xb鐧婚檰澶辫触,0xc宸ヤ綔娑堟伅,0xd浠诲姟缁撴潫鏍囪瘑
 *          logininfo:鐧婚檰娑堟伅
 */

//------------------------------------------------------------------------------

        struct messageinfo{               //娑堟伅缁撴瀯
           int  msgtype;                  //娑堟伅澶达細0xa鐧婚檰鎴愬姛,0xb鐧婚檰澶辫触,0xc宸ヤ綔娑堟伅,0xd浠诲姟缁撴潫鏍囪瘑
           char  messageid[10];           //浠诲姟搴忓彿
           char usrcode[10];              //鐢ㄦ埛甯愬彿
           //char tastname[50];             //浠诲姟鍚嶇о
           char tastname[200];             //浠诲姟鍚嶇о
           char creattime[20];            //鏃堕棿
        };

         struct logininfo{          //鐧婚檰淇℃伅
                char pwd[20];       //鐢ㄦ埛瀵嗙爜
                char userid[30];    //鐢ㄦ埛id
        };
//------------------------------------------------------------------------------

unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "unit1.h"
#include "unit2.h"
#include "msg.h"
#include <inifiles.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
tform1 *form1;
string myprovider;//鏁版嵁搴撹繛鎺ュ瓧绗?br>int port;     //绔彛;
//---------------------------------------------------------------------------
__fastcall tform1::tform1(tcomponent* owner)
        : tform(owner)
{
                    isserver=false;
                    server="localhost";
}
//---------------------------------------------------------------------------

void __fastcall tform1::formcreate(tobject *sender)
{
//
char dir[max_path];
//----鑾峰彇杩愯绋嬪簭鐨勭洰褰曞紑濮?br>char *tfile = "/config.ini";
//灏嗙▼搴忕幇鍦ㄧ洰褰曟墍鍦ㄨ緭鍏ユ瀛楃鏁扮粍
::getcurrentdirectory(max_path,dir);
//灏嗙幇鍦ㄧ洰褰曞姞涓婃寚瀹氭枃浠跺悕
strcat(dir,tfile);
//----鑾峰彇杩愯绋嬪簭鐨勭洰褰曠粨鏉?br>tinifile  *ini = new tinifile(dir);
try
{
  myprovider = ini->readstring("servercfg","provider","provider=oraoledb.oracle.1;password=pwsc;persist security info=true;user id=developer;data source=dl;extended properties=""");
  port = ini->readinteger("servercfg","port",1555);
}
catch(...)
{
  messagebox(application->handle,"璇诲彇閰嶇疆鏂囦欢config.ini澶辫触!","淇℃伅鎻愮ず!",mb_ok+mb_iconinformation+mb_systemmodal);
  delete ini;
}
delete ini;
   adoconnection1->connectionstring = myprovider;
   adoconnection1->loginprompt = false;
   try
   {
      adoconnection1->open();
   }
   catch(...)
   {
      showmessage("鏃犳硶杩炴帴鏁版嵁搴?);
      return;
   }

    btndisconnect->enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall tform1::btnlistenclick(tobject *sender)
{
//绋嬪簭杩愯鍚庯紝濡傛灉鐢ㄦ埛鎸変笅锛傜洃鍚紓閽紝
//鍒欏皢璇ョ▼搴忚涓烘湇鍔″櫒绔紝
//杩欐椂搴斿皢tserversocket鐨凙ctive灞炴€ц涓篢rue锛?br>//浣挎湇鍔″櫒鑷姩杩涘叆鐩戝惉鐘舵€併€?br>    serversocket1->port = port;
    serversocket1->active=true;
    statusbar1->simpletext="姝e湪鐩戝惉...";
    btnlisten->enabled=false;
    btndisconnect->enabled=true;

}
//---------------------------------------------------------------------------
void __fastcall tform1::clientsocket1connect(tobject *sender,
      tcustomwinsocket *socket)
{
//褰撶敤鎴锋彁鍑鸿繛鎺ヨ姹傚悗锛屽鎴风浼氳е鍙慜ncreate浜嬩欢锛?br>    statusbar1->simpletext="杩炴帴鍒?"+server;
}
//---------------------------------------------------------------------------
void __fastcall tform1::serversocket1accept(tobject *sender,
      tcustomwinsocket *socket)
{
//鍦ㄦ湇鍔″櫒鎺ュ彈浜嗗鎴风殑璇锋眰鍚庝細瑙﹀彂onaccept浜嬩欢锛?br>//鍦ㄨ繖涓簨浠跺鐞嗙▼搴忎腑灏嗘爣蹇楁湇鍔″櫒绔殑鍙橀噺isserver璁句负true锛?br>    isserver=true;
    statusbar1->simpletext="杩炴帴鍒?"+socket->remoteaddress;

}
//---------------------------------------------------------------------------
//---- 闈為樆濉炰紶杈撴柟寮忥紝褰撳叾涓殑涓€鏂硅繘琛屽啓鎿嶄綔鏃讹紝
//鍙︿竴鏂逛細瑙﹀彂onread浜嬩欢(瀹㈡埛绔?鎴朞nclientread浜嬩欢(鏈嶅姟鍣ㄧ)锛?br>void __fastcall tform1::serversocket1clientread(tobject *sender,
      tcustomwinsocket *socket)
{
logininfo *loginfo = new logininfo;
socket->receivebuf(loginfo,50);
  string mysql = "select yhxh from xt_yh where yhbh=";
   mysql+=loginfo->userid;
   mysql+=" and pwd=";
   mysql+=loginfo->pwd;
   mysql+="";
   adoquery2->close();
   adoquery2->connection = adoconnection1;
   adoquery2->sql->clear();
   adoquery2->sql->add(mysql);
   adoquery2->open();
   int num = adoquery2->recordcount;
   messageinfo *loginmsg =  new messageinfo;
   int msgtype;
   if(num>0){
        msgtype=0xa;      //ok
   loginmsg->msgtype=msgtype;
   }else{
          msgtype=0xb;      //nobody
   loginmsg->msgtype=msgtype;
  }
  for(int i=0;i<serversocket1->socket->activeconnections;i++){
    if(serversocket1->socket->connections[i]->remoteaddress==socket->remoteaddress)
         serversocket1->socket->connections[i]->sendbuf(loginmsg,244);
  }
  adoquery2->close();

}
//---------------------------------------------------------------------------
void __fastcall tform1::btndisconnectclick(tobject *sender)
{
serversocket1->close();
btnlisten->enabled=true;
btndisconnect->enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall tform1::serversocket1clientdisconnect(tobject *sender,
      tcustomwinsocket *socket)
{
statusbar1->simpletext="姝e湪鐩戝惉...";
}
//---------------------------------------------------------------------------
void __fastcall tform1::clientsocket1disconnect(tobject *sender,
      tcustomwinsocket *socket)
{
    btnlisten->enabled=true;
    btndisconnect->enabled=false;
    statusbar1->simpletext="";
}
//---------------------------------------------------------------------------
void __fastcall tform1::clientsocket1error(tobject *sender,
      tcustomwinsocket *socket, terrorevent errorevent, int &errorcode)
{
//---- 姝ゅ鍦ㄥ鎴风杩樺簲璇ュ鍔犻敊璇崟鑾锋満鍒讹紝
//褰撶敤鎴疯緭鍏ユ棤鏁堢殑鏈嶅姟鍣ㄥ悕鎴栨湇鍔″櫒绔病鏈?br>//澶勪簬鐩戝惉鐘舵€佹椂鑳藉鍙婃椂缁欑敤鎴峰弽棣堜俊鎭€?br>    statusbar1->simpletext="鏃犳硶杩炴帴鍒?"+socket->remotehost;
    errorcode=0;
}
//---------------------------------------------------------------------------

void __fastcall tform1::timer1timer(tobject *sender)
{
  try{
  if(adoconnection1->connected){
  string strmessage="";
   adoquery1->close();
   adoquery1->connection = adoconnection1;
   adoquery1->sql->clear();
   adoquery1->sql->add("select t.message_id as 搴忓彿,t.user_code as 璐d换浜? t.message_title as 浠诲姟鍚嶇о, to_char(t.create_time,yyyy-mm-dd hh24:mi) as 鏃堕棿, t.is_read as 鏄惁闃呰 from user_message t where t.is_read=f and t.task_state = assign order by t.message_id");
   adoquery1->open();
   messageinfo *msg =  new messageinfo;

           string  messageid;          //浠诲姟搴忓彿
           string usrcode;            //鐢ㄦ埛甯愬彿
           string tastname;           //浠诲姟鍚嶇о
           string creattime;          //鏃堕棿
          
   while(!adoquery1->eof){
    messageid=adoquery1->fieldbyname("搴忓彿")->asstring;
    usrcode=adoquery1->fieldbyname("璐d换浜?)->asstring;
    tastname=adoquery1->fieldbyname("浠诲姟鍚嶇о")->asstring;
    creattime=adoquery1->fieldbyname("鏃堕棿")->asstring;
    msg->msgtype=0xc;
    memcpy(msg->messageid,messageid.c_str(),messageid.length()+1);
    memcpy(msg->usrcode,usrcode.c_str(),usrcode.length()+1);
    memcpy(msg->tastname,tastname.c_str(),tastname.length()+1);
    memcpy(msg->creattime,creattime.c_str(),creattime.length()+1);
    //瀵瑰鎴风鍙戞秷鎭細
    for(int i=0;i<serversocket1->socket->activeconnections;i++){
        //serversocket1->socket->connections[i]->sendbuf(msg,94);
        serversocket1->socket->connections[i]->sendbuf(msg,244);
        sleep(1);
     }
    adoquery1->next();
    }
    msg->msgtype=0xd;     //缁撴潫绗﹀彿
    for(int i=0;i<serversocket1->socket->activeconnections;i++){
        //serversocket1->socket->connections[i]->sendbuf(msg,94);
          serversocket1->socket->connections[i]->sendbuf(msg,244);
          sleep(1);  //鍋?ms寰堝叧閿?br>     }
    delete msg;
    }else{
    timer1->enabled=false;
    }
    }
    catch(...){
      application->messagebox("璁块棶鏁版嵁搴撻敊璇紒璇烽噸鏂板惎鍔ㄧ▼搴忋€?,null,mb_ok);
      application->terminate();
    }
}

//---------------------------------------------------------------------------

void __fastcall tform1::serversocket1clienterror(tobject *sender,
      tcustomwinsocket *socket, terrorevent errorevent, int &errorcode)
{
        errorcode=0;
}
//---------------------------------------------------------------------------

void __fastcall tform1::n2click(tobject *sender)
{
 application->terminate();      
}
//---------------------------------------------------------------------------

void __fastcall tform1::n3click(tobject *sender)
{
formabout->showmodal();
}
//---------------------------------------------------------------------------

unit1.h

//---------------------------------------------------------------------------

#ifndef unit1h
#define unit1h
//---------------------------------------------------------------------------
#include <classes.hpp>
#include <controls.hpp>
#include <stdctrls.hpp>
#include <forms.hpp>
#include <comctrls.hpp>
#include <extctrls.hpp>
#include <scktcomp.hpp>
#include <adodb.hpp>
#include <db.hpp>
#include <dbgrids.hpp>
#include <grids.hpp>
#include <menus.hpp>
//---------------------------------------------------------------------------
class tform1 : public tform
{
__published: // ide-managed components
        tserversocket *serversocket1;
        tpanel *panel1;
        tbutton *btnlisten;
        tbutton *btndisconnect;
        tstatusbar *statusbar1;
        tadoconnection *adoconnection1;
        tadoquery *adoquery1;
        tdbgrid *dbgrid1;
        tdatasource *datasource1;
        ttimer *timer1;
        tadoquery *adoquery2;
        tgroupbox *groupbox1;
        tmainmenu *mainmenu1;
        tmenuitem *n1;
        tmenuitem *n2;
        tmenuitem *n3;
        tmenuitem *n4;
        tmenuitem *n5;
        tmenuitem *n6;
        void __fastcall formcreate(tobject *sender);
        void __fastcall btnlistenclick(tobject *sender);
        void __fastcall clientsocket1connect(tobject *sender,
          tcustomwinsocket *socket);
        void __fastcall serversocket1accept(tobject *sender,
          tcustomwinsocket *socket);
        void __fastcall serversocket1clientread(tobject *sender,
          tcustomwinsocket *socket);
        void __fastcall btndisconnectclick(tobject *sender);
        void __fastcall serversocket1clientdisconnect(tobject *sender,
          tcustomwinsocket *socket);
        void __fastcall clientsocket1disconnect(tobject *sender,
          tcustomwinsocket *socket);
        void __fastcall clientsocket1error(tobject *sender,
          tcustomwinsocket *socket, terrorevent errorevent,
          int &errorcode);
        void __fastcall timer1timer(tobject *sender);
        void __fastcall serversocket1clienterror(tobject *sender,
          tcustomwinsocket *socket, terrorevent errorevent,
          int &errorcode);
        void __fastcall n2click(tobject *sender);
        void __fastcall n3click(tobject *sender);
private: // user declarations
        bool isserver;  //鏈嶅姟鍣ㄦ爣璇?br>        string server;  //鏈嶅姟鍣↖p
public:  // user declarations
        __fastcall tform1(tcomponent* owner);
};
//---------------------------------------------------------------------------
extern package tform1 *form1;
//---------------------------------------------------------------------------
#endif

unit2.h
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
tformabout *formabout;
//---------------------------------------------------------------------------
__fastcall tformabout::tformabout(tcomponent* owner)
        : tform(owner)
{
}
//---------------------------------------------------------------------------
void __fastcall tformabout::button1click(tobject *sender)
{
        modalresult = mrok;
}
//---------------------------------------------------------------------------

unit2.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
tformabout *formabout;
//---------------------------------------------------------------------------
__fastcall tformabout::tformabout(tcomponent* owner)
        : tform(owner)
{
}
//---------------------------------------------------------------------------
void __fastcall tformabout::button1click(tobject *sender)
{
        modalresult = mrok;
}
//---------------------------------------------------------------------------

浠ヤ笂鏄湇鍔$socket绋嬪簭
鍙﹀锛屾湇鍔$鐨勯厤缃枃浠禖onfig.ini鍐呭濡備笅锛?br>[servercfg]
provider=provider=oraoledb.oracle.1;password=pwsc;persist security info=true;user id=developer;data source=dl;extended properties=""
port=1555

 

抱歉!评论已关闭.