InDesignにFlexパネルがあり、そこからURLをドラッグします。このURLをテキストエディタまたはWebブラウザにドロップすると、そのURLが機能します。しかし、InDesignのドキュメントにドロップしようとすると少し難しくなります。InDesign SDK:フレックスパネルからのドラッグアンドドロップ(drag'n'Drop)
私はCDragDropTargetFlavorHelperのサブクラスを実装しました。ドロップはWindows上で完全に機能します。
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:しかし、Mac上で、私は方法のCouldAcceptTypesで問題を抱えています。私はdataIterの内容を調べようとしましたが、dataIter-> First()の呼び出しはnilを返します。私はコントローラ - > GetItemCount()を試してみましたが、1を返します。しかし、コントローラ - > GetDragItem(1)を試してみると、無限のポインタを取得します。私は項目がない印象を持っています。しかし、ドロップはInDesign以外のアプリでも動作すると私は言った。
インターナリゼーションの問題ですか?または、他の何か ?それは私を乾燥させた。
事前
に感謝-------------------------- EDIT ------------ ----------------------- 私はこの問題を解決しましたが、別の問題を発見しました。フレックスパネルから送信されたフレーバが変更されたため、URLフレーバではなくテキストフレーバになります。私のメソッドcouldAcceptTypeは今動作します:
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がnilであることです。コントローラーに項目がありません。ただし、CouldAcceptTypesメソッド、DataObjectIteratorの項目がありました。だから、私のアイテムはどこですか?
私はカスタムCDataExchangeHandlerForを使用しようとしましたが、その使用法が本当に理解できませんでした。それはとにかく動作しませんでした。
アイデアはありますか?
よろしく、 レミ