TImage 本身無捲軸、無焦點、無法直接浏覽超出視窗的大圖。本文提供兩種零程式碼/極少程式碼的增強方案,滿足不同互動需求。
TScrollBox 容器 —— 自動捲軸,最省事優點:零程式碼、標準 UI 慣例、支援鍵盤方向鍵/滑鼠滾輪。
缺點:捲軸佔用邊界空間、不適合全螢幕沉浸式檢視。
TPanel + 滑鼠拖曳 —— 漫遊模式,沉浸體驗int iX0, iY0;void __fastcall TForm1::Image1MouseDown(TObject*, TMouseButton, TShiftState, int X, int Y) {
iX0 = X; iY0 = Y; // 記錄按下座標
}
void __fastcall TForm1::Image1MouseMove(TObject*, TShiftState Shift, int X, int Y) {
if (Shift.Contains(ssLeft)) {
int dx = X - iX0;
int dy = Y - iY0;
Image1->Left += dx;
Image1->Top += dy;
}
}
// 邊界限制範例
int minLeft = Panel1->Width - Image1->Width;
int minTop = Panel1->Height - Image1->Height;
if (Image1->Left > 0) Image1->Left = 0;
if (Image1->Left < minLeft) Image1->Left = minLeft;
if (Image1->Top > 0) Image1->Top = 0;
if (Image1->Top < minTop) Image1->Top = minTop;
void __fastcall TForm1::FormKeyDown(TObject*, WORD& Key, TShiftState) {
const int STEP = 20;
switch (Key) {
case VK_LEFT: Image1->Left += STEP; break;
case VK_RIGHT: Image1->Left -= STEP; break;
case VK_UP: Image1->Top += STEP; break;
case VK_DOWN: Image1->Top -= STEP; break;
}
// 同步套用邊界限制
}
| 需求 | 推薦方案 |
|---|---|
| 標準文件檢視、需捲軸提示位置 | ScrollBox + AutoScroll |
| 全螢幕攝影/地圖/醫療影像、沉浸式拖曳 | Panel + Mouse Drag |
| 觸控螢幕手勢平移/縮放 | Panel + Touch 事件 + 矩陣縮放 |
| 超大圖 (>100MP) 分塊載入 | 虛擬化瓦片引擎 (另文討論) |
C++Builder 內建元件組合即可輕鬆解決大圖浏覽:ScrollBox 適合傳統 WIMP 介面,Panel+拖曳 適合現代沉浸式互動。兩者程式碼量極少、穩定可靠,實務專案中屢試不爽。