我的问题事这样 在程序运行以后,根据用户的需要,动态的生成了机个IMAGE控件,用户可对这些控件随意拖动,在拖动结束后,我要判断下用户选择的事那个控件,在书中和其它资料里,都事这样写的procedure TForm1.FormDockOver(Sender,Source : TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
     if source is timage then ....end;但在我的d7中 这个事件事这样的 
procedure TForm1.FormDockOver(Sender: TObject; Source: TDragDockObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
beginend;
这时如果用   if source is timage then ....  这句话来判断 ,就会报错 
因为类型不匹配 我不明白 d7中 Source这个参数位何是TDragDockObject
我现在想要判断下 源控件 该如何做 ,请高手指点下

解决方案 »

  1.   

    用 
    if Source.GetName='TImage' then
    begin
    ......
    end;
      

  2.   

    错了,应该是这样:Source.Control为被拖动的控件
        if Source.Control.Name='image1' then
    .......
      

  3.   

    当你拖动的控件的DragKind为dkDock,才能产生DockOver,DockDrop事件,但控件拖动成一个小窗口。否则普通的拖动,你在DragOver,DragDrop事件里处理就行了,不会产生DockOver,DockDrop事件。
      

  4.   

    if Source.Control.Name='image1' then
    不行啊 出错提示
    [Error] main.pas(322): Undeclared identifier: 'Control' 
    source中 没control啊
      

  5.   

    你的代码应该写在form的ondragover事件里不是onDockOver
      

  6.   

    if Source.Control.Name='image1' then
    不行啊 出错提示
    [Error] main.pas(322): Undeclared identifier: 'Control' 
    source中 没control啊
    ///////////////////////////
    那是你的代码不是写在事件Form1DockOver里,而是Form1DragOver里的缘故。仔细看看我刚给你的回答。
      

  7.   

    是这样的 但: gzmhero(hihihi) ( ) 信誉 我想问下dragkind 的属性有dkdrag/dkdock
    选择 dkdock 产生DockOver,DockDrop事件 选择 dkdrag 产生dragOver,drag Drop事件  是吗??我现在选的是dkdock 能拖动 也能判断 但控件拖动成一个小窗口,有没有办法拖动的时候没有这个小窗口啊??
      

  8.   

    是的。对应的。如果不要小窗口,那就设置DragKind为dkDrag就行了,不过要在DragOver,DragDrop事件里写代码了。
      

  9.   

    procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      panel1.BeginDrag(true);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      panel1.DragKind:=dkDrag;
      panel1.DragMode:=dmmanual;
    end;procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      caption:=format('%d,%d',[x,y])
    end;procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
      if source=Panel1 then
      begin
        panel1.Left:=x;
        panel1.Top:=y;
      end;
    end;
      

  10.   

    非常感谢 gzmhero(hihihi) 基本搞定了
      

  11.   

    当然也很感谢 : jinjazz(近身剪(N-P攻略)