Trackbar可不可以製作成有數字顯示 |
尚未結案
|
Terry6666
一般會員 ![]() ![]() 發表:32 回覆:19 積分:10 註冊:2002-12-20 發送簡訊給我 |
|
pwipwi
版主 ![]() ![]() ![]() ![]() ![]() 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
李國維
高階會員 ![]() ![]() ![]() ![]() 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
|
m8815010
版主 ![]() ![]() ![]() ![]() ![]() 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
Terry6666兄你好
In Unit.cpp ~~ TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { OldTrackBarWndProc = TrackBar1->WindowProc; TrackBar1->WindowProc = TrackBarWndProc; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { TrackBar1->Width = 150; TrackBar1->Min = 0; TrackBar1->Max = 10; TrackBar1->Position = 0; Form1->Color = clSilver; PostMessage(TrackBar1->Handle,WM_USER+123,0,0); } //--------------------------------------------------------------------------- void __fastcall TForm1::TrackBar1Change(TObject *Sender) { SendMessage(TrackBar1->Handle,WM_USER+123,TrackBar1->Position,0); } //--------------------------------------------------------------------------- void __fastcall TForm1::TrackBarWndProc(TMessage& Message) { OldTrackBarWndProc(Message); if (Message.Msg==WM_USER+123 || Message.Msg==WM_PAINT) { TrackBar1->Refresh(); int Pos; if (Message.Msg==WM_USER+123) Pos=Message.WParam; else Pos=TrackBar1->Position; HDC dc=GetDC(TrackBar1->Handle); SetBkColor(dc,clSilver); TextOut(dc,(TrackBar1->Width/(TrackBar1->Max+1))*Pos+5,TrackBar1->Height/2+2,IntToStr(Pos).c_str(),IntToStr(Pos).Length()); DeleteDC(dc); OldTrackBarWndProc(Message); } } //---------------------------------------------------------------------------image sample: |
Terry6666
一般會員 ![]() ![]() 發表:32 回覆:19 積分:10 註冊:2002-12-20 發送簡訊給我 |
|
m8815010
版主 ![]() ![]() ![]() ![]() ![]() 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 謝謝各位的回答 可能是我表達的不好,讓各位誤會了,其實我是想要下面圖形(左上角)的 這種型式,數字會隨著Trackbar的最大最小改變,可以將他做成一個元件, 因為要使用很多.....Terry6666兄你好< >: 還是不太懂你的需求,大概抓一下< >! 你需要一個新的TTrackBar物件,這個物件可以顯示它的Min、Max及Median數值,並且在 每次做Min、Max屬性變動時,顯示的值也會自動跟著變! 我的作法: 1.如果上述需求差不多的話,我會使用本問題一開始兩位大師的回覆的方式,也就是直接 使用3個TLabel去顯示TTrackBar的Min、Max、Median值,而不會用我之前的解法,因為那 樣太細了 In Unit1.cpp ~~ TForm1 *Form1; TMyPanel *mypanel; //宣告一個新TPanel物件使用 //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- __fastcall TMyPanel::TMyPanel(TComponent* Owner,int min,int max) : TPanel(Owner) { TrackBar_Min=min; //Min值記錄 TrackBar_Max=max; //Max值記錄 //TrackBar物件相關設定 TrackBar1=new TTrackBar(this); TrackBar1->Parent=this; TrackBar1->Min=min; TrackBar1->Max=max; TrackBar1->Top=10; TrackBar1->Left=50; TrackBar1->Width=250; this->TrackBar1->Orientation=trVertical; this->TrackBar1->TickMarks=tmBoth; //TLabel相關設定 Lab1=new TLabel(this); Lab2=new TLabel(this); Lab3=new TLabel(this); Lab1->Parent=this; Lab2->Parent=this; Lab3->Parent=this; Lab1->Top=TrackBar1->Top+5; Lab1->Left=TrackBar1->Left-15; Lab1->Width=10; Lab1->Caption=TrackBar1->Min; Lab2->Top=(TrackBar1->Top+TrackBar1->Height)/2; Lab2->Left=TrackBar1->Left-15; Lab2->Width=10; Lab2->Caption=(TrackBar1->Max+TrackBar1->Min)/2; Lab3->Top=TrackBar1->Top+TrackBar1->Height-20; Lab3->Left=TrackBar1->Left-15; Lab3->Width=10; Lab3->Caption=TrackBar1->Max; } //--------------------------------------------------------------------------- void __fastcall TMyPanel::SetMinValue(int minvalue) { if (minvalue!=TrackBar_Min) { //如果Min值有變 TrackBar_Min=minvalue; //記錄 TrackBar1->Min=minvalue; //assign //變更顯示值 Lab1->Caption=TrackBar_Min; Lab2->Caption=(TrackBar_Min+TrackBar_Max)/2; } } //--------------------------------------------------------------------------- void __fastcall TMyPanel::SetMaxValue(int maxvalue) { if (maxvalue!=TrackBar_Max) { //如果Max值有變 TrackBar_Max=maxvalue; //記錄 TrackBar1->Max=maxvalue; //assign //變更顯示值 Lab3->Caption=TrackBar_Max; Lab2->Caption=(TrackBar_Min+TrackBar_Max)/2; } } //--------------------------------------------------------------------------- //真正需寫的程式碼 void __fastcall TForm1::FormCreate(TObject *Sender) { mypanel=new TMyPanel(this,1,10); //new新TPanel物件,並給定Min、Max值 //相關初始值給定 mypanel->Parent=this; //必給 mypanel->BevelOuter=bvNone; //這一行不寫的話可以看出整個Panel的外廓 mypanel->Top=1; //寫的話可以比較整個相對位置 mypanel->Left=1; mypanel->Width=150; mypanel->Height=300; } //--------------------------------------------------------------------------- //以下為測試區 //注意TrackBar之Min、Max值的替代設定法 //用mypanel->Now_TrackBar_Max=xxx 替代mypanel->TrackBar1->Max=xxx //用mypanel->Now_TrackBar_Min=xxx 替代mypanel->TrackBar1->Min=xxx //替代設定法是為了能偵測到Min、Max值的改變 //上述未必是最佳寫法,只是一時撰寫出來的^^! void __fastcall TForm1::Button1Click(TObject *Sender) { mypanel->Now_TrackBar_Max=25; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { mypanel->Now_TrackBar_Max=50; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { mypanel->Now_TrackBar_Min=5; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { mypanel->Now_TrackBar_Min=-10; } //---------------------------------------------------------------------------sample: |
Terry6666
一般會員 ![]() ![]() 發表:32 回覆:19 積分:10 註冊:2002-12-20 發送簡訊給我 |
|
bass15
高階會員 ![]() ![]() ![]() ![]() 發表:24 回覆:171 積分:119 註冊:2003-10-27 發送簡訊給我 |
|
Terry6666
一般會員 ![]() ![]() 發表:32 回覆:19 積分:10 註冊:2002-12-20 發送簡訊給我 |
|
Terry6666
一般會員 ![]() ![]() 發表:32 回覆:19 積分:10 註冊:2002-12-20 發送簡訊給我 |
|
m8815010
版主 ![]() ![]() ![]() ![]() ![]() 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
!
引言: 順便再問一下...,那如果我要 讓Pannel上的元件跟Pannel一起變大變小 那麼是不是要加上Repaint事件...謝謝 |
bass15
高階會員 ![]() ![]() ![]() ![]() 發表:24 回覆:171 積分:119 註冊:2003-10-27 發送簡訊給我 |
|
Terry6666
一般會員 ![]() ![]() 發表:32 回覆:19 積分:10 註冊:2002-12-20 發送簡訊給我 |
|
Terry6666
一般會員 ![]() ![]() 發表:32 回覆:19 積分:10 註冊:2002-12-20 發送簡訊給我 |
可以再問一下....
//真正要使用TPanel物件需要寫的程式碼
void __fastcall TForm1::FormCreate(TObject *Sender)
{
mypanel=new TMyPanel(this,1,10,150,100,60,200); //new新TPanel物件,並給定Min、Max值 mypanel->Parent=this; //必給
}
上面這一段是測試時要用的嗎??
那我每次要產生一個新的TMyPanel時,就要寫這一段囉.....??
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |