VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1254|回复: 3

继续问:在窗口上画矩形框为啥这么难。郁闷

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-2-11 20:30:01 | 显示全部楼层 |阅读模式
下面是代码,
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Brush->Style=bsClear;
}
//---------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
   if(Shift.Contains(ssLeft))
   bMouseDownFlag=true;
   pt.x = X;
   pt.y = Y ;
}
//---------------------------------------------------
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
if(bMouseDownFlag)
{
this->Refresh();
this->Canvas->MoveTo(pt.x,pt.y);
this->Canvas->LineTo(pt.x,Y);
this->Canvas->MoveTo(pt.x,Y);
this->Canvas->LineTo(X,Y);
this->Canvas->MoveTo(X,Y);
this->Canvas->LineTo(X,pt.y);
this->Canvas->MoveTo(X,pt.y);
this->Canvas->LineTo(pt.x,pt.y);
}
}
//---------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    if(bMouseDownFlag)
    {this->Refresh();
    this->Canvas->Rectangle(pt.x,pt.y ,X,Y);
    bMouseDownFlag=false;}
}
郁闷,现在的问题是如果去掉FormCreate中的代码 Brush->Style=bsClear;那么完全可以实现在form上画矩形的功能,并且每次画新的矩形时之前一个先画的矩形都会擦除掉。
可是加上FormCreate中的代码 Brush->Style=bsClear;后,问题就来了,首先 1。是在画矩形的过程中有很多重叠的痕迹,2。每次画新的矩形时之前一个先画的矩形不会擦除掉。
请问这是为什么呢?怎么解决。我想在加上FormCreate中的代码 Brush->Style=bsClear 的前提下 在form中画矩形,并且克服上面2个问题,请大家帮忙啊
谢谢
回复

使用道具 举报

0

主题

16

帖子

16.00

积分

新手上路

Rank: 1

积分
16.00
发表于 2020-4-8 18:00:01 | 显示全部楼层
用pmXor画一次就擦除原来的,然后再画就可以了,而且直接用rectangle就行不用lineto几次
所以你的move最好改改
回复

使用道具 举报

0

主题

12

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-4-9 03:30:01 | 显示全部楼层
Brush->Style=bsClear
改为
Brush->Style=bsBlod
回复

使用道具 举报

0

主题

5

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-4-9 16:15:50 | 显示全部楼层
哇    !我也为只有我还在用这给软件 。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表