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

問一個有關TStatusBar元件的問題~

答題得分者是:axsoft
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-29 15:12:14 IP:61.222.xxx.xxx 未訂閱
請問各位先進: 我在使用tstatus元件用成2panel,我想在第2個panel的內容為:"測試 畫一個圓" 1.當button1按下去時,在第一個panel出現"button 1 click",在第二個panel出現:測試字樣和一個紅色實心圓形 2.當button2按下去時,在第一個panel出現"button 2 click",在第二個panel出現:測試字樣和一個綠色實心圓形 請問各位指導或有範例說明~ 謝謝 發表人 - kenbcb 於 2003/07/30 11:10:20 發表人 - kenbcb 於 2003/08/05 18:04:14
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-29 15:26:53 IP:210.66.xxx.xxx 未訂閱
kenbcb你好, 首先你要先將兩個statusbar中的panels各新增一個TStatusPanels    在加入以下的程式碼就可以了     
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    StatusBar1->Panels->Items[0]->Text="button 1 click";
    StatusBar2->Panels->Items[0]->Text="測試字樣和一個紅色實心圓形";    }
//------------------------------------------------------------    void __fastcall TForm1::Button2Click(TObject *Sender)
{
    StatusBar1->Panels->Items[0]->Text="button 2 click";
    StatusBar2->Panels->Items[0]->Text="測試字樣和一個綠色實心圓形";    }
參考看看 國泰平安
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-29 16:01:48 IP:61.222.xxx.xxx 未訂閱
不好意思~你可能誤會意思了~我所說的實心圓形是用畫的 是在panel2==>"測試" 圓形
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-29 16:23:10 IP:210.66.xxx.xxx 未訂閱
呵呵呵~    我現在懂了~ 是一個StatusBar上用兩個Panel來顯示嗎?    如果是的話 Statusbar上不知道可不可以畫圖耶... 我想,它本身不能畫圖,可能要藉用其他的元件幫忙哦, 看看其他前輩是否有高解~ 國泰平安
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-29 18:16:50 IP:61.218.xxx.xxx 未訂閱
kenbcb您好:    試試下面幾種方法:
方法一.
void __fastcall TForm1::StatusBar1DrawPanel(TStatusBar *StatusBar,
TStatusPanel *Panel, const TRect &Rect)
{
  TCanvas & c = *StatusBar->Canvas;      if ( Panel->Index == 0 ) // 0 - this is the first status panel.
   {
   Graphics::TBitmap *Image = new Graphics::TBitmap; 
   ImageList1->GetBitmap( 0, Image );
   c.Draw ( Rect.Left, Rect.Top, Image );
   delete Image;
   }
}    方法二.    void __fastcall TForm1::FormCreate(TObject *Sender)
{
 TImage *Image1=new TImage(this);
 Image1->Picture->LoadFromFile("Circle.ico");
 Image1->Parent =StatusBar1;
 Image1->Left = 2;
 Image1->Top = 2;
 //delete Image1;
}
//---------------------------------------------------------------------------    方法三.
Here's a call from an included resource file:     Graphics::TBitmap *MySBImage = new Graphics::TBitmap();
MySBImage = LoadFromResourceName(0, "MyBitmap");
StatusBar1->Canvas->Draw( Rect.Left   62, Rect.Top  2, MySBImage);    顯示時間文字
void __fastcall TForm1::Timer1Timer(TObject *Sender) 
{ 
    StatusBar1->Panels->Items[1]->Text = 
        FormatDateTime("hh:nn:ss", Now()); 
}     
HAVE A NICE DAY FOR YOU 發表人 - axsoft 於 2003/07/29 18:18:40
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-29 18:22:38 IP:61.222.xxx.xxx 未訂閱
但我要寫字和畫一個實心圓,不是載入圖片~
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-29 18:37:55 IP:61.218.xxx.xxx 未訂閱
引言: 但我要寫字和畫一個實心圓,不是載入圖片~
kenbcb您好:    寫程式的方法千百種,我想不必一定一固執用某一種方法吧!
再試試吧!    Statusbar的Canvas方法中並無畫圓的方法,我用TShape來替代
< src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10904307&CC=243873">    void __fastcall TForm1::FormCreate(TObject *Sender)
{
 TShape *Shape1=new TShape(this);
 Shape1->Shape=stCircle;
 Shape1->Brush->Color=clLime; //塗滿的顏色
 Shape1->Pen->Color=clBlack;  //外框的顏色
 Shape1->Height=16;
 Shape1->Width=16;
 Shape1->Parent =StatusBar1;
 Shape1->Left=2;
 Shape1->Top= 2;     StatusBar1->Panels->Items[1]->Text ="TEXT";
  //delete Shape1;
}
//---------------------------------------------------------------------------
至於你要的panel2==>"測試"+圓形,給你自己動動腦吧! 給你魚吃不如給你一根釣竿....試試吧! HAVE A NICE DAY FOR YOU 發表人 - axsoft 於 2003/07/29 18:53:22
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-30 09:46:46 IP:61.222.xxx.xxx 未訂閱
謝謝指導~
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-07-30 11:05:48 IP:210.66.xxx.xxx 未訂閱
hi kenbcb~    恭喜你對這個問題找到可行的解答, 最後不忘提醒一下, 那個標題........... 可不可以改一下呢? 有個小錯誤~  國泰平安
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-08-05 17:53:57 IP:61.218.xxx.xxx 未訂閱
kenbcb您好:    不知你的panel2==>"測試"+圓形實做出來了嗎? 我提供下面兩個解法,給您參考,也請您把標題的錯誤TStstusBar改成TStatusBar
方法一:
    //---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;    //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::StatusBar1DrawPanel(TStatusBar *StatusBar,
      TStatusPanel *Panel, const TRect &Rect)
{      TCanvas *pCanvas = StatusBar->Canvas;
  pCanvas->TextOut(Rect.left + 20, Rect.top + 2, "Panel" + IntToStr(Panel->Index));    }
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
   StatusBar1->Panels->Items[1]->Style=psOwnerDraw;
   TShape *Shape1=new TShape(this);
   Shape1->Shape=stCircle;
   Shape1->Brush->Color=clLime; //塗滿的顏色
   Shape1->Pen->Color=clBlack;  //外框的顏色
   Shape1->Height=16;
   Shape1->Width=16;
   Shape1->Parent =StatusBar1;       Shape1->Left=StatusBar1->Panels->Items[1]->Width+3; 
   //TShape在TStatusBar1 Panel2的位置
   Shape1->Top= 3;
}
//---------------------------------------------------------------------------        方法二:

//---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TProgressBar *ProgressBar1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::StatusBar1DrawPanel(TStatusBar *StatusBar,
      TStatusPanel *Panel, const TRect &Rect)
{      TCanvas *pCanvas = StatusBar->Canvas;      pCanvas->Brush->Color = clRed;      pCanvas->FillRect(Rect);
  pCanvas->Font->Color = clYellow;
  ImageList1->Draw(pCanvas,Rect.Left,Rect.Top, Panel->Index, true);
  pCanvas->TextOut(Rect.left + 20, Rect.top + 2, "Panel" + IntToStr(Panel->Index));    }
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
   StatusBar1->Panels->Items[3]->Style=psOwnerDraw;
   StatusBar1->Panels->Items[2]->Style=psOwnerDraw;    }
//---------------------------------------------------------------------------    
HAVE A NICE DAY FOR YOU 發表人 - axsoft 於 2003/08/05 17:58:28
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-08-05 18:02:50 IP:61.222.xxx.xxx 未訂閱
感謝指導~ 我己經解決定問題了
licheer
一般會員


發表:23
回覆:20
積分:8
註冊:2007-08-19

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-12-21 09:57:22 IP:220.130.xxx.xxx 訂閱
請問這個寫法,跑出來的文字跟圖案
為什麼有其他視窗擋住後, 就會沒結果顯示呢?
要如何改成不被影響呢?
謝謝
系統時間:2024-05-03 22:03:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!