全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1825
推到 Plurk!
推到 Facebook!

C++ Builder 中的自畫功能

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-11-17 05:46:14 IP:61.64.xxx.xxx 未訂閱
此為轉貼資料 C Builder 中的自畫功能 2001-12-22· ·TopCat·· 1 2 3 下一頁 也許你都看見過一些列表框啦、下拉清單啦什?的,他們的選項不是文字而是圖形。比如像Word 97中設置字體的對話方塊裏有一項“下劃線”設置,其選項中就是各種線形,給人非常直觀的感覺。這種下拉清單在C Builder中能做出來嗎? Of course!我在自己的程式中,就成功地使用了這種列表框完成了線形的設置。OK,下面我們就來實際做一個程式。這個程式的作用是這樣的:使用下拉清單框選擇一種?色,並把Label1的文字設置成該?色。 先在Form上放一個ComboBox,取名?ComboBox1。把(注意是關鍵哦!)Style改?csOwnerDrawFixed,注意這一步很重要,因?如果不改成OwerDraw形式的話,就不會觸發後面要用到的OnDrawItem事件。另外,?了編程方便,我們定義一個?色陣列(簡單起見,就用五種?色): const TColor colors[5] = {clBlack, clWhite, clRed, clBlue, clGreen}; 再在ComboBox的Items裏寫上5行:黑色、白色、紅色、蘭色、綠色。 最後在ComboBox的OnDrawItem裏寫上如下代碼: void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State) //Control是需要自畫的控制項,Index是項數索引(從0開始),Rect是該項的繪畫範圍,State表示狀態 //(選中、聚焦、無效等) { //畫?色索引的小方塊 ((TComboBox *)Control)->Canvas->Brush->Color = colors[Index]; ((TComboBox *)Control)->Canvas->Brush->Style = bsSolid; ((TComboBox *)Control)->Canvas->FillRect(Classes::Rect(Rect.Left 2, Rect.Top 2, Rect.Left 14, Rect.Bottom-2)); //之所以用Classes::Rect是因?與參數重名 ((TComboBox *)Control)->Canvas->Pen->Color = clBlack; ((TComboBox *)Control)->Canvas->Rectangle(Rect.Left 1, Rect.Top 1, Rect.Left 15, Rect.Bottom-1); //寫文字 ((TComboBox *)Control)->Canvas->Font->Color = clBlack; ((TComboBox *)Control)->Canvas->Font->Name = "宋體"; ((TComboBox *)Control)->Canvas->Font->Size = 9; ((TComboBox *)Control)->Canvas->Brush->Style = bsClear; ((TComboBox *)Control)->Canvas->TextOut(Rect.Left 20, Rect.Top 2, ((TComboBox *)Control)->Items->Strings[Index]); //標記當前滑鼠所在項(焦點項)[本例中在外邊畫個藍方框表示] if(State.Contains(odFocused)) { ((TComboBox *)Control)->Canvas->Pen->Color = clBlue; ((TComboBox *)Control)->Canvas->Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom); } else { ((TComboBox *)Control)->Canvas->Pen->Color = clWhite; ((TComboBox *)Control)->Canvas->Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom); } } 好了,至此,一個自畫的列表框就完成了。接下來的事情就非常簡單了: 在ComboBox的OnChange事件中寫以下代碼: void __fastcall TForm1::ComboBox1Change(TObject *Sender) { Label1->Font->Color = colors[ComboBox1->ItemIndex]; } 就完成了Label字體變色的功能,我想不用解釋了吧?運行看看效果吧!
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-04-26 20:26:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!