來自: blog.csdn.net/lizanhong
如何理解VB表單中的scale類屬性
及width height屬性之間的關係
VB中的SCALEHIEGT,SCALEWIDTH,與表單中的WIDTH,HEIGHT的區別及關係是許多VB初學者難以理解的。本人在學習DELPHI的過程中也曾經對這類似的概論搞不清楚,但通過這次對VB中這些類似概念的學習後,可以說是已掌握了這種概念及原理了。現在回頭看DELPHI的相關知識點有豁然開朗的感覺,VB的確是可視化編程入門的最佳語言。
問題的提出
在VB中預設的度量單位是緹,這是一種跟螢幕解析度無關的一種度量單位,主要是用在印表機上的,大概是1緹=1/20磅。其它的一些單位請查看MSDN。使用緹就會給我們帶來一些麻煩,因為我們都習慣於使用像素來度量表單及控制項的大小,並使用顯示器當前的解析度作參考物來確定表單的適當大小,當我們想動態地改變表單的大小的時候我們該如何確定正確的數值呢,想動態地移動表單中的控制項,該如何確定控制項的位置呢。同時,在VB的表單中同時存在著這樣的一些屬性:scaleWidth,scaleHeight,scaleLeft,scaleTop,scaleMode,Width,Height,他們之間是怎樣的關係,是如何影響表單中控制項的大小的呢。通過下面的解說,我們就能解決上面所提到的問題。
預備知識
其實在VB中的表單內部(除去表單邊框及標標題列的地區)有一個類似於畫布的東西,它始終是佔滿整個表單地區的,他有一個座標系統,預設的是原點就是表單的左上方,座標是0,0 然後往左伸延的就是X軸,往下就是Y軸了,但是這個座標的單位預設就是緹,當然我們是可以修改成其它類型的單位,要修改度量單位的話就要設定表單的scaleMode屬性。如:設為像素scaleMode=3 。這個座標系統是用來確定要在什麼位置上通過PRINT等方法來作圖的,以及確定在這個容器中的什麼位置上放置控制項,以及跟表單寬和高的比例情況。
scale類屬性的作用
清楚了表單有這樣一個畫布及它的座標後,我們再來看看有關這個座標系統的屬性。這些scale類型屬性主要是用來設定畫布座標系統的數值跟表單的高寬數值比例情況的。具體是怎樣的關係及怎樣影響在下面有論說。scaleLeft,scaleTop這兩個屬性是用來設定這個座標系統的原點位置的,系統預設的scaleLeft,scaleTop是0,也就是說原點在表單的左上方了,座標系統只有大於0的那一塊座標,這樣的好處是可以很直觀地使用這個座標系統因為參照點是0且是從表單的左上方開始的。如果把這兩個值設定為大於0的話,畫布的座標就有正負地區了,這樣就更像我們數學上的座標系統了。scaleMode用於設定座標軸的度量單位。
width,Height的作用
這兩個屬性是用於設定表單的寬和高,他們的單位始終是緹,會直接影響到畫布的大小及座標的比例情況,要動態設定表單的大小也只能通過這兩個屬性來設定。
這些屬性的關係
預設情況下,表單的寬和高是跟表單上的畫布的寬和高是一樣大小的,且畫布的座標原點就是表單的左上方。也就是說,畫布的寬和表單的寬是1:1的關係,也就是說畫布的1緹寬度相當於表單的1緹寬度。那麼當我們在表單上用print.circle (500,500),200來畫一個圓的時候,原點就是在距表單頂部500個緹,左邊500個緹,半徑是200個緹。現在我們嘗試把表單上的scaleHeight,scaleWidth修改為原來的1/2,現在也是用同樣的方法來畫一個圓,對比這一下現在的圓跟修改前的圓,可以發現當前圓的半徑比原來的擴大了一倍,而且圓心的位置也改變了。同樣的參數為什麼會有不一要結果呢。這就是scaleHeigh scaleWidth起的作用,假如表單原本的width是1000緹,scaleWidth也是1000緹,也就是說他們是1:1的關係,我們用 print.circle (500,500),200在畫布上畫出來的圓所用的尺寸單位是1:1的,明確一點說就是在畫布寬上所畫的一緹就是表單寬度的一緹,但修改了scaleWidth後,比如說是原來值的一半,情況就不一樣了,畫布跟表單的比例就變成是1:2了,在畫布看來,要用原來數值的一半來表示表單的寬,那麼只能是1個緹來表示表單width的兩個緹了,這樣的話如果還是用原來參數來使用print方法來作圓的話,出來的圓就是原來的兩倍了。情況就有點像要在一張白張上把整個中國地圖畫出來一樣,張上的一毫米就相當於實際十萬八千公裡了。這就是scale屬性跟表單width,height之間或關係了。
緹跟像素的關係
我們可以通過VB的系統對像screen的twipPerPixersX及twipPerPixersX屬性來返回當前解析度下每一像素所佔緹,預設情況下應該是15。但這個值是不是固定的呢。答案是不的,螢幕也是一個畫布,同時也像表單一樣有高和寬,要返回15的前提條件是scaleWidth跟width是1:1,scaleHeight跟height也是1:1。
總結
表單上有一個畫布,它的座標系統預設是跟表單一樣的,但可以通過scale類屬性可以去修改。通過這些scale類屬性我們可以開發出一種具有圖形放大縮小功能的程式,只要把作圖的方法中參數保持不變,動態改變scale屬性就可以達到目的,這種關係是成反比的,也就是說參數不變,scale減小的話圖形就放大。這類程式的例子就像是股票分析軟體中的成交量圖。
另:DELPHI也有類似的畫布機制。原理是基本上一致的。
ps:在vb中感覺真不習慣.