WIN的画图程序中,怎么做虚拟画直线这块呢?难者不会(100分)

  • 主题发起人 主题发起人 程序小鱼
  • 开始时间 开始时间

程序小鱼

Unregistered / Unconfirmed
GUEST, unregistred user!
WIN画图程序中,它可以画直线,和矩形等,可以先从工具栏选中直线,然后在画图的地方拉一下就行了。在拉动中,可以看到线的轨迹,怎么来实现这块呢?还有矩形的。像在WIN窗口下,画个框一样。还有一点,怎么把虚拟的线,与要画图的IMAGE1,合起来呢。大家能明白我的意思吧?就像WINDOWS选择多个对象时,必须先拖动出来一个框才行。我想知道这个框是怎么做的。还有,怎么根据这个框在IMAGE上画东西
 
这个框可以用鼠标的mousedown和mousemove来做啊,仍是画巨型,只是再放开时再用当前的背景色把刚才的巨型填充
 
RectNotXor(Canvas,Img,nXPre,nYPre,nXCur,nYCur,nXini,nYini);
// 用 与非 pmNotXor 画矩形
procedure TForm3.RectNotXor(curCanvas : TCanvas ;Source : TControl;
nXPre,nYPre,nXCur,nYCur,nXini,nYini : integer);
begin
with curCanvas do begin
Pen.Style := psDashDot; //psSolid ;
Pen.Mode := pmNotXor;
Pen.Color := clRed;

Brush.Style := bsClear;

Rectangle(Source.Left + nXPre - nXini ,
Source.Top + nYPre - nYini ,
Source.Left + Source.Width + nXPre - nXini,
Source.Top + Source.Height + nYPre - nYini);

Rectangle(Source.Left + nXCur - nXini ,
Source.Top + nYCur - nYini ,
Source.Left + Source.Width + nXCur - nXini,
Source.Top + Source.Height + nYCur - nYini);
Brush.Style := bsSolid;
Pen.Mode := pmBlack;

end;
end;

上面的这个函数就实现了画矩形并清除前一位置的矩形的功能。
如果还有什么不明白的,放出你的eMail,我发一个demo给你
 
:giswang谢谢你
我得下线去看。我留EMAIL吧。gxgx_fish@21cn.com
 
请你们看看这个例子。这个网址上,有个例子可以DOWN,VC的。我就想做出这种效果就行了。谁能帮我!!!
http://www.erjid.com/cpp/BaseUse/CRectTrack/CRectTracker.html
 
比如我画了一个(1,1,100,100)矩形,brush.style:=clclear;pen.width:=5;
form1下面有图,我想把这个矩形擦掉,怎么做。不能用form1的color重画,因为FORM上有图,图中的颜色也不同。
 
老兄:
随便找一个矢量图的控件吧!
 
to 程序小鱼:前几天没上网,demo 刚发给你,收收看
 
原来试着做过,好像是鼠标移动的事件中用指针记住前一点的坐标,变换颜色擦出前一点的画线。
 
后退
顶部