//--------------------------------------------------------------------------- #include #pragma hdrstop #include "swdisprtf.h" #include //--------------------------------------------------------------------------- __fastcall SWDispRTF::SWDispRTF(TWinControl *Owner) : TRxRichEditX(Owner) { RTFStream = new TMemoryStream(); ExpandNewLine = true; this->AutoURLDetect = true; } __fastcall SWDispRTF::~SWDispRTF() { if (RTFStream) delete RTFStream; } void __fastcall SWDispRTF::Loaded(void) { TRxRichEditX::Loaded(); } int __fastcall SWDispRTF::GetMySelStart() { CHARRANGE cr; SendMessage(Handle, EM_EXGETSEL, 0, (long)&cr); return cr.cpMin; } void __fastcall SWDispRTF::SetMySelStart(int iselstart) { CHARRANGE cr; cr.cpMin = iselstart; cr.cpMax = iselstart; SendMessage(Handle, EM_EXSETSEL, 0, (long)&cr); } // Display for Comm and LD char SWDispRTF::Display(SWModule &Module) { System::AnsiString newtext, tmptext; static UnicodeRTF filter; SWBuf buf; module = &Module; type = "Default"; recalcAppearance(); newtext = RTFHeader; newtext = newtext + RTFHeadMargin; Module.Error(); // clear error; newtext = newtext + "\\pard \\nowidctlpar \\cf7\\f0 "; (const char *)Module; // force key to snap to entry before pulling out the text of the key buf = Module.KeyText(); SWKey *key = Module; // VerseKey locales are not yet UTF8, so don't try to convert them. // if (!SWDYNAMIC_CAST(VerseKey, key)) filter.processText(buf, Module, &Module); newtext = newtext + RTFHeadingPre + buf.c_str() + RTFHeadingPost + ":{\\par}"; tmptext = ""; tmptext = (const char *)Module; newtext = newtext + RTFVersePre + tmptext + RTFVersePost; newtext = newtext + RTFTrailer; RTFStream->Clear(); RTFStream->WriteBuffer(newtext.c_str(), newtext.Length()); RTFStream->Position = 0; Lines->LoadFromStream(RTFStream); makeLinks(); makeImages(); SendMessage(Handle, EM_SCROLLCARET, 0, 0); return 0; } //---------------------------------------------------------------------------