Einzelnen Beitrag anzeigen

Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Rave mit DelphiXE2 und Richedit/RTF [gelöst]

  Alt 24. Jan 2012, 17:40
Hallo,

ich habe stundenlang gegoogelt und kaum was gefunden. Da ich bei einem Schlag auf den Hinterkopf + Gedächtnisverlust meinerseits immer zuerst hier im Forum suchen würde und vielleicht auch andere danach suchen, stelle ich mal Frage+Antwort rein.

Mit DelphiXE2 funktionieren meine Ravereports nicht mehr, ich übertrage ein Richedit per Custommconnection und erhalte im Ravereport nur chinesische Schriftzeichen oder andere Hyroglyphen.
Ich habe diverse Tipps gelesen, das man noch mit savetostream(xxx,Tendoding.utf8) arbeiten soll, das hat alles nicht funktioniert.
Folgendes ging jetzt:

der Text muß als dtstring (nicht dtmemo) und über den Umweg einer Tstringlist übertragen werden.
Delphi-Quellcode:
procedure TForm1.RvCustomConnectionGetCols(
  Connection: TRvCustomConnection);
begin
  //als dtstring, nicht dtmemo !!!
  Connection.WriteField('RichEditRTF', dtstring, 30, '','');
end;

procedure TForm1.RvCustomConnectionGetRow(Connection: TRvCustomConnection);
Var memstream:Tmemorystream;
    sl:Tstrings;
begin
  MemStream := TMemoryStream.Create;
   try
     RichEdit1.Lines.SaveToStream(memstream);
     //das hier hätte vorher gereicht (in Verbindung mit dtmemo):
     //Connection.WriteBlobData(MemStream.Memory^, MemStream.Size);

     //Umweg über eine Stringlist sl.text:=Richedit.lines.text reicht nicht
     sl:=TStringList.create;
     try
       memstream.Position:=0;
       sl.LoadFromStream(memstream);
       Connection.WriteStrData(sl.Text,'');
     finally
       sl.Free;
     end;
   finally
     MemStream.Free;
   end;
end;
Irgendwo (finde leider die Seite nicht mehr) war noch der Vorschlag, das man das Richedit wie früher (dtmemo+Blobdata) übergibt, im Ravereport eine 2. Datamemo setzt und das erste das auf unsichtbar setzt.
ins onbeforeprint des 2. memos dann
Code:
self.text:=copy( datamemo1.text, 0, round( length( datamemo1.text )/2));
das ist mir aber dann doch zu viel Gefrickel.

Wenn noch jemand einen Hinweis hat, nehme ich den auch dankbar an

Gruß Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat