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

CheckListBox的DrawItem事件問題

尚未結案
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-28 09:33:54 IP:61.220.xxx.xxx 未訂閱
問題:我需要在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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-28 16:38:41 IP:218.19.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-28 16:43:22 IP:218.19.xxx.xxx 未訂閱
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

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