線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1340
推到 Plurk!
推到 Facebook!

ListView加底圖顯示問題

尚未結案
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-28 19:25:52 IP:61.66.xxx.xxx 未訂閱
小弟想在Listvew上加底圖, 但是發現當item太多而拉動Scrollbar 底圖就會顯示不正常, 之前有看到HomeSound大大有遇過相同問題http://delphi.ktop.com.tw/topic.php?TOPIC_ID=33526 但是之中的連結已經無效了, 請問該如何解決重繪的問題
HomeSound
中階會員


發表:44
回覆:178
積分:94
註冊:2002-08-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-12 22:20:26 IP:219.81.xxx.xxx 未訂閱
ListView1=vsReport狀態下如何加上背景圖片
***.h   
    private:        // User declarations
    TWndMethod FOriginalProc;
    void __fastcall ListViewProc(Messages::TMessage &msg);
    void __fastcall PaintListView(HDC &dc);
    __fastcall TForm1::~TForm1();
***.cpp
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{ FOriginalProc = ListView1->WindowProc;
  ListView1->WindowProc = ListViewProc;
}
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{ ListView1->WindowProc = FOriginalProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListViewProc(Messages::TMessage &msg)
{ msg.Result = 0;
  switch(msg.Msg)
  { case WM_ERASEBKGND: //攔截背景清除訊息(如改變視窗大小時)
         PaintListView((HDC)msg.WParam); //重繪背景圖
         msg.Result = 0;
         break;
    case WM_HSCROLL: //攔截橫捲軸改變訊息
    case WM_VSCROLL: //攔截直捲軸改變訊息  以下三行會使拖動捲軸時閃爍
         //LockWindowUpdate(ListView1->Handle);//鎖住Windows更改重繪
         //InvalidateRect (ListView1->Handle, 0, true);//指定Windows重繪區域
         //LockWindowUpdate(NULL); //開放Windows更改重繪
         FOriginalProc(msg);//繼續ListView1動作消息傳送 
         break;
    default:
         FOriginalProc(msg);
         break;
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PaintListView(HDC &dc)
{ TRect rect = ListView1->BoundsRect;//指定ListView的範圍
  Graphics::TBitmap *MemBitmap = new Graphics::TBitmap;
  MemBitmap->Width = rect.Right - rect.Left;
  MemBitmap->Height= rect.Bottom- rect.Top;
  MemBitmap->LoadFromFile("C:\\Win\\1.bmp"); //加入圖型
  ::BitBlt(dc,0,0,MemBitmap->Width, MemBitmap->Height,MemBitmap->Canvas->Handle,0,0,SRCCOPY);
  delete MemBitmap; // delete the temporary bitmap.
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{ ListView_SetTextBkColor(ListView1->Handle,CLR_NONE);//讓ListView文字透明
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{ ListView1->Repaint(); //此項不加也可以
}PS:圖要比ListView大    ********另一種--ListView1=vsReport狀態下加背景圖(圖片跟不上SCROLL移動)
void __fastcall TfrmMain::ListViewCustomDraw(
      TCustomListView *Sender, const TRect &ARect, bool &DefaultDraw)
{ Graphics::TBitmap* mBitmap = new Graphics::TBitmap;
  mBitmap->LoadFromFile(".\\1.bmp");
  if(mBitmap)
  { Sender->Canvas->Brush->Bitmap = mBitmap;
    Sender->Canvas->FillRect(Sender->ClientRect);    //填滿矩形
    Sender->Canvas->Brush->Bitmap = NULL;
    SetBkColor(Sender->Handle,CLR_NONE);             //設Handle的背景為CLR_NONE
    SetBkMode(Sender->Canvas->Handle,TRANSPARENT);   //設文字和背景混合模式為透明
    ListView_SetBkColor(Sender->Handle,CLR_NONE);    //設圖示背景顏色透明(於vsIcon模式下)
    ListView_SetTextBkColor(Sender->Handle,CLR_NONE);//設文字背景顏色透明
  }
  delete mBitmap;
}
--==多看.多學.多聽==--
------
--==多看.多學.多聽==--
系統時間:2024-05-03 0:33:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!