在一个image1上动态创建一个image2(注意是动态的,静态没有这样的问题),然后把另外一幅跟image2一样大的image拖到image2 上,image2没有接收到ondragdrop事件(debug过了,指针不是nil,是正确的地址,如果image2不是在image1上不会有这样问题),就是没有执行这个事件的代码就对了,反而是背景的image1执行了image1.ondragdrop,然而里面的坐标却是image2的坐标。怎样解决这个问题呢?好奇怪啊。
调试欢乐多
Shift: TShiftState; X, Y: Integer);
begin
image3.BeginDrag(false);
end;procedure TForm1.Image2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
accept:=true;
end;procedure TForm1.Image1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
showmessage(Timage(sender).Name);
end;procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
accept:=true;
end;procedure TForm1.FormShow(Sender: TObject);
var image2:Timage;
begin
image2:=Timage.Create(self);
image2.Height:=image3.Height;
image2.Width:=image3.Width;
image2.Left:=250;
image2.Top:=200;
image2.Name:='image2';
image2.Parent:=self;
image2.Picture:=image3.Picture;
image2.OnDragOver:=image1.OnDragOver;
image2.OnDragDrop:=image1.OnDragDrop;
end;
image2.OnDragDrop:=image1.OnDragDrop; <== image1.ondragdrop不是nil吗?
image2.OnDragOver:=image1.OnDragOver <== 浪费了一句话你这样做,image1和image2的ondragdrop是一样的。我的问题是:image2(放在image1上面)的ondragdrop没有执行,image1的ondragdrop却执行了,然而坐标却是image2的坐标。
----------------------------------------------------拜托你看清楚,事件中我返回的是sender的属性,在image1中方下返回的image1,再image2放下,返回的image2怎么会一样,你既然动态创建的image2那ondragdrop事件当然也得动态指定了,这里我只不过指定的是image1相同的事件,当然也可以制定另外的
FMap[QipanXY.X,QipanXY.Y]:=TQizi.Create(self);
FMap[QipanXY.X,QipanXY.Y].Parent:=self;
FMap[QipanXY.X,QipanXY.Y].EverGone:=false;
FMap[QipanXY.X,QipanXY.Y].QiziStyle:=QiziStyle;
FMap[QipanXY.X,QipanXY.Y].PicDir:=self.PicDir;
FMap[QipanXY.X,QipanXY.Y].X:=QipanXY.X;
FMap[QipanXY.X,QipanXY.Y].Y:=QipanXY.Y;
FMap[QipanXY.X,QipanXY.Y].QipanCtrl:=self;
FMap[QipanXY.X,QipanXY.Y].AutoHide:=True;
Range:=GetGeziFanwei(QipanXY);
FMap[QipanXY.X,QipanXY.Y].Left:=FImgChess.Left+(Range.X1+Range.X2) div 2 - FMap[QipanXY.X,QipanXY.Y].Width div 2;
FMap[QipanXY.X,QipanXY.Y].Top:=FImgChess.Top+(Range.Y1+Range.Y2) div 2 - FMap[QipanXY.X,QipanXY.Y].Height div 2;
FMap[QipanXY.X,QipanXY.Y].BringToFront;
(FMap[QipanXY.X,QipanXY.Y] as TControl).ControlStyle:=(FMap[QipanXY.X,QipanXY.Y] as TControl).ControlStyle+[csDisplayDragImage];/////////////////////////////
constructor TQizi.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FPicDir:='';
FQiziStyle:=' ';
FAutoHide:=true;
X:=0;//SET TO NIL
Y:=0;
EVERGONE:=FALSE;
QipanCtrl:=nil;
DragMode:=dmAutomatic;
SetAutoDragging;
end;
///////////////////////////
procedure TQizi.SetAutoDragging;
begin
OnStartDrag:=TQiziStartDrag;
OnEndDrag:=TQiziEndDrag;
OnDragOver:=TQiziDragOver;
OnDragDrop:=TQiziDragDrop;
end;