Text rechtsbündig drucken ?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Jenseman
Beiträge: 8
Registriert: Mo 22. Jul 2013, 19:38

Text rechtsbündig drucken ?

Beitrag von Jenseman »

Hi,

gibt es wirklich keine einfacherere Alternative zu der selbstgeschriebenen Durckerunit von Teekeks, einen Text mit Canvas rechtsbündig zu drucken?
Ich habe mal wieder seit Tagen in dem Forum gestöbert, Schriftart, Größe, Farbe, Fett,... zu so ziemlich allem habe ich was gefunden zur Druckausrichtung kann ich aber nichts finden. In Delphi genügte eine simple Zeile im Quellcode:

SetTextAlign(Printer.Handle,TA_RIGHT);


gefolgt vom Canvas Textout:

Canvas.TextOut (30,145, 'Hello World');


Das versteht Lazarus so aber nicht. Gibt es in Lazarus wirklich nichts vergleichbares?

Jenseman

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Text rechtsbündig drucken ?

Beitrag von Michl »

Ich habe mal folgendes probiert, was bei mir eigentlich recht gut funktioniert:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  TS: TTextStyle;
begin
  if printDialog.Execute then
  begin
    printer.BeginDoc;
    printer.Canvas.Font.Name := 'Courier New';
    printer.Canvas.Font.Size := 10;
    printer.Canvas.Font.Color := clBlack;
 
    TS:=Printer.Canvas.TextStyle;
    TS.Alignment:=taRightJustify;
 
    printer.Canvas.TextRect(rect(100, 100, 1000, 1000), 100, 100, 'Hallo Welt', TS);
    printer.Canvas.TextRect(rect(100, 100, 1000, 1000), 100, 200, 'Hi Welt', TS);
    printer.Canvas.TextRect(rect(100, 100, 1000, 1000), 100, 300, 'Hello World', TS);
    printer.Canvas.TextRect(rect(100, 100, 1000, 1000), 100, 400, 'Salve', TS);
    printer.EndDoc;
  end;
end;
Weiss aber nicht, ob es das ist, was Du willst?! TextRect grenzt den Druckbereich ein, in diesem ist eine Rechtsorientierung möglich.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

linus
Beiträge: 22
Registriert: Di 19. Okt 2010, 17:23
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kaiserstuhl

Re: Text rechtsbündig drucken ?

Beitrag von linus »

Leider hatte ich mit diesem Problem auch schon zu kämpfen. Ich habe dann einfach über .Canvas.TextWidth() die Textbreite ausrechnen lassen und dann - je nach Textausrichtung LEFT/CENTER/RIGHT - die Position von X/Y für .Canvas.TextOut selber errechnet. Ist zwar zunächst etwas fummelig, dafür funktioniert's aber auch.
Wer mehr denkt hat mehr vom Hirn...

Jenseman
Beiträge: 8
Registriert: Mo 22. Jul 2013, 19:38

Re: Text rechtsbündig drucken ?

Beitrag von Jenseman »

Danke Euch Beiden für die raschen Ideen und die traurige Bestätigung.
Ich hatte sowas nach der umfänglichen Recherche befürchtet. Ja das ist sicher etwas kompakter als die Druckunit,
aber in Formularen und im Rechnungsdruck mit variablen Textinhalten immer noch im Vergleich zu Delphi ein Wahnsinn.

Aber es nützt dann wohl nichts, dann mach ich mich mal ans fröhliche Druckbereiche definieren und Berechnen...

Danke nochmals und einen schönen Abend

Jenseman

Antworten