我使用的是Borland C ++ Builder 6.
我有两种形式的方法:
{
"query": {
"filtered": {
"query": {
"match_phrase": {
"meta_values.meta_value": "steven spielberg"
}
},
"filter": {
"and": [{
"term": {
"meta_values.meta_name": "director"
}
}]
}
}
}
}
在第一种方法中,我绘制了坐标系。
在我做的第二种方法中:
void __fastcall FDisplay::PaintBox1Paint(TObject *Sender)
void __fastcall FDisplay::TimerLabelsViewTimer(TObject *Sender)
并且该线不会出现在坐标系上。
我的第二个问题,如何擦除线条并返回底漆?我应该这样做吗?
PaintBox1->Canvas->MoveTo(693,201);
PaintBox1->Canvas->LineTo(770,187);
答案 0 :(得分:0)
您必须在OnPaint
事件处理程序中执行绘图的 ALL 。这包括你的线条画。您的OnTimer
事件处理程序无法直接在PaintBox上绘制,下次因任何原因绘制PaintBox
时图形将丢失。
你可以做的是让OnTimer
处理程序存储线条图所需的坐标,然后Invalidate()
使用PaintBox来表示重绘。然后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();