Zitat Zitat von PX Beitrag anzeigen
Code:
begin
        Printer.Canvas.TextOut(500, 1000 + I *
              (Printer.Canvas.TextHeight('I') + 5), memText1.Lines[I], memText2-Lines[I]);
         end;
So? Wofür wird denn eigentlich die Variable I eingesetzt?
I steht immer für die aktuelle Zeile (beginnend bei 0) in meinem Code. Um auszurechnen wohin de Text kommen muss ist die Formel I*(ZeilenHöhe + 5), damit sich der Text nicht überschneidet. Die +5 ist nur damit die Zeilen nicht so aneinander kleben.

Dein Code ist übrigens schwachsinn. Probiere es mal lieber so:

Code:
procedure TfrmMain.btnPrintClick(Sender: TObject);
var
  I, J: Integer;
begin
  if PrintDialog.Execute then
  begin
    try
      Printer.Copies := printDialog.Copies;

      Printer.Title := 'Document';
      Printer.BeginDoc;
      // Setze Schriftart
      Printer.Canvas.Font := FontDialog.Font;
      // Zeilenweißes drucken
      for I := 0 to memText.Lines.Count - 1 do
      begin
        Printer.Canvas.TextOut(500, 500 + I *
              (Printer.Canvas.TextHeight('I') + 5), memText.Lines[I]);
      end;

      for J := 0 to memText2.Lines.Count - 1 do
      begin
        Printer.Canvas.TextOut(500, 500 + J * (Printer.Canvas.TextHeight('I') + 5) + I * (Printer.Canvas.TextHeight('I') + 5),
              (Printer.Canvas.TextHeight('I') + 5), memText2.Lines[J]);
      end;
      // Und drucken:
      Printer.EndDoc;
    except
      MessageDlg('Error while printing!', mtError, [mbOk], 0);
    end;
  end;
end;