Einzelnen Beitrag anzeigen

Satty67

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

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