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

Trackbar可不可以製作成有數字顯示

尚未結案
Terry6666
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-06 10:41:11 IP:61.218.xxx.xxx 未訂閱
請問各位... 我想將Trackbar旁邊的指標顯示多加上數字顯示 該如何做會比較好呢??...請各位高手指導一下..,謝謝..
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-06 13:12:32 IP:211.76.xxx.xxx 未訂閱
Terry6666你好: 在TrackBar旁邊放一個TLabel元件,然後在TractBar的OnChange裡,把數字指定給Label即可。
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-06 13:17:34 IP:220.130.xxx.xxx 未訂閱
Terry6666: 不知道這各方法可不可以達到你想要ㄉ功能. 1.拉一各Label元件.放在TrackBar旁邊. 2.將Label的Caption屬性設為0 3.在TrackBar的OnChage事件輸入 Label1->Caption = IntToStr(TrackBar1->Position);
m8815010
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-07 02:34:06 IP:211.74.xxx.xxx 未訂閱
Terry6666兄你好: 不曉得有沒有抓錯你的意思,初步寫了一個 class="code"> In Unit1.h ~~ class TForm1 : public TForm { __published: // IDE-managed Components TTrackBar *TrackBar1; TLabel *Label1; void __fastcall TrackBar1Change(TObject *Sender); void __fastcall FormCreate(TObject *Sender); private: // User declarations void __fastcall TrackBarWndProc(TMessage&); <---新增此行 TWndMethod OldTrackBarWndProc; <---新增此行 public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; ~~

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: 1.程式細節就不解釋了,因為有點小複雜! >! 發表人 -
Terry6666
一般會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-07 10:31:51 IP:61.218.xxx.xxx 未訂閱
謝謝各位的回答 可能是我表達的不好,讓各位誤會了,其實我是想要下面圖形(左上角)的 這種型式,數字會隨著Trackbar的最大最小改變,可以將他做成一個元件, 因為要使用很多..... 我想請問一下m8815010,因為我很少看到人家用BCB 用到那麼深入(或許我看的還不夠),因為市面上的書籍很少提,有什麼地 方可以找到這方面的資料嗎?? 謝謝....
m8815010
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-09 17:38:16 IP:218.173.xxx.xxx 未訂閱
引言: 謝謝各位的回答 可能是我表達的不好,讓各位誤會了,其實我是想要下面圖形(左上角)的 這種型式,數字會隨著Trackbar的最大最小改變,可以將他做成一個元件, 因為要使用很多..... 我想請問一下m8815010,因為我很少看到人家用BCB 用到那麼深入(或許我看的還不夠),因為市面上的書籍很少提,有什麼地 方可以找到這方面的資料嗎?? 謝謝....
Terry6666兄你好< >: 還是不太懂你的需求,大概抓一下< >! 你需要一個新的TTrackBar物件,這個物件可以顯示它的Min、Max及Median數值,並且在 每次做Min、Max屬性變動時,顯示的值也會自動跟著變! 我的作法: 1.如果上述需求差不多的話,我會使用本問題一開始兩位大師的回覆的方式,也就是直接 使用3個TLabel去顯示TTrackBar的Min、Max、Median值,而不會用我之前的解法,因為那 樣太細了! >*> class="code"> In Unit1.h ~~ class TForm1 : public TForm { __published: // IDE-managed Components TButton *Button1; TButton *Button2; TButton *Button3; TButton *Button4; void __fastcall FormCreate(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall Button1Click(TObject *Sender); void __fastcall Button3Click(TObject *Sender); void __fastcall Button4Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //新TPanel物件宣告 class TMyPanel : public TPanel { __published: TTrackBar *TrackBar1; //1個TTrackBar TLabel *Lab1; //3個TLabel TLabel *Lab2; TLabel *Lab3; private: int TrackBar_Min; //TrackBar的Min值記錄 int TrackBar_Max; //TrackBar的Max值記錄 void __fastcall SetMinValue(int minvalue); //有設定TrackBar的Min值時會做的事件 void __fastcall SetMaxValue(int maxvalue); //有設定TrackBar的Max值時會做的事件 public: __fastcall TMyPanel(TComponent* Owner,int min,int max); //新TPanel物件的construct __property int Now_TrackBar_Min={read=TrackBar_Min,write=SetMinValue}; //設定TrackBar的Min值的替代變數 __property int Now_TrackBar_Max={read=TrackBar_Max,write=SetMaxValue}; //設定TrackBar的Max值的替代變數 }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1;

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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-10 13:36:39 IP:61.218.xxx.xxx 未訂閱
真的太謝謝你了.. 可以順便再請教你一下.. 我想要將中間的Range的寬度變小.. 我知道可以用"TBS_ENABLESELRANGE", 然後在CreateParms中使用.... 可是那似乎不能適用於這一個程式o 還有哪些方法可以使用呢??謝謝
bass15
高階會員


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-08-11 01:21:16 IP:61.59.xxx.xxx 未訂閱
不知道你的Range變小是什麼意思.. 基本上那個中間的格子數目就是TrackBar1->Max 想要把Range變小就把TrackBar1->Max調成2倍吧..就會細一點..當然如此一來你在計算Position就要控制好 變成2倍 不然你就把TrackBar1->Height 調短一點...
Terry6666
一般會員


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-08-11 07:51:01 IP:61.218.xxx.xxx 未訂閱
我是想要將中間空白的部分變窄..... 有些文章是利用CreateParm的時候 將TBS_...的部分修改..,可是如果繼承 Pannel的時候應該怎麼做呢??
Terry6666
一般會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-08-11 08:01:10 IP:61.218.xxx.xxx 未訂閱
順便再問一下...,那如果我要 讓Pannel上的元件跟Pannel一起變大變小 那麼是不是要加上Repaint事件...謝謝
m8815010
版主


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-08-14 19:16:47 IP:218.173.xxx.xxx 未訂閱
!
引言: 順便再問一下...,那如果我要 讓Pannel上的元件跟Pannel一起變大變小 那麼是不是要加上Repaint事件...謝謝 < face="Verdana, Arial, Helvetica"> Terry6666兄你好: 不太瞭解你說 >!嗯,也就是跟我的範例是寫成一個 >! 另外我範例的 class="code"> //TPanel物件的construct __fastcall TMyPanel::TMyPanel(TComponent* Owner,int min,int max,int tp,int lf,int wth,int hgt) : TPanel(Owner) { TrackBar_Min=min; //Min值記錄 TrackBar_Max=max; //Max值記錄 //新Panel物件自身初始值 this->Top=tp; this->Left=lf; this->Width=wth; this->Height=hgt; //TrackBar物件相關設定 TrackBar1=new TTrackBar(this); TrackBar1->Parent=this; TrackBar1->Min=min; TrackBar1->Max=max; TrackBar1->Top=1; TrackBar1->Width=hgt-2; TrackBar1->Height=wth/3*2; TrackBar1->Left=1; 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 TrackBar1->Width; Lab1->Width=10; Lab1->Caption=TrackBar1->Min; Lab2->Top=(TrackBar1->Top TrackBar1->Height)/2; Lab2->Left=TrackBar1->Left TrackBar1->Width; Lab2->Width=10; Lab2->Caption=(TrackBar1->Max TrackBar1->Min)/2; Lab3->Top=TrackBar1->Top TrackBar1->Height-20; Lab3->Left=TrackBar1->Left TrackBar1->Width; Lab3->Width=10; Lab3->Caption=TrackBar1->Max; } //真正要使用TPanel物件需要寫的程式碼 void __fastcall TForm1::FormCreate(TObject *Sender) { mypanel=new TMyPanel(this,1,10,150,100,60,200); //new新TPanel物件,並給定Min、Max值 mypanel->Parent=this; //必給 } 修改的部份就是讓TPanel上面的元件比較動態的跟著TPanel一起變大、變小,另外Unit1.h中construct的宣告不要忘了一起改掉! <> >! >! 嗯,太概就這樣了! 發表人 -
bass15
高階會員


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-08-15 03:04:48 IP:61.59.xxx.xxx 未訂閱
你要改變白色部分寬度的話 TrackBar1->ThumbLength=10; 應該可以吧...預設寬度是20..
Terry6666
一般會員


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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-08-16 08:47:02 IP:61.218.xxx.xxx 未訂閱
謝謝bass15,m8815010讓我了解這麼多.. 現在大概知道要如何來製作我自己想要的元件 真的感謝兩位的指導.. 尤其是m8815010,讓我獲益良多..
Terry6666
一般會員


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-08-16 09:43:40 IP:61.218.xxx.xxx 未訂閱
可以再問一下.... //真正要使用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時,就要寫這一段囉.....??
系統時間:2024-11-24 20:51:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!