15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Запонение контролов TBitmap-ом.

Компилятор: C++ Builder

Если у контрола есть свойство Canvas, то заполнение его битмапом сводится к тривиально задаче. А как быть, если у котрола нет канваса ? Ответ кроется в VCL-кой оболочке для "GetDC(Control->Handle)" называемой "TControlCanvas". Ниже приведён пример, в котором битмап рисуется на TabControl, у которого нет свойства Canvas. Основная идея заключается в создании TControlCanvas, установки его свойства Control в TabControl, а затем рисовании нашего битмапа на этом канвасе, в событии формы OnPaint...

 

//добавьте в заголовок...
TControlCanvas *CCanvas;

 

//Unit1.cpp---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    CCanvas = new TControlCanvas;
    CCanvas->Control = TabControl1;

    TabControl1->TabHeight = 40;
}

//--------------------------------------------------------------------------------

void __fastcall TForm1::FormPaint(TObject *Sender)
{
    int w = Image1->Width;
    int h = Image1->Height;

    //здесь размножаем bitmap
    for (int y = TabControl1->TabHeight; y < Height; y = y + h)
    {
        for (int x = 0; x < Width; x = x + w)
        {
            CCanvas->Draw(x, y, Image1->Picture->Bitmap);
        }
    }
}

//--------------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    delete CCanvas;
}