CheckListBox的DrawItem事件問題 |
尚未結案
|
pireer
初階會員 發表:73 回覆:80 積分:30 註冊:2004-12-14 發送簡訊給我 |
問題:我需要在CheckListBox每一個items上畫兩個正方形的圖.並有勾選跟無勾選用不同顏色表示.但是有錯誤發生. 錯誤1.clRed.畫不出來.但換上其他顏色就可以.
錯誤2.當資料大於範圍時.應該要畫藍色.但是畫一下藍色又變成clMaroon顏色. 而且畫面會閃爍. 請前輩們指導..謝謝 例:當有勾選時顯示顯示clRed與clLime..無勾選顯示clMaroon與clGreen. 程式碼如下:
void __fastcall TFormMain::TMGItemDrawItem(TWinControl *Control, int Index,
TRect &Rect, TOwnerDrawState State)
{
Graphics::TBitmap *ABitmap;
int Offset = 2,i,j;
TCanvas *pCanvas = ((TListBox *)Control)->Canvas;
pCanvas->FillRect(Rect); ABitmap = new Graphics::TBitmap; for (i=0;i<2;i )
{
ABitmap->Width = 10;
ABitmap->Height = 10;
ABitmap->Canvas->Pen->Color = clBlack;
if (i==0) //第一個方塊 紅
{
if (TMGItem->Checked[Index] == true)
{
if (TMG_BackupData[i][Temperature] >= Chart1->LeftAxis->Maximum ) //判斷資料是否大於範圍
ABitmap->Canvas->Brush->Color = clBlue//紅色畫不出藍色代替clRed;
else
ABitmap->Canvas->Brush->Color = clMaroon;
}
else
ABitmap->Canvas->Brush->Color = clMaroon;
}
else //第二個方塊 綠
{ if (TMGItem->Checked[Index] == true)
{
if (TMG_BackupData[i][Temperature] < Chart1->LeftAxis->Minimum )
ABitmap->Canvas->Brush->Color = clLime;
else
ABitmap->Canvas->Brush->Color = clGreen;
}
else
ABitmap->Canvas->Brush->Color = clGreen;
}
ABitmap->Canvas->Brush->Style = bsSolid;
ABitmap->Canvas->Rectangle( 1, 1,10,10); if (ABitmap)
{
pCanvas->BrushCopy(Bounds(Rect.Left Offset, Rect.Top 2, ABitmap->Width, ABitmap->Height), ABitmap, Bounds(0, 0, ABitmap->Width, ABitmap->Height), clRed); // render bitmap
Offset = ABitmap->Width 4; // add four pixels between bitmap and text
} } pCanvas->TextOut(Rect.Left Offset,Rect.Top, ((TListBox *)Control)->Items->Strings[Index]); delete ABitmap; 發表人 - pireer 於 2005/01/28 11:18:05 發表人 - pireer 於 2005/01/28 11:21:41
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
pireer 您好: 我用虛擬的方式設定假設條件來測試了您寫的程序,似乎您提到的第一個問題是出在有使用到 BrushCopy 函數的那一行,我試著將該函數最後一個參數由 clRed 改成 clBlack 之後,若執行條件符合的話,有執行到您所標註設定 clRed 無效的那一行敘述的話 (記得要將您暫時代用的 clBlue 改回 clRed),是可以顯示出 clRed 顏色的方塊的。 至於第二個問題,在我的操作環境 (W2K + BCB4) 裡並未發生變色與閃爍的現象,因此我無法確認問題的所在,您可以透過 K.Top 的搜尋功能,以 "閃爍" 字樣為搜尋關鍵字,可以在站上找到不少的相關討論,例如下列這幾篇:
http://delphi.ktop.com.tw/topic.php?topic_id=48547
http://delphi.ktop.com.tw/topic.php?topic_id=54078
http://delphi.ktop.com.tw/topic.php?topic_id=39599
http://delphi.ktop.com.tw/topic.php?topic_id=54203
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
pireer 您好: 我用虛擬的方式設定假設條件來測試了您寫的程序,似乎您提到的第一個問題是出在有使用到 BrushCopy 函數的那一行,我試著將該函數最後一個參數由 clRed 改成 clBlack 之後,若執行條件符合的話,有執行到您所標註設定 clRed 無效的那一行敘述的話 (記得要將您暫時代用的 clBlue 改回 clRed),是可以顯示出 clRed 顏色的方塊的。 至於第二個問題,在我的操作環境 (W2K + BCB4) 裡並未發生變色與閃爍的現象,因此我無法確認問題的所在,您可以透過 K.Top 的搜尋功能,以 "閃爍" 字樣為搜尋關鍵字,可以在站上找到不少的相關討論,例如下列這幾篇:
http://delphi.ktop.com.tw/topic.php?topic_id=48547
http://delphi.ktop.com.tw/topic.php?topic_id=54078
http://delphi.ktop.com.tw/topic.php?topic_id=39599
http://delphi.ktop.com.tw/topic.php?topic_id=54203
|
pireer
初階會員 發表:73 回覆:80 積分:30 註冊:2004-12-14 發送簡訊給我 |
引言: pireer 您好: 我用虛擬的方式設定假設條件來測試了您寫的程序,似乎您提到的第一個問題是出在有使用到 BrushCopy 函數的那一行,我試著將該函數最後一個參數由 clRed 改成 clBlack 之後,若執行條件符合的話,有執行到您所標註設定 clRed 無效的那一行敘述的話 (記得要將您暫時代用的 clBlue 改回 clRed),是可以顯示出 clRed 顏色的方塊的。 至於第二個問題,在我的操作環境 (W2K BCB4) 裡並未發生變色與閃爍的現象,因此我無法確認問題的所在,您可以透過 K.Top 的搜尋功能,以 "閃爍" 字樣為搜尋關鍵字,可以在站上找到不少的相關討論,例如下列這幾篇: http://delphi.ktop.com.tw/topic.php?topic_id=48547 http://delphi.ktop.com.tw/topic.php?topic_id=54078 http://delphi.ktop.com.tw/topic.php?topic_id=39599 http://delphi.ktop.com.tw/topic.php?topic_id=54203hi RedSnow 第一個問題依照你的方法已解決. 第二個問題是指當我有勾選時.才判斷資料是否大於我設的值. 如果是就顯示亮紅色..如果不是就顯示暗紅色. 判斷是下列紅色的字部分. 我測試之後當大於時會顯示亮紅.不過馬上又變回暗紅.此時資料還是都大於設定值.. if (i==0) //第一個方塊 紅 { if (TMGItem->Checked[Index] == true) { if (TMG_BackupData[i][Temperature] >= Chart1->LeftAxis->Maximum ) //判斷資料是否大於範圍 ABitmap->Canvas->Brush->Color = clBlue//紅色畫不出藍色代替clRed; else ABitmap->Canvas->Brush->Color = clMaroon; } else ABitmap->Canvas->Brush->Color = clMaroon; } |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |