//声明及动态创建图片数组
var
  PlayerB :Array[0..10] of TImage;
  count: Integer;
…………
procedure TForm1.Image1StartDrag(Sender: TObject;
  var DragObject: TDragObject);
begin
  PlayerB[PlayerBCount]:=TImage.Create(Self);
  PlayerB[PlayerBCount].Picture.LoadFromFile('res\'+IntToStr(count)+'.bmp');
  PlayerB[PlayerBCount].OnMouseDown:=ImgPlayerBMouseDown;
  count=count+1;
end;
……………
//拖动控件到Panel2
procedure TForm1.Panel2DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Source=PlayerB[0] then ……
  else if Source=PlayerB[1] then ……
  …………
end;请问各位大侠:最后的程序行 if 。。else if 如何用case来确定呢?   case source从0一直到10 我都要写具体的操作

解决方案 »

  1.   

    procedure TForm1.Image1StartDrag(Sender: TObject; 
      var DragObject: TDragObject); 
    begin 
      PlayerB[PlayerBCount]:=TImage.Create(Self); 
      PlayerB[PlayerBCount].Picture.LoadFromFile('res\'+IntToStr(count)+'.bmp'); 
      PlayerB[PlayerBCount].tag:=playerbcount;//加一句
      PlayerB[PlayerBCount].OnMouseDown:=ImgPlayerBMouseDown;
     
      count=count+1; 
    end; 
    procedure TForm1.Panel2DragDrop(Sender, Source: TObject; X, Y: Integer); 
    begin
      case (source as Timage).tag of
     
       ………… 
    end; 
      

  2.   

    可以利用一下TImage的Tag值,创建的时候给它分配一个Idx然后可以Case TImage(Source).Tag of
      

  3.   

    谢谢楼上的几位兄弟! 可是我的PlayerB[PlayerBCount].tag属性用作区分图片类型去了,无法用作计数。
    还有别的方法吗? 或者还有别的类似tag的属性。。很头疼。。
      

  4.   

    left

    name:赋值为'0','1'...
     case strtoint((source as Timage).name) of  
      

  5.   

    可是left要用来调整显示坐标。而PlayerB[PlayerBCount].Name:='0' ; 直接会报错,‘0 is not a valid component name’..
      

  6.   

    做出来了。。用他的tag属性传递两个值,分别组成个位和十位。在事件处理的时候再分开判断。。
    感谢yuqianyi1974 啊,给了我很大启发