程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 教你認識VB的座標系統

教你認識VB的座標系統

編輯:VB綜合教程
這裡我們來看一下ScaleLeft/Top/Height/WidthScaleXScaleYTextHeightTextWidth
  的一些特性與關連。
  所謂的ScaleLeftScaleTopScaleTopScaleWidth指的是Window中的ClientArea即可以
  畫圖、放元件的區域,像Title區就不在ClientArea的范圍。如果我們設定ScaleMode
  成不為0的數值,如設定ScaleMode=3(VBPixels)那麽就代表這區域的度量是以Pixels
  為單位,而ScaleTop=ScaleLeft=0,即原點在左上角。
  VB提供了一個很好用的座標系統轉換,即ScaleMode,ScaleLeftScaleTopScaleTop
  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,若XY軸單位不同時也不一定是5
  (如果字大小不變的話)。
  那我會使用Pixels來做二者的轉換,Pixels一個點便是一個點,所以X,Y軸的單位是相同
  的,當然,使用Twips也可以,只是如果中間有用上API,人家大多以Pixels為單位。
  WithForm1
  OldScaleLeft=.ScaleLeft
  OldScaleTop=.ScaleTop
  OldScaleWidth=.ScaleWidth
  OldScaleHeight=.ScaleHeight
  OldScaleMode=.ScaleMode
  .ScaleMode=vbPixels
  txtLen=.TextWidth(mystring)'myString是待旋轉的字串
  ifOldScaleMode<>vbUserthen
  .ScaleMode=oldScaleMode
  else
  .ScaleLeft=OldScaleLeft
  .ScaleTop=OldScaleTop
  .ScaleWidth=OldScaleWidth
  .ScaleHeight=OldScaleHeight
  EndIf
  txtHeight=.ScaleY(txtLen,vbPixels,vbUser)
  EndWith
  如此txtHeight便是字串於旋轉後的高度啦!->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved