首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C++Builder 大尺寸圖片顯示技巧:TScrollBox 捲動 vs 滑鼠拖曳漫遊

     編輯:VC 教學

問題

TImage 無捲動條、無焦點、無法直接顯示超出視窗範圍的大圖。

方法一:TScrollBox 容器 (標準捲動條)

  1. 放置 TScrollBox (或 TScrollingWinControl 衍生類),調整大小。
  2. 設定 ScrollBox->AutoScroll = true。
  3. 在 ScrollBox 內放置 TImage,設定:
    Image->Align = alNone
    Image->AutoSize = true
    Image->Left = 0; Image->Top = 0;
  4. 載入大圖後,Image 自動撐大,ScrollBox 自動顯示捲動條。

優點:零代碼、標準 UI、鍵盤/滑鼠滾輪原生支援。
缺點:捲動條佔空間、不適合全螢幕漫遊體驗。

方法二:滑鼠拖曳漫遊 (類 Google Maps 體驗)

  1. 放置 TPanel (或 TPaintBox) 作為視口,Align = alClient 或固定大小。
  2. 在 Panel 內放置 TImage,設定:
    Image->AutoSize = true
    Image->Left = 0; Image->Top = 0;
  3. 表單私有變數:int FDragX, FDragY;
  4. 事件處理:
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button,
    TShiftState Shift, int X, int Y)
{
    if (Button == mbLeft) {
        FDragX = X;
        FDragY = Y;
    }
}

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
    int X, int Y)
{
    if (Shift.Contains(ssLeft)) {
        int dx = X - FDragX;
        int dy = Y - FDragY;
        Image1->Left += dx;
        Image1->Top  += dy;
    }
}
  1. (可選)加入邊界限制,防止圖片被完全拖出視口:
int minLeft = Panel1->Width - Image1->Width;
int minTop  = Panel1->Height - Image1->Height;
Image1->Left = Max(Min(Image1->Left, 0), minLeft);
Image1->Top  = Max(Min(Image1->Top, 0), minTop);

方法三:鍵盤方向鍵漫遊 (輔助)

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
    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;
    }
    // 邊界限制同方法二
}

注意:表單 KeyPreview = true 以接收按鍵。

進階:雙緩衝 + 部分重繪 (極大圖片 > 10000px)

  • 不使用 TImage,改用 TPaintBox + OnPaint。
  • 載入大圖到 TBitmap (或分塊載入)。
  • OnPaint 中計算可視區域對應源矩形,BitBlt/StretchBlt 繪製。
  • 滑鼠拖曳更新偏移量並 InvalidateRect 部分重繪。

選型建議

場景推薦方法
一般文檔/圖紙檢視TScrollBox + TImage
地圖/衛星圖/全景漫遊滑鼠拖曳 + 邊界限制
醫療影像/巨幅掃描圖 (>50MP)分塊載入 + 雙緩衝 PaintBox

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved