Trackbar的Tumb |
答題得分者是:m8815010
|
Terry6666
一般會員 ![]() ![]() 發表:32 回覆:19 積分:10 註冊:2002-12-20 發送簡訊給我 |
|
m8815010
版主 ![]() ![]() ![]() ![]() ![]() 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 請問有沒有人將 Trackbar的元件的Tumb改成可以修該顏色,應該如何修該.....Terry6666兄好你好 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |