2009-07-28 106 views
6

看看Stack Overflow站點的右上角。搜索框中有一些文字說「搜索」。當你點擊它時,文字消失。如何在win32編輯控件中使用「佔位符文本」?

我想做類似的事情 - 如果一個win32編輯控件是空的(即沒有文本),我想繪製一些文本,在一個比正常文本更柔和的顏色。如果控件具有焦點,或者其中有文本,我不想畫這個。

有沒有什麼辦法可以做到這一點,而不需要將實際文本設置到控件中並更改文本顏色?也許通過攔截控制油漆或什麼?

謝謝。

回答

7

有可能爲XP的。檢查EM_SETCUEBANNER消息。但是,有certain issues,它使它不能完全按照它應該在XP上工作,所以最好如果你處理Vista。

如果您需要它用於Win2k或更早版本,您需要自己做,至少在這些平臺上。

0

也許,但爲什麼不按需要設置默認文本和顏色,並用'onClick'事件清除它?

+0

因爲直到有人輸入它,我不想檢索文本並獲取默認文本。這意味着我不得不添加各種檢查默認文本等,這將是一個痛苦。 – Colen 2009-07-28 21:25:54

1

一種可能性:如果.Text屬性爲空,則將其自動繪製,並手動將文本塗抹到其上。

3

感謝這個問題,我將來可以使用它。 FWIW(並不多,大概),這裏是在Delphi中的實現:

procedure TForm1.FormShow(Sender: TObject); 
const 
    ECM_FIRST = $1500; 
    EM_SETCUEBANNER = ECM_FIRST + 1; 
begin 
    SendMessage(edt.Handle,EM_SETCUEBANNER,0,LParam(PWideChar(WideString('Enter search here')))); 
end; 
+1

請注意,它已被內置到VCL作爲TextHint屬性 - 我認爲它是在D2009中添加的,雖然我現在還不完全確定。 – 2009-08-05 21:28:28

0

你不需要自行繪製的,它的原生與用戶的API(橫幅) 見Winapi grp樣品(C語言)