画布问题,在线等待(50分)

  • 主题发起人 主题发起人 chinahowe
  • 开始时间 开始时间
C

chinahowe

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在image上做划块操作?
相当于在画图工具中的选中操作,出现虚线框可放大、缩小、移动等操作
 
问得具体一点,是在哪里操作?
 
要自己写代码,主要用鼠标的onmove事件,在当前位置画虚框,下次事件触发时擦掉旧虚框再画新虚框。
 
别人的代码,你看看吧
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ifClick:=true;
iStartX:=x;
iStartY:=y;
end;
***************************************************************************
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ifClick then
begin
image1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'aab.bmp');
image1.Canvas.FillRect(rect(min(iStartX,x),min(iStartY,Y),max(iStartX,X),max(iStartY,Y)));
end;
end;
*************************************************************************
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ifClick then
begin
image1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'aab.bmp');
image1.Canvas.FillRect(rect(min(iStartX,x),min(iStartY,Y),max(iStartX,X),max(iStartY,Y)));
ifClick:=false;
end;
end;

 
to ysws
我的问题就是如何划这个虚框,用什么函数或方法?
to wfzha
试了你的代码,但划出的不是虚框。还有划框的时候图片会抖动,请问如何解决?
 
画虚框的问题基本解决,要用DrawFocusRect代替wfzha代码中的fillRect
但是大家分析一下wfzha的代码可以发现在onmousemove事件中,鼠标移动就会画一次虚框
这就是图片抖动的原因,不知该如何解决?
 
关键是每次重画了整个图片,可以定义一个Rect变量保存上次画的位置
下次画时,只画rect内的背景就行了。
 
对,现在我的做法就是copyrect。
但是图片抖动的问题还是存在,只要变更image上的内容它好像就自动刷新了
 
用paintbox代替Image试试
 
用其他控件代替是不可能的,因为在Image的基础上已经做了其他很多功能
否则用ImageEn控件早解决了,烦哦
不知wfzha兄能否搬我找到最佳解决办法,分数可再加
另:可否用MSN联系,交个朋友
chinahowe@hotmail.com
 
重载Image.Invalidate

其实我经常湖荒着两个控件,他们的方法差不多
一般不需要该太多代码的,虽然没有Picture属性,但自己画并不麻烦

msn我没用过,才申请了一个,不知怎么用。。。。。
wfzha@hotmail.com
 
谢谢wfzha的帮助
 
为什么不用缓冲法,建立一个TBitmap做Buffer,在它上面修改,然后输出到Image上呢?
 
to cattyhu
你的思路完全跟我一致,我已经用这个方法解决
可惜你来晚一步了[:)]
 
后退
顶部