【问题标题】:I want to draw on the TPanel in C++Builder我想在 C++Builder 中的 TPanel 上绘图
【发布时间】:2021-06-28 09:14:52
【问题描述】:

我动态地将几个TImage 控件添加到TPanel,并希望在它们之间画线,但TPanel 没有Canvas。你可以在TPaintBox 上画画,但我不能在上面使用TImage 微笑。告诉我如何摆脱这种简单的情况。

【问题讨论】:

  • “TImage 微笑”是什么意思?您是否将一些“笑脸”加载到图像中?也许你可以不用TImages,直接在TPaintBox 上将那些“笑脸”绘制为位图。然后很容易在它们之间添加线条。
  • 我只想使用 TImage
  • 无论如何,如果这就是你想要的。然后将它们直接放在表单上并在表单画布上绘制线条。
  • How to draw on a TPanel 的可能重复项。就个人而言,我会按照 Tom 的建议去做 - 使用 TPaintBox 并根据需要在其上绘制位图和线条。这样做有什么问题?

标签: canvas c++builder vcl tpanel


【解决方案1】:

我已经解决了这个问题

// before describing the form class in the h-file:
namespace CanvasPanel
{
    class TPanel : public Extctrls::TPanel
    {
    public:
        __property Canvas;
    };
}
#define TPanel CanvasPanel::TPanel
 
// next - the form class, and everything is unchanged...
class TForm1 : public TForm

【讨论】:

  • #define TPanel CanvasPanel::TPanel 应替换为 typedef CanvasPanel::TPanel TPanel;,或在 C++11 及以后版本中替换为 using TPanel = CanvasPanel::TPanel;。不过,无论哪种方式,DFM 都不会实际实例化 CanvasPanel::TPanel 对象。让表单继续正常使用Extctrls::TPanel 可能更容易,然后当您想访问Canvas 属性时,可以将`Extctrls::TPanel*` 类型转换为CanvasPanel::TPanel*,例如:@ 987654329@.
猜你喜欢
  • 2013-01-18
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
相关资源
最近更新 更多