如何设置编辑控件中某几个字的背景色?

eileendl 2004-09-04 09:35:06
我现在用的编辑控件是richtextbox,但怎么也没有找到设置某几个字背景色的方法。

分不够可以再加!
...全文
144 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
莫情莫钱 2004-10-24
  • 打赏
  • 举报
回复
up呵呵
eileendl 2004-10-10
  • 打赏
  • 举报
回复
up
Andy__Huang 2004-10-05
  • 打赏
  • 举报
回复
完全可以﹐以前我也做過﹐但現在記不起代碼了。
eileendl 2004-10-05
  • 打赏
  • 举报
回复
比较晕。看不太懂:(
laviewpbt 2004-10-05
  • 打赏
  • 举报
回复
我这有一个自绘listbox的例子,希望对你有帮助
模块中
Option Explicit

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type DRAWITEMSTRUCT
CtlType As Long '控件类型
CtlID As Long '控件ID
itemID As Long '菜单项、列表框或组合框中某一项的索引值
itemAction As Long '控件行为
itemState As Long '控件状态
hwndItem As Long '父窗口句柄或菜单句柄
hdc As Long '控件对应的绘图设备句柄
rcItem As RECT '控件所占据的矩形区域
itemData As Long '列表框或组合框中某一项的值
End Type

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function DrawFocusRect Lib "user32" (ByVal hdc As Long, lpRect As RECT) As Long
Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long

Private Const COLOR_HIGHLIGHT = 13
Private Const COLOR_HIGHLIGHTTEXT = 14
Private Const COLOR_WINDOW = 5
Private Const COLOR_WINDOWTEXT = 8
Private Const LB_GETTEXT = &H189
Private Const WM_DRAWITEM = &H2B
Private Const GWL_WNDPROC = (-4)
Private Const ODS_FOCUS = &H10
Private Const ODT_LISTBOX = 2

Private lPrevWndProc As Long

Private Function SubClassedList(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim tItem As DRAWITEMSTRUCT
Dim sBuff As String * 255
Dim sItem As String
Dim lBack As Long
If Msg = WM_DRAWITEM Then '绘制菜单消息
Call CopyMemory(tItem, ByVal lParam, Len(tItem))
If tItem.CtlType = ODT_LISTBOX Then '只处理控件类型为listbox的控件
Call SendMessage(tItem.hwndItem, LB_GETTEXT, tItem.itemID, ByVal sBuff) '获得具体值
sItem = Left(sBuff, InStr(sBuff, Chr(0)) - 1)
If (tItem.itemState And ODS_FOCUS) Then '判断某项是否具有焦点
lBack = CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT))
Call FillRect(tItem.hdc, tItem.rcItem, lBack)
Call SetBkColor(tItem.hdc, GetSysColor(COLOR_HIGHLIGHT))
Call SetTextColor(tItem.hdc, GetSysColor(COLOR_HIGHLIGHTTEXT))
TextOut tItem.hdc, tItem.rcItem.Left, tItem.rcItem.Top, ByVal sItem, Len(sItem)
DrawFocusRect tItem.hdc, tItem.rcItem
Else '如果没有焦点,则
lBack = CreateSolidBrush(GetSysColor(COLOR_WINDOW))
Call FillRect(tItem.hdc, tItem.rcItem, lBack)
Call SetBkColor(tItem.hdc, GetSysColor(COLOR_WINDOW))
Call SetTextColor(tItem.hdc, tItem.itemData)
TextOut tItem.hdc, tItem.rcItem.Left, tItem.rcItem.Top, ByVal sItem, Len(sItem)
End If
Call DeleteObject(lBack)
SubClassedList = 0
Exit Function
End If
End If
SubClassedList = CallWindowProc(lPrevWndProc, hWnd, Msg, wParam, lParam)
End Function

Public Sub SubLists(ByVal hWnd As Long)
lPrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf SubClassedList)
End Sub

Public Sub RemoveSubLists(ByVal hWnd As Long)
Call SetWindowLong(hWnd, GWL_WNDPROC, lPrevWndProc)
End Sub
窗体中
Private Sub Form_Load()
Dim I As Integer
For I = 0 To 15
List1.AddItem "Color " & I
List1.itemData(List1.NewIndex) = QBColor(I)
Next
SubLists hWnd
End Sub

Private Sub Form_Unload(Cancel As Integer)
RemoveSubLists hWnd
End Sub
eileendl 2004-10-05
  • 打赏
  • 举报
回复
怎么样“自绘richtextbox”,又如何“在自绘时调用api函数setbkcolor设置文字的背景色”?能给个实际的例子吗?
rainstormmaster 2004-10-03
  • 打赏
  • 举报
回复
//没有这样的功能.真的,实现起来难.

是这样的

想设置文字背景色,需要自绘richtextbox,在自绘时调用api函数setbkcolor设置文字的背景色
zhujiechang 2004-09-09
  • 打赏
  • 举报
回复
没有这样的功能.真的,实现起来难.
你自己写个文本框实现起来就容易些.不过还是比较难.
eileendl 2004-09-05
  • 打赏
  • 举报
回复
selcolor只是前景色变了,我想的是背景色改变。
BlueBeer 2004-09-05
  • 打赏
  • 举报
回复
不好意思,审错题:)
BlueBeer 2004-09-05
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
RichTextBox1.SelStart = 6
RichTextBox1.SelLength = 5
RichTextBox1.SelColor = vbBlue
End Sub

Private Sub Form_Load()
RichTextBox1.Text = "测试测试测试这里是标注再测试测试测试"
End Sub
eileendl 2004-09-04
  • 打赏
  • 举报
回复
那请问很多的编辑器让某些字符背景色变化是如何做的?
比如ultraedit每行都可以高亮,sourceinsight中字符串都是淡黄色背景....
kmzs 2004-09-04
  • 打赏
  • 举报
回复
不可能!

1,453

社区成员

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

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