改變BitBtn的Brush color時的一個奇怪狀況~~ |
尚未結案
|
jojoboy
初階會員 發表:65 回覆:108 積分:34 註冊:2002-03-13 發送簡訊給我 |
請教各方前輩:
我在書面上放了十個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 發送簡訊給我 |
jojoboy 你好 1.改變底色的程式碼是在OnClick事件中,因此只會在OnClick時改變底色 ,當有別的事件發生時(失去焦點時、畫面更新時.....)它就不知道你要改為什麼顏色,所以它還是clBtnFace的顏色來填色(*)。
2.為了讓按鈕的底色持續有效,你必須改寫元件,增加一個底色的屬性並開放出來(你才可以在屬性檢視器中設定值),然後在相關事件程序中來更改顏色。 * ps:按bitbtn1時觸發onClick事件所以它有改變顏色,同時也取得焦點
但按bitbtn7時,則bitbtn7取得焦點,而bitbtn1卻失去焦點了,此時bitbtn1就被改回原來的顏色了。或是把視窗縮小再還原也是一樣改回原來的樣子。
|
jojoboy
初階會員 發表:65 回覆:108 積分:34 註冊:2002-03-13 發送簡訊給我 |
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: procedure Tmain.N11Click(Sender: TObject); begin BitBtn1Click(Main.BitBtn1); end;jojoboy 你好 當滑鼠按下Bitbtn的時候,對於Bitbtn來說,它會處理很多事情,諸如按鈕內部狀態的改變,視覺畫面重繪、取得焦點及觸發OnClick的事件等等,而OnClick事件(是一個程序)只是諸多動作中的一件事而已,而你在Popmenu中執行BitbtnClick(),也僅是執行該程序罷了,並沒有執行到按鈕按下時所引發的諸多事件,且該按鈕也並未取無點,所以也不會有失去焦點的事件發生 |
jojoboy
初階會員 發表:65 回覆:108 積分:34 註冊:2002-03-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |