问题标签 [ownerdrawn]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winforms - 重绘所有者绘制的 winforms 组合框项目
我需要在具有不同背景颜色的组合框中显示项目。我还想根据是否选择了该项目(或鼠标在其顶部)来更改该颜色,这与组合框不是所有者绘制时的工作方式相同。
一切正常,除了当鼠标离开我更改颜色的项目之一时,该项目保持与鼠标在顶部时相同的颜色。在下面的示例中,项目 'other' 最初是使用 myUnselectedBrush 正确绘制的;鼠标移到顶部,使用 mySelectedBrush 正确绘制;当鼠标离开时,它仍然错误地用 mySelectedBrush 绘制;它应该是用 myUnselectedBrush 绘制的。对于项目“某物”,一切正常,其颜色没有改变。
我究竟做错了什么?
c# - .NET Form Treeview 节点宽度和自定义绘制文本(无法设置节点边界)
我有一个 Windows 形式的树视图。我最近添加了代码来自定义绘制文本,以便我可以摆弄放置、粗体文本等。一切都很好,只是当我进行更改时,节点边界没有更新,因此水平滚动条会混淆思考它不需要显示。我猜是这种情况,因为当我单击树上的一个节点时,我看到一个我认为是节点边界的框,它太小了。
在我的 OnDrawText 方法中,我希望能够更改 DrawTreeNodeEventArgs 的节点成员上的边界,但它是只读的。
我已经痛苦地寻找了很长时间的解决方案,但无济于事。设置树视图本身的边界不会使滚动条出现。我在我的 OnDrawText 方法中使用 TextRenderer.DrawText(),如果这有所作为的话。
非常感谢任何帮助!
如果有人认为查看代码会有所帮助,我会添加它。
delphi - 为什么 AlphaBlend 总是返回 false(在画布上绘图)?
我正在尝试使用 windows alphablend API 调用将两个画布混合在一起。首先,我在主画布(目标)上绘制一些东西,然后使用 TBitmap 实例化另一个画布,在上面绘制,然后将两者混合在一起(按照 SO 上的答案)。
但是,我发现它总是返回 false,起初我认为它与传递错误的源和目标句柄有关,但我无法弄清楚。会是什么呢?
delphi - Alphablend 和 TransparentBlt
这个问题与我之前关于 SO 的问题有关。
我想将两个图层与仅应用于源图层的特定部分的 alpha 结合起来。我尝试的一种方法是将 SourceConstantAlpha 设置为 $ff (并让函数使用源层中的 alpha 通道)。
这种工作 - 虽然很慢(我想我可以通过使用 ScanLines 来加快速度),但我无法弄清楚将 alpha 通道设置为什么。该文档建议计算为:
我通过猜测工作尝试了几个不同的值,但我的第一个问题是:如何计算 alpha 值?
在阅读了其他一些 SO 问题后,我遇到了 TransparentBlt 函数,它可以很好地(而且很快)遮蔽但不透明,有没有办法将这两个调用结合在一起(也许使用第三层)?
c# - 类 CheckComboBox 可以设计,但不是文件中的第一个类。
我正在开发一个 winform 应用程序,它有一个所有者绘制的带有复选框的组合框。但是在视觉工作室中,我面临着以下错误
"类 CheckComboBox 可以设计,但不是文件中的第一个类。Visual Studio 要求设计者使用文件中的第一个类。移动类代码,使其成为文件中的第一个类"
以及 如何移动类代码,使其成为文件中的第一个类?
我检查了以前的帖子,但没有得到它。
请帮忙..提前谢谢。
c# - 所有者绘制的列表框未绘制先前选择的项目
我想增加列表框中项目的高度 - 基本上在内部填充它们。除此之外,我不想更改默认列表框行为。我已按照 MSDN 示例进行所有者绘制的列表项,但我遇到了问题。默认列表框以黑色绘制项目,以蓝色突出显示选定的项目。为了完成同样的功能,我在 DrawItem 事件处理程序中使用了以下代码:
除非我单击列表,否则这似乎工作正常。所选项目确实显示为蓝色背景上的白色文本,但之前选择的项目仍为白色。似乎我选择的项目被重绘,但之前选择的项目没有。如果我移动到另一个控件,列表框会重新绘制。我错过了什么?
delphi - Delphi TListview OwnerDraw SubItems - 更改默认字体(在画布上绘制后以某种方式变粗)
如果您将 ownerdraw 与 TListView 一起使用,则子项默认情况下都是 BOLD 字体样式,即使 listview font.style 设置为 [],对于自定义绘制后的所有子项也是如此。
我发现的一种解决方法是强制在 CustomDrawSubItem 事件中设置样式:
(除非默认样式设置为 [] 以外的其他内容,否则带有 [] 的简单调用将不起作用,因为 SetStyle 调用不认为样式已更改)
然而,这是一个丑陋的修复,需要额外的处理时间。有更好的解决方案吗?
delphi - 在 OwnerData 和 OwnerDraw 设置为 True 的 TListView 上显示错误提示
我使用 Delphi 2007。我有一个TListView
withOwnerData
并OwnerDraw
设置为 True。ViewStyle
设置为vsReport
。
我有一个record
.
我希望在 SubItem2 被截断时显示提示。在 Windows XP 上,根本不显示任何提示。在 Windows Vista 和 Windows 7 上,当我的鼠标悬停在某个项目上时,它会显示一个完全关闭的提示。
我没有处理提示的特殊代码。应该有一个OwnerData
和OwnerDraw
模式吗?
这是我得到的图像:
(来源:noelshack.com)
(来源:noelshack.com)
编辑:
大卫问为什么OwnerDraw
设置为True
. 有两个原因:
- 这样,我可以“禁止”用户选择。
- 如果我设置
OwnerDraw
为False
,我会遇到另一个问题。请参阅为什么在自定义绘制的列表视图上出现白色列分隔符?
编辑 2:
如果我OnInfoTip
按照 TLama 的建议处理事件,我会得到一个非主题的气球提示和来自 Windows Vista 和 7 的错误提示。
delphi - 动态更改 CreateParams?
我有一个从 TCustomButton 派生的自定义按钮组件。
为了使它成为所有者,我已经像这样覆盖了 CreateParams:
我的按钮适用于我自己的绘画等,但我想做的是在对象检查器中提供一个布尔属性,它可以用来告诉我的按钮是否应该是所有者绘制的。
例如,如果启用了该属性,则按钮使用我自己的绘制例程作为所有者绘制按钮进行绘制,如果该属性被关闭,那么它应该绘制为主题 Windows 按钮样式(如常规 TButton)。
CreateParams 告诉我的按钮它应该是 ownerdawn,但我想提供一个选项来告诉按钮它是否应该是 ownerdrawn。通过在设计时或通过代码在运行时更改属性,我想告诉我的按钮是否要所有者绘制。
这有可能吗?如果可以,怎么做?
winforms - 如何使用所有者绘制的节点更正 Winforms Treeview 水平滚动条?
我正在创建一个完全由所有者绘制的自定义 winforms Treeview。当粗体文本节点被绘制并超出 Treeview 的宽度时,文本将被截断,因为水平滚动条无法进一步滚动。我认为它与粗体文本有关,并且无法确定正确的宽度。有没有办法纠正滚动条,让它可以一直滚动。