问题很简单:在Canvas内部要动态划一根线,如果不清空Canvas,那么每个MouseMove事件中画出来的线都会留在Canvas上,如果清空,那么整个Canvas就会闪烁,该如何解决呢?
解决方案 »
- Delphi程序中断
- 如何把数据库里的内容转存word文档。
- 有关query的Query1CalcFields事件
- 关于动态库的问题,哪位哥哥能出面救救我?--------UP有礼!
- *************如何保证我的Edit中输入为日期类型***************
- 请问怎样使点击状态栏而弹出菜单
- 上回谁问的关于dwg文件预览的,现在还要吗?
- 弱智问题--如何在ADOQuery中使用insert???
- 谁能告诉我:输入IP地址的数据库EDIT控件
- Delphi强制结束某程序进程的办法?
- ★【100分】★ 求TreeView中Data数据的保存格式!在线中...
- 如何在程序中实现建立数据库文件 如:.mdb .db
直接在Image.Canvas绘图会产生闪烁。同时设置pen.mode
比如在内存中建立临时Canvas.
然后CopyRect或者Draw到目标.
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
Drawing =true;
Image1->Canvas->MoveTo(0,0);
Origin=Point(X,Y);
tPoint=Origin;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(Drawing)
{
Image1->Canvas->Brush->Style=bsClear;
Image1->Canvas->Pen->Color=clLime;
Image1->Canvas->Pen->Mode =pmXor;
Image1->Canvas->Rectangle(Rect(Origin.x,Origin.y,tPoint.x,tPoint.y));
tPoint=Point(X,Y); Image1->Canvas->Pen->Mode =pmXor;
Image1->Canvas->Rectangle(Rect(Origin.x,Origin.y,tPoint.x,tPoint.y));
}
}
//---------------------------------------------------------------------------void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y){
if(Drawing)
{
Image1->Canvas->Pen->Color=clBlue;
Image1->Canvas->Pen->Mode =pmCopy;
Image1->Canvas->Rectangle(Rect( Origin.x,Origin.y,X,Y));
Drawing=false;
}
}
//---------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
DoubleBuffered=true;
Image1->Picture->Bitmap->PixelFormat=pf24bit;
Image1->Canvas->Pen->Color=clRed;
}
//----------------------------------------------------------------