问题标签 [custom-draw]

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 投票
2 回答
694 浏览

java - SWT Table 在绘制文本时使用哪个文本边距?

我有一个相对简单的问题 - 但我无法在任何地方找到任何答案。

我在我的应用程序中使用了一个简单的 SWT 表格小部件,它只在单元格中显示文本。我有一个增量搜索功能,如果它们匹配,我想突出显示所有单元格中的文本片段。

所以当输入“a”时,所有的“a”都应该被突出显示。

为此,我添加了一个SWT.EraseItem监听器来干扰背景绘图。如果当前单元格的文本包含搜索字符串,我会使用 -easy 找到位置并计算文本内的相对 x 坐标event.gc.stringExtent

有了它,我只是在事件“后面”绘制矩形。

现在,这有一个缺陷。表格不会绘制没有边距的文本,所以我的 x 坐标并不真正匹配 - 它稍微偏离了几个像素!但是有多少??我在哪里检索表格自己的绘图将使用的单元格的文本边距?没有线索。找不到任何东西。

额外的问题:表格的绘制方法也会缩短文本并添加“...”如果它不适合单元格。唔。我的事件查找器获取 TableItem 的文本,因此还尝试标记实际上不可见的事件,因为它们被“...”消耗。如何在 EraseItem 绘制处理程序中获取缩短的文本而不是“真实”文本?

0 投票
0 回答
631 浏览

android - 在Android中使用自定义视图无限滚动

我正在编写一个日历应用程序,它以面向周的视图显示约会。

我通过在 View 的 onDraw() 中自定义绘图来实现图形。

图形包含固定部分(时间栏)和日历相关部分(天、约会)。

在日历中实现水平滚动的最佳方法是什么?

我不能使用 ScrollView,因为我没有固定的最大宽度,因为用户应该能够在过去和将来“无限”滚动。

我想在包含 2 天以上的图像中绘制相关部分,因为周视图需要(一个左一个右),并在 Views Canvas 上绘制具有计算偏移量的位图。

一旦偏移量超过一天,我就不得不重新绘制位图。

有人知道更优雅的解决方案吗?

问候安德烈亚斯

0 投票
1 回答
1182 浏览

android - 仅绘制自定义视图的一部分

我有一个自定义视图,RelativeLayout它包含一个ListView(两者都设置为匹配父级 - 宽度和高度)。在列表的顶部,我有一个View如下图所示: 我的自定义视图

我希望唯一要绘制的部分是我的矩形View(用灰色标记),而视图的所有其他部分都是透明的。

有没有办法我可以做到这一点?我已经尝试扩展RelativeLayout和覆盖它的onDraw()方法,但我没有设法仅绘制特定区域(标记为灰色)。

0 投票
1 回答
1477 浏览

delphi - TListView - 当鼠标悬停在一个项目上时,不要绘制那个蓝色矩形。如何?

当鼠标移动到 TListView 项目上方时,会出现蓝色轮廓(见图)。我将如何删除它?

我知道的唯一方法是手动绘制所有项目......但也许有更简单的方法?试过 HotTrack=False,没有帮助:(

Item3 有这个蓝色轮廓

0 投票
1 回答
364 浏览

header - MS Header 控件仍然为自定义绘制的项目绘制边框

我们正在 VB6 中开发自定义网格控件(仍然需要使用经典的 VB - 抱歉 :)。它有一个基于来自 ComCtl 的标准 OS MS 标题控件的自定义标题,该控件是使用对 CreateWindowEx 的相应 WinAPI 调用创建的。标题项目是所有者绘制的(HDF_OWNERDRAW 标志),我们需要完全从头开始绘制它们,但是 MS Header 仍然在每个项目周围绘制这个奇怪的 3D 边框。

看起来,这在处理 WM_PAINT 时作为 WindowProc 中标准功能的一部分发生。但是我们根本无法抑制 WM_PAINT,因为在这种情况下,不会发送 WM_DRAWITEM 消息,并且我们没有地方绘制我们的标题项。

如何为我们的子类 API 标头摆脱这个标准的 3D 边框绘图?

0 投票
1 回答
535 浏览

android - 用手指沿路径移动对象

按照Android 沿路径移动对象的解释,我绘制了一个圆形路径,并可以沿它为对象设置动画

现在我需要使用手指沿着相同的路径移动相同的对象。基本上它应该像拖放一样,但使用路径作为指南。

我怎么能做这样的事情?

提前致谢,

0 投票
0 回答
488 浏览

visual-c++ - CustomDraw 保留在 PrePaint drawstage 中

在 64 位机器上处理 NM_CUSTOMDRAW 消息时,我遇到了一些麻烦。我们有一个带有 CHeaderCtrl 派生标头的 CListCtrl 派生类(通过 PreSubclassWindow 链接)。

在 CHeader 派生类中,我们进行了一些自定义绘制。这适用于 32 位构建。但是当我构建一个 64 位变体时,drawstage 仍然是 CDDS_PREPAINT。

所以我在这里发帖以获得关于这个问题的一些帮助。我尝试了很多结果值组合,在 OnCustomDraw 中处理 drawstage ......但所有这些仍然只收到 CDDS_PREPAINT drawstage。

这里有我当前的 OnCustomDraw 测试代码:

这个 header ctrl 的唯一目的是在默认绘画之上绘画,所以那里没有太多代码。CListCtrl 派生类的绘画没有做任何特殊的事情,它让 CListCtrl 处理 OnPaint 消息。CListCtrl 派生类确实包含一个 OnCustomDraw 部分。但由于它适用于 32 位,我怀疑应该在那里搜索问题,另一方面我提到它,因为我没有选择......

我发现了一些具有类似问题的帖子(仅保留 64 位或 drawstage),但没有一个对我有用。其中一个解决方案是 NMCUSTOMDRAW 结构的错误定义,但我的是 MFC 版本,没有发现 64 位的投诉。另一个是由于组件的放置位置,结果没有得到处理,但它也不应该在 32 位上工作。其他解决方案专门用于处理 OnCustomDraw 消息和结果,但这对我的测试代码来说似乎很好......

亲切的问候,

凯文

0 投票
2 回答
1424 浏览

c++ - Winapi:使用 CustomDraw 更改 TreeView 的颜色

我目前正在尝试更改 TreeView 项目的背景颜色。因此,我使用此消息来创建项目:

此外,我正在处理这样的自定义绘图消息:

这很好用,我可以将颜色设置为任何我想要的颜色,但是,我还没有找到一种方法在我发送消息时将颜色作为参数传递。毕竟,当我只能分配恒定或随机颜色时,自定义绘制对我来说毫无用处。

感谢您提供任何帮助!

0 投票
2 回答
757 浏览

delphi - 在 listview 的 oncustomdraw 函数中设置 Brush.color 会使应用程序崩溃

我有一些动态创建的列表视图组件,其中包含数十个项目和超过 24 列。

onCustomdrawXXX当我在事件或列表视图的事件中设置一些画布属性(例如,brush.color)时onAdvancedCustomDrawXXX,应用程序变得不稳定并崩溃。

首先,开始出现一些视觉故障(标题未绘制,列表视图中的伪影),然后应用程序无响应并崩溃。

我也能够通过设计时创建的列表视图重现该问题。

我已阅读内容,但我不想拥有控件。

有人可以帮我解决这个问题吗?

更新:代码

上面显示了视觉效果(控件变得无响应,控件上的伪影),然后崩溃(YourApp.exe 停止工作标准 Windows 错误消息)。

第二次更新

我还不能重现这个问题,但我正在努力。


我最终拥有了控件(尽管我不情愿),它可以正常工作。

我仍然会研究这个问题,如果我想出解决方案会让你知道。

0 投票
1 回答
2926 浏览

delphi - 在树视图节点中显示额外的文本,而不仅仅是 node.text

我在 Delphi 中有一个 TTreeView,具有三个级别的节点。

我使用节点数据来存储节点文本之外的另一个标签。

我有一个 OnAdvancedCustomDrawItem 事件,我想ExtraNodeLabel在节点文本之前显示它。 我希望实现这一点:

  • 蓝色文本将是额外的标签。
  • 突出显示的项目:前两个单词也是一个额外的标签

在此处输入图像描述

到目前为止,我得到的是:

在此处输入图像描述

问题:

  1. DrawText出于某种原因,如果我使用/ ,我将无法绘制具有不同样式的文本drawTextW(由于 unicode 数据,我需要 drawtextW)
  2. 另一个问题是,虚线焦点矩形之外的任何东西都是不可点击的

需要解决的问题:

  1. 如何使用DrawText/绘制具有不同样式的文本DrawtextW
  2. 如何使整个文本可点击?

代码: