我想做一个多格式图片处理控件,外形与picturebox一模一样,差别是picture属性可以输入任何图片格式。
使用时用户可输入任意文件,控件得到文件后进行分类识别,是是jpg、gif、bmp等常规图片就直接显示,不是jpg、gif、bmp等常规图片,则进入另一个处理程序。
问题是这样的:1.自定义控件中用了老鸟提供的代码Public Property Get Picture() As DataObject
Set Picture = Picture1.Picture
End PropertyPublic Property Set Picture(ByVal RHS As DataObject)
Set Picture1.Picture = RHS
End Property
可以实现与picturebox接近的效果。但赋值时必须使用set pic.picture=loadpicture("...")的方法,不能像picturebox那样直接pic.picture=loadpicture("...")。这个有没有办法解决?2.当输入非jpg、gif、bmp图片时报错,文件根本不能加载让控件处理。这个问题如何解决呢?是不是我的解决思路不正确呢?
使用时用户可输入任意文件,控件得到文件后进行分类识别,是是jpg、gif、bmp等常规图片就直接显示,不是jpg、gif、bmp等常规图片,则进入另一个处理程序。
问题是这样的:1.自定义控件中用了老鸟提供的代码Public Property Get Picture() As DataObject
Set Picture = Picture1.Picture
End PropertyPublic Property Set Picture(ByVal RHS As DataObject)
Set Picture1.Picture = RHS
End Property
可以实现与picturebox接近的效果。但赋值时必须使用set pic.picture=loadpicture("...")的方法,不能像picturebox那样直接pic.picture=loadpicture("...")。这个有没有办法解决?2.当输入非jpg、gif、bmp图片时报错,文件根本不能加载让控件处理。这个问题如何解决呢?是不是我的解决思路不正确呢?
解决方案 »
- VB里面那个调用另外一个程序的命令是什么?
- Winsock1.getdate当数据大于8K时如何接收完整
- 200分求教SMTP认证的怪问题,各位大侠们请赐教!(分不够再加)
- 用WebBrowser控件如何实现IE浏览器中的编码菜单的功能?
- treeview如何才能在From_Load时某个节点自动被选中
- 访问mdi窗体
- 如何用ADO打开一个固定格式文本文件?
- 如何在程序最小化时在屏幕右下角出现一下图标?而在任务栏中消失?
- VB和SQL应用问题
- 我在用ado控件绑定一个DTPicker作为日期字段,可我发现当我adodc1.addnew时,选择时间时,总是出现如下对话框:
- 求一段VB只恢复DNS自动获得的代码
- 求助表单中一个问题!!!
Set Picture1.Picture = RHS
End Property
set picc1.picture=loadpicture("c:\1.jpg")
即可,这与picturebox不同,picturebox的加载语句是
picture1.picture=loadpicture("c:\1.jpg")
问题是能做得一样吗?第二个问题更有点意思了,加入异常时跳出并不能解决问题。异常时跳出加在什么地方?我的理解是应该加在控件里,而不是控件外,如果一个控件在使用时必须要求别人加异常时跳出,那是不行的。更何况在控件外也跳不到控件里面的代码去运行。如果加在控件代码中,非常规图片用set picc1.picture的方法根本加不上。
控件中的异常跳出指令本身根本就不会被执行。再说明白一点,我想让这个控件可以加载非常规图片,但用picture属性不能完成这个要求,错误会产生在控件代码的外部,这不是异常时跳出就可以解决的。期待高手指点迷津
格式分析的问题还不急着解决。现在的问题是如何利用picture属性来传递非图片文件给控件,这才是问题的关键点,只要控件能接收到用户传来的文件,其它问题就比较好办了。
这个还是比较简单的,你先读取二进制文件进来就是了...Open src For Binary As #1类似于这样的方法你说的非要set的那个,只要你换成了let属性就是了...<script language='vbs'>
class test
dim dic
public property let A(value)
set dic=value
end property public property get A
set A=dic
end property
end classset dic1=createobject("scripting.dictionary")
set t=new test
t.A=dic1
t.A.add "xxx",123
</script>
既然你的控件属性是 Picture,那么说明你的控件需要的就是一个已载入的图片,既然载入过程在控件外进行,控件内怎么可能实现图片识别。既然要识别,载入需要你自己来来控制,因此应该是一个文件名属性 PictureFileName 而不是图片对象。
你研究一下我的代码就是了....另外,我比较赞同10楼的说法,你的需求跟picturebox不同,你这样的设计是强耦合...根本没考虑为什么微软要那么设计....你实际的要求是要重写一个类似于loadpicture功能的函数....
老兄这句可能是有问题的
public property let A(value)
set dic=value
end property 外面是let A的值,里面是将value set给dic对象,好像运行不了。
<script language='vbs'>
class test
dim dic
public property let A(value)
set dic=value
end property public property get A
set A=dic
end property
end classset dic1=createobject("scripting.dictionary")
set t=new test
t.A=dic1
t.A.add "xxx",123
msgbox t.A.count
</script>你不会测试一下啊.....哎,无语了....
Set dic1 = CreateObject("scripting.dictionary")
Set t = New Test
t.A = dic1
t.A.Add "xxx", 123
MsgBox t.A.Item("xxx")End Sub把一下代码放到一个classmodule里
Dim dic
Public Property Let A(value)
Set dic = value
End Property Public Property Get A()
Set A = dic
End Property你看一下效果,正宗的vb6代码....
不过还是谢谢你的耐心解答。
我知道你的大方向问的是那个 不过你也说了但赋值时必须使用set pic.picture=loadpicture("...")的方法,不能像picturebox那样直接pic.picture=loadpicture("...")。我解答的也是这个....然后你说我的代码错了,那我肯定不能同意的... 这是你的原话问题,我解答的也是我想这个细节我没理解错吧,不过这个都不扯了,只是希望你以后谦虚一点儿,别浪费大家的时间问问题想清楚了问,vb的语法,先好好看看,别急忙说别人的就是错的
哦,原来是这样啊。
如果你能实现自定义图片控件的picture属性不用加set的问题,我马上给你100分。决不食言。
你试过了吗?我试过,不能达到那种效果。而且报错,类型不匹配。
不能不加set给对象赋值。
Set t = New Test
t.A = LoadPicture("D:\picture\20090909\20081002.jpg")
End SubDim dic
Public Property Let A(ByVal value)
Set dic = value
End Property Public Property Get A()
Set A = dic
End Property搞定了....你试试
根本不行,请看图
建议你新自做一个实际的自定义控件,里面只有picturebox一个内容,编程的时候别人调入你做的自定义控件,就像使用picturebox一样能用picture=load("c:\1.jpg")的方式给你的自定义控件内的picture属性赋值就行了。白猫黄猫抓到老鼠就是好猫,你只要能做出来,别人才能相信你是对的,否则说其它的没用。