象QQ一样发送信息?

wmf9941128 2006-05-29 10:00:17
各位大哥,客户目前有个要求,希望在报存完一张订单以后,他的上级主管可以通过象QQ那样的系统提示信息知道已经有了某张订单,请问这个功能该怎么实现呀?
...全文
190 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
truelove7283159 2006-07-17
  • 打赏
  • 举报
回复
up
wmf9941128 2006-05-30
  • 打赏
  • 举报
回复
To minizhuxianchun() :你说的确实是个实现的方法,可是小弟的技术有点差,可不可以具体指点一下呀!项目有点急, 不胜感激!
minizhuxianchun 2006-05-30
  • 打赏
  • 举报
回复
以下是我以前做的一个项目的代码,你可能要稍微改一下.
1.初始化WINSOCK:
procedure TZxQkForm.FormCreate(Sender: TObject);
var
mWSADATA: TWSADATA;
mAddr: TSockaddr;
ip,Ls: string;
begin
WSAStartUp($202,mWSADATA);
mSocket:=Socket(AF_INET,SOCK_STREAM,0);
if mSocket<>INVALID_SOCKET then
begin
ip:='192.168.0.1';
if Trim(Dm.XtSzQuery.FieldByName('YCIP').AsString)<>'' then
ip:=Dm.XtSzQuery.FieldByName('YCIP').AsString;
mAddr.sin_family:=AF_INET;
mAddr.sin_addr.S_addr:=inet_addr(PChar(ip));
mAddr.sin_port:=htons(8888);
if Connect(mSocket,mAddr,SizeOf(TSockAddr))=0 then
begin
Ls:=#14+Dm.XtSzQuery.FieldByName('DWDH').AsString;
if Send(mSocket,Pointer(Ls)^,Length(Ls),0)<>SOCKET_ERROR then
begin
WSAAsyncSelect(mSocket,Handle,WM_SOCKEVENT,FD_READ);
Dm.SocketConnection1.Address:=ip;
end;
end
else
MessageBox(Handle,'未能连接工程部服务器,请与工程部联系!','提示',MB_OK+MB_ICONERROR);
end;

SetWindowPos(Handle,HWND_TOPMOST,0,0,Self.ClientWidth,Self.ClientHeight,0);
self.Top:=0-Panel1.Height+5;
self.Left:=300;
end;

2.接收应用服务器发来的信息:
procedure TZxQkForm.WmSockEvent(var Msg: TMessage);
var
theLength: integer;
mBuff: array[0..4095] of Char;
s: string;
begin
if Lo(Msg.LParam)=FD_READ then
begin
theLength:=Recv(Msg.WParam,mBuff,4096,0);
if thelength>0 then
begin
case mBuff[0] of
#14: begin
SpeedButton1.Enabled:=True;
SpeedButton1.Caption:='工程部在线';
end;
#15: begin
SpeedButton1.Enabled:=False;
SpeedButton1.Caption:='工程部离线';
end;
#16: begin
s:=Copy(mBuff,4,theLength-3);
Memo1.Lines.Add('工程部说:'+s);
//PlaySound('Sound1', Hinstance, SND_RESOURCE);
end;
end;
end;
end;
end;

3.提交远程数据库线程:
procedure RmPostThread.Execute;
var
Ls: string;
begin
self.FreeOnTerminate:=True;
while not self.Terminated do
begin
WaitForSingleObject(EventHandle,INFINITE); //等待本地用户增加记录,无等待超时.
Ls:=#20+TableName; //#20代表是测试数据,如果通过,则服务器解释客户将要更新的是什么表。
if Send(mSocket,Pointer(Ls)^,Length(Ls),0)<>SOCKET_ERROR then //说明远程服务器连接无故障。
begin
//这里写要提交远程数据库的代码.
end;
ResetEvent(EventHandle); //提交全部成功后设置无信号,并继续等待信号。
end;
CloseHandle(EventHandle);
DeleteObject(EventHandle);
end;

下面是应用服务器端的WINSOCK事件代码:
procedure TMainForm.WmSockEvent(var msg: TMessage);
var
i,j: integer;
s: string;
Ps: PChar;
mBuff: array[0..4095] of char;
theLength: DWORD;
ClientSocket: TSocket;
ClientAddr: TSockAddr;
begin
case Lo(msg.LParam) of
FD_CONNECT: begin

end;
FD_ACCEPT: begin
theLength:=SizeOf(TSockAddr);
ClientSocket:=Accept(ServerSocket,@ClientAddr,@theLength);
if ClientSocket<>INVALID_SOCKET then
WSAAsyncSelect(ClientSocket,Handle,WM_SOCKEVENT,FD_READ or FD_CLOSE);
end;
FD_READ: begin
theLength:=Recv(msg.WParam,mBuff,4096,0);
if theLength>0 then
begin
case mBuff[0] of
#14: begin //发过来的是客户登陆信息(单位编号)。
 //do SomeThing;
             end;
#16: begin //发过来的是普通数据。
              //do SomeThing;  
end;
#20: begin //发过来的是测试是否连接,并表明是更新的什么表。
//do SomeThing;
end;
#21: begin //发过来的是测试是否连接,并表明是数据同步。
//do SomeThing;
end;
end;
end;
end;
FD_CLOSE: begin
//do SomeThing;
end;
end;
end;

大概意思就这样,其实里面可以加太多的功能,就不说了.应该能满足你的要求的
myanwei 2006-05-29
  • 打赏
  • 举报
回复
如上面所说的,加一个Timer控件,定时扫描,发现有新的,就弹出提示窗口。
  • 打赏
  • 举报
回复
楼上的才是正解
minizhuxianchun 2006-05-29
  • 打赏
  • 举报
回复
你说你用的是C/S结构,最好的方法是在应用服务器上加一个TCP类型的SOCKET端口,在你保存定单的按钮事件里的数据库提交完成后面写发送TCP消息到应用服务器上,应用服务器的SOCKET收到后,把消息转发给上级主管.用TIMER简单,但频繁访问数据库不可取.
postren 2006-05-29
  • 打赏
  • 举报
回复
做成bs架构,然后再领导哪里有个客户端,设置一个时钟,做查询,如果发现有新记录入库,然后就激活timer1事件,把入库的信息用弹出窗体的形式通知老板
~~~~~~~~~~~~

cs架构吧

bs中的话就不用客户端了,浏览器打开就ok,在浏览器中默认隔段时间刷新一次,如果有新入库记录,则弹出提示
Rubi 2006-05-29
  • 打赏
  • 举报
回复
做成bs架构,然后再领导哪里有个客户端,设置一个时钟,做查询,如果发现有新记录入库,然后就激活timer1事件,把入库的信息用弹出窗体的形式通知老板
飞哥 2006-05-29
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20031217/12/2572971.html

==================
MSN、QQ风格
==================
wmf9941128 2006-05-29
  • 打赏
  • 举报
回复
To postren(小虫):程序中的领导只是一个角色,任何人都可以作为这个角色的,而且他很多地方都要用到这个功能的,不只订单方面.
wmf9941128 2006-05-29
  • 打赏
  • 举报
回复
我用的是Delphi6+SQL2000来做的,做的是c/s架构

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧