初学者的困惑: 请问如何在Image上画矩形

我先点击Image的某个位置A点,同时获取鼠标的位置(xA,yA),
然后移动鼠标(左键不放开)
鼠标移动到B点(xB,yB),放开左键,
请问:鼠标从A到B这个过程,那个矩形怎么画出来呢?
谢谢!
[123 byte] By [yuandanpp] at [2008-1-9]
# 1
Image的MouseDown事件,里面带鼠标的坐标
画图就用image->Canvas->Rectangle(...)
kangji-尾鱼头 at 2007-10-18 > top of Msdn China Tech,C++ Builder,基础类...
# 2
有坐标就能画呀,如果你想拖动的时候也显示那个矩形的话就要先擦后画了,或者设置画笔的mode属性
tuhuo at 2007-10-18 > top of Msdn China Tech,C++ Builder,基础类...
# 3
请问这个先擦后画是什么意思呢?还有就是如何设置mode属性
tianshanfe-武林外传 at 2007-10-18 > top of Msdn China Tech,C++ Builder,基础类...
# 4
在OnMouseMove里面画,要先把上一次OnMouseMove里画的矩形擦咯,不然会留下很多轨迹啊,去找个简单的例程看看吧,Delphi7自带的Demo里就有一个
tuhuo at 2007-10-18 > top of Msdn China Tech,C++ Builder,基础类...
# 5
用xor再画一次就能擦掉原来的,
当然你画这个也可以用双缓冲,也就是先在内存画,然后再显示出来,这样显示的代码就写再onpaint事件里面,不过如果你东西只是画这个简单的矩形,不建议你用这种方法,如果画的东西比较多,要考虑很多东西,效果才能出来,
# 6
头文件中

private: // User declarations
TPoint pt ;
cpp中:
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
pt.x = X;
pt.y = Y ;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
this->Refresh();//先把原来的擦掉。这里用刷成背景色
this->Canvas->Rectangle(pt.x,pt.y ,X,Y);
}
不知道你是不是这个意思
HappyNewYear
winner8080-志在云天 at 2007-10-18 > top of Msdn China Tech,C++ Builder,基础类...
# 7
楼主的意思可能是要把画矩形的过程画出来。
在楼上的基础上。在onMouseMove里写this->Canvas->MoveTo(pt.x,pt.y);
this->Canvas->LineTo(p.x,Y);
this->Canvas->MoveTo(p.x,Y);
this->Canvas->LineTo(X,Y);
this->Canvas->MoveTo(X,Y);
this->Canvas->LineTo(X,p.y);
this->Canvas->MoveTo(X,p.y);
this->Canvas->LineTo(p.x,p.y);
# 11
if(Shift.Contains(ssLeft))
{
//Image1->Canvas->Brush->Style=bsClear;

//擦除原来的矩形
Image1->Canvas->Pen->Mode=pmNotXor;
Image1->Canvas->Rectangle(startX,startY,endX,endY);
//画新的矩形
Image1->Canvas->Rectangle(startX,startY,X,Y);

endX=X;
endY=Y;
xuexihappy_Dtw at 2007-10-18 > top of Msdn China Tech,C++ Builder,基础类...
# 12
也可以定义一个全局bool型变量(a),初始值为false,在mousedown时候设为true,在mousemove时候,if(a)才画,mouseup时候a=false;不知道是否是要这个效果??
carp27 at 2007-10-18 > top of Msdn China Tech,C++ Builder,基础类...
# 13
谢谢各位!
元旦几天没有来上网,今天一上,发现有这么多热心的朋友提供了方法,实在是感谢!
问题已经解决了!
哈哈 也祝各位 新年快乐!!
yuandanpp at 2007-10-18 > top of Msdn China Tech,C++ Builder,基础类...