現在、RTFを使用してこれを機能させていますが、達成したいことにはやり過ぎのようです...
私はこのすてきな小さな RTF ライブラリオフ コード プロジェクトを手に入れました。これを世界と共有してくれてありがとうディマ :)
そして、それを修正して、クリップボードに書き込む関数を 1 つ追加しました (追加の関数をもっとうまく追加できたと思いますが、機能します) ('cough' hacky'cough')
画像とテキストをクリップボードにコピーするコードは次のようになりました。
private void CopyDetailToClipBoard(string caption, Image image)
{
//using rtf data format, put a bunch of data onto the clipboard
RtfDocument rtf = new RtfDocument();
RtfParagraph rtfTextBlock = new RtfParagraph();
const int captionFontSize = 22;
//add main image to rtf text
RtfImage image = new RtfImage(image, RtfImageFormat.Png);
rtfTextBlock.AppendParagraph(image);
//add caption
RtfFormattedText Caption = new RtfFormattedText(caption,
RtfCharacterFormatting.Underline | RtfCharacterFormatting.Bold,
1,
captionFontSize);
rtfTextBlock.AppendParagraph(Caption);
rtf.Contents.Add(rtfTextBlock);
//write the rtf to the clipboard
RtfWriter rtfWriter = new RtfWriter();
rtfWriter.WriteToClipBoard(rtf);
}
RTF ライブラリに追加した追加の関数は、RtfWriter.cs に追加した "WriteToClipbard" で、単純に書き込み関数の C&P でしたが、文字列をファイルに書き込む代わりに、クリップボードに書き込みます(どちらのシナリオでも使用できる「tostring」を持つように RtfDocument を変更しました)
//Where rtfWriter.WriteToClipBoard is a modified version of the "Write" function:
public void WriteToClipBoard(RtfDocument document)
{
_encoding = Encoding.GetEncoding((int)document.CodePage);
sb = new StringBuilder();
Reflect(document);
Clipboard.SetData(DataFormats.Rtf, sb.ToString());
}
私はまだこれよりも「軽い」解決策があることを望んでいますが、これは私のアプリケーションからWord /任意のrtfアプリケーションへのコピーに機能し、派手な書式設定などを行うことができるという素晴らしいボーナスがあります.
ps
警告の言葉です。画像にテキストを追加するだけの場合 (またはその逆)は、クリップボードにビットマップを追加するだけで、より多くのアプリケーション (ペイントなど) で認識されるため、注意してください。 、同様に、メモ帳へのRTFはあまりきれいではありません:p。
したがって、RTF ルートを使用することで、アプリケーションのデータの潜在的なクロスオーバー(更新については以下を参照)を実際に制限します。私にとって、テキストは実際には単なる「キャプション」以上のものであり、画像がどのように作成されたかを説明するデータのホスト全体です (したがって、派手な書式設定が実際には非常に便利ですが、簡潔にするためにすべてを単純化しました)。これを「cntrl+shift+c」オプションとして追加し、「ctnrl+c」を古き良きビットマップをクリップボードに追加するものとして保持します。
- アップデート - -
RTFファイルをコピーしてWordに貼り付けることができます。したがって、クリップボード部分への余分な書き込みをスキップしてファイルを作成し、ファイルをクリップボードに追加できます。これにより、実際には複数の画像とテキストのアイテムを使用できます。欠点は、埋め込みドキュメントとして単語に貼り付けられることですが、これは実際には私が望んでいたものよりも優れていました.
また、クリップボードに複数のタイプを並行して追加できるため、アプリケーションの制限の問題を回避できることがわかりました。そのため、現在、RTF ファイルとビットマップの両方としてクリップボードに追加しています。「 setimage 」を実行しても「setfile」は上書きされません
このようにして単語に貼り付けると、画像とビットマップを含む RTF が取得されます。
ペイントに貼り付けるときは、画像だけを貼り付けます:)(実際、ビットマップクリップボードに追加するときは、GDIを使用してキャプションを書き込みます)
さまざまなプログラムでどのように機能するかは、実際には非常にクールです。興味深いことに、異なるオフィス プログラムには異なるデフォルトの「選択肢」があります。Word は RTF を選択するようですが、Powerpoint はビットマップを選択します。