Me.PaintPicture Image.Picture, 0, 0, Me.ScaleWidth, Me.ScaleHeight

解决方案 »

  1.   

    我在Form_Load()输入上面的代码,出现438错误
    "Object doesn't support this property or method"
    这怎么回事?
      

  2.   

    Image是一个Image控件!比如你把背景图放在Image1中,就把它改成“Me.PaintPicture Image1.Picture, 0, 0, Me.ScaleWidth, Me.ScaleHeight”同时把这段代码放入窗体的“Paint”事件中
      

  3.   

    '在窗体加一个image控件,试试以下代码
    Private Sub Form_Load()
      Me.Image1.Visible = False
      Me.Image1.Picture = LoadPicture("c:\windows\clouds.bmp")
      Me.AutoRedraw = True
      Me.PaintPicture Image1.Picture, 0, 0, Me.ScaleWidth, Me.ScaleHeight
    End Sub以上代码在你的窗口长宽比例与原图像接近时效果还可以,如果你的窗体长宽比例与原图像相差较大使,显示的图像会变形。由于你没有详细说明有什么进一步的要求,如是否保持图形比例,是否居中显示等等。暂时贴这点代码。顺便贴一段MSDN的文字供你参考
    PaintPicture 方法
          用以在 Form, PictureBox 或 Printer 上绘制图形文件(.bmp、.wmf、.emf、.cur、.ico或 .dib)的内容。不支持命名参数。语法object.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2, opcodePaintPicture 方法的语法包含下列部分:部分 描述 
    object 可选的。一个对象表达式,其值为“应用于”列表中的一个对象。如果省略 object,带有焦点的 Form 对象缺省为 object。 
    Picture 必需的。要绘制到 object 上的图形源。Form 或 PictureBox 必须是 Picture 属性。 
    x1, y1 必需的。均为单精度值,指定在 object 上绘制 picture 的目标坐标(x-轴和y-轴)。object 的 ScaleMode 属性决定使用的度量单位。  
    Width1 可选的。单精度值,指示 picture 的目标宽度。object 的 ScaleMode 属性决定使用的度量单位。如果目标宽度比源宽度 (width2) 大或小,将适当地拉伸或压缩 picture。如果该参数省略,则使用源宽度。 
    Height1 可选的。 单精度值,指示 picture 的目标高度。object 的 ScaleMode 属性决定使用的度量单位。如果目标高度比源高度 (height2) 大或小,将适当地拉伸或压缩 picture。如果该参数省略,则使用源高度。 
    x2, y2 可选的。均为单精度值,指示 picture 内剪贴区的坐标(x-轴和y-轴)。object 的 ScaleMode 属性决定使用的度量单位。如果该参数省略,则缺省为 0。 
    Width2 可选的。单精度值,指示 picture 内剪贴区的源宽度。object 的 ScaleMode 属性决定使用的度量单位。如果该参数省略,则使用整个源宽度。 
    Height2 可选的。 单精度值,指示 picture 内剪贴区的源高度。object 的 ScaleMode 属性决定使用的度量单位。如果该参数省略,则使用整个源高度。 
    Opcode 可选的。是长型值或仅由位图使用的代码。它用来定义在将 pictur 绘制到 object 上时对 picture 执行的位操作(例如, vbMergeCopy 或 vbSrcAnd 操作符)。关于位操作符常数的完整列表,请参阅 Visual Basic Help 文件中的 RasterOp Constants 主题。 
    在使用opcode时有一些限制。例如,如果资源是图标或图元文件,则只能使用 vbSrcCopy,而不能使用其他的opcode;并且,与图案 (或 SDK 术语中的"画笔"),如 MERGECOPY、 PATCOPY、 PATPAINT 和 PATINVERT,相交互的opcode实际上是同目标的 FillStyle 属性交互。注意   Opcode 用于将按位操作传递到位图。当传递其他图象类型时将一个值给该参数会造成“无效过程调用或参数”错误。这是设计的原因。要避免这个错误,对于除位图外的图象,将 Opcode 参数置为空。
     
    说明通过使用负的目标高度值 (height1) 和 / 或目标宽度值 (width1) ,可以水平或垂直翻转位图。 可以省略任何多个可选的尾部的参数 。如果省略了一个或多个可选尾部参数,则不能在指定的最后一个参数后面使用逗号。如果想指定某个可选参数,则必须先指定语法中出现在该参数前面的全部参数。注意,在将一个.Bmp加载入 PictureBox 控件和使用 Windows API 函数 BitBlt() 添加图片之间有一点不同。当您对一个图象使用 BitBlt() 时,PictureBox 控件不知道象您使用 LoadPicture方法那样去调整大小。将 ScaleWidth 和 ScaleHeight 属性设置为图象的大小也不起作用。如果您想在使用 BitBlt 之后用 PictureBox 调整新图片的大小,必须用代码手工做,转换单位并处理边框,下面是如何这样做的一个简单示例:Sub ResizePictureBoxToImage(pic as PictureBox, twipWd _
      as Integer, twipHt as Integer)
     ' 该代码假设所有的单位都为缇。如果
     ' 不是,必须在调用该例程之前,转换为缇。
     ' 这里也假设图象显示在0,0处。
     Dim BorderHt as Integer, BorderWd as Integer
     BorderWd = Pic.Width - Pic.ScaleWidth
     BorderHt = Pic.Height - Pic.ScaleHeight
     pic.Move pic.Left, pic.Top, twipWd + BorderWd, _
       twipHt + BorderHt
    End Sub
      

  4.   

    我有个方法,请大家比较一下:
    用Image控件,设置Strecth属性为true;
    Image1.Picture = LoadPicture("c:\windows\clouds.bmp");
    最后在form_resize事件中,随时调整image1控件的大小
    with image1
        .left=0
        .top=0
        .width=me.scalewidth
        .height=me.scaleheight
    end with
      

  5.   

    谢谢各位的热情解答,我会给大家斟酌加分的,但我要说明的是,由于我做的这个窗体上面要放很多控件,例如RichTextBox、Label、CommandButton等控件,嫌放Image控件作背景麻烦,直接在Form窗体的属性Picture中加入指定的图片文件,让Form的背景显示图片,于是就出现了只能显示部分图片的问题,所以才来发这个帖子,但大家说的都是Image控件的,而不是Form本身Picture属性的,谁能给予解答?
      

  6.   

    但我要显示的是.jpg格式的图片,不是矢量图
      

  7.   

    在窗体设计时直接在Form窗体的属性Picture中加入指定的图片文件后,该图片已成为窗体的一部分。不能变了,这从窗体文件大小的变化可以看出。所以用窗体的您的Picture属性无法实现你要的功能。其实您用image控件来实现不会造成窗体布局时的困难。您可以把image1调得很小,放置在某个角落即可,如果对背景图的输出位置有要求,可以通过代码实现。
      

  8.   

    回复人: zyl910(910:分儿,我来了!) (  ) 信誉:110  2002-5-3 8:40:19  得分:0  
     
     
      Image是一个Image控件!比如你把背景图放在Image1中,就把它改成“Me.PaintPicture Image1.Picture, 0, 0, Me.ScaleWidth, Me.ScaleHeight”同时把这段代码放入窗体的“Paint”事件中
     
    ====================================================================
    这就是代码!
      

  9.   

    !!! 关注Form的显示背景图片而不把别的控件遮挡住!!!
      

  10.   

    这儿用个最简单的办法!就是将picture的属性中的Resize设为True/Enable就行了!我这台机子上没VB,所以是印象说的哈!
    反正我也遇到了你这样的问题,我解决了的!
      

  11.   

    picture1中储存背景图片,绝对搞定Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As LongPrivate Sub Form_Load()
    Me.AutoRedraw = True
    End SubPrivate Sub Form_Resize()
    StretchBlt Me.hdc, 0, 0, Me.ScaleWidth / Screen.TwipsPerPixelX, Me.ScaleHeight / Screen.TwipsPerPixelY, Picture1.hdc, 0, 0, Picture1.Width / Screen.TwipsPerPixelX, Picture1.Height / Screen.TwipsPerPixelY, vbSrcCopy
    Me.Refresh
    End Sub