裝扮工具提示條 (轉)
技巧之:namespace prefix = o ns = "urn:schemas--com::office" />
裝扮工具提示條
什麼是工具提示條?在中,當滑鼠移動到工具條相應的按鈕上時,會彈出一個小視窗來說明該按鈕的作用,這個小視窗就叫做工具提示條。一般情況下它的背景色為淡黃色,字型色為黑色。面對這樣千篇一律的面孔不知你是不是有些厭煩,是否想過給它化化妝,使其改頭換面呢?下面我們就以Delphi為工具,對它動些小手術。
在Delphi中,我們可以設定的Hint和ShowHint屬性來顯示工具提示條。當然,這並不是我們所希望的效果。幸好Delphi在Application中給我們提供了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屬性為True,Hint屬性為“這是一個按鈕”,然後在內碼表的Implementation部分前面宣告MyHint類:
Type
MyHint=class (THintWindow)
Constructor Create (AOwner: TComponent); overr;
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的程式碼吧。
問題就出在THintWindow的Paint方法上,其程式碼如下:
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_WORREAK or DrawTextBiDiModeFlagsReadingOnly);
End;
原來THintWindow在它的Paint方法中又重新改變了字型顏色。沒辦法,只好重寫Paint方法了。在MyHint類中再宣告一個過載方法:Procedure Paint; Override;然後將THintWindow的Paint方法的程式碼照搬過來,再將Canvas.Font.Color := clInfoText;這一句刪除掉。至此就大功告成了,再執行一下程式看看,這下一點問題都沒有了。
也許你會說:“其實我們也不用過載THintWindow的Create方法,只需過載Paint方法即可,然後在其中設定背景及字型,這樣會省事得多啦。”當然,這樣也行得通,不過你會發現有一點小小的遺憾,是什麼?自己試試吧。(什麼?沒有?!當我沒說!)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1001553/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 裝扮Windows作業系統中的DOS命令提示(轉)Windows作業系統
- 工具提示控制元件(轉)控制元件
- 女扮男裝?性轉西施? 乙女遊戲《與君盟》簽約方塊遊戲遊戲
- 往IE中嵌入工具條 (轉)
- 快速安裝laravel框架的IDE提示工具Laravel框架IDE
- 舉個例子!Tableau技巧(37):如何在工具提示裡顯示條形圖
- VC6中工具條的新特色 (轉)
- Jbuilder 每日提示 (轉)UI
- AndroidToast提示封裝AndroidAST封裝
- nvm安裝node提示
- Fedora 顯示裝置配置工具介紹(轉)
- VC中給樹形控制元件的圖示加上工具提示 (轉)控制元件
- echarts 工具條點選事件控制Echarts事件
- Java 在PDF中新增工具提示|ToolTipJava
- Java 在PDF中新增工具提示ToolTipJava
- oracle 自帶錯誤提示工具oerrOracle
- 利用MFC程式設計在工具條中增加組合框控制元件 (轉)C程式程式設計控制元件
- Solaris8安裝記憶體分析工具memtool安裝使用文件(轉)記憶體
- oracle opatch 工具的使用(oracle小補丁安裝)(轉)Oracle
- ApacheActiveMQ安裝必要條件ApacheMQ
- onethink安裝提示錯誤
- 安裝golang tour,提示錯誤Golang
- iOS 文字提示框封裝iOS封裝
- 為Autodesk Viewer新增自定義工具條View
- [開發教程]第33講:Bootstrap工具提示boot
- 如何在 pyqt 中自定義工具提示 ToolTipQT
- 轉用Linux的25條理由(轉)Linux
- 安裝HomeBrew提示已安裝並無法解除安裝
- 轉 10 個 Nginx 的安全提示Nginx
- 《2021年益智解謎類移動遊戲洞察》:解謎&裝扮增長56%,成為收入最高的品類遊戲
- 工具安裝
- 模擬人腦算什麼,AI“扮”狗腦瞭解一下?AI
- SQL中on條件與where條件的區別[轉]SQL
- win10怎麼關閉安裝提示 win10如何關閉程式安裝提示Win10
- QC 環境安裝條件
- 查詢條件封裝物件封裝物件
- springboot 條件裝配Spring Boot
- Guru of the Week 條款19:自動轉換 (轉)