如何让鼠标按下后有个虚线框?(10分)

  • 主题发起人 主题发起人 lcl_003
  • 开始时间 开始时间
L

lcl_003

Unregistered / Unconfirmed
GUEST, unregistred user!
我查了查以前的帖子,没做成。我想鼠标在image上按下的时候有个虚线框,并不是想拖动
image,就是想实现这种效果,该如何做呢。有不用画线的方法吗
 
我也想实现这样的效果,并且想IMAGE可以拉大拉小,也能拖动
谁来解答呢
 
呵呵,咋还没人啊
 
var arect:trect;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button=mbleft then
begin
image1.Canvas.DrawFocusRect(arect);
arect.Left:=x;
arect.top:=y;
arect.right:=x;
arect.Bottom:=y;
draw:=true;
end;

end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var brect:trect;
begin
if button=mbleft then
begin
arect.right:=x;
arect.Bottom:=y;
brect.top:=0;
brect.Left:=0;
brect.Right:=arect.Right-arect.Left;
brect.Bottom:=arect.Bottom-arect.Top;
image2.Canvas.CopyRect(brect,image1.canvas,arect) ;

draw:=false;
form1.caption:=form1.caption+' up:'+inttostr(x)+':'+inttostr(y);
end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if draw then
begin
image1.Canvas.DrawFocusRect(arect);
arect.Right:=x;
arect.bottom:=y;
image1.Canvas.DrawFocusRect(arect);
form1.caption:=inttostr(x)+':'+inttostr(y);
end;
end;
 
dhl2001:我试 了你的方法了,你没有明白我的意思,我是想让鼠标按下的时候在鼠标周围有个虚框,就好象
是图片被鼠标抓起来一样。
 
那里,还是得谢谢你,又学会了一手:)
 
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Screen.Cursor:=crDrag;//或者自己作个样式。
end;
 
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var brect:trect;
begin
Screen.Cursor:=crDefault;
end;
 
wk_knife, 你没明白我的意思,你的方法我知道,效果不是很好:)
我是想让鼠标按下的时候在鼠标周围有个虚框,就好象
是图片被鼠标抓起来一样。
哦,如果我自己画一个的话如何让Screen.Cursor:=我自己画的?
 
是你的意思表达的不清楚~你是想让整个图象被抓起来,还是只是一部分比如100*200的大小.
如果只是一部分,你把那部分剪下来,向上平移一下就行了!
 
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button=mbleft then
begin
DoubleBuffered:=True;
image1.Canvas.Pen.Color := ClBlack ;
image1.Canvas.Brush.Color := ClBlack ;
image2.Canvas.CopyRect(Rect(0,0,42,42),image1.Canvas,Rect(-20+x-1,-20+y-1,21+x,21+y));

image2.Canvas.Pen.Color := ClBlack ;
image2.Canvas.PenPos := Point(0,0);
image2.Canvas.Pen.Color := ClWhite;
image2.Canvas.LineTo(0,41);
image2.Canvas.Pen.Color := ClBlack ;
image2.Canvas.LineTo(41,41);
image2.Canvas.LineTo(41,0);
image2.Canvas.Pen.Color := ClWhite ;
image2.Canvas.LineTo(0,0);

image1.Canvas.CopyRect(Rect(-21+x,-21+y,21+x,21+y),image2.Canvas,Rect(0,0,42,42));

end;
end;
用这个就可以让图象那一块突出来
如果希望还原一话可以用两块一样的图象,copy回去就行了~
 
不是,不是,我是想让鼠标按下的时候,在鼠标周围有个虚线框,并不是真正的把图片抓
起来,就是想实现一种好象把图片抓起来的感觉
 
var draw:boolean;
arect:trect;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button=mbleft then
begin
DoubleBuffered:=True;
arect:=Rect(-20+x-1,-20+y-1,21+x,21+y);
image1.Canvas.Pen.Color := ClBlack ;
image1.Canvas.Brush.Color := ClBlack ;
image2.Canvas.CopyRect(Rect(0,0,42,42),image1.Canvas,Rect(-20+x-1,-20+y-1,21+x,21+y));

image2.Canvas.Pen.Color := ClBlack ;
image2.Canvas.PenPos := Point(0,0);
image2.Canvas.Pen.Color := ClWhite;
image2.Canvas.LineTo(0,41);
image2.Canvas.Pen.Color := ClBlack ;
image2.Canvas.LineTo(41,41);
image2.Canvas.LineTo(41,0);
image2.Canvas.Pen.Color := ClWhite ;
image2.Canvas.LineTo(0,0);

image1.Canvas.CopyRect(Rect(-21+x,-21+y,21+x,21+y),image2.Canvas,Rect(0,0,42,42));
draw:=true;
end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button=mbleft then
begin
draw:=false;
arect:=Rect(-20+x-1,-20+y-1,21+x,21+y);
image1.Canvas.CopyRect(arect,image3.Canvas,arect);
end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if draw then
begin
image1.Canvas.CopyRect(arect,image3.Canvas,arect);
DoubleBuffered:=True;
arect:=Rect(-21+x,-21+y,21+x,21+y);
image1.Canvas.Pen.Color := ClBlack ;
image1.Canvas.Brush.Color := ClBlack ;
image2.Canvas.CopyRect(Rect(0,0,42,42),image1.Canvas,arect);
image2.Canvas.Pen.Color := ClBlack ;
image2.Canvas.PenPos := Point(0,0);
image2.Canvas.Pen.Color := ClWhite;
image2.Canvas.LineTo(0,41);
image2.Canvas.Pen.Color := ClBlack ;
image2.Canvas.LineTo(41,41);
image2.Canvas.LineTo(41,0);
image2.Canvas.Pen.Color := ClWhite ;
image2.Canvas.LineTo(0,0);
image1.Canvas.CopyRect(arect,image2.Canvas,Rect(0,0,42,42));
end;
end;

这个应该可以吧,image1和image3中放了一样的图
如果还不对,我真是不明白你的意思了~
 
我做了一个可以拉大拉小,并做移动的控件,是直接继承TGraphiControl的,外观是一个
黑外框,但可以通过鼠标放大放小,并可拖动,就像设计delphi里的控件一样。
有时间可以把源代码放上去
 
不就是想和delphi的IDE一样吗?
我做过一个类似的产品,BYLabel,为我们公司生产的打印机设计标签
 
pjprobbi,康夫:
(我做了一个可以拉大拉小,并做移动的控件,是直接继承TGraphiControl的,外观是一个
黑外框,但可以通过鼠标放大放小,并可拖动,就像设计delphi里的控件一样。
有时间可以把源代码放上去)
这样的源码可以先给我参考一下吗,我急用这样的东西,谢谢你们了
 
pjprobbi,康夫:
可以给我参考一下源码吗?我急用,谢谢!
 
可以参考http://www.delphibbs.com/delphibbs/dispq.asp?lid=1207628
 
接受答案了.
 

Similar threads

回复
0
查看
612
谦行
S
回复
0
查看
811
SUNSTONE的Delphi笔记
S
S
回复
0
查看
707
SUNSTONE的Delphi笔记
S
D
回复
0
查看
817
DelphiTeacher的专栏
D
后退
顶部