1

以前は、 を呼び出した後VirtualStringGrid -> CopyToClipBoard、メモ帳にタブ付きテキストとしてグリッドを貼り付けたり、Excel または Outlook に貼り付けるときに完全にフォーマットされたグリッド (ヘッダーと色と境界線) として貼り付けることができました。

ただし、CopyToClipboardVirtualTreeView V6.2 を使用して Embarcadero XE8 から RAD Seattle に移行して以来、問題が発生しています。ターゲット アプリケーションが何らかのテキスト エディタである場合にのみ、テキストとして貼り付けることができます。RTF または html を受け入れる「豊富な」アプリケーションに貼り付けると、エラーが発生します。

メソッドを呼び出そうとしましたContentToXXX(以下のコードを参照) テキストは正常にエクスポートされます。Html はエクスポートされますが、結果のData2Export文字列には HTML ページのコード全体が含まれており、たとえば Outlook に貼り付けることができません。を呼び出すとContentToRTF、クラッシュが発生します。

この種の問題をグーグルで検索しましたが、関連するものは何も見つかりませんでした。

void __fastcall TForm::ExportGrid( void )
{
// old code that used to work fine
//  VST->CopyToClipboard();

  Virtualtrees::TVSTTextSourceType exportSrcType = tstAll;

  OpenClipboard( Handle );
  EmptyClipboard();

  std::string Data2Export = "";
  HGLOBAL hg;

  // tabbed text
  Data2Export = AnsiString( VST->ContentToText( exportSrcType, "\t" ) ).c_str();
  hg = GlobalAlloc( GMEM_MOVEABLE, Data2Export.size() + 1 );

  if ( !hg )
  {
    CloseClipboard();
    return;
  }

  memcpy( GlobalLock( hg ), Data2Export.c_str(), Data2Export.size() + 1 );
  GlobalUnlock( hg );
  SetClipboardData( CF_TEXT, hg );
  GlobalFree( hg );

  // html
  Data2Export = AnsiString( VST->ContentToHTML( exportSrcType ) ).c_str();
  hg = GlobalAlloc( GMEM_MOVEABLE, Data2Export.size() + 1 );

  if ( !hg )
  {
    CloseClipboard();
    return;
  }

  memcpy( GlobalLock( hg ), Data2Export.c_str(), Data2Export.size() + 1 );
  GlobalUnlock( hg );
  SetClipboardData( CF_HTML, hg );
  GlobalFree( hg );

  // RTF
  Data2Export = AnsiString( VST->ContentToRTF( exportSrcType ).c_str() ).c_str();
  hg      = GlobalAlloc( GMEM_MOVEABLE, Data2Export.size() + 1 );

  if ( !hg )
  {
    CloseClipboard();
    return;
  }

  memcpy( GlobalLock( hg ), Data2Export.c_str(), Data2Export.size() + 1 );
  GlobalUnlock( hg );
  SetClipboardData( CF_TEXT, hg );
  GlobalFree( hg );

  CloseClipboard();
}

この問題を解決または回避する方法はありますか?

コードに何か問題がありますか?

PD: 開発プラットフォームは Win8 と Win10 で、VirtualStringTree ClipboardFormats はすべて true に設定されています。

4

1 に答える 1