问题标签 [paint]

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 投票
4 回答
3294 浏览

delphi - Delphi/GDI+:什么时候创建/销毁设备上下文?

通常在 Delphi 中使用 GDI+,您可以使用TPaintBox,并在OnPaint事件期间进行绘制:

这种范式的问题在于,每次都创建一个销毁Graphics对象既浪费又性能不佳。此外, GDI+中还有一些结构可用,您只能在拥有持久图形对象时使用。

当然,问题是我什么时候可以创建那个Graphics对象?我需要知道句柄何时可用,然后何时不再有效。我需要这些信息,以便创建和销毁我的Graphics对象。


解决方案尝试 Nº1

我可以通过在真正需要时创建它来解决创建问题 - 在第一次调用绘制周期时:

但是我必须知道设备上下文何时不再有效,所以我可以销毁我的FGraphcis对象,以便在下次需要时重新创建它。如果由于某种原因重新创建了TPaintBox的设备上下文,我将在下次调用OnPaint时绘制无效的设备上下文。

Delphi 中的预期机制是什么让我知道何时创建、销毁或重新创建TPaintBox设备上下文句柄?

0 投票
1 回答
1050 浏览

listbox - C# 列表框绘制事件

是否可以使用线性渐变画笔绘制列表框的背景?如果是这样,我该如何提高绘画事件来做到这一点?

谢谢。

0 投票
5 回答
26434 浏览

java - 为什么从不调用paint()/paintComponent()?

在过去的两天里,我试图了解Java 是如何处理图形的,但在这方面却惨遭失败。我的主要问题是准确了解 paint() (或更新的 paintComponent() )是/应该如何以及何时被调用。

在下面的代码中,我查看了何时创建东西,paintComponent() 永远不会被调用,除非我自己手动添加对它的调用或对 JFrame.paintAll()/JFrame.paintComponents() 的调用。

我将paint() 方法重命名为paintComponent(),希望能解决我从未调用它的问题(即使在repaint() 中),但没有运气。

0 投票
3 回答
1293 浏览

c++ - 在 Qt 绘画课程方面需要一点帮助

我正在尝试编写一个绘画程序(在检测到鼠标按下/按住的地方绘画),但我在使用 Qt QPainter时遇到了问题。我已经阅读了他们网站上的文档,但我仍然有点迷茫。一个不在他们网站上的教程的链接会很好,或者可以向我解释我如何在 Qt 中完成这个。我唯一能做的就是在小部件上画点。

0 投票
5 回答
2216 浏览

winapi - 发送什么 Windows 消息来重新绘制部分被遮挡的窗口?

我知道 WM_PAINT 告诉一个窗口它需要完全重新绘制自己,但显然这不是当它被部分覆盖时发送的消息,然后它前面的窗口不再妨碍它,它需要重新绘制脏的部分。有谁知道在这种情况下发送了什么消息?

编辑:发现问题:

这个问题涉及我编写的一个 Delphi 控件,用于在 Delphi 表单上嵌入SDL渲染表面。SDL 有一个 API 可以在另一个窗口的 HWND 上构建其渲染器,并将其标记为“外部窗口”。

SDL 通常WM_PAINT在内部处理,所以我最终不得不向 SDL 的 WindowProc 添加一些代码,以将消息转发到外部 WindowProc(如果它是一个外部窗口)。这有时是有效的,但事实证明有一个小故障从窗口的数据结构中剥离了外部窗口标志,所以它吞下了消息而不是将其传递给我的应用程序。一旦我解决了这个问题,我就开始一直收到WM_PAINT消息。

0 投票
4 回答
983 浏览

java - Java 2D 图形矩形

我正在尝试制作一个 Java Applet,它允许我在画布中绘制图形数据结构。我将通过单击要创建节点的位置并单击节点来连接它们来做到这一点。问题是我无法让该paint()方法正常运行。我在方法内向图形(和画布上的正方形)添加新节点,mousePressed(MouseEvent e)使用,

一切正常,直到我调整窗口大小,然后所有填充的矩形都消失了。我将paint方法重写为一个空方法,但同样的事情仍然发生。我无法在paint() 中添加fillRect 命令,因为在用户使用鼠标与其交互之前我不知道存在哪些矩形。

如何g.fillRect()在鼠标侦听器方法中使用并使它们粘住?

0 投票
2 回答
543 浏览

paint - 在可缩放的时间线上绘制刻度

我正在创建一个时间线,我想在某个时间步上绘制刻度线。

所以根据可用的宽度,我想画尽可能多的刻度。但它们不应该靠得太近。它们应该至少相隔一定数量的像素。

因此,当您放大刻度时,刻度显然会分开,但在某个阈值时,一旦限制允许绘制新刻度,旧刻度之间就会出现新刻度。

那么如何根据缩放和宽度找到刻度之间的空间?

0 投票
3 回答
816 浏览

delphi - 恢复时delphi表格画黑闪

当我最小化并恢复我的 Delphi 应用程序时,在 Vista/Win7 上(重新)绘制之前,窗口内容会闪烁一个可怕的黑色。这也可以在 Delphi 2007 IDE 中看到 - 对象检查器、项目管理器、消息窗口(但不是编辑器内容)在恢复时也会闪烁黑色。

通常的无闪烁绘画技术似乎都没有任何区别,有些甚至更糟:DoubleBuffered、WS_EX_COMPOSITED、WM_ERASEBKGND 等。

大多数 Microsoft 应用程序不会出现这种行为。这是 Delphi 实现 Windows 窗体的问题吗?有谁知道解决方法?

0 投票
1 回答
2147 浏览

c# - C#/Windows 窗体:窗体的绘制代码未执行

几个小时前,我发布了一个类似但不太具体的问题,但情况发生了变化。我正在开发一个转换图形的程序,将它们显示在表单左上角的面板中。它之前画得很好,但现在不行,我无法撤消、加载旧版本等。以前,该应用程序甚至对菜单中的事件以及绘画都没有响应。我开始了一个新项目并启动并运行它,菜单工作,我带来了按钮和东西。但它仍然不会在面板中绘制轴和网格线。我在主窗体的绘制处理程序和应该执行工作的 splitContainer2_Panel1_Paint 处理程序中都设置了断点,但这里的代码甚至没有被执行。我有一个计时器,它每 100 毫秒激活一次并且使整个表格无效,那么为什么不调用绘制事件处理程序呢?帮助?

0 投票
1 回答
7416 浏览

c# - DataGridView CellFormatting 事件阻止表单绘制

我正在使用 C#、Winforms 和 .Net 3.5

我的表单有一个自定义DataGridView(双缓冲以防止在我的单元格格式化事件期间闪烁,如此处所示)。当我执行数据库搜索时,我将结果数据集绑定到datagridview.

CellFormatting根据数据处理事件以将行绘制成某种颜色。

我的 DataGridView 代码:

我的 CellFormatting 代码:

一切都很好,除了当我处理 CellFormatting 时,整个表单的 Paint 事件似乎被关闭了。光标在文本框中停止闪烁,表单的菜单条如下所示:

菜单栏图片

顶部是搜索前,底部是搜索后。在我将鼠标悬停在菜单项所在的位置之前,菜单栏不会重绘,然后当我将鼠标移出菜单栏时,要突出显示的最后一个项目将保持不变。移动表单似乎会导致它重新绘制,但问题仍然存在。

注释掉resultsGridView.CellFormattingdatagridview 代码中的行完全解决了这个问题。

我画错了单元格,还是我需要处理其他事情?