如何将文字与图片全部读到Rich TextBox控件中?

szjhxu 2010-11-02 11:23:56
在网上搜了很多方法,发现都不能实现。

我要向Rich TextBox控件中添加一些文字,然后添加一幅图片(JPG格式),然后在图片后继续添加文字。试了网上提供的N多种方法,都不行,希望高手支招。
...全文
328 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
vansoft 2012-04-03
  • 打赏
  • 举报
回复
那是因为你添加图片后。图片是选中状态,再粘贴文字就把图片替换掉了。
你得移一下光标到最后,就可以粘贴文字进去了。
AddDark 2012-04-02
  • 打赏
  • 举报
回复
我也有这个问题困惑
cbm6666 2010-11-11
  • 打赏
  • 举报
回复
在Richtextbox上输入文字后 Call CopyPast

光标会紧贴在图片后面, 你完全可以在图片后面紧接着输入,注意下图那个小箭头图片的右边光标

Private Type repastespecial
dwAspect As Long
dwParam As Long
End Type
'Const WM_CUT = &H300
'Const WM_COPY = &H301
'Const WM_PAST = &H302
'Const WM_CLEAR = &H303
'Const WM_UNDO = &H304
'Const WM_USER = &H400
'Const EM_PASTESPECIAL = WM_USER + 64
'Const CF_BITMAP = 2
'Const CF_TEXT = 1
'Const DVASPECT_CONTENT = 1
'Const DVASPECT_ICON = 4

Sub CopyPast()
On Error Resume Next
Dim Rep As repastespecial
Dim ClipBoardFormat&
'复制图片
PicName = "c:\test.gif"
Picture1.Picture = LoadPicture(PicName)
Clipboard.Clear
Clipboard.SetData Picture3.Image
'粘贴图片
Rep.dwAspect = DVASPECT_CONTENT
If Clipboard.GetFormat(vbCFText) Then '剪贴板中为文本信息
ClipBoardFormat = "vbCFText"
ElseIf Clipboard.GetFormat(vbCFBitmap) Then '剪贴板中为位图信息
ClipBoardFormat = "vbCFBitmap"
ElseIf Clipboard.GetFormat(vbCFRTF) Then
ClipBoardFormat = "vbCFRTF"
ElseIf Clipboard.GetFormat(vbCFLink) Then
ClipBoardFormat = "vbCFLink"
ElseIf Clipboard.GetFormat(vbCFMetafile) Then
ClipBoardFormat = "vbCFMetafile"
ElseIf Clipboard.GetFormat(vbCFDIB) Then
ClipBoardFormat = "vbCFDIB"
ElseIf Clipboard.GetFormat(vbCFPalette) Then
ClipBoardFormat = "vbCFPalette"
ElseIf Clipboard.GetFormat(vbCFEMetafile) Then
ClipBoardFormat = "vbCFEMetaFile"
ElseIf Clipboard.GetFormat(vbCFFiles) Then
ClipBoardFormat = "vbCFFiles"
Else
ClipBoardFormat = "Empty"
End If
Call SendMessage(RichTextBox1.hWnd, EM_PASTESPECIAL, ClipBoardFormat, Rep)
RichTextBox1.SetFocus '让光标紧跟在图片的后面
End Sub


cbm6666 2010-11-11
  • 打赏
  • 举报
回复
打错了
Clipboard.SetData Picture1.Image
szjhxu 2010-11-10
  • 打赏
  • 举报
回复
谢谢大家,还有一点没解决,如何在有文本也有图片的控件中准确定位当前光标位置呢?

Rtf1.SelStart=?

也不能用纯文本的长度Len(RTF1.TEXT)。

唉,好久不用VB了,问题挺多,麻烦大家了。
lyserver 2010-11-10
  • 打赏
  • 举报
回复
不需要剪切板,直接使用SendKey发送字符串到富文本框的光标位置即可,比如:
[CODE=VB]
Private Sub Command1_Click()
Me.RichTextBox1.SelStart = Len(Me.RichTextBox1.Text)
Me.RichTextBox1.SetFocus
SendKeys "软件设计"
End Sub
[/CODE]
当然,如果熟悉RTF格式,也可以直接修改TextRTF属性。
booksoon 2010-11-10
  • 打赏
  • 举报
回复
插入文本时,那就依然用clipboard
For I = 65 To 90
Clipboard.Clear '清空剪切板
Clipboard.SetText Chr(I) & vbCrLf, vbCFText '将要插入的文本放入剪切板
SendKeys "^V", True '模拟粘贴按键操作
Clipboard.Clear
Next
现在还是人类 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 szjhxu 的回复:]
这一段代码确实是可以将图片插入到控件中,可能你还是没明白我的想法,举个简单例子吧。
有如下程序:

Private Sub Command1_Click()
Dim I As Integer
For I = 65 To 90
RTF1.Text = RTF1.Text & Chr(I) & vbCrLf
Next
RTF1.SelStart = ……
[/Quote]
你这样坑定会出问题呀,你既然在 RichTextBox 中插入了图片,即表示操作的
已经不是普通的纯文本内容,而是超文本内容,但你后面又用操作纯文本的方式
去操作,当然超文本也就变回纯文本了,图片也就理所当然的会不见掉。如果你
要插入文本内容,建议你同样使用剪切板操作插入文本,你用 RTF1.Text 属性
来操作,图片还在才是奇怪的事,所以我给你的范例也是使用剪切板处理文本:
...
Clipboard.SetText "新粘贴的文本", vbCFText '将要插入的文本放入剪切板
SendKeys "^V", True '模拟粘贴按键操作
...
szjhxu 2010-11-09
  • 打赏
  • 举报
回复
这一段代码确实是可以将图片插入到控件中,可能你还是没明白我的想法,举个简单例子吧。
有如下程序:

Private Sub Command1_Click()
Dim I As Integer
For I = 65 To 90
RTF1.Text = RTF1.Text & Chr(I) & vbCrLf
Next
RTF1.SelStart = Len(RTF1.Text)
dlg1.ShowOpen
InsertImage RTF1, dlg1.FileName '调用插入图片功能

'如果再用下面代码图片就没了,关键是这儿该怎么写?肯定不能用Text属性了。
For I = 65 To 90
RTF1.Text = RTF1.Text & Chr(I) & vbCrLf
Next
End Sub

谢谢!



[Quote=引用 5 楼 supermanking 的回复:]
如果说有问题,也是你自己的过程没处理好,并不是技术上问题。
而且我提供的这个范例不知道你测试过没有,这个过程即使多次点击按钮触发,
也不会有你说的图片消失的问题出现。像这种问题建议你还是先测试一下别人的
东西,搞清楚技术上和逻辑上别人使用的方法后,再看看自己的过程哪里有出入,
这样才能比较好的解决问题。

VB code

'==================== 变量定……
[/Quote]
现在还是人类 2010-11-08
  • 打赏
  • 举报
回复
如果说有问题,也是你自己的过程没处理好,并不是技术上问题。
而且我提供的这个范例不知道你测试过没有,这个过程即使多次点击按钮触发,
也不会有你说的图片消失的问题出现。像这种问题建议你还是先测试一下别人的
东西,搞清楚技术上和逻辑上别人使用的方法后,再看看自己的过程哪里有出入,
这样才能比较好的解决问题。

'==================== 变量定义 ====================
Dim objTemp As IPictureDisp
Dim strTemp As String
Dim lngClipboardType As Long
'==================== 变量初始化 ====================
lngClipboardType = -1
'==================== 保存剪切板数据 ====================
If Clipboard.GetFormat(vbCFBitmap) = True Then
Set objTemp = Clipboard.GetData(vbCFBitmap)
lngClipboardType = 0
ElseIf Clipboard.GetFormat(vbCFText) = True Then
strTemp = Clipboard.GetText(vbCFText)
lngClipboardType = 1
ElseIf Clipboard.GetFormat(vbCFMetafile) = True Then
Set objTemp = Clipboard.GetData(vbCFMetafile)
lngClipboardType = 2
ElseIf Clipboard.GetFormat(vbCFDIB) = True Then
Set objTemp = Clipboard.GetData(vbCFDIB)
lngClipboardType = 3
End If

RichTextBox1.SetFocus '将焦点放到 RichTextBox1 上
Clipboard.Clear '清空剪切板
Clipboard.SetData Picture1.Picture, vbCFBitmap '将要插入的图片放入剪切板
SendKeys "^V", True '模拟粘贴按键操作
Clipboard.Clear '清空剪切板
Clipboard.SetText "新粘贴的文本", vbCFText '将要插入的文本放入剪切板
SendKeys "^V", True '模拟粘贴按键操作
Clipboard.Clear '清空剪切板



'==================== 还原剪切板数据 ====================
Select Case lngClipboardType
Case 0: Clipboard.SetData objTemp, vbCFBitmap
Case 1: Clipboard.SetText strTemp, vbCFText
Case 2: Clipboard.SetData objTemp, vbCFMetafile
Case 3: Clipboard.SetData objTemp, vbCFDIB
End Select
gr444 2010-11-07
  • 打赏
  • 举报
回复
我顶上去
szjhxu 2010-11-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 supermanking 的回复:]
VB code

Private Sub Command1_Click()
'==================== 变量定义 ====================
Dim objTemp As IPictureDisp
Dim strTemp As String
Dim lngClipboardType As Long
'=======……
[/Quote]

现在的问题不是不能加图片,而是加了图片后,再想通过代码向RTF控件中添加文本时,图片就消失了。如果解决呢?
现在还是人类 2010-11-03
  • 打赏
  • 举报
回复

Private Sub Command1_Click()
'==================== 变量定义 ====================
Dim objTemp As IPictureDisp
Dim strTemp As String
Dim lngClipboardType As Long
'==================== 变量初始化 ====================
lngClipboardType = -1
'==================== 保存剪切板数据 ====================
If Clipboard.GetFormat(vbCFBitmap) = True Then
Set objTemp = Clipboard.GetData(vbCFBitmap)
lngClipboardType = 0
ElseIf Clipboard.GetFormat(vbCFText) = True Then
strTemp = Clipboard.GetText(vbCFText)
lngClipboardType = 1
ElseIf Clipboard.GetFormat(vbCFMetafile) = True Then
Set objTemp = Clipboard.GetData(vbCFMetafile)
lngClipboardType = 2
ElseIf Clipboard.GetFormat(vbCFDIB) = True Then
Set objTemp = Clipboard.GetData(vbCFDIB)
lngClipboardType = 3
End If

Clipboard.Clear '清空剪切板
Clipboard.SetData Picture1.Picture, vbCFBitmap '将要插入的图片放入剪切板
RichTextBox1.SetFocus '将焦点放到 RichTextBox1 上
SendKeys "^V", True '模拟粘贴按键操作
Clipboard.Clear '清空剪切板
'==================== 还原剪切板数据 ====================
Select Case lngClipboardType
Case 0: Clipboard.SetData objTemp, vbCFBitmap
Case 1: Clipboard.SetText strTemp, vbCFText
Case 2: Clipboard.SetData objTemp, vbCFMetafile
Case 3: Clipboard.SetData objTemp, vbCFDIB
End Select
End Sub

szjhxu 2010-11-03
  • 打赏
  • 举报
回复
试了以下代码,可以将图片插入到指定位置,但如果我在代码中要继续向RichTextBox控件中添加文字该如何实现呢?
Clipboard.Clear
Clipboard.SetData LoadPicture("D:\3.jpg")
RTF1.SetFocus
RTF1.SelStart = 5
SendKeys "^V", True

1,451

社区成员

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

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