Question

J'ai un panneau flexible, dans InDesign, à partir duquel je fais glisser une URL. Si je dépose cette URL sur un éditeur de texte ou un navigateur Web, cela fonctionne. Mais quand j'essaie de le laisser tomber sur mon document InDesign, c'est un peu plus difficile.

J'ai implémenté une sous-classe de cDragdropTargetflavorHelper. La goutte fonctionne parfaitement sur les fenêtres. Mais sur Mac, j'ai des problèmes dans la méthode pourraient accélérer les Types:

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())
        {
            ...
        }
    }
}

Le problème est que Response.cando () répond à Ktrue sur Windows, mais kfalse sur Mac. J'ai essayé d'explorer le contenu de Dataiter, mais un appel sur DataIter-> First () renvoie nil. J'ai essayé un contrôleur-> getItemCount (), qui renvoie 1. Mais si j'essaye un contrôleur-> getDragitem (1), j'obtiens un pointeur nil. J'ai l'impression qu'il n'y a pas d'élément. Cependant, la goutte fonctionne sur une autre application qu'InDesign, comme je l'ai dit.

Est-ce un problème d'internalisation? Ou autre chose ? Ça me laisse sécher.

Merci d'avance

-------------------------- ÉDITER ----------------------- ------------ J'ai résolu ce problème, mais j'en ai découvert un autre. La saveur envoyée par le panneau Flex a été modifiée, de sorte qu'il s'agit d'une saveur de texte au lieu d'une saveur d'URL. Ma méthode pourrait fonctionneraCepType maintenant:

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;
}

Le problème est maintenant dans la méthode ProcessDragDropCommand. Voici le code:

ErrorCode AutocatDNDCustomFlavorHelper::ProcessDragDropCommand(IDragDropTarget* target, IDragDropController* controller, DragDrop::eCommandType action)
{
    // retrieve drop data
    IPMDataObject* dragDataObject = controller->GetDragItem(1);
    uint32 dataSize = dragDataObject->GetSizeOfFlavorData(kTEXTExternalFlavor) ;
    ...
}

Le problème est que l'impartaObject que je reçois est nulle. Il n'y a pas d'élément dans le contrôleur. Cependant, il y avait des éléments dans la méthode CayAcceptTypes, dans le DataObjecTiterator. Alors, où sont mes articles?

J'ai essayé d'utiliser un CDATAEXChangeHandlerFor personnalisé, mais je ne pouvais pas vraiment comprendre à quoi servait son utilisation. Cela n'a pas fonctionné de toute façon.

Quelqu'un a-t-il une idée?

Cordialement, Rémi

Était-ce utile?

La solution

Le problème est l'argument du getDragitem. Il est 1 sur PC. C'est une valeur étrange sur Mac (quelque chose comme 719853). La seule solution sale que j'ai trouvée consiste à faire un memcpy à partir de l'objet récupéré Drom le DataiTer dans la méthode pourrait-il, et à l'utiliser dans la méthode ProcessDragDropCommand.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top