LoginSignup
0
0

More than 5 years have passed since last update.

C++ Builder / TCanvas > Form上に描くか、TImage上に描くかで処理を変える

Last updated at Posted at 2017-03-28
動作環境
C++ Builder XE4

TCanvasを使って描画するとき、以下の2つの方法が少なくともある。

  • Form上に描く
  • TImage上に描く
Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::drawOnImage(void)
{
    TRect R = Image1->ClientRect;

    //            X1      Y1     X2       Y2        X3       Y3     X4      Y4
    Image1->Canvas->Chord(R.Left, R.Top, R.Right, R.Bottom, R.Right, R.Top, R.Left, R.Top);
    Image1->Canvas->Brush->Color = clBlue;

    long hormid = (R.Left + R.Right) / 2;
    Image1->Canvas->FloodFill(hormid, R.Top + 5, clBlack, fsBorder);
}

void __fastcall TForm1::drawOnForm(void)
{
    TRect R = this->ClientRect;

    //            X1      Y1     X2       Y2        X3       Y3     X4      Y4
    this->Canvas->Chord(R.Left, R.Top, R.Right, R.Bottom, R.Right, R.Top, R.Left, R.Top);
    this->Canvas->Brush->Color = clBlue;

    long hormid = (R.Left + R.Right) / 2;
    this->Canvas->FloodFill(hormid, R.Top + 5, clBlack, fsBorder);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    drawOnForm();
    //drawOnImage();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormPaint(TObject *Sender)
{
    //drawOnForm();
    drawOnImage();
}
//---------------------------------------------------------------------------

上記のコードを使って調べた結果が以下。

  • Form上に描く
    • FormPaint()で描画処理しないと、隠蔽からの復帰時に描画しない
    • フォーム生成時にFormPaint()は問題ない
  • TImage上に描く
    • FormPaint()で描画処理しなくても、隠蔽からの復帰時にも描画される
    • FormPaint()で描画すると、フォーム生成時にButton1が正常に描画されない (以下)

qiita.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0