Delphi的Hint入門指導(dǎo)

字號:

Delphi中使用提示是如此簡單,只需將欲使用Hint的控件作如下設(shè)置:
     ShowHint := True;
    Hint := ‘提示信息’;
    不必寫一行代碼,相當(dāng)方便。
    但有時我們又想自己定制提示的效果,使其看起來更美觀更具個人特色,沒關(guān)系,Delphi完全有辦法讓你寫出自己喜歡的Hint效果。
    Delphi的Hint功能實現(xiàn)歸類在Application類中,所以我們可以在Application類中看到數(shù)個關(guān)于Hint的屬性,這些屬性可以設(shè)置Hint窗口的顏色,停留時間,出現(xiàn)時間等,設(shè)置了這些屬性,將對整個工程的Hint功能起到影響。這樣做的好處當(dāng)然是統(tǒng)一了Hint的風(fēng)格,并且讓其他類不必去理會Hint的實現(xiàn)。
    我們可以建一個簡單的工程,并放一個按鈕,將按鈕的ShowHint設(shè)為True,再對Hint設(shè)一個值。運行程序,當(dāng)光標(biāo)指到按鈕上時,便會出現(xiàn)一個提示窗口。
    但如果我們在主窗口的創(chuàng)建事件中寫下:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Application.ShowHint := False;
    end;
    這些再運行程序,就不再有提示出現(xiàn)了,由此可知Application的ShowHint控制整個工程的Hint是否顯示。
    如果你對于平常所見的Hint窗口的顏色感到厭煩,那么可以設(shè)Application的HintColor為其他顏色。但此時有一個問題,如果HintColor設(shè)為黑色,則提示字體也為黑色,就看不到提示信息了。為此,我們得了解另一個全局對象,事實上當(dāng)程序運行時,會創(chuàng)建三個全局對象:Application,Screen,Mouse,三個對象的職責(zé)非常明顯。Screen封閉了運行的工程在屏幕上的狀態(tài),它有一個HintFont的屬性,允許你設(shè)置提示信息的字體。
    我們可以寫如下的代碼:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Application.HintColor := clBlack;
    Screen.HintFont.Color := clWindow;
    Screen.HintFont.Size := 14;
    end;
    運行程序看看效果,提示字體變?yōu)榘咨?,且變大了?BR>    另外Application有這三個屬性:
    HintHidePause,HintPause,HintShortPause,控制著提示窗顯示的時間等。HintHidePause指定提示窗口在屏幕上顯示的時間,以毫秒為單位。HintPause則指定當(dāng)你將光標(biāo)移到有提示的控件上時,經(jīng)過多長時間才會出現(xiàn)提示窗口,以毫秒為單位。而HintShortPause呢表示當(dāng)你快速移動光標(biāo)經(jīng)過一組有Hint的控件時,顯示Hint的間隔。比如有兩個有Hint的控鈕,當(dāng)你的光標(biāo)快速從Btn1移到Btn2時,Hint經(jīng)過HintShortPause毫秒才會顯示出來。
    Application中有一個比較特殊的屬性Hint,我們不禁要奇怪,Hint指定的是那個控件的提示呢。其實Hint屬性的一個很大的用途是給那些沒有辦法直接出現(xiàn)Hint窗口的控件一個機會,使它們能夠通過別的方式出現(xiàn)提示。比如菜單,我們沒有辦法使菜單出現(xiàn)Hint窗口,但我們可以使菜單的Hint出現(xiàn)在狀態(tài)欄上的。
    我們在上面的工程主窗口中加一個狀態(tài)欄,并在加一個菜單控件,設(shè)置幾個菜單項,并給每個菜單薦的Hint屬性設(shè)置一些字符串。
    然后寫下:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Application.OnHint := WhenHint;
    end;
    procedure TForm1.WhenHint(sender: TObject);
    begin
    StatusBar1.SimpleText := Application.Hint;
    end;
    運行程序,當(dāng)你指到菜單項時,看,狀態(tài)欄上出現(xiàn)了提示了。
    上面可以看到,通過一些簡單的代碼,就可以使得提示別具特色。但人們是永遠不會滿足的,他們總想能不能做更好看的Hint呢,甚至對Hint的窗口風(fēng)格提出了要求。Delphi的工程師們早想到了這一點,他們通過類的繼承設(shè)定了一個提示窗口的父類,即我們看到的那個Hint窗口,我們可以通過繼承它并覆蓋它所提供的虛擬方法來寫自己的提示窗口。
    去讀一讀HintWindow的源碼吧,你只要覆蓋幾個虛擬方法,你就可以做出很漂亮的提示出來了。
    Delphi的Hint雖然簡單易用,但卻不夠靈活,因為它提供了統(tǒng)一的風(fēng)格,所以你不能指定某個提示為錯誤指示,可某個提示為警告提示。關(guān)于這個,我們要用API來實現(xiàn),在網(wǎng)上找一個漫畫式提示,有很多文章可用。這里不再說述。