如何改掉StringGrid某格的顏色? |
尚未結案
|
a3802217
一般會員 發表:1 回覆:2 積分:0 註冊:2008-05-07 發送簡訊給我 |
|
cobraliu
中階會員 發表:15 回覆:75 積分:83 註冊:2007-11-22 發送簡訊給我 |
請參考
http://delphi.ktop.com.tw/board.php?cid=30&fid=1498&tid=92742 Find 就有答案,沒事要多Find...@@ ===================引 用 a3802217 文 章=================== 請問各位經驗豐富的各位: 我要如何改掉StringGrid某格的顏色? 由Edit來決定更改哪格的顏色 ^^" 謝謝
------
初學、初學、學了很久...還是在初學階段..Orz |
a3802217
一般會員 發表:1 回覆:2 積分:0 註冊:2008-05-07 發送簡訊給我 |
|
a3802217
一般會員 發表:1 回覆:2 積分:0 註冊:2008-05-07 發送簡訊給我 |
|
cobraliu
中階會員 發表:15 回覆:75 積分:83 註冊:2007-11-22 發送簡訊給我 |
借用PD版大的文章
1. private 下引用一組二維陣列與StringGrid 同大小 arygrid: array)10,10) of TColor; 2.在你的SQL判斷式下, 取出直通率的結果, 同時一個重點, 你必須知道要上色的直通率CELL值 例如 StringGrid1.Cell[3,5], 則設定 arygrid[3,5]:= clRed 3.最重要的是你必須在 StringGrid 的 onDrawCell事件上來上色 begin for c:= 0 to 9 do begin for r:= 0 to 9 do begin Canvas.Brush.Color:= arygrid[c,r]; // 這是要cell上色 Canvas.Font.Color:= arygrid[c,r]; // 這是要字體上色 (與上兩者選一) next; next; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left,Rect.Top,Cells[ACol,ARow]); //output text end; PD寫的部份不是屬於SQL,那是用陣列去存每一個Cell的顏色,只是提問題的人是要應用在SQL抓到的資料 PD版大寫的是雙重LOOP,再去抓陣列中的值回來設定Canvas的顏色 Drawcell是當去畫出每一個格子時所觸發的事件,意指Cell是用畫的(大略的意思),若你要知詳情你可以Find一下! 有很多文章有討論。 上述的文章,最大的差別是那是Delphi的語法寫的,你要轉成BCB 但在版大寫的概念上是用二維陣列去存顏色,再由雙重LOOP去設定顏色 BCB我是不太會寫,但我記得BCB的用法跟Delphi差不多 ===================引 用 a3802217 文 章=================== Mr.cobraliu 不好意思,我看不太懂那相連之文章@"@,那是SQL的語言嗎@@" 我是用BCB,且我不太懂 DrawCell那事件的用法,麻煩賜教^^"
------
初學、初學、學了很久...還是在初學階段..Orz |
wjhsu
初階會員 發表:9 回覆:32 積分:48 註冊:2004-06-13 發送簡訊給我 |
這是參考樓上大大提供的做法的BCB程式碼, 請參考...
其實直接用Grid->Canvas->FillRect()就可以改變顏色, 不過在畫面更新時, 顏色就會不見, 所以最後還是用一個陣列儲存顏色, 然後在OnDrawCell事件裏再更新顏色... [code cpp] //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { //建立與Grid相同大小的顏色陣列 GridColor = new TColor* [Grid->ColCount]; for (int i=0; i GridColor[i] = new TColor[Grid->RowCount]; //設定顏色的初始值 for (int i=0; i for (int k=0; k if (i==0 || k==0) GridColor[i][k] = clBtnFace; else GridColor[i][k] = clWhite; Grid->DefaultDrawing= false; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { for (int i=0; i if (GridColor[i]) delete [] GridColor[i]; if (GridColor) delete [] GridColor; } //--------------------------------------------------------------------------- void __fastcall TForm1::GridDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { Grid->Canvas->Brush->Color = GridColor[ACol][ARow]; Grid->Canvas->FillRect(Rect); } //--------------------------------------------------------------------------- void __fastcall TForm1::SetCellColor(int Col,int Row,TColor Color) { if (Col>=0 && Col { GridColor[Col][Row] = Color; Grid->Refresh(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::BitBtn1Click(TObject *Sender) { int Col,Row; if (!TryStrToInt(edCol->Text,Col)) return; if (!TryStrToInt(edRow->Text,Row)) return; SetCellColor(Col,Row,clRed); } [/code] |
small7011
一般會員 發表:19 回覆:34 積分:10 註冊:2007-07-24 發送簡訊給我 |
|
wjhsu
初階會員 發表:9 回覆:32 積分:48 註冊:2004-06-13 發送簡訊給我 |
不是TColor的問題,
要先在 MainForm的 類別宣告(.h檔) 裏定義一個 TColor **GridColor; 所以它是與StringGrid對應的"二維陣列"... 所以 GridColor = new TColor* [StringGrid->ColCount]; 只是先配置與StringGrid->ColCount數量相同TColor指標, 程式請繼續看下去... ===================引 用 small7011 文 章=================== 請問一下,我要使用TColor需要include什麼東西嗎 因為我都會出現 [C Error] UMain.cpp(28): E2451 Undefined symbol 'GridColor' 一般stringGrid不都是二維嗎?為什麼只要定義col啊..... [code cpp] GridColor = new TColor* [StringGrid->ColCount]; [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |