イベント ハンドラ内ですべての描画を行う必要があります。OnPaint
それにはあなたの線画も含まれます。イベント ハンドラーはPaintBoxOnTimer
に直接描画することはできません。描画はPaintBox
、何らかの理由で次に描画されるときに失われます。
代わりにできることは、OnTimer
ハンドラーに線画の目的の座標を格納させInvalidate()
てから、ペイントボックスに再描画の信号を送ることです。OnPaint
イベントは、格納された座標で線を描画できます。線を消去するにはInvalidate()
、PaintBox を使用し、単純に線を描画しません。
例えば:
private:
TPoint lineStartPos;
TPoint lineEndPos;
...
void __fastcall FDisplay::PaintBox1Paint(TObject *Sender)
{
//...
if (!lineStartPos.IsEmpty() && !lineEndPos.IsEmpty())
{
PaintBox1->Canvas->MoveTo(lineStartPos.x, lineStartPos.y);
PaintBox1->Canvas->LineTo(lineEndPos.x, lineEndPos.y);
}
//...
}
void __fastcall FDisplay::TimerLabelsViewTimer(TObject *Sender)
{
//...
PaintBox1->Invalidate();
}
線を引くには:
lineStartPos = Point(693,201);
lineEndPos = Point(770, 187);
PaintBox1->Invalidate();
行を消去するには:
lineStartPos = TPoint();
lineEndPos = TPoint();
PaintBox1->Invalidate();