StringGrid的Cell上色問題 |
尚未結案
|
khaupe
一般會員 ![]() ![]() 發表:28 回覆:25 積分:15 註冊:2003-06-30 發送簡訊給我 |
狀況說明:
先說聲抱歉 , 標題下得不是很好 , 我知道Cell上底色的問題很簡單 , 但我的情況略有不同.
我希望程式有以下功能:
1.有個TColor陣列 , 有個RowCount=2的StringGrid , 一個按鈕
2.Button按一下 , Cell[0][1]上底色 color=TColor[0] , RowCount
3.Button再按一下 , Cell[0][2]上底色 color=TColor[1] , RowCount
.
.
.
依此類推 目前做法:
其實我也只會很基本的 , 就像下文提的方法
http://delphi.ktop.com.tw/topic.php?topic_id=74924
雖然我是用TAdvStringGrid , 但試過DrawCell與GetCellColor , 都有同一個問題----Button按第二下時 , 第一下設定的顏色被清除 . 按第三下時 , 第二下的被清除
我想是因為整個StringGrid的Canvas重畫的關係 請問這有辦法解決嗎?? --------------------------------------------------------
我目前的解決方案是:
每按一下 , 就將每個cell對應的顏色紀錄到一個陣列去
然後每次都全部畫一次
但這樣挺麻煩的 , 且覺得在這種功能上用這麼多code很礙眼 可以利用StringGrid本身的功能而有更簡單的作法嗎?
|
rogan321
高階會員 ![]() ![]() ![]() ![]() 發表:21 回覆:307 積分:200 註冊:2003-05-15 發送簡訊給我 |
|
RedSnow
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
khaupe 您好: 既然都已經動用 DrawCell 程序了,那就無所謂 "每次都重畫" 的問題了,因為無論是否有變更底色,StringGrid 都僅在有需要作重繪動作時,才會觸發 DrawCell 程序。 對於 Cell 填上不同底色的問題,您僅需在 DrawCell 程序中抓取繪製的 Row 值,並將對應於 Row 的顏色值取出設給 Brush 的 Color,然後填滿對應的格子即可,例如:
TColor c[16] = {clBlack, clMaroon, clGreen, clOlive, clNavy, clPurple, clTeal, clGray, clSilver, clRed, clLime, clYellow, clBlue, clFuchsia, clAqua, clWhite}; void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { if (ACol == 0 && ARow > 0) { StringGrid1->Canvas->Brush->Color = c[ARow-1]; StringGrid1->Canvas->FillRect(Rect); } } void __fastcall TForm1::Button1Click(TObject *Sender) { StringGrid1->RowCount ; }以上範例未做最佳化與防錯處理,請自行加上相關設定與檢查動作。 7 天天敲鍵盤 v 時時按滑鼠 8 |
khaupe
一般會員 ![]() ![]() 發表:28 回覆:25 積分:15 註冊:2003-06-30 發送簡訊給我 |
感謝RedSnow的指導 , 我要的功能已經做出來了 雖然沒什麼 , 但得之於本站也該回饋本站
因此抽出這部份功能在以下連結
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=76254
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |