全局声明TBitmap

时间:2018-11-12 09:44:18

标签: c++builder rad-studio

我想在全局范围内声明一个TBitmap。

我尝试如下:

在方法中本地运行,

std::auto_ptr<Graphics::TBitmap> RenderGraphic(new Graphics::TBitmap());

OR

Graphics::TBitmap * RenderGraphic = new Graphics::TBitmap;

所以要全局声明它,我在头文件中尝试过

Graphics::TBitmap *RenderGraphic;

这在构造函数中

__fastcall TShipGraphic::TShipGraphic(TComponent* Owner)
: TForm(Owner)

{

  Graphics::TBitmap * RenderGraphic = new Graphics::TBitmap;

}

编译正常,但在运行时会在首次出现

时引发访问冲突异常
      RenderGraphic->Canvas->Pen->Color = clBlack;

请提前告知。

我使用的参考来源是C++ Builder Graphics Introduction

建议在构造函数中声明

1 个答案:

答案 0 :(得分:0)

您需要实现一个单例。考虑只读情况(位图仅创建一次,没有设置函数)。

在MyGraphics.h中定义访问器功能

#include <vcl.h>
TBitmap* GetRenderGraphic();

MyGraphics.cpp中的实现

static std::unique_ptr<TBitmap> renderGraphic(new TBitmap());

TBitmap* GetRenderGraphic()
{
    return renderGraphic.get();
}

使用它(必须包含MyGraphics.h)

GetRenderGraphic()->Canvas->Pen->Color = clBlack;