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

請問各位大大string grid 控制整列顏色的問題?

尚未結案
ohsula
一般會員


發表:12
回覆:17
積分:5
註冊:2004-03-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-07 23:05:02 IP:61.229.xxx.xxx 未訂閱
請問大大如何控制string grid整列顏色的變化: 1 程式執行時由第一列開始,顏色為藍色,判斷cell[3][1]之字串,如為pass    則變綠色;fail則變紅色 2 第一列執行完,跳至第二列,顏色為藍色,判斷cell[3][2]之字串,pass則    變綠色;fail同樣變為紅色 3 第三列開始,依此類推............    目前我的程式碼如下:    TForm1 *Form1; //----------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner)         : TForm(Owner) {      Timer1->Enabled=true;      Timer1->Interval=1000;      Timer2->Enabled=false;      Timer2->Interval=3000;      Timer3->Enabled=false;      Timer3->Interval=6000;      Timer4->Enabled=false;      Timer4->Interval=9000;      Timer5->Enabled=false;      Timer5->Interval=12000;      Timer6->Enabled=false;      Timer6->Interval=15000;    } //-----------------------------------------------------    void __fastcall TForm1::endClick(TObject *Sender) {   Close(); } //--------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) {    int i;       Label3->Caption="現在時刻:"+TimeToStr(Time());    sg->ColCount=4;    sg->RowCount=36;    for(i=1;iColCount;i ) { sg->ColWidths[i]=160; } sg->Cells[0][0]="SEQ"; sg->Cells[1][0]="Function"; sg->Cells[2][0]="Ext"; sg->Cells[3][0]="Status"; for(i=1;iRowCount;i ) { sg->Cells[0][i]=i; } } //----------------------------------------------------------- void __fastcall TForm1::sgDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { if(ACol>0) { if(ARow>0 && ARow<6) { if(sg->Cells[ACol][ARow]=="pass") { sg->Canvas->Brush->Color=clGreen; } else if(sg->Cells[ACol][ARow]=="fail") { sg->Canvas->Brush->Color=clRed; } else { sg->Canvas->Brush->Color=clWhite; } sg->Canvas->FillRect(Rect); sg->Canvas->TextOut(Rect.Left 10, Rect.Top 2,sg->Cells[ACol[ARow]); } } } //------------------------------------------------- void __fastcall TForm1::testClick(TObject *Sender) { Timer2->Enabled=true; Timer3->Enabled=true; Timer4->Enabled=true; Timer5->Enabled=true; Timer6->Enabled=true; } //-------------------------------------------------- void __fastcall TForm1::Timer4Timer(TObject *Sender) { sg->Cells[3][3]="pass"; sg->Repaint(); } //----------------------------------------------------- void __fastcall TForm1::Timer5Timer(TObject *Sender) { sg->Cells[3][4]="pass"; sg->Repaint(); } //------------------------------------------------------- void __fastcall TForm1::Timer6Timer(TObject *Sender) { sg->Cells[3][5]="fail"; sg->Repaint(); } //--------------------------------------------------------------- void __fastcall TForm1::Timer2Timer(TObject *Sender) { sg->Cells[3][1]="pass"; sg->Repaint(); } //--------------------------------------------------------------- void __fastcall TForm1::Timer3Timer(TObject *Sender) { sg->Cells[3][2]="pass"; sg->Repaint(); } //------------------------------------------------------------- Auston Huang
------
Auston Huang
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-08 14:19:27 IP:140.135.xxx.xxx 未訂閱
ohsula您好: 板上已經有相當多類似的討論囉 href="http://delphi.ktop.com.tw/topic.php?topic_id=40704">http://delphi.ktop.com.tw/topic.php?topic_id=40704 http://delphi.ktop.com.tw/topic.php?topic_id=41990 http://delphi.ktop.com.tw/topic.php?topic_id=42502 天使站長修改過的[搜尋]功能相當快,資料也相當多歡迎多加利用< > 順心< > ~我也是在學習的階段,回答的不好請您多多見諒與指教~
ohsula
一般會員


發表:12
回覆:17
積分:5
註冊:2004-03-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-09 22:18:03 IP:61.229.xxx.xxx 未訂閱
版上雖然有很多討論了,但因我是新手,接觸BCB才一個月,所以對許多程式碼好像似懂非懂,不知如何應用? 不知大大可否解說一下以下之程式碼: void __fastcall TForm1::StringGrid2DrawCell(TObject *Sender, int ACol,       int ARow, TRect &Rect, TGridDrawState State) {    if(ACol>0 && ARow>0)    {       if(StringGrid2->Cells[ACol][ARow]=="0")       {          StringGrid2->Canvas->Brush->Color=clRed;       }       else if(StringGrid2->Cells[ACol][ARow]=="1")       {          StringGrid2->Canvas->Brush->Color=clGreen;       }       else       {          StringGrid2->Canvas->Brush->Color=clBlue;       }       StringGrid2->Canvas->FillRect(Rect);       StringGrid2->Canvas->TextOut(Rect.Left+2, Rect.Top+2,                                    StringGrid2->Cells[ACol][ARow]);    } } void __fastcall TForm1::Button13Click(TObject *Sender) {    for(int i=1; iColCount; i ) { for(int j=1; jRowCount; j ) { StringGrid2->Cells[i][j]=IntToStr(((i j)%2)); } } StringGrid2->Repaint(); } Auston Huang
------
Auston Huang
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-09 22:25:51 IP:140.135.xxx.xxx 未訂閱
void __fastcall TForm1::StringGrid2DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
   if(ACol>0 && ARow>0)  
   {
      if(StringGrid2->Cells[ACol][ARow]=="0")
      {
         StringGrid2->Canvas->Brush->Color=clRed;  
        //若StringGrid其Cell[ACol][ARow]內容為0則塗上紅色
      }
      else if(StringGrid2->Cells[ACol][ARow]=="1")
      {
         StringGrid2->Canvas->Brush->Color=clGreen;
       //同理若StringGrid其Cell[ACol][ARow]內容為1則塗上綠色
      }
      else
      {
         StringGrid2->Canvas->Brush->Color=clBlue;
        //否則一開始全部Cell會是藍色
      }
      StringGrid2->Canvas->FillRect(Rect);
      StringGrid2->Canvas->TextOut(Rect.Left 2, Rect.Top 2,
                                   StringGrid2->Cells[ACol][ARow]);          //寫入文字到StringGrid1的Cell中
   }
}    void __fastcall TForm1::Button13Click(TObject *Sender)
{
   for(int i=1; iColCount; i  )
   {
      for(int j=1; jRowCount; j  )
      {
         StringGrid2->Cells[i][j]=IntToStr(((i j)%2));
         //利用Button3使得StrinGrid1的內容呈現
         /*
         01010101...
         10101010
         01010101
         10101010*/
      }
   }
   StringGrid2->Repaint();
}
順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~ 發表人 -
ohsula
一般會員


發表:12
回覆:17
積分:5
註冊:2004-03-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-09 23:18:51 IP:61.229.xxx.xxx 未訂閱
請問一開始為何一定要判斷: if(ACol>0 && ARow>) Auston Huang
------
Auston Huang
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-09 23:27:48 IP:140.135.xxx.xxx 未訂閱
if(ACol>0 && ARow>0)表示避開最上一列,與最左一行灰色的部分
ohsula
一般會員


發表:12
回覆:17
積分:5
註冊:2004-03-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-11 23:05:01 IP:61.229.xxx.xxx 未訂閱
請問如果我把上述程式碼編改如下: if(ACol>0 && ARow>0) { if(sg->Cells[3][ARow]=="") { sg->Canvas->Brush->Color=clYellow; } if(sg->Cells[3][ARow]=="pass") { sg->Canvas->Brush->Color=clGreen; } else if(sg->Cells[3][ARow]=="fail") { sg->Canvas->Brush->Color=clRed; } /* { sg->Canvas->Brush->Color=clWhite; }*/ sg->Canvas->FillRect(Rect); sg->Canvas->TextOut(Rect.Left 10, Rect.Top 2,sg->Cells[ACol][ARow]); } 那麼當程式一執行時,應該只有第一列呈現黃色不是嗎?但為什麼整個畫面都變成黃色呢? Auston Huang
------
Auston Huang
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-11 23:20:19 IP:140.135.xxx.xxx 未訂閱
ohsula您好: 您要的是像下面這樣嗎?
void __fastcall TForm1::sgDrawCell(TObject *Sender, int ACol, int ARow,
      TRect &Rect, TGridDrawState State)
{
  if(ACol>0 && ARow>0)
  {
    if(sg->Cells[3][ARow]=="")
    {
      sg->Canvas->Brush->Color=clYellow;
    }
    if(sg->Cells[3][ARow]=="pass")
    {
      sg->Canvas->Brush->Color=clGreen;
    }
    else if(sg->Cells[3][ARow]=="fail")
    {
      sg->Canvas->Brush->Color=clRed;
    }
    sg->Canvas->FillRect(sg->CellRect(3,ARow));
    sg->Canvas->TextOut(Rect.Left 10, Rect.Top 2,sg->Cells[3][ARow]);
  }
}
順心 發表人 -
ohsula
一般會員


發表:12
回覆:17
積分:5
註冊:2004-03-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-12 00:03:05 IP:61.229.xxx.xxx 未訂閱
taishyang你好: 依你的程式碼,一開始畫面第三行都變成黃色的,與我所想的第一列變成黃色好像有點出入呢?不過,還是謝謝你的指導。 Auston Huang
------
Auston Huang
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-03-12 00:08:23 IP:140.135.xxx.xxx 未訂閱
ohsula您好: 因為我是看您的程式推敲您要表達的意思,那現在試試 
  if(ACol>0 && ARow>0)
  {
    if(sg->Cells[ACol][1]=="")
    {
      sg->Canvas->Brush->Color=clYellow;
    }
    if(sg->Cells[ACol][1]=="pass")
    {
      sg->Canvas->Brush->Color=clGreen;
    }
    else if(sg->Cells[ACol][1]=="fail")
    {
      sg->Canvas->Brush->Color=clRed;
    }
    sg->Canvas->FillRect(sg->CellRect(ACol,1));
    sg->Canvas->TextOut(Rect.Left 10, Rect.Top 2,sg->Cells[ACol][1]);
  }
順心 發表人 -
系統時間:2024-11-22 22:17:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!