我正在使用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. 有没有办法让bmps透明?
- 2. 有没有办法让NetBeans输出窗格不透明?
- 3. 有没有办法让IE8在`:before`伪元素上不透明?
- 4. 有没有办法让Blueprint CSS grid变得流畅?
- 5. 有没有办法让控件对WPF中的鼠标事件透明?
- 6. 有没有办法通过X11获得透明的OpenGL ES背景?
- 7. Ansible:有没有办法让变量没有默认值?
- 8. 有没有办法禁止smtp透明转发?
- 9. 有没有办法避免不透明度被遗传?
- 10. 有没有办法在PictureBox上半透明地绘制?
- 11. 有没有办法通过ToolboxBitmap实现真正的透明度?
- 12. 有没有办法只为透明度使用“transition:background-image”?
- 13. 有没有办法改变Python igraph中的边缘不透明度?
- 14. 有没有办法得到没有CONNECTION变量的mysqli_error?
- 15. 有没有办法让一个页面的所有CSS样式变得沉默?
- 16. 让CALayer及其内部的所有东西变得半透明?
- 17. 如何让背景变得透明?
- 18. 有没有什么办法可以让CSS“打破所有”的单词属性变得更聪明?
- 19. 有没有办法让这个缩短?
- 20. 有没有办法让GWT AutoBean下滑?
- 21. 有没有办法让perfored文本?
- 22. 有没有办法让一个UIView轮?
- 23. 有没有办法让@ModelAttribute动态?
- 24. 有没有办法让一个对象
- 25. 有没有办法让Vis.js Network居中?
- 26. 有没有办法让相机胶卷
- 27. 有没有办法让Browserify更快?
- 28. 有没有办法让Guice在Guice.createInjector
- 29. 有没有办法让父母的.html()?
- 30. 有没有办法让Calendar Extender限制?
从什么意义上说它不透明?我刚创建了一个带有背景图片的Delphi窗体,并添加了一些TRadioButton。它们都很好地融入背景。 – 2010-05-15 20:39:57
只是当主题启用 – 2010-05-19 13:46:17