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

如何改掉StringGrid某格的顏色?

尚未結案
a3802217
一般會員


發表:1
回覆:2
積分:0
註冊:2008-05-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-07 19:36:48 IP:203.71.xxx.xxx 訂閱
請問各位經驗豐富的各位:

我要如何改掉StringGrid某格的顏色? 由Edit來決定更改哪格的顏色 ^^" 謝謝
cobraliu
中階會員


發表:15
回覆:75
積分:83
註冊:2007-11-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-08 07:40:24 IP:220.143.xxx.xxx 訂閱
請參考
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-08 19:12:06 IP:203.71.xxx.xxx 訂閱
不好意思,沒有太深入去找文章 :P,  問題好像有點得到Key了,謝謝^^
a3802217
一般會員


發表:1
回覆:2
積分:0
註冊:2008-05-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-05-09 11:58:03 IP:203.71.xxx.xxx 訂閱
Mr.cobraliu
不好意思,我看不太懂那相連之文章@"@,那是SQL的語言嗎@@"
我是用BCB,且我不太懂 DrawCell那事件的用法,麻煩賜教^^"
編輯記錄
a3802217 重新編輯於 2008-05-09 11:58:41, 註解 無‧
cobraliu
中階會員


發表:15
回覆:75
積分:83
註冊:2007-11-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-05-09 14:00:13 IP:122.117.xxx.xxx 訂閱
借用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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-05-10 03:37:06 IP:123.195.xxx.xxx 訂閱
這是參考樓上大大提供的做法的BCB程式碼, 請參考...
其實直接用Grid->Canvas->FillRect()就可以改變顏色,
不過在畫面更新時, 顏色就會不見, 所以最後還是用一個陣列儲存顏色,
然後在OnDrawCell事件裏再更新顏色...

[code cpp]
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//建立與Grid相同大小的顏色陣列
GridColor = new TColor* [Grid->ColCount];

for (int i=0; iColCount; i )
GridColor[i] = new TColor[Grid->RowCount];

//設定顏色的初始值
for (int i=0; iColCount; i )
for (int k=0; kRowCount; 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; iColCount; 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 && ColColCount && Row>=0 && RowRowCount)
{ 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-06-28 15:24:10 IP:118.169.xxx.xxx 訂閱
請問一下,我要使用TColor需要include什麼東西嗎  
因為我都會出現 [C Error] UMain.cpp(28): E2451 Undefined symbol 'GridColor'

一般stringGrid不都是二維嗎?為什麼只要定義col啊.....

[code cpp]
GridColor = new TColor* [StringGrid->ColCount];
[/code]
------
lee
wjhsu
初階會員


發表:9
回覆:32
積分:48
註冊:2004-06-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-06-29 00:11:42 IP:123.195.xxx.xxx 訂閱
不是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]
系統時間:2024-05-08 7:54:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!