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

改變BitBtn的Brush color時的一個奇怪狀況~~

尚未結案
jojoboy
初階會員


發表:65
回覆:108
積分:34
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-23 16:58:45 IP:61.220.xxx.xxx 未訂閱
請教各方前輩: 我在書面上放了十個BitBtn時,其中1至6個BitBtn的OnClick事件裡我寫了以下改底變色的程式,但..有一個奇怪的狀況,但我按下前六個BitBtn時,雖然會正確改變為我所要的底色,但...按了另外的BitBtn按鈕時,又會變為原來的底色了,最令我百思不解的是,為什麼7至10的BitBtn鈕,我根本沒有在OnClick事件中寫入任何程式碼,為什麼....依然會將1至6的BitBtn鈕變為原來的底色.....?? procedure Tmain.BitBtn1Click(Sender: TObject); var AText: string; APoint: TPoint; ARect: TRect; ACanvas: TCanvas; begin ACanvas := TCanvas.Create; with ACanvas do begin try Handle := GetDC(TBitBtn(Sender).Handle); Brush.Color := clLime; ACanvas.Font := (Sender as TBitBtn).Font; AText := TBitBtn(Sender).Caption; ARect := TBitBtn(Sender).ClientRect; with ARect do begin APoint.X := (Right - Left) div 2 - TextWidth(AText) div 2; APoint.Y := (Bottom - Top) div 2 - TextHeight(AText) div 2; TextRect(ARect, Left APoint.X, Top APoint.Y, AText); end; finally ACanvas.Free; end; end; end;
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-23 19:11:15 IP:203.204.xxx.xxx 未訂閱
jojoboy 你好 1.改變底色的程式碼是在OnClick事件中,因此只會在OnClick時改變底色 ,當有別的事件發生時(失去焦點時、畫面更新時.....)它就不知道你要改為什麼顏色,所以它還是clBtnFace的顏色來填色(*)。 2.為了讓按鈕的底色持續有效,你必須改寫元件,增加一個底色的屬性並開放出來(你才可以在屬性檢視器中設定值),然後在相關事件程序中來更改顏色。 * ps:按bitbtn1時觸發onClick事件所以它有改變顏色,同時也取得焦點 但按bitbtn7時,則bitbtn7取得焦點,而bitbtn1卻失去焦點了,此時bitbtn1就被改回原來的顏色了。或是把視窗縮小再還原也是一樣改回原來的樣子。
jojoboy
初階會員


發表:65
回覆:108
積分:34
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-24 09:16:42 IP:61.220.xxx.xxx 未訂閱
感謝前輩的回答....... 但........有一個疑問..... 因為我有做快速鍵的功能, 所以我利用PopupMenu來搭配此功能,但有一個奇怪的現像.. 當我利用PopupMenu中的Item的OnClick事件中寫入以下程式碼時.. 顏色就不會在失去焦點時變回原來的顏色......... 不知道是為什麼?? procedure Tmain.N11Click(Sender: TObject); begin BitBtn1Click(Main.BitBtn1); end;
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-24 19:02:57 IP:211.20.xxx.xxx 未訂閱
引言: procedure Tmain.N11Click(Sender: TObject); begin BitBtn1Click(Main.BitBtn1); end;
jojoboy 你好 當滑鼠按下Bitbtn的時候,對於Bitbtn來說,它會處理很多事情,諸如按鈕內部狀態的改變,視覺畫面重繪、取得焦點及觸發OnClick的事件等等,而OnClick事件(是一個程序)只是諸多動作中的一件事而已,而你在Popmenu中執行BitbtnClick(),也僅是執行該程序罷了,並沒有執行到按鈕按下時所引發的諸多事件,且該按鈕也並未取無點,所以也不會有失去焦點的事件發生
jojoboy
初階會員


發表:65
回覆:108
積分:34
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-26 17:10:47 IP:61.220.xxx.xxx 未訂閱
謝謝前輩的回應..... 讓我又長了知識增了智慧...... Thanks
系統時間:2024-05-19 6:25:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!