当前位置:编程学习 > VB >>

VB问题啊!急

VB中,一个图片!(这个图片是一个长的!一幅图里面有3个图像)
图像一:A
图像二:B
图像三:C

|A B C |

比如上面框框那样!他是一副图片!
怎么样才能让这个图片分组显示捏?

比如:
初始状态为A
焦点状态为B
点击状态为C

怎么样才能实现呢?
补充:一张图片,怎么让他分别显示不同的位置
		
答案:
Option Explicit
'建立一个image控件,一个picture空间,image1放入你需要的图片,三幅横着合并为一副的,设置好picture1的位置,执行以下代码即可实现你需要的功能
Private Sub Form_Load()
Image1.Visible = False '隐藏image1,因为它只是用来存放图片的,并不现实
Picture1.Width = Image1.Width / 3 '我不知道你图片的大小,所以设置为三幅图中间一副的大小
Picture1.Height = Image1.Height
Picture1.AutoRedraw = True '这个时侯窗体还没有显示,作图并看不出来,所以需要设置此属性
Picture1.BorderStyle = 0 '将picture1边框去掉
Picture1.PaintPicture Image1.Picture, 0, 0, Picture1.Width, Picture1.Height, 0, 0, Picture1.Width, Picture1.Height, vbSrcCopy '将image1中第一幅图片复制到picture1中,其实就是图片a位置的图片了
Picture1.Tag = 0 'tag属性作为有没有作图的标志,因为MouseMove事件会不断地触发,如果没有判断,将会出现一直作图导致的闪烁,也浪费系统资源
Picture1.AutoRedraw = False '不用解释了,图做完了,自然要恢复了,不然也会浪费系统资源的
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Picture1.Tag <> 0 Then '不是初始状态,则作图
Picture1.PaintPicture Image1.Picture, 0, 0, Picture1.Width, Picture1.Height, 0, 0, Picture1.Width, Picture1.Height, vbSrcCopy '同load中一样,初始状态的图片
Picture1.Tag = 0
End If
End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Picture1.Tag <> 2 Then '按下状态有没有作图
Picture1.PaintPicture Image1.Picture, 0, 0, Picture1.Width, Picture1.Height, Picture1.Width * 2, 0, Picture1.Width, Picture1.Height, vbSrcCopy '第三幅图片的拷贝,Picture1.Width * 2参数是确定源图片的x坐标的,这个程序的关键在于这个参数。
Picture1.Tag = 2
End If
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Picture1.Tag <> 1 Then '焦点状态有没有作图
Picture1.PaintPicture Image1.Picture, 0, 0, Picture1.Width, Picture1.Height, Picture1.Width, 0, Picture1.Width, Picture1.Height, vbSrcCopy '同上,x坐标换为 Picture1.Width了
Picture1.Tag = 1
End If
End Sub
'另附PaintPicture方法参数介绍:
基本语法:
object.PaintPicture Picture, X1, Y1, width1, height1, X2, Y2, width2, height2, opcode

object,哪个控件是用该方法,vb里面一般是form和picture两个控件
Picture,图片源,就是存储图片的控件,这个例子用的是image1
X1, Y1, width1, height1, 分别代表目的图片的左上角坐标及宽度高度,在该例中是picture的大小
X2, Y2, width2, height2, 分别代表源图片的坐标即宽高度,该例中主要是通过x2参数来调节从image1中的哪个位置复制图片
opcode,作图类型,该例中用的是vbsrccopy,即拷贝,不进行任何运算的拷贝
相信你看了之后,还会有其他的发现,这个语句作用挺大的,可以进行好多图片效果的变换,比如百叶窗,图片的缩放等等
不了解的话,加QQ:3745350,你的界面处理方法有点麻烦,可以讨论一下,不在线可以留言
哦 这个可以用的一个API函数 BITBLT 
格式是这样的 bitblt 要显示地方的hdc句柄,输出的X轴,输出的y轴,宽度,高度,然后是要截取图形地方的hdc句柄,截取的X轴,截取的Y轴,黏贴的方式
比如说你的那张图里面的ABC分别高度和宽度是100*100 在图里面是横这放的那图的大小是100*300
这里你放4个picture控件 下面我把picture控件简写成p1,p2,p3,p4
你先在p1里载入你的那个100*300的图 注意这里要让p1把图片全部显示出来
然后用BITBLT
BitBlt P2.hDC, 0, 0, 100, 100, P1.hDC, 0, 0, vbSrcCopy 这里vbSrcCopy表示直接拷贝
BitBlt P3.hDC, 0, 0, 100, 100, P1.hDC, 0, 100, vbSrcCopy
BitBlt P4.hDC, 0, 0, 100, 100, P1.hDC, 0, 200, vbSrcCopy
这样就可以了
下面是bitblt 的声明
Public Declare Function BitBlt Lib "gdi32.dll" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
不明白你的意思
答案补充
想实现分组显示,你可以先截图 在新建三个picture  把图片分别到入进去
答案补充
可以用current语句
答案补充
比如picture1.currentx=800  '意思就是将picture设置到横坐标为800的位置
picture1.currentY=1000 '意思就是将picture设置到Y坐标为1000的位置
根据X与Y坐标的交叉处 得出picture图片
分离  载入为一张 focus焦点落入为一张  click 为一张   可用PICTUREBOX 或者 IMAGE来实现
在flash里很容易实现这样的效果,你可以在falsh里做下,比较简单。

上一个:vb有多少排序法?
下一个:用VB编写程序

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,