D
dlonra schrieb:
Hallo und eine Frage
Es geht um die RichEdit-Komponente.
Ich möchte gerne den rtf-StringStream auf einer PaintBox darstellen.
Der Text soll auf der PaintBox genau so aussehen wie in der RichEdit-Komponente. Oder ist das der falsche Ansatz? (benutze bcb5)
Grüße
Jetzt funktioniert es so bei mir!!!!!!!!
void Ttext_rtf_html_css::rtf_rect_back(TStringStream *rtf,int x1,int y1,int &x2,int &y2,TCanvas *back, TColor &bkgrd, bool &wordrap)
{
//x1.....y2 sellen das WunschzielRechteck auf back dar (mit der Maus markiertes Rechteck, back zeigt auf Ziel Canvas)
RichEdit1->Align=alNone; //RichEdit1 ist das mittlerweile geschlossene Texteingabefeld
RichEdit1->ScrollBars=ssNone;
rtf->Position=0;
TRichEdit *edi=RichEdit1;
edi->WordWrap=!wordrap;
edi->Width=x2-x1; //Ausgabebreite steht fest
edi->Lines->LoadFromStream(rtf); //rtf Stream reinladen (rtf-text einpassen)
COLORREF kb = TColor(bkgrd);
edi->Perform(EM_SETBKGNDCOLOR,0, kb);
int selstartret = edi->SelStart; AnsiString rein="\n "; //neue Zeile einfügen
edi->SelStart = edi->GetTextLen();
edi->SetSelTextBuf(rein.c_str()); //wird nicht angezeigt
edi->SelStart = selstartret; //damit die unterkante der richtigen zeile rauskommt
//
if(!wordrap)
{TPoint letzte; //kooregiere Wunschzielrechteck Höhe
edi->Perform(EM_POSFROMCHAR,int(&letzte),edi->GetTextLen()); //letzte.y = Texthöhe (v. letzte Buchstaben)
y2 = y1 + letzte.y; //Form1->Caption="x2-x1="+IntToStr(x2-x1) +" y2="+IntToStr(letzte.y)+" eh="+IntToStr(edi->Height)+" ew="+IntToStr(edi->Width);
}
TFormatRange fmt; //edi Canvas Übertragung auf back vorbereiten!
fmt.hdc = back->Handle; //y2 ist ab jetzt aktualisiert
fmt.hdcTarget = fmt.hdc;
fmt.rc = Rect(x11440/this->PixelsPerInch, //rect needs to be specified
y11440/this->PixelsPerInch, //in twips (1/1440 inch) as unit
x21440/this->PixelsPerInch, //erst inch in pixel (oder so)
y21440/this->PixelsPerInch);
fmt.rcPage = fmt.rc;
fmt.chrg.cpMin = 0; //vom anfang
fmt.chrg.cpMax = edi->GetTextLen(); //bis ende (kompletter Text bitte)
SetBkMode(back,TRANSPARENT); // OPAQUE);
edi->Perform(EM_FORMATRANGE,1,int(&fmt)); //mit 1,fmt) Canvas übertragen!
edi->Perform(EM_FORMATRANGE,0,0); //mit 0,0) Hintergrund Buffer deleten!!
//Cmalerich(back,x1,y1);
RichEdit1->Align=alClient;
RichEdit1->ScrollBars=ssVertical;
}//---------------------------------------------------------------------------