求救:关于image的问题

cumtbwxj 2005-08-16 09:13:30
我现在根据数据库中数据的量来动态创建Image 。(我用的是VBA)
现在有100条数据,在一个大的Image产生了100个小的Image(大小10X10)然后根据数据库中的数据列(R列,G列,B列)来根据image.backcolor=RGB( rst1.Fields("RGB_R").Value, rst1.Fields("RGB_G").Value, rst1.Fields("RGB_B").Value))给他们染色
现在我要求任意点一个Image,就要在text中显示出他的详细信息(编号等)。
现在不知道该怎么做。

100个Image分10行10列排列。(以后可能要变成1000个)

求救!!!!!!!!!!。解决另外再送50分

代码:
Dim cnn1 As ADODB.Connection
Dim rst1 As ADODB.Recordset
Dim mdbName As String
Dim Sqlstr1 As String
Dim ima(0 To 5, 0 To 33) As Control

Private Sub UserForm_Activate()
'连接数据库 这里用的是Acess数据库
Set cnn1 = New ADODB.Connection
mdbName = "d:\coreldraw vba\CP_XY.mdb"
cnn1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=" + mdbName
cnn1.Open
Dim c, d As Integer
c = 0
d = 991
Sqlstr1 = "select * from colordb_xy where seq > " + CStr(c) + "and seq < " + CStr(d) + " order by seq"
Set rst1 = New ADODB.Recordset
rst1.Open (Sqlstr1), cnn1, adOpenStatic, adLockOptimistic
rst1.MoveFirst
Dim i, j, k As Integer
For k = 0 To 4
For j = 0 To 32
For i = 0 To 5
Set ima(i, j) = Me.Controls.Add("Forms.Image.1", "image1", Visible)

On Error Resume Next
If Not rst1.EOF Then
ima(i, j).Parent = Im1 'im1为Image

' ima(i, j).Click = imageclick '这样处理不行

ima(i, j).Height = 8
ima(i, j).Width = 8
ima(i, j).Left = j * 8
ima(i, j).Top = i * 8 + k * 48
ima(i, j).Enabled = True
ima(i, j).BackColor = RGB(rst1.Fields("RGB_R").Value, rst1.Fields("RGB_G").Value, rst1.Fields("RGB_B").Value)
' ima(i, j).hint='111'
rst1.MoveNext
End If
Next i
Next j
Next k、
end sub



本人刚接触VBA,不会的太多,还有最好当我的鼠标放在任意一个Image上时,出现提示他对应的数据库中的个别信息。


在VBA中用DataGrid想显示数据库中的数据,但是不知道该怎么连数据库。
...全文
161 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cumtbwxj 2005-08-24
  • 打赏
  • 举报
回复
帖子沉了,顶起来
cumtbwxj 2005-08-22
  • 打赏
  • 举报
回复
faysky2() ( ) 和sdrcxzy(大向) 两位老兄


你俩给的是创建一个控件的解法


但是我的是相同的990个阿,不知道该怎么弄了,请指教,谢谢
sdrcxzy 2005-08-19
  • 打赏
  • 举报
回复
帮贴
在VB中动态添加可响应消息的控件
在VB编程中,经常要根据不同的情况在运行时向窗口中添加或者删除控件,而各个控件还要
响应各种事件。在一般的情况下是首先在设计时将控件加入到窗口中,在它们的各个事件中写入
代码,然后将它们的Visible属性设置为False。在运行时再使控件显示出来,但是这样既不方便
同时也因为在设计时在窗口中加入太多的控件而使得程序的运行速度变慢。下面我向大家介绍一
种通过编程在运行时动态添加和删除控件的方法
首先建立一个工程文件,然后在Form1中加入以下的代码:
Dim WithEvents cmdMyCommand As VB.CommandButton
Option Explicit
'在下面的定义中,程序定义了一个TextBox控件、一个CommandButton控件
'和一个附加控件。
Dim WithEvents ctlDynamic As VBControlExtender
Dim WithEvents ctlText As VB.TextBox
Dim WithEvents ctlCommand As VB.CommandButton
Dim WithEvents ctlCommandDel As VB.CommandButton
Private Sub ctlCommandDel_Click()
Dim i As Integer

'将控件的许可证信息删除
Licenses.Remove "MSComctlLib.TreeCtrl"
If MsgBox("是否删除所有控件", vbYesNo) = vbYes Then
For i = 1 To Form1.Controls.Count
Controls.Remove 0
Next i
End If
End Sub
Private Sub ctlCommand_Click()
ctlText.Text = "你点击的是控制按钮"
End Sub

Private Sub ctlDynamic_ObjectEvent(Info As EventInfo)
'当点击树形控件的某一个条目后,在ctlText中显示条目。
If Info.Name = "Click" Then
ctlText.Text = "你点击的条目是 " & _
ctlDynamic.object.selecteditem.Text
End If
End Sub

Private Sub Form_Load()
Dim i As Integer
' 将树形控件的许可证信息加入到许可证集合中
' 如果许可证已经存在,则会返回错误信息732
Licenses.Add "MSComctlLib.TreeCtrl"

' 在Form中动态的加入一个树形控件,如果你想树形控件建立到不同的
'容器中,象一个Frame控件或者PictureBox控件,你只要将Controls.Add
'函数的第三个参数改为特定的容器名就可以了
Set ctlDynamic = Controls.Add("MSComctlLib.TreeCtrl", _
"myctl", Form1)
'设置树形控件的位置和尺寸
ctlDynamic.Move 1, 1, 2500, 3500
'在树形控件中加入10个节点
For i = 1 To 10
ctlDynamic.object.nodes.Add Key:="Test" & Str(i), _
Text:="Test" & Str(i)
ctlDynamic.object.nodes.Add Relative:="Test" & Str(i), _
Relationship:=4, Text:="TestChild" & Str(i)
Next i
'使树形控件可见
ctlDynamic.Visible = True

'加入一个TextBox
Set ctlText = Controls.Add("VB.TextBox", "ctlText1", Form1)
'设置TextBox的位置和尺寸
ctlText.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
1, 2500, 100
'将textBox的背景色设置为蓝色并将前景色设置为白色
ctlText.BackColor = vbBlue
ctlText.ForeColor = vbWhite
'使TextBox可见
ctlText.Visible = True

'加入一个CommandButton
Set ctlCommand = Controls.Add("VB.CommandButton", _
"ctlCommand1", Form1)
'设置CommandButton的位置和尺寸
ctlCommand.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
ctlText.Height + 50, 1500, 500
'设置CommandButton的标题
ctlCommand.Caption = "点击"
'使CommandButton可见
ctlCommand.Visible = True

'建立一个删除按钮
Set ctlCommandDel = Controls.Add("VB.CommandButton", _
"ctlCommand2", Form1)
ctlCommandDel.Move (ctlDynamic.Left + ctlDynamic.Width + 50), _
ctlText.Height + 650, 1500, 500
ctlCommandDel.Caption = "删除所有控件"
ctlCommandDel.Visible = True
End Sub
运行上面的程序,可以看到程序在窗口中加入了三个VB标准控件:一个TextBox和两个
CommandButton还加入了一个扩展的ActiveX控件:树形控件。这些控件还可以响应消息,
点击树形控件中的项目或者“点击”按钮就可以在文本框中显示相应的内容。点击“删除
所有控件”按钮就可以删除加入的所有控件了。
通过上面的程序可以看到,通过WithEvents可以定义带事件相应的控件,对于标准的VB
控件(例如CommandButton、TextBox等)可以通过VB.XXX来定义,其中XXX是控件的类的名称
,而对于扩展的ActiveX控件,可以通过VBControlExtender来定义,在装载扩展控件以前,
首先要使用Licenses对象加入控件的许可证信息。
上面的程序在VB6,WIN98中文版下运行通过。

cumtbwxj 2005-08-19
  • 打赏
  • 举报
回复
老兄可不可以给我在这里帖一篇


我在公司只能上CSDN

谢过先
faysky2 2005-08-19
  • 打赏
  • 举报
回复
一些动态添加可响应消息的控件的参考
http://www.applevb.com/art/dyn_control.txt
cumtbwxj 2005-08-17
  • 打赏
  • 举报
回复
沉了


自己顶上来
cumtbwxj 2005-08-16
  • 打赏
  • 举报
回复
自己先顶一下,不能沉下去啊
cumtbwxj 2005-08-16
  • 打赏
  • 举报
回复
zaiding

7,763

社区成员

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

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