精华内容
下载资源
问答
  • 关于VB里的ScaleMode问题

    千次阅读 2018-12-07 21:00:30
    我是一个VB初学者,最近苦恼于VB的窗体和控件的ScaleMode问题,VB里默认的ScaleMode是twip,而往往我们希望它是pixel,虽然在属性面板里面能够将ScaleMode改为"3-Pixel",但是我发现在程序中返回某个窗体...

    我是一个VB初学者,最近苦恼于VB的窗体和控件的ScaleMode问题,VB里默认的ScaleMode是twip,而往往我们希望它是pixel,虽然在属性面板里面能够将ScaleMode改为"3-Pixel",但是我发现在程序中返回某个窗体或控件的属性时还是返回为很大的twips值,比如有一个PictureBox控件picMyPic,那么假如在程序中用另一个变量iWidth来接收控件的宽度:iWidth = picMyPic.Width,则它还是返回一个很大的twip值,比如返回6100,而控件的宽度大概只有两百多像素。
    所以请问有没有办法,让它返回一个以像素为单位的数值?twip和pixel之间又是如何转换的?
    设置form的scalemode=3只能使
    picMyPic.scaleWidth为象素
    picMyPic.Width当然为Twip,因为你没有把picMyPic.salemode=3
    ScaleX、ScaleY 方法

    用以将 Form,PictureBox 或 Printer 的宽度或高度值从一种 ScaleMode 属性的度量单位转换到另一种。不支持命名参数。

    语法

    object.ScaleX (width, fromscale, toscale)

    object.ScaleY (height, fromscale, toscale)

    ScaleX 和 ScaleY 方法的语法包含如下部分:

    部分 描述
    object 可选的。一个对象表达式,其值为“应用于”列表中的一个对象。如果省略 object,则带有焦点的 Form 对象缺省为 object。
    width 必需的。为 object 指定被转换的度量单位的数量。
    height 必需的。为 object 指定被转换的度量单位的数量。
    fromscale 可选的。一个常数或数值,按照下列设置中的描述,指定 object 的 width 或 height 从哪一种坐标系统转换。fromscale 可取的数值与 ScaleMode 属性的数值加上 HiMetric 的新数值相同。
    toscale 可选的。一个常数或数值,按照下列“设置值”中的描述,指定 object 的 width 或 height 转换到哪一种坐标系统。toscale 可取的数值与 ScaleMode 属性的数值加上 HiMetric 的新数值相同。

    设置值

    用于 fromscale 和 toscale 设置值有:

    常数 值 描述
    vbUser 0 用户定义:指示 object 的宽度和高度设置为自定义值。
    vbTwips 1 缇(每逻辑英寸 1440 缇;每逻辑厘米 567 缇)。
    vbPoints 2 磅(每逻辑英寸 72 点)。
    vbPixels 3 像素 (显示器或打印机分辨率的最小单位)。
    vbCharacters 4 字符(水平 = 每单位 120 缇,垂直 = 每单位 240 缇)。
    vbInches 5 英寸
    vbMillimeters 6 毫米
    vbCentimeters 7 厘米
    vbHimetric 8 HiMetric。如果省略 fromscale,则 HiMetric 为缺省值。
    vbContainerPosition 9 决定控件位置。
    vbContainerSize 10 决定控件大小。

    说明

    ScaleX 和 ScaleY 方法按 fromscale 指定的度量单位取值(width 或 height),并将它转换为 toscale 指定的度量单位下相应的值。

    也可以结合 PaintPicture 方法使用 ScaleX 和 ScaleY。
    15twip=1pixel
    实际上可以用Screen.TwipsPerPixelX和Screen.TwipsPerPixelY作为系数来转换
    PixelX = TwipX/Screen.TwipsPerPixelX
    PixelY = TwipY/Screen.TwipsPerPixelY

    展开全文
  • 从上边的表格可以看出: ...而UserControl.Extender的Top和Left属性的单位和控件所在容器的ScaleMode相同. 控件内部Mouse事件中的X和Y与ActiveX控件自身的ScaleMode相关. Form的Width和Height总是以Tw


    从上边的表格可以看出:

    ActiveX控件的内部属性中,UserControl的Width和Height总是以Twips为单位的.

    而UserControl.Extender的Top和Left属性的单位和控件所在容器的ScaleMode相同.

    控件内部Mouse事件中的X和Y与ActiveX控件自身的ScaleMode相关.

    Form的Width和Height总是以Twips为单位.

    Form内部Mouse事件中的X和Y与Form的ScaleMode相关.


    注:

    内部属性值表示在设计控件时的内部代码获取或者设置的控件属性值。

    外部属性值表示在使用控件的窗体代码中获取或者设置的控件属性值。

    自身ScaleMode表示在设计控件时控件的ScaleMode属性。

    容器ScaleMode表示在使用控件的窗体中,存放控件的容器的ScaleMode。

    展开全文
  • 如何理解VB窗体中的scale类属性及width height属性之间的关系  VB中的SCALEHIEGT,SCALEWIDTH,与窗体中的WIDTH,HEIGHT的区别及关系是许多VB初学者难以理解的。本人在学习DELPHI的过程中也曾经对这类似的概论搞不...

    如何理解VB窗体中的scale类属性及width height属性之间的关系
        VB中的SCALEHIEGT,SCALEWIDTH,与窗体中的WIDTH,HEIGHT的区别及关系是许多VB初学者难以理解的。本人在学习DELPHI的过程中也曾经对这类似的概论搞不清楚,但通过这次对VB中这些类似概念的学习后,可以说是已掌握了这种概念及原理了。现在回头看DELPHI的相关知识点有豁然开朗的感觉,VB的确是可视化编程入门的最佳语言。

     

    问题的提出
        在VB中默认的度量单位是缇,这是一种跟屏幕分辨率无关的一种度量单位,主要是用在打印机上的,大概是1缇=1/20磅。其它的一些单位请查看MSDN。使用缇就会给我们带来一些麻烦,因为我们都习惯于使用像素来度量窗体及控件的大小,并使用显示器当前的分辨率作参考物来确定窗体的适当大小,当我们想动态地改变窗体的大小的时候我们该如何确定正确的数值呢,想动态地移动窗体中的控件,该如何确定控件的位置呢?同时,在VB的窗体中同时存在着这样的一些属性:scaleWidth,scaleHeight,scaleLeft,scaleTop,scaleMode,Width,Height,他们之间是怎样的关系,是如何影响窗体中控件的大小的呢?通过下面的解说,我们就能解决上面所提到的问题。

        其实在VB中的窗体内部(除去窗体边框及标标题栏的区域)有一个类似于画布的东西,它始终是占满整个窗体区域的,他有一个坐标系统,默认的是原点就是窗体的左上角,坐标是0,0 然后往左伸延的就是X轴,往下就是Y轴了,但是这个坐标的单位默认就是缇,当然我们是可以修改成其它类型的单位,要修改度量单位的话就要设定窗体的scaleMode属性。如:设为像素scaleMode=3 。这个坐标系统是用来确定要在什么位置上通过PRINT等方法来作图的,以及确定在这个容器中的什么位置上放置控件,以及跟窗体宽和高的比例情况。
    VB使用的度量单位共有8种。系统默认的度量单位是缇(Twip,1厘米=576缇),用户可以根据需要,选择系统提供的其它标准度量单位。度量单位的设置是由窗体或图片框的ScaleMode属性定义的。其属性值及对应的度量单位及用法见表9-1-1。
    表9-1-1 VB的度量单位
    属性值 字符常量 说明
    0 VbUser 用户自定义类型。若用户使用ScaleWidth、ScaleHeight、ScaleTop、ScaleLeft设置坐标系统,VB会自动设置ScaleMode为0
    1 VbTwips 默认值,以Twip为单位。1英寸=144 Twip
    2 VbPoints 以磅(Point)为单位,1英寸=72磅
    3 VbPixels 像素(Pixel),即显示器分辨率的最小单位。
    4 VbCharacters 字符, 1个字符宽度=120 Twip,1个字符高度=240 Twip
    5 VbInches 英寸
    6 VbMillimeters 毫米
    7 VbCentimeters 厘米
    说明:
    ⑴ 上表中,除了0和3外,其余规格均可用于打印机,所使用的单位长度就是打印机上输出的长度。
    ⑵ ScaleMode属性可以在设计阶段在属性窗口设置,也可以通过程序代码设置。例如:
    Form1.ScaleMode=5      ‘窗体坐标系统以英寸为单位
    Picture1.ScaleMode=7     ‘图片框坐标系统以厘米为单位

     

    预备知识
        其实在VB中的窗体内部(除去窗体边框及标标题栏的区域)有一个类似于画布的东西,它始终是占满整个窗体区域的,他有一个坐标系统,默认的是原点就是窗体的左上角,坐标是0,0 然后往左伸延的就是X轴,往下就是Y轴了,但是这个坐标的单位默认就是缇,当然我们是可以修改成其它类型的单位,要修改度量单位的话就要设定窗体的scaleMode属性。如:设为像素scaleMode=3。这个坐标系统是用来确定要在什么位置上通过PRINT等方法来作图的,以及确定在这个容器中的什么位置上放置控件,以及跟窗体宽和高的比例情况。

    scale类属性的作用
        清楚了窗体有这样一个画布及它的坐标后,我们再来看看有关这个坐标系统的属性。这些scale类型属性主要是用来设定画布坐标系统的数值跟窗体的高宽数值比例情况的。具体是怎样的关系及怎样影响在下面有论说。scaleLeft,scaleTop这两个属性是用来设定这个坐标系统的原点位置的,系统默认的scaleLeft,scaleTop是0,也就是说原点在窗体的左上角了,坐标系统只有大于0的那一块坐标,这样的好处是可以很直观地使用这个坐标系统因为参照点是0且是从窗体的左上角开始的。如果把这两个值设定为大于0的话,画布的坐标就有正负区域了,这样就更像我们数学上的坐标系统了。scaleMode用于设定坐标轴的度量单位。


    width,Height的作用
        这两个属性是用于设定窗体的宽和高,他们的单位始终是缇,会直接影响到画布的大小及坐标的比例情况,要动态设置窗体的大小也只能通过这两个属性来设定。


    这些属性的关系
        默认情况下,窗体的宽和高是跟窗体上的画布的宽和高是一样大小的,且画布的坐标原点就是窗体的左上角。也就是说,画布的宽和窗体的宽是1:1的关系,也就是说画布的1缇宽度相当于窗体的1缇宽度。那么当我们在窗体上用print.circle (500,500),200来画一个圆的时候,原点就是在距窗体顶部500个缇,左边500个缇,半径是200个缇。现在我们尝试把窗体上的scaleHeight,scaleWidth修改为原来的1/2,现在也是用同样的方法来画一个圆,对比这一下现在的圆跟修改前的圆,可以发现当前圆的半径比原来的扩大了一倍,而且圆心的位置也改变了。同样的参数为什么会有不一要结果呢?这就是scaleHeight scaleWidth起的作用,假如窗体原本的width是1000缇,scaleWidth也是1000缇,也就是说他们是1:1的关系,我们用 print.circle (500,500),200在画布上画出来的圆所用的尺寸单位是1:1的,明确一点说就是在画布宽上所画的一缇就是窗体宽度的一缇,但修改了scaleWidth后,比如说是原来值的一半,情况就不一样了,画布跟窗体的比例就变成是1:2了,在画布看来,要用原来数值的一半来表示窗体的宽,那么只能是1个缇来表示窗体width的两个缇了,这样的话如果还是用原来参数来使用print方法来作圆的话,出来的圆就是原来的两倍了。情况就有点像要在一张白张上把整个中国地图画出来一样,张上的一毫米就相当于实际十万八千公里了。这就是scale属性跟窗体width,height之间或关系了。


    缇跟像素的关系
    我们可以通过VB的系统对像screen的twipPerPixersX及twipPerPixersX属性来返回当前分辨率下每一像素所占缇,默认情况下应该是15。但这个值是不是固定的呢?答案是不的,屏幕也是一个画布,同时也像窗体一样有高和宽,要返回15的前提条件是scaleWidth跟width是1:1,scaleHeight跟height也是1:1。
    总结
        窗体上有一个画布,它的坐标系统默认是跟窗体一样的,但可以通过scale类属性可以去修改。通过这些scale类属性我们可以开发出一种具有图形放大缩小功能的程序,只要把作图的方法中参数保持不变,动态改变scale属性就可以达到目的,这种关系是成反比的,也就是说参数不变,scale减小的话图形就放大。这类程序的例子就像是股票分析软件中的成交量图。
        另:DELPHI也有类似的画布机制。原理是基本上一致的。

    展开全文
  • VB 知识点总结

    2016-03-07 17:59:32
    VB长度宽度高度单位,width,scaleWidth,Height,scaleHeight,scaleMode
    展开全文
  • vb api 曲线

    2012-11-16 11:03:18
    一款好用的VB曲线,各种模型均已内置,Declare Function BitBlt Lib "GDI32" (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 ...
  • Printer.ScaleMode = 6 Printer.FontBold = False Printer.ScaleLeft = -20 Printer.ScaleTop = -25 Printer.ScaleWidth = 210 Printer.ScaleHeight = 297 usewidth = Printer.ScaleWidth - 40 ...
  • VB Printer对象

    千次阅读 2013-03-05 17:12:18
    VB Printer对象  2011-04-29 22:54:37| 分类: 编程设计 |字号 订阅 ===========Printer 的属性========== ■■■一般属性,与窗体属性同 ▲hDC ▲DrawMode、 DrawStyle、 DrawWidth ▲...
  • 一款个性的表格效果,Vb源代码,简单有效的例子,请仔细看一下Picture1的ScaleMode属性的用法和定义,对学习Vb很有帮助的。
  • VB ListView 隔行背景

    千次阅读 2013-03-25 13:44:41
    Private Sub SetListViewColor(Lv As ListView, pic As PictureBox, LvCount As Long) Dim i As Integer pic.BackColor = Lv.BackColor Lv.Parent.ScaleMode = vbTwips ... pic.ScaleMode = vbTwips
  •  .ScaleMode=3  .BorderStyle=0  DibGet .hdc,0,0,.scalewidth,.scaleheight End With CopyData InPutHei ,InPutWid picture2.AutoRedraw=True DibPut picture2.hdc picture2.refresh end sub
  • 曾经编写一个软件需要将程序图标放在工具栏上,即托盘图标,查过一些资料,这里备份...这是我在网上找的一个最精简的VB实现托盘图标的单个程序,不写模块,不用控件。 有必要时可把窗体的 ScaleMode属性设为 3 - Pixel
  • vb 整图复制

    2012-01-06 11:02:37
    form1 Private Sub Command_Click() With Picture1 ....ScaleMode = 3 .BorderStyle = 0 DibGet .hdc, 0, 0, .ScaleWidth, .ScaleHeight End With With Picture2 .AutoRedra
  • vb 镜像处理 Dim c As Long, x As Integer, y As Integer Private Sub command1_Click() Picture2.Cls For i = 0 To Picture1.ScaleWidth - 1 For j = 0 To Picture1.ScaleHeight - 1 c = Picture1.Point(i, j) x = ...
  • Vb中窗体自定义坐标

    千次阅读 2010-05-21 20:36:00
    开始使用vb的时候喜欢用手画出那个控件的位置.然后一个一个的拖动,一点一点的移动.直到感觉满意了为止.如果是控件多了这个就很麻烦了一不小心可能会将谋个控件拖到一边去所以,我们在以后的作品中尽量使用代码来定义...
  • VB6.0制做ActiveX控件,当控件的BackStyle属性值设为1-不透明时,可以在控件上进行绘制,例如: Private Sub Command1_Click() UserControl.ScaleMode = 3 UserControl.Circle (100, 100), 50 End Sub 这时会...
  • VB通过调用DLL实现图片实时旋转,可360度旋转,掩码色改变,甚至可以调整图片透明度、亮度、色相、饱和度、大小缩放等图片常用的值。程序很好的解决了GetDC引起内存泄露问题,兼容Win98至Win7环境。Dll文件由VC生成...
  • VB中Form的Height如何计算

    千次阅读 2011-08-19 16:59:27
    今天写了一个vb的软件,用于进行图片的裁剪。 因为想在load图片的时候进行自动的图像大小匹配,所以用到了Form1.Height的属性。 但是在应用中发现了一点问题: Form的scalemode我选择了Pixel,所以对于Twip有一个...
  • vb中如何让窗体大小等于加载的图片大小 Private Sub Form_Load() Me.ScaleMode = 1 Me.Width = Me.Picture.Width / 26.45836 * 15 + Me.Width - Me.ScaleWidth Me.Height = Me.Picture.Height / 26.45836 * 15 + Me...
  • VB6编程:DirectX 2D图形学习日志27图形引擎分析 一、初始化 1.设置全屏分辨率: 源码是800600,我修改成1024768 Fullscreen_Width = 1024 Fullscreen_Height = 768 With frmMain .Caption = "DirectX教程19:...
  • VB打印(1)

    千次阅读 2009-11-04 21:45:00
    Printer.Height=10*567 Printer.Width=5*567 Printer.ScaleWidth = 210 Printer.ScaleHeight = 297 Printer.ScaleMode = 6 设置打印的单位 Printer.PaperSize = vbPRPSA4 定义纸张大小为A4 Printer.FontSize = 11 ...
  • Me.ScaleMode = 3 Me.Caption = "曲柄滑块机构的演示" Me.Width = 5000 Me.Height = 3500 Picture1.ScaleMode = 3 Picture1.AutoRedraw = True Picture1.Move 0, 0, Me.ScaleWidth, 150 Command1.Caption = ...
  • 尺寸: 直接设置打印机 Height 和 Width 属性,会自动地将 PaperSize 设置为vbPRPSUser。...Printer.Height=10*567 Printer.Width=5*567 Printer.ScaleWidth=210 Printer.ScaleHeight=297 Printer.ScaleMode=6'设置...
  • VB中不规则图形热点的实现

    千次阅读 2006-04-02 15:28:00
    所谓图形热点就是指定图形或图像上的某部分区域,当鼠标在这部分区域上单击或... 首先在VB5中新建一"标准EXE工程",设置窗体Form1的ScaleMode属性为3。在窗体代码的声明部分定义如下三个API函数: Private Type POIN

空空如也

空空如也

1 2 3
收藏数 58
精华内容 23
关键字:

scalemodevb