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á:
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.