AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Drucken (ein leidiges Thema)

Ein Thema von MiniMax · begonnen am 8. Mai 2011 · letzter Beitrag vom 10. Mai 2011
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#1

AW: Drucken (ein leidiges Thema)

  Alt 9. Mai 2011, 07:47
Manuell geht auch,
entweder direkt über die entsprechenden WinAPIs
oder über TPrinter, welches ein Canvas besitzt, worauf man die aktuelle Seite draufmalen kann.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Drucken (ein leidiges Thema)

  Alt 9. Mai 2011, 09:15
Für ganz einfache Sachen (Tabellen, ein Bild) kann man schon TPrinter verwenden. Für flexible Formulare wie Rechnungen etc. ist das wirklich ein Haufen Arbeit und ein ReportDesigner wirklich empfehlenswert.

Beim "manuellen" drucken muss man sich noch entscheiden, ob man die Koordinaten/Maße an den Drucker anpasst oder den Drucker an den Maßstab (letzeres mit SetMapMode, SetViewPort etc.)

Ein kleines Beispiel für die erste Variante:
Delphi-Quellcode:
  private
    { Private-Deklarationen Form1 }
    FxFactor,
    FyFactor : Double;

[...]

procedure TForm1.CalculateLoMetricFactor;
var
  xDPI, yDPI : Integer;
begin
  xDPI := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
  yDPI := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
  FxFactor := xDPI / 254;
  FyFactor := yDPI / 254;
end;

function TForm1.CalcX(XValue : Integer): Integer;
begin
  Result := Round(XValue * FxFactor);
end;

function TForm1.CalcY(YValue : Integer): Integer;
begin
  Result := Round(YValue * FyFactor);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if PrintDialog1.Execute then
  begin
    CalculateLoMetricFactor;
    Printer.BeginDoc;
    with Printer.Canvas do
    begin
      // Maßangaben in 1/10 mm
      StretchDraw(Rect(CalcX(400),CalcY(100),CalcX(400+400),CalcY(100+400)),
                       Image1.Picture.Graphic);

      Font.Size := 12;
      TextOut(CalcX(100), CalcY(100), '- Zeile 1');
      TextOut(CalcX(100), CalcY(200), '- Zeile 2');
    end;
    Printer.EndDoc;
  end;
end;
Selbst bei so einem einfachen Beispiel muss schon viel berechnet werden, damit das auf jedem Drucker gleich aussieht.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz