Объявляя 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;