Объявляя TBitmap глобально

Я хотел бы объявить TBitmap глобально.

Я попытался следующим образом:

Локально внутри метода это работает нормально

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

ИЛИ ЖЕ

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. Введение.

который предложил объявление в конструкторе

1 ответ

Вам нужно реализовать синглтон. Рассмотрим случай только для чтения (растровое изображение создается один раз, функция установки отсутствует).

В 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;
Другие вопросы по тегам