[Delphi]RTF z RichEdit na canvas

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod dyžon 29. 8. 2017 12:30

zdravím,
vím, že to není úplně moc zajímavé téma, ale snad někdo pomůže.
snažím se vykreslit RTF text z RichEdit na canvas TImage, protože ho potřebuji vypsat na pozadí s BitMapou a TRichEdit nemá průhledny pozadí.
napsal jsem:
Kód: Vybrat vše
procedure TForm1.PrekresliRE;
var
  i: integer;
begin
  for i := 1 to length(RichEdit1.Text) - 1 do
  begin
    if RichEdit1.Text[i] = #13 then
    with Image1.Canvas do
      MoveTo(0, PenPos.Y + TextHeight(RichEdit1.Lines.Strings[0]));
    RichEdit1.SelStart := i;
    RichEdit1.SelLength := 1;
    with Image1.Canvas do
    begin
      Font.Color := RichEdit1.SelAttributes.Color;
      Font.Size := RichEdit1.SelAttributes.Size;
      Font.Style := RichEdit1.SelAttributes.Style;
      if (RichEdit1.Text[i] <> #13) and (char(RichEdit1.Text[i]) <> #10) then
        TextOut(PenPos.X+1, PenPos.Y, RichEdit1.Text[i]); // k X jsem musel přidat 1px, jinak se písmena překrývají.
    end;
  end;
end;
v Image1 mám vloženou BitMapu a bohužel pozadí písma zůstává neprůhledny.
když to místo na canvas vkládám do TLabelu
Kód: Vybrat vše
     with Label1 do
    begin
      Font.Color := RichEdit1.SelAttributes.Color;
      Font.Size := RichEdit1.SelAttributes.Size;
      Font.Style := RichEdit1.SelAttributes.Style;
      if (RichEdit1.Text[i] <> #13) and (char(RichEdit1.Text[i]) <> #10) then
        Label1.Caption:= Label1.Caption +  RichEdit1.Text[i]; // k X jsem musel přidat 1px, jinak se písmena překrývají.
    end;
a label leží na Image1, tak je pozadí písmen průhledny, akorát se změní styl, barva a velikost podle posledního znaku.
rich_1.png
rich_1.png (53.45 ) Zobrazeno 1897 krát

když zkusím ve FormCreate nakreslit na Image1 barevnej obdelník, tak je pozadí písmen průhledny.
rich_2.png
rich_2.png (12.15 ) Zobrazeno 1886 krát

nemáte někdo prosím představu, jak to udělat, aby to vypadalo dobře ??
další podivnost je, že musím u hodnoty X v TextOut přidávat 1px, jinak jsou ty písmena přes sebe.
asi je to jasný, ale jen pro jistotu.
úplně nahoře je TImage, v jeho spodní části je TLabel a pod něma, dole je TRichEdit.
prosím pomoc ...

-- 29. 8. 2017 13:53 --

nepotřebuju úplně překreslovat na TCanvas, ale jiny řešení mě nenapadá ..
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod Just_jo 29. 8. 2017 17:14

Tady je jedna možnost průhledného pozadí pro TextOut
http://www.delphigroups.info/2/8/300931.html SetBkMode( Canvas.Handle, TRANSPARENT );
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod dyžon 30. 8. 2017 08:41

super, děkuji, to je přesně ono ...
mě teda funguje Canvas.Brush.Style:= bsClear; ,
ale je možny, že jsem jen to SetBkMode( Image1.Canvas.Handle, TRANSPARENT ); špatně použil.

dokonce to vyřešilo i To X+1, už není potřeba posouvat pozici dalšího písmene.
ještě musím upravit tu proceduru na vykreslování, psal jsem to jen na rychlo a není to úplně v pořádku.

takže díky a měj se.
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků