Newsgroup: it.comp.lang.delphi
Titolo: testo formattato

Salve!
Avrei bisogno di capire come fare ad utilizzare il RichEdit, ho letto
in giro un po di documentazione, ma non riesco a trovare niente di
chiaro.
In pratica mi arrivano dei dati dalla seriale, li elaboro e poi devo
sputarli fuori formattati. La cosa più banale che devo stampare (a
video) è la data in bold, seguita dal messaggio.
Ho provato a passargli ogni volta che devo stampare una cosa del tipo
RichEdit1.Lines.Add('{\rtf {\b Data:} messaggio. }');
ma mi da errore
Penso sia dovuto al fatto che viene stampato più volte l'header \rtf.
ATTENZIONE: non voglio riscrivere tutto il contenuto, voglio
aggiungere una nuova riga.
Come posso fare? Mi conviene usare qualche altro componente?
Grazie fin da ora a tutti.
Ale.Ber

 chiaro.
http://web.infinito.it/utenti/c/catand/Tips/ttsu3.htm
Vedi se qui puo' trovare qualche aiuto.
Ciao
ACSH
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ACSH
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 qualche idea?
Ho cercato su google groups per "delphi adding rtf text richedit" ecco i
risultati a mio parere piu' significativi:
http://tinyurl.com/4dhbq
A seguito di questo, ti propongo un altro post del *mitico* Peter Below:
(qui potrai trovare un file help con raccolti piu' di 9000 post usenet di
Peter su delphi
http://cc.borland.com/codecentral/ccweb.exe/listing?id=15437
)
[...] The only methods to insert formatted text directly (not add it plain,
then select and format) is to either copy it from the clipboard (if it has
RTF text) or to use the EM_STREAMIN message with a complete minimal RTF
file as source. If you want to control font and color this "minimal" file
would need a font and color table. Produce a sample doc with a few fonts
and colors in WordPad, save it as RTF and look at the file in Notepad to
see what is involved.
Uses RichEdit;
Type
  TEditStreamCallBack = function (dwCookie: Longint; pbBuff: PByte;
    cb: Longint; var pcb: Longint): DWORD; stdcall;
  TEditStream = record
    dwCookie: Longint;
    dwError: Longint;
    pfnCallback: TEditStreamCallBack;
  end;
function EditStreamInCallback(dwCookie: Longint; pbBuff: PByte;
 cb: Longint; var pcb: Longint): DWORD; Stdcall;
var
  theStream: TStream;
  dataAvail: LongInt;
begin
  theStream := TStream(dwCookie);
  with theStream do begin
    dataAvail := Size - Position;
    Result := 0; {assume everything is ok}
    if dataAvail <= cb then begin
      pcb := Read(pbBuff^, dataAvail);
      if pcb <> dataAvail then {couldn't read req. amount of bytes}
        result := E_FAIL; 
    end 
    else begin
      pcb := Read(pbBuff^, cb); 
      if pcb <> cb then 
        result := E_FAIL; 
    end;
  end;
end;
Function EditStreamOutCallback(dwCookie: Longint; pbBuff: PByte;
    cb: Longint; var pcb: Longint): DWORD; stdcall;
 var
   theStream: TStream;
 begin
   theStream := TStream(dwCookie);
   with theStream do begin
     If cb > 0 Then 
       pcb := Write(pbBuff^, cb);
     Result := 0;
   end;
 end;
Procedure GetRTFSelection( aRichEdit: TRichEdit; intoStream: TStream );
Var
  editstream: TEditStream;
Begin
  With editstream Do Begin
    dwCookie:= Longint(intoStream);
    dwError:= 0;
    pfnCallback:= EditStreamOutCallBack;
  end;
  aRichedit.Perform( EM_STREAMOUT, SF_RTF or SFF_SELECTION,
longint(@editstream));
End;
Procedure PutRTFSelection( aRichEdit: TRichEdit; sourceStream: TStream );
Var
  editstream: TEditStream;
Begin
  With editstream Do Begin
    dwCookie:= Longint(sourceStream);
    dwError:= 0;
    pfnCallback:= EditStreamInCallBack;
  end;
  aRichedit.Perform( EM_STREAMIN, SF_RTF or SFF_SELECTION,
longint(@editstream));
End;
procedure TForm1.Button1Click(Sender: TObject);
const
  rtfsample = '{\rtf1\ansi\plain 12 {\ul underlined} {\b bold} \par Hello.
}';
var
  oldsel: Integer;
  ss: TStringstream;
begin
  with richedit1 do begin
    oldsel := selStart;
    lines.beginupdate;
    try
      selstart := gettextlen;
      ss:= TStringStream.Create( rtfsample );
      try
        PutRTFSelection( richedit1, ss );
      finally
        ss.free;
      end;    
    finally
      lines.endupdate;
    end; { finally }
  end;
end;
Peter Below (TeamB)
-- 
Morde. 
M-List di icld: 
http://it.groups.yahoo.com/group/icld/

 plain, then select and format) 
<CUT>
Secondo me, e' questo che deve fare l'OP (quello scritto 
nelle parentesi): semplice e veloce. Inserire testo gia' formattato 
e' un bagno di sangue - come hai mostrato tu nel resto del post.


 video) è la data in bold, seguita dal messaggio.
Metti un rich ed un pulsante su di una form e poi prova cosi'..
procedure TForm1.Button1Click(Sender: TObject);
begin
   with Richedit1 do begin
    Clear;
    SelAttributes.Style := [];
    SelAttributes.Color := clNavy;
    SelText := 'Questa è la data in grassetto: ';
    SelAttributes := DefAttributes;
    SelAttributes.Style := [fsBold]; //Stampa sulla stessa riga
    SelAttributes.Color := clBlue;
    SelText := '01/01/2005';
    SelAttributes := DefAttributes;
    SelText:= #13;  //va a capo di una riga.
    SelAttributes.Style := [];
    SelAttributes.Color := clRed;
    SelText := 'Sono andato a capo...';
    SelAttributes := DefAttributes;
   end;
end;
Ciao
  Miyomo