delphi 实现图像拖放

kyoo_1985 2008-10-15 02:19:16
我要实现这样一个功能。
有一个图标,我放在一边
然后随时可以往一副图像上面拖放,拖放到了图片上面的时候放开鼠标就要可以弹出一个窗口,比如是新建的,呵呵。
然后同时在那副图像上面画出一个拖放的图标图像,这个怎么实现呢?呵呵。
谢谢大家了,有没有什么控件,或者方法可以实现呢?
加分加分了~~~~
...全文
737 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kyoo_1985 2008-10-21
  • 打赏
  • 举报
回复
晕,分数我一定会给嘛。
呵呵,大家还没有把我的问题解决好哎。。。。
其实我就是想实现一个拖拉图像的功能,哪位能给个源码啥的~~~~
加分加分~~~
不得闲 2008-10-21
  • 打赏
  • 举报
回复
http://www.52delphi.com/dispbbs.asp?boardid=18&Id=21
genispan 2008-10-17
  • 打赏
  • 举报
回复
学习
hangzhou_hammer 2008-10-16
  • 打赏
  • 举报
回复
或者 追加分数也是可以的哈;不过楼上 说话让人感到不舒服的 会
五维思考 2008-10-15
  • 打赏
  • 举报
回复
我的代码已经解决了你的问题,应该结帖给分,其它问题可以再开帖问
kyoo_1985 2008-10-15
  • 打赏
  • 举报
回复
呵呵,可以画了。是我的代码有点问题了。
但是那个背景怎么是白色了。。。。
Canvas.BrushCopy(MyRect,Image1.Picture.Bitmap,SRect,clBackground); 能不能不弄颜色,就保持以前的呢?

另外,如果是image1本来就是image2里面,那么就不需要复制这个image
,只需要移动这个image1,这个怎么弄呢?
是怎么判断image1原来就是在image2里面的呢?
kyoo_1985 2008-10-15
  • 打赏
  • 举报
回复
3150379
你的方法可以实现拖拽放下的时候的代码,但是那个图标没有复制到新的地方哟。
呵呵,你的那个
SRect:=Rect(0,0,Image1.Width,Image1.Height);
MyRect:=Rect(X,Y,X+SRect.Right,Y+SRect.Bottom);
Canvas.BrushCopy(MyRect,Image1.Picture.Bitmap,SRect,clBackground);
Canvas.CopyRect(MyRect,Image1.Canvas,SRect);
这块代码没有作用好像。
五维思考 2008-10-15
  • 打赏
  • 举报
回复
说错了,Image1的DragMode属性都设为dmAutomatic就行,Image2不用设
五维思考 2008-10-15
  • 打赏
  • 举报
回复

//把Image1拖到Image2上
//Image1和Image2上都放上BMP图片,其它格式图片不行
//Image1和Image2的DragMode属性都设为dmAutomatic
procedure TForm1.Image2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := Source is TImage;
end;

procedure TForm1.Image2DragDrop(Sender, Source: TObject; X, Y: Integer);
var SRect, MyRect: TRect;
begin
if Source is TImage then
with TImage(Sender) do
begin
SRect:=Rect(0,0,Image1.Width,Image1.Height);
MyRect:=Rect(X,Y,X+SRect.Right,Y+SRect.Bottom);
Canvas.BrushCopy(MyRect,Image1.Picture.Bitmap,SRect,clBackground);
Canvas.CopyRect(MyRect,Image1.Canvas,SRect);

Form2:=TForm2.Create(self);
Form2.Show;
end;
end;
lyguo 2008-10-15
  • 打赏
  • 举报
回复
1、把Image放到Panel上
const
SC_DragMove = $F012; { a magic number }
begin
ReleaseCapture;
Panel1.Perform(WM_SysCommand, SC_DragMove, 0);
end;

别忘了设Panel、Image相应的属性
lyguo 2008-10-15
  • 打赏
  • 举报
回复
iList.Add(TPImage.Create(FieldByName('ILeft').AsInteger,FieldByName('ITop').AsInteger,sName));

with TPImage(ilist.Last) do
begin
TPImage(ilist.Last).FPanel.Parent := ts_Image;
TPImage(ilist.Last).FImage.OnMouseDown := Image2MouseDown;
end;

TPImage = class //基类
private

public
x,y :Integer; //图片放置位置
cName:string;
FImage:TImage;
FPanel:TPanel;//
sColor:String;
bShow: Boolean; //小图标是否显示 用来做闪烁之用
constructor Create(x,y:Integer;sName:String);
destructor Destroy;
procedure SetIconColor(aValue:String); //设置探测器图标的不同
function SetDetColor(iDetStat:Integer):String; //设置探测器色彩,并发出报警声音
procedure FImageDblClick(Sender: TObject);
end;


5,389

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧