這裡我們來看一下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 =
FormPrint HaHa
這時會見到於Form左下方會出現HaHa它的位置便是於座標()之處所以了如果Form變大FormPrint HaHa所顯示之位置也會自動更動不像其他的ScaleMode(如vbPixel)會在固定的絕對單位處顯示HaHa然而有時候我們會想要以絕對單位來做一些事例如我們希望在左邊算來第三個Pixels處來顯示東西的確數學好的人可以自己轉換而像我數學不好的人可以用ScaleX/ScaleY來做像方才的例子左邊算來第三點(Pixels)相對應於新的座標的寬度便是FormScaleX(vbPixels vbUser)
再來一個有趣的問題如果有人見過一篇文章用API來任意角度旋轉字型那篇文章中字型旋轉之後印在Form上如果我們轉度而且於()處印字會發現它是從()處往螢幕上方寫出字如果我們想在座標()處當作字串的結束之地那該如何呢我會計算出該字串的長度(例如長度)而後在()處印字那困難點變成如何得知該字串長度第一個反應是TextWidth不過別忘了TextWidth它隨著ScaleMode的更動而變寬度x者如果垂直Print而便假設其高度也是x是不對的(如ScaleTop = ScaleHeight = ScaleLeft = ScaleWidth
=而寬度=的字串垂直印的高度應是不會是若X Y軸單位不同時也不一定是(如果字大小不變的話)
那使用Pixels來做二者的轉換Pixels一個點便是一個點所以XY軸的單位是相同的當然使用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(txtLenvbPixels vbUser)
End With
如此txtHeight便是字串於旋轉後的高度啦!
From:http://tw.wingwit.com/Article/program/net/201311/13290.html