我正在使用delphi 2010有沒有辦法讓TRadioButton變得透明?
回答
我同意Andreas和Serg的說法,即啓用主題時控件是透明的。
我,有一次,曾試圖使複選框透明運行時主題項目選項未啓用,還是經典的題材選擇與OS的;結果並不完美。以下是應用於RadioButton的相同代碼。
問題容易noticable是,因爲你會從代碼猜測,這是一個有點flickery,它是不是透明的,當DoubleBuffered。一個不容易察覺的問題可以(有時)通過在包含控件的表單前面放置一個不同的窗口,然後慢慢地將它移到一邊,有時會留下一些文物。
好吧,無論如何,這是它;
type
TMyRadioButton = class(TRadioButton)
private
procedure CnCtlColorStatic(var Msg: TWMCtlColorStatic); message CN_CTLCOLORSTATIC;
procedure WmEraseBkgnd(var Msg: TWMEraseBkgnd); message WM_ERASEBKGND;
procedure WmPaint(var Msg: TWMNCPaint); message WM_PAINT;
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
implementation
uses
themes;
procedure TMyRadioButton.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;
end;
procedure TMyRadioButton.WmPaint(var Msg: TWMNCPaint);
begin
if not (ThemeServices.ThemesEnabled or DoubleBuffered) then
InvalidateRect(Handle, nil, True);
inherited;
end;
procedure TMyRadioButton.WmEraseBkgnd(var Msg: TWMEraseBkgnd);
var
R: TRect;
begin
if not (ThemeServices.ThemesEnabled or DoubleBuffered)
and (Parent <> nil) then begin
R := Rect(Left, Top, Left + Width, Height + Top);
InvalidateRect(Parent.Handle, @R, True);
UpdateWindow(Parent.Handle);
Msg.Result := 1;
end else
inherited;
end;
procedure TMyRadioButton.CnCtlColorStatic(var Msg: TWMCtlColorStatic);
begin
if not (ThemeServices.ThemesEnabled or DoubleBuffered) then begin
SetBKMode(Msg.ChildDC, TRANSPARENT);
Msg.Result := GetStockObject(NULL_BRUSH);
end else
inherited;
end;
對我來說工作得非常好!感謝塞爾特克! – 2010-05-18 12:35:14
一個簡單的技巧:使按鈕顏色變白,縮小到最小尺寸,只有按鈕;並在其後放置一個透明標籤。
否則,做一個真正的按鈕,透明的,你需要所有者繪製它。你可以在網上找到一些例子。
我發現了一些關於響應WM_CTLCOLOR消息的信息。但我儘快嘗試,但無法完成它的工作。
嗯......你知道一個單選按鈕是圓的,而不是正方形嗎?所以即使我們忽略了標籤,單選按鈕仍然是一個問題。 – 2010-05-15 20:33:54
最簡單的方法是購買設置像Raize Components一個組件,它會爲你和其它更多的除了做到這一點。特別是Raize允許您自定義UI的很多方面。
我希望使用Delphi自帶的相同單選按鈕 – 2010-03-17 13:15:29
是的,當然這只是Win32按鈕的一個包裝。 – 2010-05-15 20:37:04
@Andreas - 不,它不是。如果你看到透明度的來源和複雜性,你會知道它不是純粹的包裝。 – mj2008 2010-05-16 09:05:21
http://www.torry.net/quicksearchd.php?String=transparent+radiobutton&Title=No可能會有所幫助。這些都不是D2010或D2009,但我相信移植是可能的。
報價雷米勒博(TeamB):
的TLabel是TGraphicControl 後裔,因此必須手動完成所有的 自己的圖紙,以便根據需要可以 實施的透明度。 TCheckBox和TRadioButton,在 另一方面,是TWinControl 後代該包裝標準的Win32 API 控制,並因此受到 任何能力OS支持 爲他們(透明度不是其中 之一)。 https://forums.codegear.com/thread.jspa?threadID=24027&tstart=375
您可能需要做一些繁重的壓倒一切,否則你將需要使用第三方組件...
我與2009年德爾福標準的VCL TRadioButton控制實驗(我想德爾福2010年是一樣的)。
如果編譯啓用運行時主題項目(項目 - >選項 - >應用程序 - >啓用運行時主題),該TRadioButton控制是透明的,它的「顏色」屬性被忽略。如果禁用運行時主題,則TRadioButton控件不透明,其背景由其「Color」屬性定義。
所以我認爲標準的VCL TRadioButton(和底層的Windows控件)是由Windows主題變得透明,而不是由控件本身。您可以關閉應用程序級別的主題支持,在這種情況下,您將獲得一個不透明的單選按鈕。如果您需要禁用運行時主題的透明單選按鈕,請使用第三方自定義單選按鈕(TCustomControl後代,而不是標準的Windows單選按鈕封裝)
- 1. 有沒有辦法讓NetBeans輸出窗格不透明?
- 2. 有沒有辦法讓IE8在`:before`僞元素上不透明?
- 3. 有沒有辦法讓Blueprint CSS grid變得流暢?
- 4. 有沒有辦法讓控件對WPF中的鼠標事件透明?
- 5. 有沒有辦法通過X11獲得透明的OpenGL ES背景?
- 6. Ansible:有沒有辦法讓變量沒有默認值?
- 7. 有沒有辦法通過ToolboxBitmap實現真正的透明度?
- 8. 有沒有辦法禁止smtp透明轉發?
- 9. 有沒有辦法只爲透明度使用「transition:background-image」?
- 10. 有沒有辦法在PictureBox上半透明地繪製?
- 11. 有沒有辦法得到沒有CONNECTION變量的mysqli_error?
- 12. 有沒有辦法讓一個頁面的所有CSS樣式變得沉默?
- 13. 讓CALayer及其內部的所有東西變得半透明?
- 14. 有沒有什麼辦法可以讓CSS「打破所有」的單詞屬性變得更聰明?
- 15. 有沒有辦法讓元素在GTM
- 16. 有沒有辦法讓這項工作?
- 17. viewflow.io:有沒有辦法讓'子流'?
- 18. 有沒有辦法讓@ModelAttribute動態?
- 19. 有沒有辦法讓相機膠捲
- 20. 有沒有辦法讓Browserify更快?
- 21. 有沒有辦法讓Vis.js Network居中?
- 22. 有沒有辦法讓Calendar Extender限制?
- 23. 有沒有辦法讓@PersistenceContext更靈活?
- 24. 有沒有辦法讓Boost.Assign一個ptr_vector?
- 25. 有沒有辦法讓YQL返回HTML?
- 26. 有沒有辦法讓配置「遞歸」?
- 27. Silverlight - 有沒有辦法讓'variadic'UriMapping?
- 28. 有沒有辦法讓webpack知道全局是否沒有聲明?
- 29. 有沒有辦法讓pdb和Mac Terminal玩得很好?
- 30. 有沒有辦法讓亞馬遜的產品獲得XML?
從什麼意義上說它不透明?我剛創建了一個帶有背景圖片的Delphi窗體,並添加了一些TRadioButton。它們都很好地融入背景。 – 2010-05-15 20:39:57
只是當主題啓用 – 2010-05-19 13:46:17