如何理解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长度宽度高度单位,width,scaleWidth,Height,scaleHeight,scaleMode相关推荐

  1. div高度、宽度100% div width、height 100%

    正像你所知道的那样,设置DIV大小的有两个属性width和height,以前在学习DIV每次给DIV设置100%宽度或高度时都很迷惑,不明确这个100%的宽度(高度)到底有多宽有多高?这个100%是从 ...

  2. div高度、宽度100%|div width、height 100% - div100%

    正像你所知道的那样,设置DIV大小的有两个属性width和height,以前在学习DIV每次给DIV设置100%宽度或高度时都很迷惑,不明确这个100%的宽度(高度)到底有多宽有多高?这个100%是从 ...

  3. textarea文本域宽度和高度(width、height)自动适应变化处理

    textarea通过cols和rows设置宽度和高度:也可以用style来设置width和height,分别介绍: 1. 设置宽度100%,textarea宽度随父元素变化: 2. 设置rows,te ...

  4. html 表格 自动宽度和高度,HTML表格标记教程(3):宽度和高度属性WIDTH、HEIGHT

    框架结构标签 < frameset> 框架允许你在一个浏览器窗口内打开两个乃至多个页面.你可以这样理解,其实就是一个大 一年前网上还找不到关于 inline-block 属性的文章,为了方 ...

  5. textarea文本域宽度和高度(width、height)自己主动适应变化处理

    文章来源:http://www.cnblogs.com/jice/archive/2011/08/07/2130069.html <HTML> <HEAD> <TITLE ...

  6. vb窗体left、top、width、height,scaleleft、scaletop、scalewidth、scaleheith区别。

    在做机房收费系统时,想要在在加载主界面时就同时加载多文档界面窗体,并且和一个子窗体,子窗体看似是嵌套到多文档窗体的效果.这里用到了窗体的几个属性,由于基础不好就复习了. 理解: 在vb中的窗体内部(出 ...

  7. 第二章 网站开发基础之HTML教程 - 三、HTML及网页相关的知识点:img图片标签的宽度属性(width)和高度属性(height)

    (二)img图片标签的宽度属性(width)和高度属性(height) 归纳起来讲,img图片标签的宽度属性(width)和高度属性(height)在指定值时,会有四种情况. 1.通常情况下填写的是: ...

  8. 创建一个Rectangle类。 添加两个属性width、height,分别表示宽度和高度,添加计算矩形的周长和面积的方法。测试输出一个矩形的周长和面积。

    [Java]创建一个Rectangle类 添加两个属性width.height,分别表示宽度和高度,添加计算矩形的周长和面积的方法.测试输出一个矩形的周长和面积. /*作者:龙蝶 *日期:2020年4 ...

  9. php设置文本框高度,怎样让textarea文本域宽度和高度width及height自动适应

    这次给大家带来怎样让textarea文本域宽度和高度width及height自动适应,让textarea文本域宽度和高度width及height自动适应的注意事项有哪些,下面就是实战案例,一起来看一下 ...

  10. VB窗体width、height、scalewidth、scaleheith属性(全网最容易理解)

    width.height表示窗体的实际大小,什么是实际大小,比如现实中一块木板,是多长多宽就是多长多宽,这两个属性就是表示窗体的实际长宽. scalewidth.scaleheith表示的是你认为的大 ...

最新文章

  1. python学习笔记目录
  2. linux 手动解压or增加or更新 jar 包中文件
  3. 2018年超大规模数据中心总数达到430个
  4. vhdl变量赋初值_5.5 C++自动变量
  5. TCP/IP之(四)Delay ack 和 Nagle算法
  6. 在 Swift 语言中更好的处理 JSON 数据:SwiftyJSON
  7. ASP.NET获取IP地址与MAC地址方法
  8. Sharding-JDBC水平分库(水平数据库分片策略配置)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记010
  9. Jmeter之JDBC Request与mysql
  10. 面向对象一些概念简述
  11. js 基础 -- 循环、函数调用 、全局和局部变量、异常捕获、事件
  12. information_schema.profiling学习
  13. flutter html 加载_实操 | 在 Flutter 中创建通信桥
  14. LX04 小米触屏音箱刷机教程
  15. 电脑常用技巧:常用DOS命令大全
  16. 互联网下半场,苏宁“拼购村”如何打造现象级模式
  17. 数据挖掘实战—商品零售购物篮分析
  18. Ubuntu共享文件夹设置
  19. 【微信技术-微信小程序】------- 骨架屏(加载流)配置(skeleton-config)及属性详解 (第三篇)
  20. Python对微信好友进行简单统计分析

热门文章

  1. python凹多边形分割_在Python中OpenCV多边形的凹凸角点
  2. iphone和android照片传输,iphone和安卓手机之间如何传文件图文教程
  3. 在ubuntu系统下下载和卸载skype
  4. 自动驾驶相关功能名词和汽车名词解释
  5. 面试相关-转载-well,yzl——持续更新
  6. ps编辑工具:渐隐/合并拷贝
  7. C#如何在EPPlus中冻结首行,冻结Excel首行
  8. 【移动网络】5GC:5G核心网络的移动性管理(Mobility Management)
  9. box-sizing与盒模型
  10. unifex:C++现代异步模型先导