問題タブ [idataobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1237 参照

delphi - Delphi で IDataObject からファイル名を取得する

ファイルをドロップできるようにする必要がある Delphi XE3 アプリケーションを構築しています。私はエクスプローラー>アプリケーション側で動作していますが、私の人生では、アプリケーション>アプリケーションから移動するときにファイル名を取得することができません。

Outlook (または他のアプリケーション) から 1 つのファイルがドロップされたと仮定すると、事前に手動で割り当てている限り、これが機能しfilenameます。

0 投票する
0 に答える
231 参照

c++ - C++ Async DragDrop が正しく機能しない

現在、システムには Silverlight UI (この段階では変更できません) がありますが、ドラッグ ドロップ機能は非常に限られています。現在、信頼を高めたブラウザが不足しています。そこで、Silverlight の欠点を処理するために、ドラッグ ドロップ イベントを処理するために C++ com ライブラリを作成しました。これは、他のアプリケーションからの受信イベントに対しては完全に機能しますが、アプリをソースとしてドラッグ操作を正しく機能させるのに苦労しています。アプリからドラッグされるファイルのほとんどは仮想ファイルになりますが、これはなんとか機能しましたが、試行したすべての操作に関係なく、操作を非同期にすることができず、プロセス中にアプリがロックされました。

最初に実装したのは IAsyncOperation (xp との下位互換性が必要) だけで、明らかな影響はありませんでした。私の DataObject はインターフェースに対して照会され、ref を取得します。VARIANT_TRUE を返す GetAsyncMode への呼び出しが行われ、StartOperation への呼び出しが行われます。ただし、すべての操作は同じスレッド (ui スレッド) で行われ、非同期は影響を受けていないようです。

その後、AsyncIDataObject を返すように ICallFactory を実装しようとしました。ここで、エクスプローラーは ICallFactory インターフェイスをチェックしているようで、呼び出しオブジェクトで CreateCall を呼び出し、クエリを実行して、正しいインターフェイスがあることを確認します。シンボル サーバーを使用すると、これが AsyncStubInvoke コール スタックで発生することがわかります。ここから、ICallFactory インターフェイスを検索する StdStubBuffer_QueryInterface への呼び出しが行われます。このチェックは失敗し、残念ながら、このインターフェイスでどのオブジェクトがチェックされているかを確認できません。これが失敗した後、操作がサポートされていないエラー (インターフェイスがサポートされていないエラーに続く) の後、呼び出しは SyncStubInvoke にフォールバックするようです。これもすべて最終結果に影響を与えないようで、呼び出しはソース アプリのロックと同期しているようです。

com 呼び出しを公開する私の DragDrop クラスは CComMultiThreadModel です。CComObjectRootExから継承しない基本クラスとしてDataObjectを使用しようとしました.IDLでも定義され、CComMultiThreadModelと同様にCComObjectRootExから継承するラッパーIDataObjectクラスを使用してみました。また、このクラスが IDispatch と IUnknown から継承されるようにしました。

どんなフィードバックでも大歓迎です。

0 投票する
3 に答える
172 参照

c# - C# で var 型の値を取得する

私のプログラムには上記のコードがあります。toCheck は、ファイル (具体的にはイメージ) パスを含む IDataObjecct です。

デバッグすると、次のように保存されている値が表示されます:
temp -> {string[1]}
[0] -> "C:\....rest of path"

すべて正しいのですが、内部の文字列にアクセスしようとするとアクセスできません。toString() メソッドを使用すると、 System.String[] が返されますが、ファイルパスは返されません。
変数内のファイルパスを取得する方法について何か提案はありますか?

0 投票する
0 に答える
104 参照

javascript - HTML ページから C++ アプリケーションへのドラッグ アンド ドロップ

Web ページから C++ アプリケーションへのドラッグ アンド ドロップ機能を実装しようとしています。

ドラッグ時にテキストを dataTransfer オブジェクトに設定し、IDataObject から DropTarget にアクセスしようとしています。IDataObject からデータを取得するには、FORMATETC を指定する必要がありますが、これは問題に直面していると思います。

コードは次のとおりです。 HTML 側では、以下の JavaScript をドラッグで実行しています。

C++ 側: DropTarget があり、IDropTarget を実装し、::Drop メソッド内で IDataObject を受け取ります。

これからデータを取得するために、以下のコードを使用しています。

しかし、ここではデータを取得できません。誰かがここで私を助けてくれますか?

ありがとう、カイラス

0 投票する
0 に答える
272 参照

winapi - ドラッグ アンド ドロップ操作のソース プロセス/hWnd をドロップ ターゲットから特定するにはどうすればよいですか

私の C# Windows アプリケーションはドラッグ操作を受け入れます。ソースの hWnd やプロセス ID を識別できるようにしたいと考えています。これは可能ですか?どうすればそれを判断できますか?

ドラッグ オーバーの開始時にアクティブなウィンドウを取得しようとしましたが、ユーザーがドラッグ操作中に他のウィンドウをアクティブにした場合 (たとえば、Alt+をTab1 回以上押すことによって)、それはあまり信頼できません。

IDataObject のフォーマットも調べてみましたが、その署名だけではソース ウィンドウを確実に特定するには不十分です。

0 投票する
1 に答える
451 参照

c# - クリップボード全体 (すべての形式) をコピーするにはどうすればよいですか

クリップボードにあるもの (すべての形式) をコピーして再投稿する必要があります。これを行う方法はありますか?

これがユースケースです。Office アドインで、ユーザーが word/ppt/xl にドラッグ アンド ドロップできるようにしたい小さな docx/pptx/xlsx ドキュメントがあります。残念ながら、これに最適な文書化された形式は html であり、実際の docx/pptx/xlsx にそれほど近いものではありません。

したがって、私の考えでは、(例として Word を使用して) Word Document オブジェクトのインスタンスを作成します (このコードは Word アドインであるため、定義上、Word が実行されています)。次に、その Document オブジェクトを呼び出してすべてを選択し、選択内容を貼り付けます。

この時点で、クリップボードには貼り付けられたドキュメントが含まれています。Word 文書内でのコピー/貼り付けに Word が使用する文書化されていない形式を含めます。それが私たちが使いたいフォーマットです。

次に、クリップボードのすべてのコンテンツを IDataObject を実装するオブジェクトにコピーし、そのオブジェクトを Control.DoDragDrop() に渡すことができれば、ユーザーがそれを Word のどこかにドロップすると、文書化されていない形式で Word に渡されます。すべての docx フォーマットがあります。

これを行う方法はありますか?

更新:ファイルの内容をドラッグ アンド ドロップする必要があります (テキスト、完全に書式設定されたテキスト、表、図形、グラフなどだけではありません)。

更新 2:これを IDataObject として DoDragDrop() に渡す必要があります。クリップボードから貼り付けるのではありません。IDataObject を Windows に渡し、Windows がそこから受け取るため、発生時に通知を受ける必要はありません。

0 投票する
1 に答える
1613 参照

c# - タイプを知らなくても IDataObject の GetData 関数を使用するにはどうすればよいですか?

ユーザーが電子メールの添付ファイルをアプリケーションにドラッグ ドロップできる機能を開発しました。「FileGroupDescriptor」形式を渡し、「FileContents」形式を使用して添付ファイル ストリームを抽出し、ドロップされた添付ファイル名を抽出しています。他の人のシステムでは、この機能は添付データを抽出できません。そのため、型形式をハードコーディングせず、IDataObject 自体から取得する機能を実装することを考えていました。それを行う方法はありますか? 私が使用しているコードの下を見つけてください:

次のコードを使用して上記の関数を呼び出します。

0 投票する
1 に答える
349 参照

c# - 複数のオブジェクトの複合をクリップボードにコピーします (c# winform)

C# Winforms アプリ、Windows 10。

フォームには、リッチテキスト ボックスとチャート (両方とも MS) があります。現在、richtextbox をクリップボードにコピーする機能があります。

チャートを画像としてクリップボードにコピーする関数:

両方を 1 つの単位 (上部にリッチ テキスト、下部に画像) としてコピーする機能が必要です。これにより、ctrl-v で両方を Word 文書などに貼り付けることができます。

色、フォントサイズ、特殊文字を失うことなくオブジェクトにリッチテキストを保存する際に、IDataObject を試してみました。また、IDataObject は一度に 1 つしか貼り付けることができず、ターゲット アプリケーションが最も必要としているものを感知するだけのようです。

DrawString を使用して bmp を組み合わせたり、リッチ テキストで複数の色を保持する際に問題が発生したり、ビットマップを組み立てたり連結したりしようとしました。

CopyFromScreen を試し、複数のモニターを使用して実際の場所 (画面ではなくコンテナーに対する this.Location.X) を決定する場所に問題があり、仕様を正確に満たしていません。言うまでもなく、デバッグしようとすると、代わりに Visual Studio の表示のチャンクがコピーされます。

オープンソースのサードパーティのソリューションは問題ないかもしれません。いくつか探しましたが、この機能を実行できるものは見つかりませんでした。Win32 API 呼び出しは最後の手段です。

ご協力いただきありがとうございます。