使用pb实现在线聊天!

首先是设计数据库,我使用的是sqlserver。

表名chat//存放聊天记录
字段分别有
id//自动编号
shuo//发言人
ting//接收人
chatmessage//为消息内容


表名users//存放用户数据,在我的库中有很多字段,只介绍有用的字段
username//用户名
userpass//用户密码
truename//用户的真实姓名
online//判断用户是否在线1为在线,0为离线。
好了,数据库搞好了。

先看一下成品的截图。


下面就要打开PB搞东西了。。。。
在PB中新建一个grid的datawindow,选择chat数据表中的id、shuo、ting、message这几个表
调整好各表的宽窄,然后在rows菜单中的update proper.... 中的allow updates的钩选中,tabuptate下拉框中选chat表,然后将下面两个框中的所有字段都选中。
再在rows菜单中的shot...,在soucre data中将id拖至右面的columns中,将后面的钩取掉,设置数据为倒序排序。这样,最新的消息内容在最前面。然后确定退出,并保存为d_chat。



再新建一个为grid的datawindow,选择users数据表中的username、truename、online这三个字段,然后在条件选择where中选择users.online = 1,保存为d_chat_online
在PB中设计一个登录窗口w_login,我想这个大家应该都会(如果不会的话可以给我留言,我发源码给你)主要是不能直接用open事件打开聊天w_chat窗口,要用openwithparm(w_chat,username)
再新建一个稍微大一点的窗口w_chate,以下是w_chate的控件清单
两个dw控件,分别是dw_1、dw_2(dw_2缩的小些),dw_1存放聊天内容,dw_2存放在线用户。
一个下拉框ddlb_user,用来选择在线用户的。
一个文本输入框sle_message,用来写发言内容的。
三个按钮控件cb_1,text的属性为‘发送’,用来确定发送消息。cb_2用来暂停数据更新,cb_3用来回复数据更新。
所有使用到的控件都在这里了,至于怎么摆放随便自己喽,发挥想象力DIY一下。
下面开始往窗口内写代码喽!!!
在w_chat窗口的open事件里写
title=message.stringparm+'使用的在线消息'//定义窗口标题栏的,其中message.stringparm是从w_login窗口传来的数据
cb_3.enabled=false//设定cb_3为不可操作属性
dw_1.dataobject='d_chat'//设置dw_1的dataobject为d_chat
dw_2.dataobject='d_chat_online'//dw_2的dataobject为d_chat_online
dw_2.visible=false//设置dw_2为不可见属性,也就是程序运行后用户是看不到的。
timer(0.5)//设定计时器,以秒为单位,这里设定dw_1的刷新时间。可以设置的更大或更小。
在w_chat窗口的timer事件里写
connect using sqlca;
dw_1.settransobject(sqlca)
dw_1.retrieve()
//这里主要是读取数据内容,也就是每隔0.5秒读取一次数据
双击w_chat窗口中的ddlb_user下拉框,并在getfocus事件里写
dw_2.settransobject(sqlca)
dw_2.retrieve()
int i
for   i   =   1   to   dw_2.rowcount()   
ddlb_user.additem(dw_2.object.username【i】)  //这个bolg不支持英文的方括号只能用中文代替了,使用时注意将中文的方括号替换为英文的方括号。
next
//这里设定当你点击下拉框的时候读取在线用户。并添加到下拉框中。
在cb_1的clicked事件中写
insert into chat(chat.shuo,chat.ting,chat.chatmessage)
values (:message.stringparm,:ddlb_user.text,:sle_message.text);
dw_1.update()
dw_1.retrieve()
sle_message.text=''
commit;//这个commit一定要有,不然同时使用的其他用户是没办法得到消息数据的。
在cb_2的clicked事件中写
timer(0)//停止计时器
cb_2.enabled=false
cb_3.enabled=true
在cb_3的clicked事件中写
timer(0.5)//恢复计时器
cb_2.enabled=true
cb_3.enabled=false
好了,至此,一个利用dw简单的聊天程序就成功写完了,大家可以测试一下。
注:如果只想让当前用户看到关于自己的对话内容,可以在d_chat中增加条件选项,以达到屏蔽其他用户聊天内容。
而且还可以设置管理员身份,以使其看到所有的聊天内容
在这里就不过多阐述。
再有就是,本人也是刚刚学pb没几天,在程序编写中有不当的地方,请大家指正。
谢谢!!!!

 
  

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值