|
안녕하세요.
우선 말씀드릴 부분은 GetTextBuf는 문자열만을 가져오는 함수입니다. 따라서 이것으로 get을 하게 되면 문자열만 가져 온 것이 되고, 이걸 다시 set하면 속성이 없는 문자열만 클립보드로 저장됩니다. 그리고, 클립보드의 포맷에 따라 다르게 처리하여 주어야 할 것 같습니다.
TClipboard *pCB = Clipboard();
TRichEdit *cbRichEdit = NULL;
Graphics::TBitmap *cbBitmap = NULL;
// get data from clipboard -------------------------
if ( pCB->HasFormat (CF_TEXT) )
{
cbRichEdit = new TRichEdit ();
cbRichEdit->PasteFromClipboard ();
}
else if ( pCB->HasFormat (CF_BITMAP) )
{
cbBitmap = new Graphics::TBitmap();
cbBitmap->LoadFromClipboardFormat (CF_BITMAP, pCB->GetAsHandle(CF_BITMAP), 0);
}
// set data to clipboard -----------------------------
if ( cbRichEdit != NULL )
{
cbRichEdit->CopyToClipboard ();
}
else if ( cbBitmap != NULL )
{
int DataHandle;
HPALETTE APalette;
unsigned short MyFormat;
cbBitmap->SaveToClipboardFormat (MyFormat, DataHandle, APalette);
pCB->SetAsHandle (MyFormat,DataHandle);
}
죄송한 말씀이지만, 제가 테스트해 본 것이 아니어서, 원하시는 답인지 모르겠네요.
그럼, 즐거운 프로그래밍 하세요.
Jun 님이 쓰신 글 :
: 하느리님...답변 주셔서 정말 감사드립니다.
:
: 하느리님의 말씀을 듣고 c빌더 헬프를 참고해서 아래와 같이 해보았습니다만...클립보드에는 아무것도 들어가지가 않네요..
:
: 클립보드는 텅 비어있는 상태가 됩니다.
:
: unsigned short this_format;
: if(Clipboard()->HasFormat(CF_BITMAP))
: this_format = CF_BITMAP;
: else if(Clipboard()->HasFormat(CF_DIB))
: this_format = CF_DIB;
: //.....중간 생략...각각의 타입을 비교하여 저장해주었습니다.
:
: TextHandle = Clipboard()->GetAsHandle(this_format); // this_format은 현재 클립보드의 타입을 비교하여 저장된 unsigned short형 (CF_TEXT같은 것...)
:
: Clipboard()->GetTextBuf(backupbuf, sizeof(backupbuf));
:
: SendMessage(hWnd, WM_COPY, 0x00000000, 0x00000000);
:
: Clipboard()->GetTextBuf(buf, sizeof(buf));
:
: if(strcmp(backupbuf, buf))
: Edit1->Text = buf;
:
: try
: {
: Clipboard()->SetAsHandle(this_format, TextHandle);
: }
: catch (...)
: {
: ShowMessage("fail");
: }
:
: 제가 잘못 해준 부분을 지적해주시면 감사하겠습니다.
|