這種東西,專業(yè)點的一般是用數據庫來儲存聊天記錄。。如果你不想用。??梢悦看问盏较⒌臅r候,先將原richtextbox.text的內容存入一個變量。。然后追加內容。。。
成都創(chuàng)新互聯長期為上千多家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態(tài)環(huán)境。為秭歸企業(yè)提供專業(yè)的成都網站設計、成都網站制作、外貿網站建設,秭歸網站改版等技術服務。擁有十多年豐富建站經驗和眾多成功案例,為您定制開發(fā)。
首先你需要寫大概1000000000000000000個If語句,只要if語句覆蓋了所有人可能說出來的話就可以了,比如:
If text1.text = "現在多少點了" then
label1.caption="現在是北京時間:" time
else
if text1.text="現在幾點了"then
label1.caption="現在是:" time
else
......
end if
end if
當然,這個方法是不可行的。
想做一和電腦聊天的軟件當然可能,但是想讓電腦自己組織語言,這100%不可能(至少對編程來說,因為現在還沒有研制出人工智能)。所有軟件或游戲含有與電腦溝通的語句其實都是最初安排進去的,都是設定好的,不同的只是別人不是像這樣打1000000000000個IF語句,而是有點技術含量(一般都是聯網查詢這句話的意思,至于聯網的服務器…完全就是if數據庫了,真的全if,就像上面一樣),然后在本地批對相應的回答……做與電腦聊天的軟件……不大可能。
還有一點,若想讓電腦說出來,也就是你說的重點:語音聊天,讓電腦說出文本簡單很多,只需要下面的代碼:
示例代碼(窗體中有一個text文本框和一個按鈕,單機按鈕后說出文本框內容)
Private?Sub?Command1_Click()
CreateObject("SAPI.SpVoice").Speak?Text1.Text
End?Sub
還有,至于輸出語言,XP好像只能輸入英文和中文。不能英文和中文同時輸入,win7設置一下好像可以。(詳見控制面板→語音)
網上很多相關的現成的代碼
你需要知道的一點是數據接收不是接收一次就完了 接收端根本不知道數據什么時候要過來 所以數據端應該一直重復著"等待-接收"的過程 于是就有了要在線程中接收數據的代碼
用VB做聊天程序的方法
---- 所謂"聊天"是指兩個程序能夠發(fā)送數據給對方。這個程序涉及到數據通訊的知識,仿佛很復雜,不過,由于VB給我們提供了一個Winsock控件,問題就變得很簡單了。
---- 先編寫"聊天(主機)"程序。在窗體里添加Winsock控件,并設置其Protocol屬性為1-SckUDPProtocol,其他屬性為缺省值。接著添加兩個標簽和兩個文本框,設置兩個標簽的標題屬性分別為"接收窗"和"發(fā)送窗";兩個文本框的標題屬性為空。最后編寫代碼:
---- 1."聊天(主機)"
Private Sub Form-Load()
′設置網絡地址
Winsock1.LocalPort=1024
Winsock1.RemoteHost="202.96.6.1"
Winsock1.RemotePort=1999
End Sub
Private Sub Text1-Change()
′發(fā)送用戶輸入的內容
Winsock1.SendData Text1.Text
End Sub
Private Sub Winsock1-DataArrival
(Byval bytesTotal As Long)
Dim rec As String
′接收對方數據并在文本框內顯示
Winsock1.GetData rec, vb String
Text2.Text=rec
End Sub
---- 2."聊天(副機)"
Private Sub Form_Load()
′設置網絡地址
Winsock1.LocalPort=1999
Winsock1.RemoteHost="202.96.6.1"
Winsock1.RemotePort=1024
---- 其他部分程序與(主機)相同。最后將兩個程序存盤,并編譯成執(zhí)行(.Exe)文件。現在就可以使用這個程序進行對話了。
---- 七.文本框中文本的某一特定字符或字符串同時高亮顯示的方法
---- 由于普通TextBox控件不支持不連續(xù)字符串的同時高亮顯示,所以我們選擇RichTextBox控件。單擊工程(Project)選單項,在彈出的下拉選單中單擊組件(Components)選單項,從彈出的對話框中選擇Microsoft Rich Textbox Control 5.0復選框,確定加載RichTextBox控件。
---- 新建(New)一個工程,在窗體(Form)上添加一個RichTextBox控件和兩個Command(按鈕)控件,都采用系統默認的Name屬性值;設置RichTextBox的Text屬性值為空,Command1和Command2的Caption屬性值分別設為"輸入文本"和"選擇字符串"。最后,添加如下VB代碼:
Private Sub Command1-Click()
Dim str As String
Dim Text As String
str=〃輸入文本〃
Text=InputBox(str)
RichTextBox1.Text=Text
End Sub
Private Sub Command2-Click()
Dim str As String
Dim Text As String
Dim Position As Integer
Dim Lenth As Integer
str=〃輸入要高亮顯示的字符串〃
Text=InputBox(str)
If Text 〈〉 〃〃 Then
Position=InStr(RichTextBox1.Text, Text)-1
Lenth=Len(Text)
RichTextBox1.SelStart=Position
RichTextBox1.SelLength=Lenth
RichTextBox1.SelColor=RGB(255,0,0)
Do While InStr(Position+Lenth+
1, RichTextBox1.Text, Text) 〈〉 0
Position=InStr(Position+Lenth+
1, RichTextBox1.Text, Text)-1
RichTextBox1.SelStart=Position
RichTextBox1.SelLength=Lenth
RichTextBox1.SelColor=RGB(255,0,0)
Loop
End If
End Sub
---- 按F5執(zhí)行程序,單擊"輸入文本"按鈕,在彈出的對話框中輸入一些文本,確定后,剛剛輸入的文本將顯示在RichTextBox中;再單擊"選擇字符串"按鈕,在彈出的對話框中輸入你希望高亮顯示的字符串,確定后,RichTextBox中相應的字符串將以紅色高亮顯示。
---- 八.編程實現Windows 95/98操作系統熱啟動的方法
---- 要利用程序實現系統的重新啟動,可以在你的程序中調用API函數來實現。建一個子函數:(以VB為例)
Declare Function SystemParametersInfo Lib 〃
user32〃 Alias -
〃SystemParametersInfo〃 (ByVal uAction As Long,
ByVal uParam As Long,
ByVal lpvParam As Any, ByVal
fuWinIni As Long) As Long
Sub DisableCtrlAltDelete(bDisabled As Boolean)
Dim X As Long
X=SystemParametersInfo(97, bDisabled, CStr(1), 0)
End Sub
Call DisableCtrlAltDelete(true) ′禁止熱啟
Call DisableCtrlAltDelete(false) ′允許熱啟
---- 九.在Windows 95/ 98啟動后自動啟動程序的方法
---- 我們都知道在Windows 95/98的"開始"→"程序"選單下有一"啟動"選單項,當每次啟動Windows 95或Windows 98時,系統都會自動啟動放在"啟動"選單欄里的可執(zhí)行程序。
---- 但目前有好多軟件,像解霸五、ICQ,以及大部分實時偵測病毒的軟件等等,安裝后,并沒有放在"啟動"選單里,也能在啟動操作系統時自動啟動。怎么實現的呢?
---- 其實只要知道Windows注冊表的一些知識,這個問題就不能稱之為問題了。用鼠標單擊"開始",打開開始選單,再單擊"運行",出現一對話框,然后輸入"regedit",確定后,會打開系統注冊表編輯器,找到HKEY-LOCAL-MACHINE? SOFTWARE?Microsoft?Windows?CurrentVersion?Run,加入你的程序的入口,就可以了。如果不知道怎么加,就參考一下已經存在的鍵值。
---- 十. 如何把數據文件輸出到Text控件中?如果數據量比較大,窗體滿屏也不夠大,怎么解決?
---- 有一個比較簡單的方法,就是把數據放到一個文本框(Text)里,并在其中加上水平和垂直滾動條。具體實現步驟為:先在窗體(Form)里加入一個文本框,采用默認名Text1;然后,設置文本框Text1的屬性:Text屬性設置為空,MultiLine屬性設置為True,ScrollBars屬性設置為3-Both;接著添加如下VB代碼:
Private Sub Form-Load()
Dim Handle As Integer
Dim FileName As String
On Error GoTo ErrExit
begin:
′輸入要顯示的數據文件的名稱
FileName=InputBox$(〃Input Filename〃,
〃Open File〃)
On Error GoTo FileErr
Handle=FreeFile
Open FileName For Input As #Handle
′把數據文件中的數據輸出到文本框中
Text1.Text=Input$(LOF(Handle), Handle)
Close #Handle
Exit Sub
FileErr:
Dim ErrNum As Integer
If Err.Number=53 Then
ErrNum=MsgBox(〃File not exist〃,
vbOKCancel, 〃Error Information〃)
If ErrNum=1 Then
GoTo begin
Else
Exit Sub
End If
End If
MsgBox Err.Description, , 〃file open failed〃
ErrExit:
Exit Sub
End Sub
′使文本框充滿整個窗體
Private Sub Form-Resize()
Text1.Left=0
Text1.Top=0
Text1.Width=Form1.Width-100
Text1.Height=Form1.Height-400
End Sub
---- 通過這樣的處理,不僅能解決問題,而且用戶還可以在文本框中對數據進行編輯。
---- 十一.關聯文件列表框、目錄列表框和驅動器列表框的方法
---- 想做一個對話窗體,包含驅動器列表框、目錄列表框和文件列表框,并能實現三者的同步操作,怎么做?這都是我們在實際應用中經常會遇到的問題,在VB中解決這個問題非常簡單,可以通過Path屬性的改變引發(fā)Change事件來實現。例如:
Sub Dir1-Change()
File1.Path=Dir1.Path
End Sub
---- 該事件過程使窗體上的目錄列表框Dir1和文件列表框File1產生同步。因為目錄列表框Path屬性的改變將產生Change事件,所以在Dir1-Change事件過程中,把Dir1.Path賦給File1.Path,就可以產生同步效果。類似地,增加下面的事件過程,就可以使三種列表框同步操作:
Sub Drive1-Change()
Dir1.Path=Drive1.Drive
End Sub
---- 該過程使驅動器列表框和目錄列表框同步,前面的過程使目錄列表框和文件列表框同步,從而使三種列表框同步,問題即可解決。
用做一個好點的聊天不容易.給你介紹一個最簡單聊天程序吧.
使用時,兩個人同時打開,把兩者的本機端口和遠程端口設置為剛好相反.
Option Explicit
Private IgnoreText As Boolean
'----------------------各控件說明----------------------------
'--名稱-------------類型---------------作用------------------
'frmMain Form CHAT主窗體
'Winsock1 Winsock 連接控件
'Label1 Label CONNECT WITH IP標簽
'Label2 Label LOCAL PORT標簽
'Label3 Label REMOTE PORT標簽
'txtRemoteIP TextBox 遠程IP地址輸入框
'txtLocalPort TextBox 本地PORT輸入框
'txtRemotePort TextBox 遠程PORT輸入框
'cmdConnect CommandButton 連接CONNECT按鈕
'Label4 Label Type your text and hit Enter to send it.標簽
'Frame1(remoteip) Frame REMOTE IP 框架
'Frame2(host ip) Frame HOST IP 框架
'Text1 TextBox 顯示對方(遠程主機)發(fā)送的CHAT內容
'Text2 TextBox 輸入己方(本地主機)要發(fā)送的CHAT內容,按ENTER鍵發(fā)送
'cmdClear CommandButton 清空輸入框(TEXT2)和顯示框(TEXT1)中的內容
'StatusBar1 StatusBar 狀態(tài)欄
'當CLEAR按鈕按下時,清空TEXT1和TEXT2中的內容
Private Sub cmdClear_Click()
Text1 = ""
With Text2
'清空輸入框
.Text = " "
'并把焦點置于TEXT2
.SetFocus
End With
End Sub
'當CONNECT按鈕按下時,進行以下操作
Private Sub cmdConnect_Click()
On Error GoTo ErrHandler
With Winsock1
'設置 RemoteHost 屬性
.RemoteHost = Trim(txtRemoteIP)
'設置 RemotePort 屬性
'RemotePort 屬性的值應該等于 遠程主機上的 LocalHost 屬性的值
.RemotePort = Trim(txtRemotePort)
'LocalPort 屬性的值是不能改變的,必須檢查它是否已經被設置
'如果 LocalPort 屬性為空(沒有被設置),將其設為在LocalPort輸入框中輸入的數值
If .LocalPort = Empty Then
.LocalPort = Trim(txtLocalPort)
Frame2.Caption = .LocalIP
'這是必須的,Bind 方法的作用是為控件“保留”一個本地端口,防止被其他用戶調用。
.Bind .LocalPort
End If
End With
'為了保證使用者不能改變LocalPort的值,將txtLocalPort輸入框鎖定
txtLocalPort.Locked = True
'在狀態(tài)欄中顯示“正在連接”的狀態(tài)
StatusBar1.Panels(1).Text = " 正在連接 " Winsock1.RemoteHost " "
'如果連接正常,做以下設置
Frame1.Enabled = True
Frame2.Enabled = True
Label4.Visible = True
Text2.SetFocus
Exit Sub
'如果在連接過程中出現錯誤,則轉向ErrHandler:,并顯示錯誤提示
ErrHandler:
MsgBox "連接遠程主機失?。?, vbCritical
End Sub
'當窗體加載時顯示提示信息并在 txtRemoteIP 框中顯示本地主機的IP
Private Sub Form_Load()
Show
txtRemoteIP = Winsock1.LocalIP
End Sub
Private Sub Label5_Click()
End Sub
'接收TEXT2輸入框的按鍵,并做響應
Private Sub Text2_KeyPress(KeyAscii As Integer)
'定義變量 Last_Line_Feed 來記錄最后輸入行的位置
Static Last_Line_Feed As Long
'定義 New_Line 字符串記錄新鍵入的一行文本的內容
Dim New_Line As String
'如果使用者按下CLEAR按鈕對輸入框內容清空,這時TEXT2為空,則重設最后輸入行的位置為0
If Trim(Text2) = vbNullString Then Last_Line_Feed = 0
'當使用者按下ENTER鍵時
If KeyAscii = 13 Then
'取得最后輸入行的內容并賦值給 New_Line 字符串
New_Line = Mid(Text2, Last_Line_Feed + 1)
'重設最后輸入行的位置
Last_Line_Feed = Text2.SelStart
'通過 WINSOCK 發(fā)送新輸入的一行文本的內容
Winsock1.SendData New_Line
'在狀態(tài)欄顯示發(fā)送信息
StatusBar1.Panels(2).Text = " 發(fā)送 " (LenB(New_Line) / 2) " 字節(jié) "
End If
End Sub
Private Sub txtRemoteIP_Change()
End Sub
'當 WINSOCK 接收到新的數據(信息)時,進行以下響應
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
'定義 New_Text 字符串來記錄新接收的信息
Dim New_Text As String
'接收信息并賦值給 New_Text
Winsock1.GetData New_Text
'在TEXT1顯示框中顯示新接收到的信息
Text1.SelText = New_Text
Frame1.Caption = Winsock1.RemoteHostIP
'在狀態(tài)欄中顯示接收信息
StatusBar1.Panels(2).Text = " 接收到 " bytesTotal " 字節(jié) "
End Sub
非常簡單的,關鍵就是你要好好研究和吃透winsock控件,這是編寫點對點聊天的重中之重。
聊天軟件要編寫多點對多點、且在廣域網運行的才會有用,僅僅點對點只能是學習之用而以。