объявляя TBitmap глобально - PullRequest
       31

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

0 голосов
/ 12 ноября 2018

Я хотел бы объявить 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 Введение

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

1 Ответ

0 голосов
/ 12 ноября 2018

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

В 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;
...