用戶: 密碼:     忘記密碼 | 會員註冊
  

C++Builder中大尺寸圖像的顯示技巧

8.3
出處:2345軟件大全 時間:2011-06-27 人氣:791

核心提示:在c++builder中利用timage控件可以輕鬆地讀入並顯示圖像,但timage 控件本身不可以接收輸入焦點,也沒帶有滾動條

  在c++builder中利用timage控件可以輕鬆地讀入並顯示圖像,但timage 控件本身不可以接收輸入焦點,也沒帶有滾動條,在顯示超出顯示區域範圍的大圖像時,需要對timage控件進行加強。本文提出兩種最容易實現且有效的方法,滿足不同應用的需求。

  方法一:增加滾動條。

  增加滾動條可以通過將timage放在tscrollbox控件中來實現。步驟如下:

  (1)、在窗體中放置一個tscrollbox控件,調整好其尺寸。

  (2)、設置tscrollbox控件的autoscroll屬性為true。

  (3)、在tscrollbox控件是放置一個timage控件。

  (4)、設置timage控件的屬性:autosize為true,left為0,top為0。經以上增強之後,如果timage的圖像比顯示窗口大,滾動條會自動出現,如果圖像小於顯示窗口,滾動條自動消失,實現了大圖像的瀏覽。

  方法二:圖像漫遊。

  圖像漫遊是指不用滾動條,通過鍵盤或者鼠標控制圖像的移動,從而在較小的顯示區域內可以瀏覽圖像的任何部分。下面以鼠標控制為例說明。

  (1)、在窗體中放置一個tpanel控件,調整好其尺寸。

  (2)、在tpanel控件是放置一個timage控件。

  (3)、設置timage控件的autosize屬性為true,left屬性為0,top屬性為0。

  (4)、在tform1的類定義中加兩個私有變量:intix0,iy0;

  (5)、響應timage控件的onmousedown和onmousemove事件。void__fastcalltform1::image1mousedown(tobject*sender, 
tmousebuttonbutton,tshiftstateshift,intx,inty) 

ix0=x; 
iy0=y; 
}

  void__fastcalltform1::image1mousemove 
(tobject*sender,tshiftstateshift,intx,inty) 

intideltax,ideltay; 
if(shift.contains(ssleft)) 

ideltax=x-ix0; 
ideltay=y-iy0; 
if(ideltay) 
image1->left+=ideltax; 
if(ideltay) 
image1->top+=ideltay; 


  (6)、運行時按住鼠標左鍵拖動,圖像將跟隨移動。

  (7)、如果通過鍵盤控制,只需參考鼠標控制的代碼,加入鍵盤控制即可。

  (8)、實際應用時,根據需要加入邊界限制,保證圖像不會被移出顯示區域之外。

  以上兩種方法在本人開發的軟件當中多次應用,效果很好。