Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex InDesign SDK:Drag';n';从柔性面板上跌落_Apache Flex_Sdk_Drag And Drop_Adobe Indesign - Fatal编程技术网

Apache flex InDesign SDK:Drag';n';从柔性面板上跌落

Apache flex InDesign SDK:Drag';n';从柔性面板上跌落,apache-flex,sdk,drag-and-drop,adobe-indesign,Apache Flex,Sdk,Drag And Drop,Adobe Indesign,我在InDesign中有一个Flex面板,我从中拖动一个URL。如果我把这个URL放在文本编辑器或web浏览器上,它就会工作。但当我试着把它放在我的InDesign文档上时,它就有点难了 我已经实现了CDragDropTargetFlavorHelper的一个子类。这种滴水器在窗户上效果很好。但在mac上,我在方法CouldAcceptTypes中遇到了问题: DragDrop::TargetResponse AutocatDNDCustomFlavorHelper::CouldAcceptTy

我在InDesign中有一个Flex面板,我从中拖动一个URL。如果我把这个URL放在文本编辑器或web浏览器上,它就会工作。但当我试着把它放在我的InDesign文档上时,它就有点难了

我已经实现了CDragDropTargetFlavorHelper的一个子类。这种滴水器在窗户上效果很好。但在mac上,我在方法CouldAcceptTypes中遇到了问题:

DragDrop::TargetResponse AutocatDNDCustomFlavorHelper::CouldAcceptTypes(const  DragDropTarget* target, DataObjectIterator* dataIter, const IDragDropSource* fromSource,  const IDragDropController* controller) const
{
    if (0 != dataIter && 0 != target)
    {

        DataExchangeResponse response = dataIter->FlavorExistsWithPriorityInAllObjects(kURLDExternalFlavor);
        if (response.CanDo())
        {
            ...
        }
    }
}
问题是response.canDo()在Windows上回答kTrue,但在Mac上回答kFalse。我试图探索dataIter的内容,但是对dataIter->First()的调用返回nil。我尝试了一个控制器->GetItemCount(),它返回1。但是如果我尝试一个控制器->GetDragItem(1),我会得到一个零指针。我有一个印象,没有任何项目。不过,正如我所说的,drop在InDesign以外的其他应用程序上也可以使用

这是一个内部化的问题吗?还是别的什么?它让我擦干

提前谢谢

--------------------------编辑----------------------------------- 我解决了这个问题,但发现了另一个问题。flex面板发送的样式已更改,因此它是文本样式而不是URL样式。我的方法现在可以使用了:

DragDrop::TargetResponse AutocatDNDCustomFlavorHelper::CouldAcceptTypes(const DragDropTarget* target, DataObjectIterator* dataIter, const IDragDropSource* fromSource, const IDragDropController* controller) const
{
    if (0 != dataIter && 0 != target)
    {
        // Check for URL Flavor in the drag
        DataExchangeResponse response = dataIter->FlavorExistsWithPriorityInAllObjects(kTEXTExternalFlavor);
        if (response.CanDo())
            {
                return DragDrop::TargetResponse(response, DragDrop::kDropWillCopy);
            }
    }
    return DragDrop::kWontAcceptTargetResponse;
}
问题现在出现在ProcessDragDropCommand方法中。代码如下:

ErrorCode AutocatDNDCustomFlavorHelper::ProcessDragDropCommand(IDragDropTarget* target, IDragDropController* controller, DragDrop::eCommandType action)
{
    // retrieve drop data
    IPMDataObject* dragDataObject = controller->GetDragItem(1);
    uint32 dataSize = dragDataObject->GetSizeOfFlavorData(kTEXTExternalFlavor) ;
    ...
}
问题是我得到的IMPDataObject为零。控制器中没有项目。但是,在DataObjectIterator中的CouldAcceptTypes方法中有一些项。那么,我的物品在哪里

我尝试使用自定义CDATA ExchangeHandlerFor,但无法真正理解它的用途。反正也没用

有人有主意吗

问候,,
Rémi

问题在于GetDragItem的参数。在PC上是1,在Mac上是一个奇怪的值(类似于719853)。我发现的唯一肮脏的解决方案是在CouldAcceptTypes方法中从dataIter检索的对象中执行memcpy,并在ProcessDragDropCommand方法中使用它