【发布时间】:2016-03-30 23:23:16
【问题描述】:
有一些问题。我有一个带有画布的表单,我需要通过它的句柄从 dll 访问这个画布。我是这样做的:
来自 dll
canvas := TCanvas.Create;
try
canvas.Handle := handle;
// do some painting on this canvas
finally
canvas.free;
end;
效果很好,我从 dll 中绘制了我需要的东西。但是这个技巧有副作用。从 dll 绘制后,表单会丢失字体设置(顺便说一句,从 dll 绘制时我没有使用字体,只有几个矩形),当我从主表单在同一画布上绘制时,即使我直接使用 canvas.font.size := .. .; canvas.font.name := ...;在 canvas.TextOut 之前,字体不会改变。线条,填充和其他绘画都可以。但是字体会损坏(有时不会,但大多数情况下)。
有没有办法重置/重新初始化表单的 TCanvas 对象?
【问题讨论】:
-
canvas.handle := 句柄; // 这里的句柄表示form.canvas.handle传递给dll
-
您需要提供更多详细信息。在模块之间传递对象听起来很狡猾。或者你画的时间不对。 minimal reproducible example 怎么样。那么没有人需要猜测。