如何理解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等方法来作图的,以及确定在这个容器中的什么位置上放置控件,以及跟窗体宽和高的比例情况。

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,现在也是用同样的方法来画一个圆,对比这一下现在的圆跟修改前的圆,可以发现当前圆的半径比原来的扩大了一倍,而且圆心的位置也改变了。同样的参数为什么会有不一要结果呢?这就是scaleHeigh 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减小的话图形就放大。这类程序的例子就像是分析软件中的成交量图。

如何理解VB窗体中的scale类属性及width height属性之间的关系的更多相关文章

  1. 只能从脚本中调用在类定义上有[ScriptService]属性的Web服务问题的解决方案

    ajax调用webservice中的接口时, 会出现[只能从脚本中调用在类定义上有[ScriptService]属性的...]的异常. 这是因为, 在.net3.5中, 访问web服务, 要对web服 ...

  2. javascript中函数声明、变量声明以及变量赋值之间的关系与影响

    javascript中函数声明.变量声明以及变量赋值之间的关系与影响 函数声明.变量声明以及变量赋值之间有以下几点共识: 1.所有的全局变量都是window的属性 2.函数声明被提升到范围作用域的顶端 ...

  3. 每天进步一点点——Linux中的文件描写叙述符与打开文件之间的关系

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆能够看成是文件,文件又可分为:普通 ...

  4. Java实现网络聊天中使用的socket API与Linux socket API之间的关系

    尝试着用Java编写一个网络聊天程序,发现总不如网上写的好,所以就直接引用了网上大神的优秀代码.代码如下: package project1; import java.awt.*; import ja ...

  5. idea中查看一个类的调用用和被调用用关系

  6. 单线程模型中Message、Handler、Message Queue、Looper之间的关系

    1. Android进程 在了解Android线程之前得先了解一下Android的进程.当一个程序第一次启动的时候,Android会启动一个LINUX进程和一个主线程.默认的情况下,所有该程序的组件都 ...

  7. HTML 中的字符集、ASCII、 ISO-8859-1、符号之间的关系和 HTML URL 编码注意的事项

    一.HTML 实体 1.什么是HTML 实体? 在 HTMl 中,某些字符是保留的.小于号 (<) 和 大于号 (>), 浏览器会误认为是标签 如果希望正确地显示预留字符,必须在 HTML ...

  8. Virtuoso 中 display.drf、techfile.tf、tech.db 之间的关系,以及 Packet 在它们之间的作用

    https://www.cnblogs.com/yeungchie/ 一般工艺库下的"技术文件"有 tech.db 和 techfile.tf , Packet 是 display ...

  9. android 中View, Window, Activity, WindowManager,ViewRoot几者之间的关系

    (1)View:最基本的UI组件,表示屏幕上的一个矩形区域. (2)Window: 表示一个窗口,不一定有屏幕那么大,可以很大也可以很小:                         它包含一个V ...

随机推荐

  1. erlang debug

    http://www.cnblogs.com/goldli/archive/2011/03/08/1976998.html erlang 模块文件 helloworld.erl 文件内容: -modu ...

  2. 29防止程序集被篡改仿冒,全局程序集缓存GAC

      为什么需要强名称程序集和数字签名 有一个类库项目ClassLib,对应的程序集是ClassLib.dll.当前控制台项目引用ClassLib.dll程序集的方式有2种: 1.通过添加现有项目 文件 ...

  3. waitdialogform z

    namespace DevExpress.Utils { using DevExpress.LookAndFeel; using DevExpress.Skins; using DevExpress. ...

  4. jsp中简易版本的图片上传程序

    1.下载相应的组件的最新版本 Commons FileUpload 可以在http://jakarta.apache.org/commons/fileupload/下载 附加的Commons IO   ...

  5. 【屌丝程序的口才逆袭演讲稿50篇】第十三篇:爱迪生欺骗了我们!【张振华.Jack】

    演讲稿主题:<爱迪生欺骗了我们>                      --作者:张振华Jack.摘抄<马云为雅虎员工的演讲稿:爱迪生欺骗了我们> 非常多人都记得爱迪生说的 ...

  6. HBase目录

    1. HBase介绍及简易安装(转) 2. java操作Hbase实例 3. HBase入门基础教程之单机模式与伪分布式模式安装(转) 4. HBase教程 5. 用Java操纵HBase数据库(新建 ...

  7. Redis中对Key进行分类

    使用":"体现层次 >set key1:key2:key4 value1 "OK" >set key1:key2:key5 value2 " ...

  8. iOS开发-多线程简介

    多线程从概念上理解是指从软件或者硬件上实现多个线程并发执行的技术,简单点理解就是同一时间可以执行多个事情(比如说一边听歌一边码代码),听歌是一个线程,码代码是一个线程,如果是单核CPU的话,上面两个动 ...

  9. HDU 4585 Shaolin (STL)

    没想到map还有排序功能,默认按照键值从小到大排序 #include <cstdio> #include <iostream> #include <cstring> ...

  10. PHP 使用mysql 与 mysqli 连接Mysql数据库

    代码很简单直接上了 <?php /** * @Author: HTL * @Email: Huangyuan413026@163.com * @DateTime: 2015-05-14 16:0 ...