各位应该用过 MSN Messenger 和网易泡泡这些即时通讯软件吧。
不知道用 VB 怎么可以做到像他们一样的聊天消息窗体(参照 WIN32 API 的说
法,我们把任何一个控件姑且都称为窗体):1. 窗体内显示聊天双方的聊天文字,是动态增加的。并且显示的字体是由消息
发送者自己定义的。
2. 窗体内除了能显示文字外,还能显示 URL 链接。链接除了能跳转到普通的网址
外,还能是执行自己内部的程序,如:当甲给乙发送文件时,乙首先收到的是
一条消息:甲给您发送文件,您是[接收]还是[取消],这里的[接收]和[取消]
就是两个链接,点击会执行不同的动作。如果是我们自己的 VB 文本框/富文本
框,如何才能做到类似的效果呢?目前想到的就是这些,希望大家能给出一些思路。如果是类似 QQ 的界面,我想
实现起来可能会容易一点。但我个人比较偏向于 MSN 的界面。在此请各位高手
指点。
不知道用 VB 怎么可以做到像他们一样的聊天消息窗体(参照 WIN32 API 的说
法,我们把任何一个控件姑且都称为窗体):1. 窗体内显示聊天双方的聊天文字,是动态增加的。并且显示的字体是由消息
发送者自己定义的。
2. 窗体内除了能显示文字外,还能显示 URL 链接。链接除了能跳转到普通的网址
外,还能是执行自己内部的程序,如:当甲给乙发送文件时,乙首先收到的是
一条消息:甲给您发送文件,您是[接收]还是[取消],这里的[接收]和[取消]
就是两个链接,点击会执行不同的动作。如果是我们自己的 VB 文本框/富文本
框,如何才能做到类似的效果呢?目前想到的就是这些,希望大家能给出一些思路。如果是类似 QQ 的界面,我想
实现起来可能会容易一点。但我个人比较偏向于 MSN 的界面。在此请各位高手
指点。
至于动态显示TEXT,WINSOCK可以胜任
上面网友回复的 Winsock 是如何获取动态消息的问题,这不是讨论的范围。2. 窗体内除了能显示文字外,还能显示 URL 链接。链接除了能跳转到普通的网址外,还能是执行自己内部的程序。
如:当甲给乙发送文件时,乙首先收到的是一条消息:甲给您发送文件,您是[接收]还是[取消],这里的[接收]和[取消]就是两个链接,点击会执行不同的动作。如果是我们自己的 VB 文本框/富文本框,如何才能做到类似的效果呢?
和MSN的一模一样
富文本框能显示链接并能响应用户的点击操作吗?
Private Sub txtReceived_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Me.ImgFont.BorderStyle = 0
hyperlink = getHyperlink(txtReceived, X, Y)
End Sub
Public Function getHyperlink(rtf As RichTextBox, X As Single, Y As Single) As String
'Some Tips that is Safe to Change/Edit f
' or Beginers:
'=======================================
' =========================
' rtf.MousePointer = rtfCustom
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
' What MousePointer to Use ? if its rtfC
' ustom
' Then you need to add a Icon to the Ric
' hTextBox
'=======================================
' =========================
'=======================================
' =========================
'rtf.SelUnderline = True
' Do you want the URl to UnderLine ?
'=======================================
' =========================
'=======================================
' =========================
'rtf.SelColor = vbBlue
' What Color would you like the URL to b
' e ?
'=======================================
' =========================
On Error Resume Next
Dim Point As PointAPI
Dim charpos As Long
Dim pos_start As Long
Dim pos_end As Long
Dim char As String
Dim word As String
Point.X = X \ Screen.TwipsPerPixelX
Point.Y = Y \ Screen.TwipsPerPixelY charpos = SendMessageA(rtf.hwnd, EM_CHARFROMPOS, 0&, Point)
If charpos <= 0 Or charpos = Len(rtf.Text) Then
rtf.MousePointer = rtfDefault
getHyperlink = vbNullString
Exit Function
End If
For pos_start = charpos To 1 Step -1
If Mid$(rtf.Text, pos_start + 1, 1) = Chr$(13) Then
rtf.MousePointer = rtfDefault
getHyperlink = vbNullString
Exit Function
End If
char = Mid$(rtf.Text, pos_start, 1)
If char = Chr$(32) Or char = Chr$(10) Or char = Chr$(13) Then Exit For
Next pos_start
pos_start = pos_start + 1
For pos_end = charpos To Len(rtf.Text)
char = Mid$(rtf.Text, pos_end, 1)
If char = Chr$(32) Or char = Chr$(10) Or char = Chr$(13) Then Exit For
Next pos_end
pos_end = pos_end - 1
If pos_start <= pos_end Then word = LCase$(Mid$(rtf.Text, pos_start, _
pos_end - pos_start + 1))
If Left$(word, 7) = "http://" Or Left$(word, 4) = "www." Or Left$(word, 6) = _
"ftp://" Or Left$(word, 7) = "mailto:" Then
char = Right$(word, 1)
Do While char = "." Or char = "," Or char = "!" Or char = "?"
If Len(char) = 0 Then Exit Do
word = Left$(word, Len(word) - 1)
char = Right$(word, 1)
Loop
If Len(word) < 4 Then
rtf.MousePointer = rtfCustom
getHyperlink = vbNullString
Else
rtf.MousePointer = rtfCustom
getHyperlink = word
End If
Else
rtf.MousePointer = rtfDefault
End If
End Function