(주)아이씨티::최고의 시스템을 만드는 회사 에서 찾았습니다.
아래 긁어온 내용...
다음 그림과 같이 rtf형식의 문자열이 Memo에 들어있는데..
이놈을 어떻게 RichEdit 에 넣을까?
[안되는 방법들..]
다음과 같은 방법으로 해서는 양식적용이 안된다.
안되는 방법1.
RichEdit->Lines->Assign( Memo1->Lines) ;
안되는 방법2
RichEdit->Lines->Text = Memo1->Lines->Text ;
위 두가지 방법은
그냥 text형식으로 richedit에 들어간다.
[되는 방법들..]
RichEdit에서 rtf 형식을 판단하는 부분은
Stream으로 읽을때 하고 있다.
파일스트림, 메모리스트림, 리소스 스트림등...
1. 리소스에 넣었다가 리소스 스트림으로 읽어오는 방법
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TResourceStream *ResSt;
try
{
ResSt = new TResourceStream((int)HInstance, L"RTF_DOCUMENT",L"RTF");
RichEdit1->Lines->LoadFromStream(ResSt);
}
__finally
{
delete ResSt;
}
}
2. 파일에서 읽어오는 방법
RichEdit1->Lines->LoadFormFile("파일명");
//확장자가 rtf 가 아니라도 잘 판단해서 읽어온다.
3. 메모장의 내용을 Stream으로 내보냇다가 읽어오기
void __fastcall TForm1::Button4Click(TObject *Sender)
{
TMemoryStream *ms=new TMemoryStream;
Memo1->Lines->SaveToStream(ms);
ms->Position=0;
RichEdit1->Lines->LoadFromStream(ms);
delete ms;
}
4. 문자열을 Stream에 넣어서 RichEdit로 ...
void __fastcall TForm1::Button6Click(TObject *Sender)
{
AnsiString sText=Memo1->Lines->Text;
TMemoryStream *ms=new TMemoryStream;
ms->WriteBuffer(sText.c_str(),sText.Length());
ms->Position=0;
RichEdit1->Lines->LoadFromStream(ms);
delete ms;
}
5. Unnicode문자열인 경우엔 다음과 같이..
void __fastcall TForm1::Button5Click(TObject *Sender)
{
String sText=Memo1->Lines->Text;
TEncoding* Encoding= TEncoding::Default;
TBytes Buffer=Encoding->GetBytes(sText);
TMemoryStream *ms=new TMemoryStream;
ms->WriteBuffer(&Buffer[0],Buffer.Length);
ms->Position=0;
RichEdit1->Lines->LoadFromStream(ms);
delete ms;
}
유니코드인경우엔..
정확한 메모리크기가 바로 나오지 않기때문에
Encoding 정보를 이용해서 길이를 파악하여서 Stream으로 밀어 넣어야 한다.
주의할점
Richedit에서 Stream을 읽을대 현재 Stream->Position부터 읽어들인다.
즉 RicheEdit로 LoadFormStream하기 전에 반드시 Stream의 Position을 0 (초기위치)으로 셋팅을 해줘야 한다.
그럼...
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이선스에 따라 이용하실 수 있습니다.