中华网校

系列网站: 中华网校 | www.网校.com | 3D模型 | 中华网校教育

电脑网校 | 业界新闻 | 职业网校 | 网校宝典 | 软件下载 | 网校论坛 | 网校联盟

电脑入门 | 网页设计 | 网络编程 | 图形图象 | 三维空间 | 多媒体 | 程序语言 | 操作系统 | 系统专题 | 办公应用 | 软件宝典 | 硬件天下 | 

 

您的位置:首页 >> 程序语言 >> VB/VB.NET >> 新闻正文

VB的座标系统  

作者:_  时间:2001-11-22  来自:中华网校  责任编辑:  阅读次数:

这里我们来看一下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 ScaleTop
ScaleWidth。我个人不喜欢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便是字串於旋转後的高度啦!



相关文章 最新文章 推荐文章
RC4经典加密算法VB版本代码
VB 6 问答
优化VB程序
vb开发人员操作规程
用VB编屏幕保护快速设定程序
VB的座标系统
VB:开发CAI软件的小经验
用VB编写网络寻呼机

  中华网校依法保护知识产权,如果我们的文章有涉及或侵犯您的有关权益,请即时与我们 联系, 注明网址及文章,我们会即时处理或删除,感谢您的合作!中华网校email
  中华网校由广州市中六电脑城智锐计算机专业培训学院及中华网校技术中心提供网络支持未经本站许可任何个人网站、书刊报社一律不得私自复制,转载本站内容!

关于中华网校 | 广告服务 | 版权声明 | 投稿指南 | 网站合作 | 友情链接 | 网站地图

 

版权所有 中华网校 & 智锐网校 1999-2004 COPYRIGHT (C) 1999-2004 www.ZhiRui.com ALL RIGHTS RESERVED

 
/**/