问题标签 [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.

0 投票
1 回答
469 浏览

winforms - 重绘所有者绘制的 winforms 组合框项目

我需要在具有不同背景颜色的组合框中显示项目。我还想根据是否选择了该项目(或鼠标在其顶部)来更改该颜色,这与组合框不是所有者绘制时的工作方式相同。

一切正常,除了当鼠标离开我更改颜色的项目之一时,该项目保持与鼠标在顶部时相同的颜色。在下面的示例中,项目 'other' 最初是使用 myUnselectedBrush 正确绘制的;鼠标移到顶部,使用 mySelectedBrush 正确绘制;当鼠标离开时,它仍然错误地用 mySelectedBrush 绘制;它应该是用 myUnselectedBrush 绘制的。对于项目“某物”,一切正常,其颜色没有改变。

我究竟做错了什么?

0 投票
1 回答
2725 浏览

c# - .NET Form Treeview 节点宽度和自定义绘制文本(无法设置节点边界)

我有一个 Windows 形式的树视图。我最近添加了代码来自定义绘制文本,以便我可以摆弄放置、粗体文本等。一切都很好,只是当我进行更改时,节点边界没有更新,因此水平滚动条会混淆思考它不需要显示。我猜是这种情况,因为当我单击树上的一个节点时,我看到一个我认为是节点边界的框,它太小了。

在我的 OnDrawText 方法中,我希望能够更改 DrawTreeNodeEventArgs 的节点成员上的边界,但它是只读的。

我已经痛苦地寻找了很长时间的解决方案,但无济于事。设置树视图本身的边界不会使滚动条出现。我在我的 OnDrawText 方法中使用 TextRenderer.DrawText(),如果这有所作为的话。

非常感谢任何帮助!

如果有人认为查看代码会有所帮助,我会添加它。

0 投票
1 回答
857 浏览

delphi - 为什么 AlphaBlend 总是返回 false(在画布上绘图)?

我正在尝试使用 windows alphablend API 调用将两个画布混合在一起。首先,我在主画布(目标)上绘制一些东西,然后使用 TBitmap 实例化另一个画布,在上面绘制,然后将两者混合在一起(按照 SO 上的答案)。

但是,我发现它总是返回 false,起初我认为它与传递错误的源和目标句柄有关,但我无法弄清楚。会是什么呢?

0 投票
2 回答
8531 浏览

delphi - Alphablend 和 TransparentBlt

这个问题与我之前关于 SO 的问题有关。

我想将两个图层与仅应用于源图层的特定部分的 alpha 结合起来。我尝试的一种方法是将 SourceConstantAlpha 设置为 $ff (并让函数使用源层中的 alpha 通道)。

这种工作 - 虽然很慢(我想我可以通过使用 ScanLines 来加快速度),但我无法弄清楚将 alpha 通道设置为什么。该文档建议计算为:

我通过猜测工作尝试了几个不同的值,但我的第一个问题是:如何计算 alpha 值?

在阅读了其他一些 SO 问题后,我遇到了 TransparentBlt 函数,它可以很好地(而且很快)遮蔽但不透明,有没有办法将这两个调用结合在一起(也许使用第三层)?

0 投票
3 回答
558 浏览

c# - 类 CheckComboBox 可以设计,但不是文件中的第一个类。

我正在开发一个 winform 应用程序,它有一个所有者绘制的带有复选框的组合框。但是在视觉工作室中,我面临着以下错误

"类 CheckComboBox 可以设计,但不是文件中的第一个类。Visual Studio 要求设计者使用文件中的第一个类。移动类代码,使其成为文件中的第一个类"

以及 如何移动类代码,使其成为文件中的第一个类?

我检查了以前的帖子,但没有得到它。

请帮忙..提前谢谢。

0 投票
2 回答
1417 浏览

c# - 所有者绘制的列表框未绘制先前选择的项目

我想增加列表框中项目的高度 - 基本上在内部填充它们。除此之外,我不想更改默认列表框行为。我已按照 MSDN 示例进行所有者绘制的列表项,但我遇到了问题。默认列表框以黑色绘制项目,以蓝色突出显示选定的项目。为了完成同样的功能,我在 DrawItem 事件处理程序中使用了以下代码:

除非我单击列表,否则这似乎工作正常。所选项目确实显示为蓝色背景上的白色文本,但之前选择的项目仍为白色。似乎我选择的项目被重绘,但之前选择的项目没有。如果我移动到另一个控件,列表框会重新绘制。我错过了什么?

0 投票
2 回答
4961 浏览

delphi - Delphi TListview OwnerDraw SubItems - 更改默认字体(在画布上绘制后以某种方式变粗)

如果您将 ownerdraw 与 TListView 一起使用,则子项默认情况下都是 BOLD 字体样式,即使 listview font.style 设置为 [],对于自定义绘制后的所有子项也是如此。

我发现的一种解决方法是强制在 CustomDrawSubItem 事件中设置样式:

(除非默认样式设置为 [] 以外的其他内容,否则带有 [] 的简单调用将不起作用,因为 SetStyle 调用不认为样式已更改)

然而,这是一个丑陋的修复,需要额外的处理时间。有更好的解决方案吗?

演示项目:http ://www.mediafire.com/?v8bsdpvpfqy47vn

0 投票
1 回答
2622 浏览

delphi - 在 OwnerData 和 OwnerDraw 设置为 True 的 TListView 上显示错误提示

我使用 Delphi 2007。我有一个TListViewwithOwnerDataOwnerDraw设置为 True。ViewStyle设置为vsReport

我有一个record.

我希望在 SubItem2 被截断时显示提示。在 Windows XP 上,根本不显示任何提示。在 Windows Vista 和 Windows 7 上,当我的鼠标悬停在某个项目上时,它会显示一个完全关闭的提示。

我没有处理提示的特殊代码。应该有一个OwnerDataOwnerDraw模式吗?

这是我得到的图像:

列表显示
(来源:noelshack.com

带有提示的列表视图
(来源:noelshack.com

编辑: 大卫问为什么OwnerDraw设置为True. 有两个原因:

  1. 这样,我可以“禁止”用户选择。
  2. 如果我设置OwnerDrawFalse,我会遇到另一个问题。请参阅为什么在自定义绘制的列表视图上出现白色列分隔符?

编辑 2: 如果我OnInfoTip按照 TLama 的建议处理事件,我会得到一个非主题的气球提示来自 Windows Vista 和 7 的错误提示。

0 投票
2 回答
3755 浏览

delphi - 动态更改 CreateParams?

我有一个从 TCustomButton 派生的自定义按钮组件。

为了使它成为所有者,我已经像这样覆盖了 CreateParams:

我的按钮适用于我自己的绘画等,但我想做的是在对象检查器中提供一个布尔属性,它可以用来告诉我的按钮是否应该是所有者绘制的。

例如,如果启用了该属性,则按钮使用我自己的绘制例程作为所有者绘制按钮进行绘制,如果该属性被关闭,那么它应该绘制为主题 Windows 按钮样式(如常规 TButton)。

CreateParams 告诉我的按钮它应该是 ownerdawn,但我想提供一个选项来告诉按钮它是否应该是 ownerdrawn。通过在设计时或通过代码在运行时更改属性,我想告诉我的按钮是否要所有者绘制。

这有可能吗?如果可以,怎么做?

0 投票
1 回答
1180 浏览

winforms - 如何使用所有者绘制的节点更正 Winforms Treeview 水平滚动条?

我正在创建一个完全由所有者绘制的自定义 winforms Treeview。当粗体文本节点被绘制并超出 Treeview 的宽度时,文本将被截断,因为水平滚动条无法进一步滚动。我认为它与粗体文本有关,并且无法确定正确的宽度。有没有办法纠正滚动条,让它可以一直滚动。