Drucken + Seite Einrichten

W-Stefan

Mitglied
Hei leute,

ich bastle immer noch an meinem TextEditor. Hätte da noch eine Frage. Ich möchte aus einem memofeld drucken. das funktioniert auch (hier mein code):

Code:
procedure TEditor.druckenClick(Sender: TObject);
var line: Integer;
    printtext: TextFile;
begin
  if PrintDialog.Execute then
  begin
    AssignPrn(printtext);
    Rewrite(printtext);
    Printer.Canvas.Font := mem_texteingabe.Font;
    Printer.Canvas.Font.Size := mem_texteingabe.Font.Size;
    Printer.Canvas.Font.Style := mem_texteingabe.Font.Style;

    for line := 0 to mem_texteingabe.Lines.Count - 1 do
      Writeln(printtext, mem_texteingabe.Lines[Line]);
      CloseFile(printtext);
  end;
end;

Aber ich möchte über den Button "Seite einrichten" angeben, wie viel rand der Drucker lassen soll. Außerdem soll auf dem Ausdruck oben der Dateiname angezeigt werden und unten die Aktuelle Seitenzahl.

Hoffe ihr könnt mir helfen.

mfg


Is denn keiner da, der mir helfen kann?
 
Zuletzt bearbeitet:
Hi Leute, habe auf dieser Seite nachgeschaut und diesen Quelltext gefunden:

Code:
procedure DruckenUeberMehrereSeiten;
var seitenbreite, seitenhoehe, offsetX, offsetY: integer;
    mmpropixelx, mmpropixely: real;
    komplettebreite, komplettehoehe, seitenX, seitenY: integer;
    x,y, leftoffset, topoffset: integer;
begin

  if PrintDialog1.Execute then begin

    printer.Orientation:=poLandscape; //Drucken im Querformat
    printer.BeginDoc;
    printer.Title:='Mein Ausdruck'; //Titel, der im Druckmanager angezeigt wird
    SetMapMode(printer.Canvas.Handle, MM_LOMETRIC); // 1/10 mm

    //Druckerauflösung (mm pro Pixel) ermitteln
    mmpropixelx:=25.4/GetDeviceCaps(printer.handle, LOGPIXELSY);
    mmpropixely:=25.4/GetDeviceCaps(printer.handle, LOGPIXELSY);

    //Papiergröße ermitteln
    seitenbreite:=round(GetDeviceCaps(printer.handle, PHYSICALWIDTH)*
      MMProPixelX);
    seitenhoehe:=round(GetDeviceCaps(printer.handle, PHYSICALHEIGHT)*
      MMPropixelY);

    //nicht bedruckbare Seitenränder ermitteln
    offsetX:=round(GetDeviceCaps(printer.handle, PHYSICALOFFSETX)*MMProPixelX);
    offsetY:=round(GetDeviceCaps(printer.handle, PHYSICALOFFSETY)*MMpropixelY);

    topoffset:=0;

    //Größe unseres gesamten Ausdrucks
    komplettebreite:=gesamtX;
    komplettehoehe:=gesamtY;

    //Anzahl der "Zeilen" (seitenY) und "Spalten" (seitenX)
    seitenX:=ceil(kompletteBreite/((Seitenbreite-2*OffsetX)*10));
    seitenY:=ceil(kompletteHoehe/((Seitenhoehe-2*OffsetY)*10));

    //Schleife über die "Zeilen"
    for y:=1 to SeitenY do begin
      leftoffset:=0;

      //Schleife über die "Spalten" 
      for x:=1 to SeitenX do begin
        //Verschieben des Koordinatenursprungs
        SetWindowOrgEx(printer.Handle,LeftOffset,TopOffset,nil);

        //hier normale Druck-Methode aufrufen        

        //für nächste "Spalte" Abstand vom linken Rand um eine 
        //Blattbreite nach rechts verschieben
        leftoffset:=leftoffset+(Seitenbreite-2*OffsetX)*10;
        if x<SeitenX then begin
          printer.NewPage;
          SetMapMode(printer.Canvas.Handle, MM_LOMETRIC);
        end;
      end;
      if y<SeitenY then begin
        printer.NewPage;
        SetMapMode(printer.Canvas.Handle, MM_LOMETRIC);
      end;

      //für nächste "Zeile" Abstand vom oberen Rand um eine 
      //Blatthöhe nach unten verschieben
      topoffset:=topoffset-(Seitenhoehe-2*OffsetY)*10;
    end;
    printer.EndDoc;
  end;
end;

der Funktioniert bei mir aber nicht. Könnt ihr mir helfen?
 
Jetzt hab ichs sogar hinbekommen, dass er richtig kompiliert, hab in die Usel-Klausel Math aufgenommen. Aber drucken tut er nichts. Er druckt zwar aber mein Blatt ist weiss.
 
Zurück