教你认识VB的座标系统
我们先来看看scale left/Top/Height/Width Scalex Scaley Text Height Text Width的一些特性和关系。
所谓缩放左刻度上刻度上刻度宽度是指窗口中的工作区,也就是可以绘制和放置组件的区域。例如,标题区不在客户区的范围内。如果我们将ScaleMode设置为0以外的值,比如ScaleMode = 3 (VBPixels),则表示这个区域的度量单位是像素,ScaleTop =ScaleLeft = 0,即原点在左上角。VB提供了一个有用的坐标系变换,即比例尺模式,左比例尺顶比例尺顶比例尺宽度。我个人不喜欢用VB内置的ScaleMode = VbTwips。我爱ScaleMode=VBPixels,因为窗口系统的度量单位是像素而不是缇。
如果我们要在一张图片上画坐标,怎么才能不考虑窗口的大小,只关注我们关注的坐标呢?假设我们要做一个坐标,原点是表单左下角的(0,0),右上角的坐标是(100,100),那么我们只需要为表单设置
scale top = 100
scale width = 100
scale left = 0
scale height =-100。此时,如果我们查找窗体MouseDown的x和y值,我们会发现它的值已经下降到。(此时ScaleMode = vbuser自动更改)
更有趣的是,用来计算字符串高度和宽度的TextHeight/TextWidth也是以0-100坐标的形式表示的。比如,
。currentx = 10
。currenty = 10
Form1。打印“哈哈”,那么你会看到哈哈会出现在表单的左下方,它的位置在坐标(10,10)。所以,如果窗体变大,窗体1中显示的位置。打印“哈哈”会自动变。与其他ScaleMode(如vbPixel)不同,“哈哈”会以固定的绝对单位显示。但是,有时候我们想用绝对单位做一些事情。例如,我们想在左边第三个像素显示东西。的确,数学好的可以自己做,像我这样数学不好的可以用ScaleX/ScaleY做。和前面的例子一样,左边对应于新坐标的第三个像素的宽度是。
表格1。ScaleX(3,vbPixels,vbUser).
这里还有一个有趣的问题。如果有人看过我的一篇文章,文章中用API旋转任意角度的字体,那篇文章中的字体都是旋转后打印在表单上的。如果我们转90度,以(50,50)打印,会发现它从(50,50)到屏幕顶部写单词。如果我们想用坐标(50,50)作为字符串的结尾。我会计算字符串的长度(比如长度20),然后打印在(50,70)。难点就变成了如何知道弦的长度。第一反应是。TextWidth,但是别忘了,如果宽度x1是垂直打印的,那么假设其高度是x1(例如ScaleMode = 0) Scale height =10,scale left = 0,scale width = 20,width = 10是错误的,垂直打印高度不应该是10,如果x-y轴单位不同,也不一定是5(如果字号相同)。然后我会用像素来转换两者。像素是一个点,所以X轴和Y轴的单位是一样的。当然可以用缇,但是中间用API的话,大部分人都是以像素为单位的。
With form 1
oldscale left =。ScaleLeft
OldScaleTop =。ScaleTop
OldScaleWidth =。scale width
OldScaleHeight =。ScaleHeight
OldScaleMode =。ScaleMode
。scale mode = VB pixels
txt len =。TextWidth(mystring) MyString是要旋转的字符串
,如果是旧的scalemode vbuser,则
。scalemode =旧的scalemode
else
。scaleleft =旧的scaleleft
。ScaleTop = OldScaleTop
。ScaleWidth = OldScaleWidth
。scale height = OldScaleHeight
End If
txt height =。ScaleY(txtLen,VB Pixels,VB User)
以
结尾所以txtHeight是字符串旋转后的高度!
0条评论