在图像框内已有缩略图,要求用鼠标单击此图,会弹出一放大的该图,并由鼠标的滚轮可随意放大与缩小该图.哪位大侠帮帮忙!
Private Sub Image3_Click()
(这里要用什么语句?)
End Sub

解决方案 »

  1.   

    给你提供一点思路:鼠标点击Image3时,根据坐标,计算出点击的是哪个缩略图,然后在新开的窗口中用一个image加载对应的图片文件,用一个picturebox作为容器,拦截鼠标滚轮事件,用代码控制image在picturebox中的缩放。
    代码太多了,而且也不知道你的缩略图是如何做的,无法给你写具体代码。
      

  2.   

    请happy_sea能说得详细一些好吗?
    图片是.jpg格式,是与窗体的图像框放在同一个层目录下,导入图像是用图像框的属性picture,
    现在的问题有两个:
    1、点击“缩略图”打开一个新窗体的命令语句是什么?
    2、打开新窗体后如何栏截鼠标滚轮事件?(如果打开的新窗体也用“图像框”并由属性pecture导入该图片可以吗?)
    “用一个picturebox作为容器,拦截鼠标滚轮事件,用代码控制image在picturebox中的缩放。”能说得详细一些吗?
      

  3.   

    我不知道你的缩略图是怎么做出来的,但是你必须能够根据指定的坐标计算出对应的是哪个缩略图,以及这个缩略图中的图片完整路径文件名,比如在Image3_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)事件中,你根据X和Y值实时计算出鼠标正在哪个缩略图上移动,在Image3_Click()事件中才知道应该放大显示哪个图片,如果连这个也做不到,那下面的就无法进行了。
      

  4.   

    “点击“缩略图”打开一个新窗体的命令语句是什么?
    从这个问题来看,楼主完成这个程序的困难不小。
    Private Sub Image3_Click()
      form2.show ,me
    End Sub
    然后在form2中完成图片的加载和缩放
      

  5.   

    打开新窗体后如何栏截鼠标滚轮事件?模块中:Public Const GWL_WNDPROC = (-4)
    Public Const WM_COMMAND = &H111
    Public Const WM_MBUTTONDOWN = &H207
    Public Const WM_MBUTTONUP = &H208
    Public Const WM_MOUSEWHEEL = &H20A
    Public Oldwinproc   As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, _
     ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
     
    Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
    ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
     
    Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, _
     ByVal nIndex As Long) As Long
     
    Public Function FlexScroll(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
         Select Case wMsg
             Case WM_MOUSEWHEEL
              Select Case wParam
                  Case -7864320
                      '此处添加滚轮向下滚动时的代码
                  Case 7864320
                      '此处添加滚轮向上滚动时的代码
              End Select
          End Select
     FlexScroll = CallWindowProc(Oldwinproc, hWnd, wMsg, wParam, lParam)
    End Function
    窗体中:
        Oldwinproc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
        SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf FlexScroll
      

  6.   

    不要计算什么坐标。用一组 PictureBox 或 Image 控件数组放缩略图好了。它们也可以都放在同一个作为容器的 PictureBox 中,你只需根据事件中返回的 Index 就可以判断序号。
      

  7.   

    我不知道你的缩略图是怎么做出来的,但是你必须能够根据指定的坐标计算出对应的是哪个缩略图
    *************************
    偶的图片是点击VB6工具栏上的图像框拖出来的(Image1等),在form1窗体上共有Image1-Image15个图像框,图片是由图像框的属性picture完成(由它提供的对话框,出现WINDOWS的资源管理器,找到图片位置,直接将图片导入,15个图片都是这样方便地导入,然后再选该图像框的属性stretch的true就完成了缩略图,)所以也不知其坐标位置如何计算?
    Private Sub Image3_Click()
      form2.show ,me
    End Sub
    按上述命令无法打开"form2"窗体(以前也试过show,不行,这次多了,me也不行,不知何故?)
    偶的form2与原窗体是在一个目录下,制作过程是:在"工程1"的树枝目录中,右击鼠标弹出菜单选添加/添加窗体,完成form2制作(是这样吗?)
    然后再在form2制作图像框Image1,并导入图片的原图.
    希望先解决第一个问题,打开新窗口
    关于打开新窗体后如何栏截鼠标滚轮事件?还无法进行.
      

  8.   

    我看到你的Image3_Click()这句,连控件数组都没用,还以为你直接在image3中画的缩略图呢,呵呵。
    既然是多个image,那就每个image对应一个图片文件了,还计算什么坐标啊,建议你还是用个image数组吧,可以省很多事的。
      

  9.   

    of123() 提出:
    不要计算什么坐标。用一组 PictureBox 或 Image 控件数组放缩略图好了。它们也可以都放在同一个作为容器的 PictureBox 中,你只需根据事件中返回的 Index 就可以判断序号。
    ------------------------------------------------
    请问PictureBox 或 Image 控件要从何处添加?
    能详细一些介绍操作过程吗?先谢了.
      

  10.   

    我以前是这样实现的,用一个不可见的picturebox加载图片,它每加载一张图,就把里面的图用paintpicture语句打印到另一组image(i)控件数组上,用数组有一个好处,就是可以随图片的数量增减控件的数量,但用完以后,一定要释放该数组控件。
    下面的代码是程序里面创建缩略图初始化image()数组用的,可能对你有些帮助
    Private Sub CreatThumbs()
    Dim lIdx As Long
    Dim sText As String, i As Integer
    Dim ImgScopeW As Single, ImgScopeH As Single
    ...
    Imgpaint(0).Picture = LoadPicture
    Imgpaint(0).Visible = False
    ...
    If Imgpaint.Count > 1 Then
    For i = 1 To Imgpaint.Count - 1
    Unload Imgpaint(i)
    Next
    End If
    ...
    Imgpaint(0).Cls
    For lIdx = 0 To filHidden.ListCount - 1
    Load Imgpaint(lIdx)
    Next lIdx
    ...
    DoEvents
    ...
    For lIdx = 0 To filHidden.ListCount - 1
    Imgload.Picture = LoadPicture()
    Imgload.Picture = LoadPicture(Apath & "\" & filHidden.List(lIdx))
    ImgScopeW = Imgpaint(lIdx).ScaleWidth - 8
    ImgScopeH = Imgpaint(lIdx).ScaleHeight - 16
    PicPainter Imgpaint(lIdx), Imgload, ImgScopeW, ImgScopeH
    ...
    Imgpaint(lIdx).Visible = True
    ...
    DoEvents
    Next lIdx
    ...
    Set Imgload.Picture = LoadPicture()
    ...
    If filHidden.ListCount > 0 Then    '再次判断有图片,以防DoEvents后出错
    Imgpaint_Click 0
    End If
    End Sub
      

  11.   

    双击缩略图后进入全屏视图,这是另一个窗体,ImgThumb是一个picturebox
    1.计算ImgThumb在缩放后,width和height的大小
    2.ImgThumb上显示出图片,注意width(scalewidth),height(scaleheight),窗体的scalemode
    ImgThumb.Cls 
    ImgThumb.PaintPicture Imgload.Picture, _
    0, 0, ImgThumb.ScaleWidth, ImgThumb.ScaleHeight, _
    0, 0, Imgload.ScaleWidth, Imgload.ScaleHeight  '用paintpicture显示图
    3.调整ImgThumb在屏幕中的位置,超出屏幕和缩回屏幕时的处理
    4.鼠标按下后,可以拖曳图片
      

  12.   

    用paintpicture显示图,可以在拖曳大图片时,更加流畅一些。当时好几个问题没有解决,其中有鼠标控制缩放图片,还有缩放图的一部分,这样就可以通过只放大被屏幕截到的那部分图,以更快的显示出较大的图片。 看到HappySea的文章,很有收获!前面就是我的思路和做法,请大家不吝赐教!
      

  13.   

    感谢上面各位的指点,现在本人已经完成了点击(或双击)在form1“缩略图”(Image3)弹出放大的原图(并未用到PictureBox 或 Image 控件),代码如下:
    Private Sub Image3_Click()
      Load form2
      form2.Show
    End Sub
    (即只要在form2中制作一个放有放大的原图的图像框即可。)
    但第二个问题还是没有解决,即打开新窗体后如何栏截鼠标滚轮事件?
    按happy_sea指点的方法未能实现新窗体上的图片随滚轮操作放大和缩小。
    希望能进一步指明如何使用上面提出的代码?应该将它们放到何位置?