Visual Basic的座标系统

 我来答
黑科技1718
2022-11-22 · TA获得超过5911个赞
知道小有建树答主
回答量:433
采纳率:97%
帮助的人:83.2万
展开全部

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

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

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

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

  ScaleTop =

  ScaleWidth =

  ScaleLeft =

  ScaleHeight =

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

  表现了

  例如说

   CurrentX =

   CurrentY =

  Form Print HaHa

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

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

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

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

  With Form

  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

lishixinzhi/Article/program/net/201311/13290

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式