国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

裝扮工具提示條

2019-11-18 18:58:39
字體:
來源:轉載
供稿:網友
Delphi技巧之

裝扮工具提示條

什么是工具提示條?在Windows程序中,當鼠標移動到工具條相應的按鈕上時,會彈出一個小窗口來說明該按鈕的作用,這個小窗口就叫做工具提示條。一般情況下它的背景色為淡黃色,字體色為黑色。面對這樣千篇一律的面孔不知你是不是有些厭煩,是否想過給它化化妝,使其改頭換面呢?下面我們就以Delphi為工具,對它動些小手術。

Delphi中,我們可以設置控件的HintShowHint屬性來顯示工具提示條。當然,這并不是我們所希望的效果。幸好Delphiapplication對象中給我們提供了HintColor屬性,用它可以設置工具提示條的背景顏色。在程序主窗體的創建事件中寫入Application.HintColor:=clRed,然后運行一下,怎么樣?效果不錯吧,背景變成紅色了。接下來的問題是,我們如何來改變顯示文字的顏色。(嗯,讓我好好想想)

Delphi中有一個THintWindow類,看名字就知道它是干什么的了。不錯,Delphi就是通過它來實現工具提示條的。在它的創建方法(Create)中只有四條語句:

Constructor THintWindow.Create(AOwner: TComponent);

Begin

  Inherited Create (AOwner);

  Color := $80FFFF;

  Canvas.Font := Screen.HintFont;

  Canvas.Brush.Style := bsClear;

End;

它首先重載了父類的創建方法,然后設置了背景顏色、字體和畫刷樣式。從這里可以設想一下,如果我們創建一個THintWindow的派生類,并重載它的創建方法,然后在此方法中重新定義字體,不就實現了我們所希望的效果嗎?那就讓我們行動起來吧。

首先新建一應用程序,在Form1窗體上添加一個用于測試的按鈕Button1,設置ShowHint屬性為TrueHint屬性為“這是一個按鈕”,然后在代碼頁的Implementation部分前面聲明MyHint類:

Type

  MyHint=class (THintWindow)

    Constructor Create (AOwner: TComponent); override;

  End;

該類只有一個方法,用override關鍵字來表示重載了父類(THintWindow)的創建方法。接著在Implementation部分寫入此方法的代碼:

Constructor MyHint.Create(AOwner: TComponent);

Begin

  inherited Create(AOwner);    //重載父類方法

  with Canvas do begin    //設置字體

    Font.Name := '楷體_GB2312';

    Font.Color :=clYellow;

    Font.Size :=20;

    Brush.Style := bsClear;

  End;

End;

在此過程中我們重新定義了字體的名稱、顏色及大小,現在就可以使用這個新類了。那么如何使用呢?這里還要說明一點:在Delphi中有一個隱含的變量HintWindowClass,它的作用就是指定在程序運行時顯示的工具提示條所使用的類,其聲明如下:

var HintWindowClass: THintWindowClass = THintWindow;

在程序中我們可以動態改變此變量,如在主窗體的創建事件中寫入:HintWindowClass:=MyHint;這樣就可以讓它使用我們新創建的類了。好了,現在來運行一下程序,看看效果如何?工具提示條的字體變成了楷體,尺寸也變大了,顏色……,怎么顏色沒有改變呢?新的問題出現了,還是再看看THintWindow的代碼吧。

問題就出在THintWindowPaint方法上,其代碼如下:

PRocedure THintWindow.Paint;

var

  R: TRect;

Begin

  R := ClientRect;

  Inc (R.Left, 2);

  Inc (R.Top, 2);

  Canvas.Font.Color := clInfoText;    //請注意這一句

  DrawText(Canvas.Handle, PChar(Caption), -1, R, DT_LEFT or DT_NOPREFIX or DT_WordBREAK or DrawTextBiDiModeFlagsReadingOnly);

End;

原來THintWindow在它的Paint方法中又重新改變了字體顏色。沒辦法,只好重寫Paint方法了。在MyHint類中再聲明一個重載方法:Procedure Paint; Override;然后將THintWindowPaint方法的代碼照搬過來,再將Canvas.Font.Color := clInfoText;這一句刪除掉。至此就大功告成了,再運行一下程序看看,這下一點問題都沒有了。

也許你會說:“其實我們也不用重載THintWindowCreate方法,只需重載Paint方法即可,然后在其中設置背景及字體,這樣會省事得多啦。”當然,這樣也行得通,不過你會發現有一點小小的遺憾,是什么?自己試試吧。(什么?沒有?!當我沒說!)


上一篇:創建Borland風格的漂浮式窗口

下一篇:如何在狀態欄中加入圖標(或圖片),還有動態的時間

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 贺州市| 湖北省| 宜昌市| 武汉市| 尖扎县| 沙湾县| 揭东县| 古丈县| 焉耆| 马关县| 霍邱县| 邓州市| 江陵县| 甘洛县| 海宁市| 梨树县| 陈巴尔虎旗| 昌宁县| 静海县| 精河县| 驻马店市| 黄骅市| 中卫市| 松阳县| 西和县| 高碑店市| 泸溪县| 房产| 江达县| 易门县| 出国| 温宿县| 驻马店市| 永康市| 兴化市| 山东| 前郭尔| 中牟县| 桑日县| 桐柏县| 樟树市|