Justowanie tekstu

0

Witam
Problem jest następujący:
Piszę tekst za pomocą

canvas.textout(...)

Znam x początku tekstu w linii i długość tekstu poprzez

canvas.textwidth(...)

Jak go wyjustować do lewego i prawego marginesu?

0

Chodzi mi prawie o coś takiego co jest w tym drugim przykładzie w tym linku.
Jednakże nie mogę sobie poradzić z pewną kwestią.

Otóż mój canvas to jest canvas drukarki.
I ja drukuję w orientacji poziomej 2 dokumenty obok siebie (po przecięciu A5).
Czyli normalnie robię textout(x,y) w lewej połowie strony i textout w prawej połowie strony.
Więc chodzi mi jak przerobić ten kod aby justował mi od danego X do danego X?

0

Pokombinuj z drugim argumentem w funkcji SetTextJustification oraz z ostatnim w funkcji SetTextAlign.

0

Nie mogę sobie z tym poradzić. Postanowiłem napisać własny algorytm justowania do lewego i prawego marginesu. Wygląda on tak:

function Justify(DC:HDC;text:string;AreaWidth:integer):string;
var
  Canvas   : TCanvas;
  i,j      : integer;
  Len      : integer;
  SpaceLen : integer;
  tmp      : string;
begin
  Canvas:=TCanvas.Create;
  Canvas.Handle:=DC;
  Len:=Canvas.TextWidth(text);
  SpaceLen:=Canvas.TextWidth(#32);
  i:=1;
  while (Len<AreaWidth) do begin
    while(i<Length(text)) do begin
      if text[i]=#32 then begin
        for j:=i+1 to Length(text) do
          if text[j]=#32 then inc(i) else break;
        tmp:='';
        for j:=1 to i do tmp:=tmp+text[j];
        tmp:=tmp+#32;
        for j:=i+1 to length(text) do tmp:=tmp+text[j];
        text:=tmp;
        i:=i+2;
        Len:=Len+SpaceLen;
      end else
        inc(i);
    end;
    i:=1;
  end;
  Result:=text;
end;

Wywołuję to w następujący sposób:

procedure Print;
var
  text : string;
begin
  ...
  Printer.Canvas.Rectangle(10,10,500,50);
  t:=Justify(Printer.Canvas.Handle,'A B C D E F G H I J',489);
  Printer.Canvas.TextOut(11,11,t);
  ...
end;

I działa on nawet nieźle ale przy małej liczbie wyrazów. Przy większej liczbie(l<4) efekty zaczyna się troche rozjeżdżać.
Ma ktoś pomysł jak to zmodyfikować??
Sprawa bardzo pilna!!

1 użytkowników online, w tym zalogowanych: 0, gości: 1