2010-07-27 82 views
4

我想要一個可選擇的標籤控件,就像截圖中的一個。它可以用無邊界的TEdit來完成,但我想知道是否有另一種方法可以用於漸變背景?是否有可選的標籤控件?

example http://usera.ImageCave.com/brk303/SelectableLabel.png.jpg

爲了澄清,我用一個簡單的PageControl,這是自Win XP的有梯度圖紙,無邊界TEDIT放在頁面上並沒有融入完美:

Edit on a PageControl http://usera.ImageCave.com/brk303/Gradient.png.jpg

更新:

我設法通過增加

獲得了一半
procedure CNCtlColorStatic(var AMsg: TWMCtlColorStatic); message CN_CTLCOLORSTATIC; 

procedure TTransparentEdit.CNCtlColorStatic(var AMsg: TWMCtlColorStatic); 
begin 
    with ThemeServices do 
    if ThemesEnabled then 
    begin 
     SetBkMode(AMsg.ChildDC, Windows.TRANSPARENT); 
     DrawParentBackground(Handle, AMsg.ChildDC, nil, False); 
     AMsg.Result := GetStockObject(NULL_BRUSH); 
    end 
    else 
     inherited; 
end; 

它現在是透明的,但還需要做其他事情,因爲選擇文本時的繪畫不能正常工作。該行爲是很難解釋,我將進一步調查,並更新在這裏......

+1

在Windows對話框中顯示的控制確實是只是一個普通的編輯控件。爲了在您的程序中獲得相同的效果,我認爲這只是在編輯控件和頁面控件上正確獲取配置的問題。另外,對我而言,「簡單的PageControl」這個短語意味着你使用了Delphi提供的TPageControl類,但這不是你在圖片中顯示的內容。 – 2010-07-27 17:32:39

+0

是的,我也懷疑windows對話框使用普通的編輯控件,但它的背景恰好是單一顏色,所以工作。 我使用的DevEx TabControl的行爲方式與Delphi TPageControl相同,所以它沒有區別。 至於「只是在編輯控件和頁面控件上獲得配置的問題」,我不認爲這是可能的,因此這個問題。 – 2010-07-27 18:29:47

+0

Windows XP對話框使用漸變,並且這些對話框上的「可選標籤」(編輯控件)可以正確顯示漸變,即使在對焦時也是如此。所以,它*是*可能的。 – 2010-07-27 23:05:32

回答

2

正常的方法是使用一個無國界(BorderStyle := bsNone)和只讀(ReadOnly := trueTEdit,可能與Color := clBtnFace結合,就像你說的。但是,漸變背景並不常見,並且沒有對這種漸進式的支持。但是,自己做這件事並不難。我會盡量在幾分鐘內找到一個簡單的解決方案。

更新

在Windows編輯框中繪圖不是微不足道的。你確定你需要漸變背景嗎?你當然可以寫自己的控制 - 編寫一個類似TEdit的控件並不那麼困難。我做了幾次。 (Proof

更新2

我沒有帶沒有嘗試過自己,並且可能會與視覺主題工作,但你可以嘗試建立一個透明的`TEdit`控制:HTTP:// WWW。 delphi3000.com/articles/article_935.asp?SK=

現在我試了一下,並且它在Windows 7和Aero下根本不起作用。

+0

你提供的鏈接中的類實際上是完全透明的(至少在XP中),但是隻有當它沒有聚焦時,一旦你將背景聚焦爲單色,但我會調查源,也許我可以出來的東西,謝謝 – 2010-07-27 17:04:05

+0

@ dmauric.mp:好,但要小心:有些最終用戶可能運行Windows Vista或Windows 7,並且他們可能不會很開心...... – 2010-07-27 17:19:36

+0

我修改了代碼,使其成爲現在當聚焦時也是透明的。我也嘗試過Xp,Vista和W7(Aero),它似乎適用於所有這些系統,請注意解釋您遇到的問題? – 2010-07-27 17:34:03

7

標籤不可編輯。 TLabel甚至無法獲得焦點,因爲它不會從TWinControl繼承。

我會使用一個TEDIT模仿你的截圖:

object Edit1: TEdit 
    BorderStyle = bsNone 
    ParentColor = True 
    ReadOnly = True 
    Text = 'Editable label' 
end 

(你可以複製和粘貼上面的代碼到您的形式)

+0

你有沒有嘗試過與分級背景?在我的D2009中,編輯使用了ParentColor,但Parent的Color屬性只是其中一種漸變顏色。 (使用TMS軟件的TAdvPanel作爲編輯的後臺)。所以編輯仍然以純色顯示。 – 2010-07-27 18:18:18

+0

設置'ParentBackground = True'告訴控件使用其父母的*主題*背景。當父母甚至不使用它的顏色時,「ParentColor」是不相關的。 – 2010-07-27 23:07:58

+1

@Rob Kennedy:TEdit並沒有ParentBackground屬性。對於其他控件,它在ControlStyle中實現爲csParentBackground,但這不足以使TEdit變爲透明 – 2010-07-28 14:03:05

相關問題