| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1721 人关注过本帖
标题:[原创]使用pb的dw实现在线聊天
只看楼主 加入收藏
helpinfo
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-5-30
收藏
 问题点数:0 回复次数:0 
[原创]使用pb的dw实现在线聊天

图片附件: 游客没有浏览图片的权限,请 登录注册



首先是设计数据库,我使用的是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】) //有些地方不支持英文的方括号,使用时注意将中文的方括号替换为英文的方括号。
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没几天,在程序编写中有不当的地方,请大家指正。
谢谢!!!!
本帖直接转自我的blog。street_boy.blog.xunlei.com

搜索更多相关主题的帖子: 数据库 字段 truename 聊天 grid 
2007-05-30 12:42
快速回复:[原创]使用pb的dw实现在线聊天
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014074 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved