[Delphi]RTF na Canvas - zarovnání dolu

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

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

Odeslat příspěvekod dyžon 11. 2. 2018 15:35

zdravim,
napsal jsem si proceduru na vykreslení formátovanýho textu z TRichEdit na Canvas.
Kód: Vybrat vše
procedure TForm1.RtfNaCanvas(vykreslovat_OD: TPoint; RE: TRichEdit; aCanvas: TCanvas);
var i, p: Integer;
begin
  p:= 0;
  aCanvas.Brush.Style:= bsClear;
  SetTextAlign(aCanvas.handle, TA_BASELINE);
  aCanvas.MoveTo(vykreslovat_OD.X, vykreslovat_OD.Y);

  for i := 1 to length(RichEdit1.Text) do
  begin
    if RichEdit1.Text[i] = #13 then begin
      with aCanvas do  MoveTo(vykreslovat_Od.X, PenPos.Y + TextHeight(RichEdit1.Lines.Strings[0]));
      dec(p);
    end;
      RE.SelStart:= p;
      RE.SelLength:= 1;
      inc(p);
      with aCanvas do
        begin
          Font.Color := RE.SelAttributes.Color;
          Font.Size := RE.SelAttributes.Size;
          Font.Style := RE.SelAttributes.Style;
          if (RE.Text[i] <> #13) and (char(RE.Text[i]) <> #10) then
            TextOut(PenPos.X, PenPos.Y, RE.Text[i]);
        end;
    end;
end;

takhle to vypadá:
2018-02-11_153251.png
nahled
2018-02-11_153251.png (34.92 ) Zobrazeno 2123 krát

má to ale jednu chybičku a to, že bych potřeboval, aby se text zarovnal podle spodní linky,
ne tak jak je to teď, zarovnání k vrchní lince.
zkusil jsem WinApi:
Kód: Vybrat vše
SetTextAlign(aCanvas.handle, TA_BASELINE);

ale to nějak nezabírá ....
nevíte někdo, jak by se to dalo udělat ??
a druhá část: dalo by se to upravit tak, že by se text vypisoval pouze do určenýho TRect s WordWrap a zarovnání do leva ??
Vykresluju to po jednom znaku, takže to asi nepůjde, ale budu moc rád za každou pomoc.
AMD FX-6300; Gigabyte 970A-DS3P; DDR3 8192MBytes; AMD Radeon HD 6700 Series
dyžon
Junior
Uživatelský avatar

Odeslat příspěvekod dyžon 12. 2. 2018 12:10

první část mám vyřešenou,
stačilo posunout
Kód: Vybrat vše
SetTextAlign(aCanvas.handle, TA_BASELINE);

těsně před funkci TextOut.

teď jdu řešit WordWrap, napadá mě vytvořit nějakej RTF String, kterej poskládám z těch písmen a pomocí DrawText ho nakonec vykreslím do určitýho Rectu.
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ů