一般是在OnDragOver里面判断,但考虑以下情况:我的接收对象是一个ListBox,我希望拖到ListBox上时(DragOver),都是显示可接收的(图标)。但具体放下去时,再根据不同的列表项,实际判断是否可接收,不可接收时,弹出个提示。这样的需求应该怎样做呢?因为OnDragDrop中是无参数返回是否可接收的。虽然可以抛异常,但是这个异常无法捕捉到(只能默认弹出),可以的话,最好有其它的方法。谢谢

解决方案 »

  1.   


      private
        { Private declarations }
        procedure DropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;procedure TFormCalcHash.FormCreate(Sender: TObject);
    begin
    DragAcceptFiles(Handle, True);
    end;procedure TFormCalcHash.DropFiles(var Msg: TWMDropFiles);
    var
    Buffer:array[0..MAX_PATH] of char;
    TheFile:string;
    Counter,i : Integer;
    begin
    //if WindowFromPoint(Mouse.CursorPos) = sGroupBox2.Handle then begin
    Counter := DragQueryFile(Msg.Drop, $FFFFFFFF, nil, MAX_PATH);
       for i := 0 to Counter - 1 do begin
          DragQueryFile(Msg.Drop,i,@Buffer,SizeOf(Buffer));
          TheFile := Copy(Trim(Buffer),0,SizeOf(Buffer));
          if TheFile <> xxxxthen exit else
          Self.FileEdt.Text:=TheFile;   //这里判断下,
       end;
    //end;
    DragFinish(Msg.Drop);
    Msg.Result := 0;end;在上面那里判断可以吗,比如说文件后缀名,或者文件大小
      

  2.   

    我的是一个Edit,楼主的是Listbox,楼主的意思是不是拖放进去 需要判断被拖放的文件是否符合规矩,如果是则添加,不是则跳过?