首页 >> VB.Net >> 正文
Visual Basic的座标系统-VB.NET
  来源:Dotnet频道 作者:采集 时间:2008-3-10  

    这里我们来看一下ScaleLeft/Top/Height/Width ScaleX ScaleY TextHeight TextWidth的一些特性与关连。

    所谓的ScaleLeft ScaleTop ScaleTop ScaleWidth指的是Window中的Client Area即可以画图、放元件的区域,像Title区就不在Client Area的范围。如果我们设定ScaleMode成不为0的数值,如设定ScaleMode = 3 (VBPixels)那麽就代表这区域的度量是以Pixels为单位,而ScaleTop =ScaleLeft = 0,即原点在左上角。

    VB提供了一个很好用的座标系统转换,即ScaleMode, ScaleLeft ScaleTop ScaleTopScaleWidth.我个人不喜欢VB内定的ScaleMode = VbTwips,我爱 ScaleMode=VBPixels原因是Window系统的度量单位是使用Pixels而不是Twips.

    如果我们想在一个画面上画上座标,那麽如何才能不管Window的大小,而只管我们所关注的座标呢?假设我们想做一个座标,原点在Form的左下角(0,0)而右上角座标是(100,100), 那我们只要对Form如此设

    ScaleTop = 100

    ScaleWidth = 100

    ScaleLeft = 0

    ScaleHeight = -100,

    那就成了,这时候,如果我们去查一下Form的MouseDown的X, Y值,会发现它的值已变成落在0-100之间了。(此时的ScaleMode = 自动变Vbuser)更有趣的是用来计算字串高、宽的TextHeight/TextWidth也变成以座标0-100的方式来

    表现了。

    例如说,

    。CurrentX = 10

    。CurrentY = 10

    Form1.Print "HaHa",

    这时会见到於Form左下方会出现HaHa,它的位置便是於座标(10,10)之处,所以了,如果Form变大,Form1.Print "HaHa"所显示之位置也会自动更动不像其他的ScaleMode(如vbPixel),会在固定的绝对单位处显示"HaHa".然而,有时候我们会想要以绝对单位来做一些事,例如:我们希望在左边算来第三个Pixels处来显示东西,的确,数学好的人可以自己转换,而像我数学不好的人,可以用ScaleX/ScaleY来做,像方才的例子,左边算来第三点(Pixels)相对应於新的座标的宽度便是Form1.ScaleX(3,vbPixels, vbUser)。

    再来一个有趣的问题,如果有人见过一篇文章,用API来任意角度旋转字型,那篇文章中字型旋转之後印在Form上,如果我们转90度,而且於(50,50)处印字,会发现它是从(50,50)处往萤幕上方写出字,如果我们想在座标(50,50)处当作字串的结束之地,那该如何呢,我会计算出该字串的长度(例如:长度20),而後在(50,70)处印字,那困难点变成如何得知该字串长度,第一个反应是。TextWidth,不过别忘了,TextWidth它随着ScaleMode的更动而变,宽度x1者,如果垂直Print,而便假设其高度也是x1是不对的(如:ScaleTop = 0, ScaleHeight = 10, ScaleLeft = 0, ScaleWidth

    =20,而宽度=10的字串,垂直印的高度应是不会是10,若X Y轴单位不同时也不一定是5(如果字大小不变的话)。

    那使用Pixels来做二者的转换,Pixels一个点便是一个点,所以X,Y轴的单位是相同的,当然,使用Twips也可以,只是如果中间有用上API,人家大多以Pixels为单位。

    With Form1

    OldScaleLeft = .ScaleLeft

    OldScaleTop = .ScaleTop

    OldScaleWidth = .ScaleWidth

    OldScaleHeight = .ScaleHeight

    OldScaleMode = .ScaleMode

    。ScaleMode = vbPixels

    txtLen = .TextWidth(mystring) 'myString是待旋转的字串

    if OldScaleMode <> vbUser then

    。ScaleMode = oldScaleMode

    else

    。ScaleLeft = OldScaleLeft

    。ScaleTop = OldScaleTop

    。ScaleWidth = OldScaleWidth

    。ScaleHeight = OldScaleHeight

    End If

    txtHeight = .ScaleY(txtLen,vbPixels, vbUser)

    End With

    如此txtHeight便是字串於旋转後的高度啦!


上一篇:.NET的自动序列号工具-VB.NET
下一篇:运用VB.net创建Web服务访问程序-VB.NET

本篇新闻:Visual Basic的座标系统-VB.NET

相关新闻
相关评论
 
评论表单加载中...
 
VB.Net文章

 在Visual C++应

 编辑:admin

 时间:2008-3-10


   编程入门网-介绍.NET中的委派(Delegates)之三
   编程入门网-介绍.NET中的委派(Delegates)之二
   编程入门网-介绍.NET中的委派(Delegates)之一
   编程入门网-用Visual C#实现文件下载功能
   编程入门网-用C#写简单的CGI程式
最新文章
   编程入门网-介绍.NET中的委派(Delegates)之三
   编程入门网-介绍.NET中的委派(Delegates)之二
   编程入门网-介绍.NET中的委派(Delegates)之一
   编程入门网-用Visual C#实现文件下载功能
   编程入门网-用C#写简单的CGI程式
总站搜索
搜索
 
热门文章
   oracle数据库文件中的导入\导出
   用Oracle10g列值掩码技术隐藏敏感数据
   VB程序中用ADO对象动态创建数据库和表-VB.NET
   用VB6写简单程序 让电骡自动关机-VB.NET
   使用.NET2.0编写COM组件供VB调用-VB.NET
   VB.NET:键盘控制焦点移动-VB.NET
   用VB.NET绘制GDI图形-VB.NET
   vb.net中应用 ArrayList 实例-VB.NET
 
推荐文章
ASP.NET中的状态管理-ASP.NET
VC、IE、ASP环境下打印、预备的完美解决方案
oracle数据库文件中的导入\导出
VB.NET中快速访问注册表技巧-VB.NET
在vb中实现超连接的方法!和直接发邮件-VB.NET
用VB做realplayer播放列表-VB.NET
在VB.NET中如何实现和利用SortedLists-VB.NET
利用VB.NET Stopwatch对象记录时间-VB.NET
成都古羌科技有限公司版权所有: Copyright@2007-2010 ,ALL Rights Reserved 蜀ICP备07017240号