
vb MSFlexGrid控件单元格中图片存储问题?
可以把图片存成象在WORD里存图片一样吗?比如:你在WORD里插入一张图,在保存的时候它就跟文字一起保存起来了,而文件名就一个,在路径里,你是看不到这些图片的,而只有你打...
可以把图片存成象在WORD里存图片一样吗?
比如:你在WORD里插入一张图,在保存的时候它就跟文字一起保存起来了,而文件名就一个,在路径里,你是看不到这些图片的,而只有你打开这个WORD文件才看得到,也就是说这些图片没有专门的存储文件,它们是跟文字整合在一个文件里了. 展开
比如:你在WORD里插入一张图,在保存的时候它就跟文字一起保存起来了,而文件名就一个,在路径里,你是看不到这些图片的,而只有你打开这个WORD文件才看得到,也就是说这些图片没有专门的存储文件,它们是跟文字整合在一个文件里了. 展开
1个回答
展开全部
思路:使用二进制文件。
把文本、图片以及其它信息定义成一个自己的记录格式,然后保存到一个二进制文件,再根据实际情况读写。
参考代码如下:
Option Explicit
Private Const BUFFER_SIZE = 1024
Private Type MyRecord
Size As Long
ActSize As Long
Text As String
Image As String
End Type
Private Sub Command1_Click()
CommonDialog1.DialogTitle = "打开图片"
CommonDialog1.ShowOpen
Set MSFlexGrid1.CellPicture = LoadPicture(CommonDialog1.FileName)
End Sub
Private Sub Command2_Click()
MSFlexGrid1.Text = InputBox("输入文字")
End Sub
Private Sub Command3_Click()
Dim i As Integer
Dim j As Long
Dim t As Integer
Dim offset As Long
Dim count As Long
Dim Rcount As Long
Dim Ccount As Long
Dim R() As MyRecord
Dim b(1 To BUFFER_SIZE) As Byte
count = MSFlexGrid1.Rows * MSFlexGrid1.Cols
Rcount = MSFlexGrid1.Rows
Ccount = MSFlexGrid1.Cols
ReDim R(1 To count) As MyRecord
For i = 1 To MSFlexGrid1.Rows - 1
For j = 1 To MSFlexGrid1.Cols - 1
MSFlexGrid1.Row = i
MSFlexGrid1.Col = j
If MSFlexGrid1.Text <> "" Then
R((i - 1) * MSFlexGrid1.Row + j).Text = MSFlexGrid1.Text
End If
If MSFlexGrid1.CellPicture <> 0 Then
SavePicture MSFlexGrid1.CellPicture, "t" & t & ".bmp"
R((i - 1) * MSFlexGrid1.Row + j).Image = "t" & t & ".bmp"
t = t + 1
R((i - 1) * MSFlexGrid1.Row + j).Size = FileLen(R((i - 1) * MSFlexGrid1.Row + j).Image)
R((i - 1) * MSFlexGrid1.Row + j).ActSize = R((i - 1) * MSFlexGrid1.Row + j).Size
If R((i - 1) * MSFlexGrid1.Row + j).Size Mod BUFFER_SIZE <> 0 Then
R((i - 1) * MSFlexGrid1.Row + j).Size = (R((i - 1) * MSFlexGrid1.Row + j).Size \ BUFFER_SIZE) * BUFFER_SIZE + BUFFER_SIZE
End If
End If
Next j
Next i
CommonDialog1.DialogTitle = "保存数据"
CommonDialog1.ShowSave
If CommonDialog1.FileName <> "" Then
Open CommonDialog1.FileName For Output As #1
Close #1
Open CommonDialog1.FileName For Binary As #1
Put #1, , offset
Put #1, , count
Put #1, , Rcount
Put #1, , Ccount
For i = 1 To count
Put #1, , R(i)
Next i
Close #1
offset = FileLen(CommonDialog1.FileName)
Open CommonDialog1.FileName For Binary As #1
Put #1, , offset
Put #1, offset, b(1)
For i = 1 To count
If R(i).Image <> "" Then
Open R(i).Image For Binary As #2
For j = 1 To R(i).Size Step BUFFER_SIZE
Get #2, , b
Put #1, , b
Next j
Close #2
Kill R(i).Image
End If
Next i
Close #1
End If
End Sub
Private Sub Command4_Click()
Dim offset As Long
Dim count As Long
Dim Rcount As Long
Dim Ccount As Long
Dim R() As MyRecord
Dim i As Integer
Dim j As Long
Dim l As Long
Dim t As Integer
Dim b(1 To BUFFER_SIZE) As Byte
CommonDialog1.DialogTitle = "打开"
CommonDialog1.ShowOpen
If CommonDialog1.FileName <> "" Then
Open CommonDialog1.FileName For Binary As #1
Get #1, , offset
Get #1, , count
Get #1, , Rcount
Get #1, , Ccount
MSFlexGrid1.Rows = Rcount
MSFlexGrid1.Cols = Ccount
ReDim R(1 To count) As MyRecord
For i = 1 To count
Get #1, , R(i)
Next i
Get #1, offset, b(1)
For i = 1 To count
If R(i).Image <> "" Then
Open R(i).Image For Binary As #2
For j = 1 To R(i).Size Step BUFFER_SIZE
Get #1, , b
If R(i).ActSize < R(i).Size And j + BUFFER_SIZE > R(i).ActSize Then
For l = j To R(i).ActSize
Put #2, , b(l - j + 1)
Next l
Exit For
End If
Put #2, , b
Next j
Close #2
End If
Next i
Close #1
For i = 1 To MSFlexGrid1.Rows - 1
For j = 1 To MSFlexGrid1.Cols - 1
MSFlexGrid1.Row = i
MSFlexGrid1.Col = j
If R((i - 1) * MSFlexGrid1.Row + j).Text <> "" Then
MSFlexGrid1.Text = R((i - 1) * MSFlexGrid1.Row + j).Text
End If
If R((i - 1) * MSFlexGrid1.Row + j).Image <> "" Then
Set MSFlexGrid1.CellPicture = LoadPicture(R((i - 1) * MSFlexGrid1.Row + j).Image)
Kill R((i - 1) * MSFlexGrid1.Row + j).Image
End If
Next j
Next i
End If
End Sub
Private Sub Form_Load()
MSFlexGrid1.RowHeight(1) = 1000
MSFlexGrid1.RowHeight(2) = 1000
End Sub
把文本、图片以及其它信息定义成一个自己的记录格式,然后保存到一个二进制文件,再根据实际情况读写。
参考代码如下:
Option Explicit
Private Const BUFFER_SIZE = 1024
Private Type MyRecord
Size As Long
ActSize As Long
Text As String
Image As String
End Type
Private Sub Command1_Click()
CommonDialog1.DialogTitle = "打开图片"
CommonDialog1.ShowOpen
Set MSFlexGrid1.CellPicture = LoadPicture(CommonDialog1.FileName)
End Sub
Private Sub Command2_Click()
MSFlexGrid1.Text = InputBox("输入文字")
End Sub
Private Sub Command3_Click()
Dim i As Integer
Dim j As Long
Dim t As Integer
Dim offset As Long
Dim count As Long
Dim Rcount As Long
Dim Ccount As Long
Dim R() As MyRecord
Dim b(1 To BUFFER_SIZE) As Byte
count = MSFlexGrid1.Rows * MSFlexGrid1.Cols
Rcount = MSFlexGrid1.Rows
Ccount = MSFlexGrid1.Cols
ReDim R(1 To count) As MyRecord
For i = 1 To MSFlexGrid1.Rows - 1
For j = 1 To MSFlexGrid1.Cols - 1
MSFlexGrid1.Row = i
MSFlexGrid1.Col = j
If MSFlexGrid1.Text <> "" Then
R((i - 1) * MSFlexGrid1.Row + j).Text = MSFlexGrid1.Text
End If
If MSFlexGrid1.CellPicture <> 0 Then
SavePicture MSFlexGrid1.CellPicture, "t" & t & ".bmp"
R((i - 1) * MSFlexGrid1.Row + j).Image = "t" & t & ".bmp"
t = t + 1
R((i - 1) * MSFlexGrid1.Row + j).Size = FileLen(R((i - 1) * MSFlexGrid1.Row + j).Image)
R((i - 1) * MSFlexGrid1.Row + j).ActSize = R((i - 1) * MSFlexGrid1.Row + j).Size
If R((i - 1) * MSFlexGrid1.Row + j).Size Mod BUFFER_SIZE <> 0 Then
R((i - 1) * MSFlexGrid1.Row + j).Size = (R((i - 1) * MSFlexGrid1.Row + j).Size \ BUFFER_SIZE) * BUFFER_SIZE + BUFFER_SIZE
End If
End If
Next j
Next i
CommonDialog1.DialogTitle = "保存数据"
CommonDialog1.ShowSave
If CommonDialog1.FileName <> "" Then
Open CommonDialog1.FileName For Output As #1
Close #1
Open CommonDialog1.FileName For Binary As #1
Put #1, , offset
Put #1, , count
Put #1, , Rcount
Put #1, , Ccount
For i = 1 To count
Put #1, , R(i)
Next i
Close #1
offset = FileLen(CommonDialog1.FileName)
Open CommonDialog1.FileName For Binary As #1
Put #1, , offset
Put #1, offset, b(1)
For i = 1 To count
If R(i).Image <> "" Then
Open R(i).Image For Binary As #2
For j = 1 To R(i).Size Step BUFFER_SIZE
Get #2, , b
Put #1, , b
Next j
Close #2
Kill R(i).Image
End If
Next i
Close #1
End If
End Sub
Private Sub Command4_Click()
Dim offset As Long
Dim count As Long
Dim Rcount As Long
Dim Ccount As Long
Dim R() As MyRecord
Dim i As Integer
Dim j As Long
Dim l As Long
Dim t As Integer
Dim b(1 To BUFFER_SIZE) As Byte
CommonDialog1.DialogTitle = "打开"
CommonDialog1.ShowOpen
If CommonDialog1.FileName <> "" Then
Open CommonDialog1.FileName For Binary As #1
Get #1, , offset
Get #1, , count
Get #1, , Rcount
Get #1, , Ccount
MSFlexGrid1.Rows = Rcount
MSFlexGrid1.Cols = Ccount
ReDim R(1 To count) As MyRecord
For i = 1 To count
Get #1, , R(i)
Next i
Get #1, offset, b(1)
For i = 1 To count
If R(i).Image <> "" Then
Open R(i).Image For Binary As #2
For j = 1 To R(i).Size Step BUFFER_SIZE
Get #1, , b
If R(i).ActSize < R(i).Size And j + BUFFER_SIZE > R(i).ActSize Then
For l = j To R(i).ActSize
Put #2, , b(l - j + 1)
Next l
Exit For
End If
Put #2, , b
Next j
Close #2
End If
Next i
Close #1
For i = 1 To MSFlexGrid1.Rows - 1
For j = 1 To MSFlexGrid1.Cols - 1
MSFlexGrid1.Row = i
MSFlexGrid1.Col = j
If R((i - 1) * MSFlexGrid1.Row + j).Text <> "" Then
MSFlexGrid1.Text = R((i - 1) * MSFlexGrid1.Row + j).Text
End If
If R((i - 1) * MSFlexGrid1.Row + j).Image <> "" Then
Set MSFlexGrid1.CellPicture = LoadPicture(R((i - 1) * MSFlexGrid1.Row + j).Image)
Kill R((i - 1) * MSFlexGrid1.Row + j).Image
End If
Next j
Next i
End If
End Sub
Private Sub Form_Load()
MSFlexGrid1.RowHeight(1) = 1000
MSFlexGrid1.RowHeight(2) = 1000
End Sub
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询