全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1893
推到 Plurk!
推到 Facebook!

Trackbar的Tumb

答題得分者是:m8815010
Terry6666
一般會員


發表:32
回覆:19
積分:10
註冊:2002-12-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-05 14:25:53 IP:61.218.xxx.xxx 未訂閱
請問有沒有人將 Trackbar的元件的Tumb改成可以修該顏色,應該如何修該.....
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-09 10:51:52 IP:218.173.xxx.xxx 未訂閱
引言: 請問有沒有人將 Trackbar的元件的Tumb改成可以修該顏色,應該如何修該.....
Terry6666兄好你好: 初看這個問題似乎並不好解,因為>> 所以基本上問是還是可以解的啦! 本題目其實和 src="http://delphi.ktop.com.tw/download/upload\54481_TTrackBar.JPG">

In Unit1.h    ~~
class TForm1 : public TForm
{
__published:        // IDE-managed Components
        TTrackBar *TrackBar1;
        TButton *Button1;
        TColorBox *ColorBox1;
        void __fastcall Button1Click(TObject *Sender);
private:        // User declarations
        void __fastcall TrackBarWndProc(TMessage&);  <--一樣增加這一行
         TWndMethod      OldTrackBarWndProc;          <--一樣增加這一行
public:                // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
~~

In Unit1.cpp    ~~
TForm1 *Form1;    TColor color=clSilver;     <--Tumb的default顏色    //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 OldTrackBarWndProc    = TrackBar1->WindowProc;
 TrackBar1->WindowProc = TrackBarWndProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 color=ColorBox1->Selected;
 SendMessage(TrackBar1->Handle,WM_PAINT,0,0);      <--依選擇改變顏色
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBarWndProc(TMessage& Message)
{
 OldTrackBarWndProc(Message);     if (Message.Msg==WM_PAINT) {      <--如果是繪、重繪事件時
     RECT rect;
     SendMessage(TrackBar1->Handle,TBM_GETTHUMBRECT,0,(LPARAM)&rect);  <--先取得Tumb的長方形         HDC dc=GetDC(TrackBar1->Handle);   取得TrackBar的DC,準備在上面劃自已想要Tumb的顏色
     TBrush *bsh=new TBrush;
     TPen *pen=new TPen;         bsh->Color=color;               <--brush屬性要設你好的顏色
     pen->Color=color;               <--pen屬性也要設你好的顏色         SelectObject(dc,bsh->Handle);   Select過brush和pen才真正能用
     SelectObject(dc,pen->Handle);         /*定義新的Tumb長方形,新長方形是為了做出立體、陰影的效果*/
     RECT new_rect;
     new_rect=rect;
     new_rect.bottom -= 5;
     new_rect.top     = 0.5;
     new_rect.left    = 1;
     new_rect.right  -= 1;         /*定義三角形、同樣加加減減的微調也是要做立體、陰影的效果*/
     POINT point[3];
     point[0].x=new_rect.left 1;
     point[0].y=new_rect.bottom;
     point[1].x=new_rect.right-2;
     point[1].y=new_rect.bottom;
     point[2].x=(new_rect.right new_rect.left)/2;
     point[2].y=rect.bottom-3;
    
     FillRect(dc,&new_rect,bsh->Handle);    <--開始劃長方形
      Polygon(dc,point,3);                   <--開始劃三角形
      
      DeleteObject(bsh);
     DeleteObject(pen);
     DeleteDC(dc);
 }
}
//---------------------------------------------------------------------------
說明: 1.TBM_GETTHUMBRECT這個訊息就是擷取Tumb的長方形,詳細說明見SDK 2.但實際的Tumb並不是長方形(針形),所以點1中的長方形並不直接能用 3.可以再找找msdn線上說明,看看有沒有更新的window message可用 4.點1中的長方形需再加加減減成一個新的長方形和三角形,才可以併成Tumb的針形、併湊動作見範例程式 5.目前TumbLength是default大小,要變更大小的話,程式中的微調可能也要同步 發表人 - m8815010 於 2004/08/09 11:03:29 發表人 - m8815010 於 2004/08/09 11:06:34
Terry6666
一般會員


發表:32
回覆:19
積分:10
註冊:2002-12-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-09 13:51:07 IP:61.218.xxx.xxx 未訂閱
m8815010你好: 真的謝謝你幫我解決很多..., 可以請教你應該如何學好Windows的程式嗎?? 因為我發現我使用BCB的結果都只會套用上面的一些 元件,等要修改時就發現不知道如何下手...... 謝啦..
系統時間:2024-05-08 2:38:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!