问题标签 [tcanvas]

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 投票
0 回答
175 浏览

delphi - 绘图到 FireMonkey TControl.Canvas 输出到 TForm Canvas

我刚刚开始将一个庞大的代码库转换为 FireMonkey,但我遇到了一些困难。

让我绊倒的一件事是 TControl.Canvas 的一个主要问题。如果我没有正确调用它,那么绘制到 TCanvas,实际上绘制到表单画布(具体来说,它在表单上的 0,0 处绘制,而不是我的自定义控件的客户端原点)。

例如,在 MouseMove 事件中,我需要绘制一个选择。这是一些示例代码:

在 FireMonkey 中使用此代码,绘画是到窗体(即在窗体上的 0,0 处输出)。

如果我将 MouseMove 中的代码更改为 Repaint(); 然后它会正确地绘制到我的控制之下。

显然,使用 FMX,我需要触发控件的实际绘制(而不是直接绘制),否则 Canvas 无效。

我需要的是解释为什么它会这样工作。我的代码中有很多画布绘图,所以我需要了解这一点,以便找出其他不兼容的代码。

系统:Delphi 10.3 Rio,32 或 64 位 Windows 应用程序。

0 投票
2 回答
315 浏览

delphi - 如何在画布上移动两个位图图像

我正在 Delphi 7 下编写一个动画程序,包括在画布上移动两个圆盘(我选择一个 PaintBox),边缘有反弹效果。

如果我一张一张加载图片就可以了:这种情况下,当两个不时到达的磁盘重叠时,没有出现背景矩形,甚至是相当令人愉快的透明效果。

但是,如果我尝试通过引入例如 Record 来概括使用更多光盘的操作。

动作没问题,但在这种情况下,当圆盘交叉时,上图中会出现一个背景矩形,这会破坏一切!

我什至尝试使用以下对象编写代码:

但无事可做,现象仍然存在..

您知道如何消除此显示缺陷吗?

我还有一个问题,我想用纹理填充磁盘。

完整代码:

这个节目只是另一个更重要的开始

谢谢

0 投票
1 回答
148 浏览

.net - Delphi tCanvas 与 .Net Graphics 的性能比较

我使用 Delphi 10.3 和 .Net 5.0。我知道 tCanvas 是 GDI,Graphics 是 GDI+,它的表现优于前者。但在以下简单代码中,tCanvas 更快。Delphi 的 5 倍平均毫秒数是 185.00,.Net 是 351.20。

为什么 tCanvas 比 Graphics 快,或者我的代码有什么缺陷?

德尔福

。网

0 投票
0 回答
35 浏览

canvas - 带鼠标的免费画布

我正在使用 C++ 构建器制作一种画笔程序。该程序在鼠标上运行良好,但是当我用平板电脑绘图时,尤其是写字母时,会出现识别问题。

我提交程序的图像。 用鼠标和数位笔写同样的东西。

我想我找到了问题的原因。当我用数位板笔快速重复 MouseDown 和 MouseUp 时,程序会识别出它是鼠标移动,因此绘制的是短线而不是两个点。

因此,一旦笔与鼠标一样与平板电脑分离,我必须让程序识别 MouseUp 事件。

除了 MouseClick->false 或 MouseUp 事件之外,还有什么方法可以识别鼠标向上吗?我已经尝试在 MouseDown 和 MouseUp 事件中使用 switch 变量,但它不起作用。

'''

'''