Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Text schräg auf Canvas ausgeben

  Alt 16. Mär 2009, 11:12
Entschuldigt bitte, dass ich ein altes Thema wieder aufmache: Ich konnte nicht anders

Ich möchte das Ganze beim Drucken benutzen. Die auszudruckenden Bilder sollen alle der Vermerk "Kopie" erhalten, so dass niemand mehr den Stempel zücken muss. Ich habe deshalb den Quellcode in meine an sich kurze Druck-Routine eingebaut. So weit so gut. Es wird dann auch der schräge Text gedruckt. Zu klein, an der falschen Stelle und nicht transparant, was sich aber vermutlich noch ändern ließe.

Ich habe aber ein Problem mit der Geschwindigkeit! Wenn ich nur eine einzige DIN-A4-Seite drucke, geht der Rechner für ca. 2 Minuten total in die Knie Liegt es an mir?

Mein Quelltext sieht nach dem Integrieren wie folgt aus, wobei DruckJob eine TStringList ist und Label4 ausgibt, wieviel Seiten des Auftrags schon gedruckt wurden:
Delphi-Quellcode:
Procedure TForm1.SpeedButton1Click(Sender: TObject);
Var
   I            : Integer;
   PNG         : TPNGObject;
   lf            : TLogFont;
   tf            : TFont;
Begin
   // Drucker zum Drucken auswählen
   Printer.PrinterIndex:=Printer.Printers.IndexOf(ComboBox1.Text);
   Try
      tf:=Font.Create;         // Zeiger auf Schrift
      PNG:=TPNGObject.Create;   // Zeiger auf PNG-Datei
      Printer.BeginDoc;         // Drucker vorbereiten
      Printer.Title:='Ausdruck';
      For I:=0 To Pred(DruckJob.Count) Do
      Begin
         PNG.LoadFromFile(DruckJob.Strings[I]);
         Printer.Canvas.StretchDraw(Rect(0,0,Printer.PageWidth,Printer.PageHeight),PNG);
         Printer.Canvas.Font.Name:='Arial';   // Schriftsart für Wasserzeichen
         Printer.Canvas.Font.Size:=24;         // Schriftgröße für Wasserzeichen
         tf.Assign(Printer.Canvas.Font);
         GetObject(tf.Handle,SizeOf(lf),@lf);
         lf.lfEscapement:=   320;
         lf.lfOrientation:=320;
         SetBkMode(Handle,TRANSPARENT);
         tf.Handle:=CreateFontIndirect(lf);
         Printer.Canvas.Font.Assign(tf);
         Printer.Canvas.TextOut(Width div 2, Height div 2, 'KOPIE');
         If I<Pred(DruckJob.Count) Then
            Printer.NewPage;   // Neue Seite anfangen
         PB1.Position:=I;
         Label4.Caption:=FormatFloat('#,##0',Succ(I));
         Application.ProcessMessages;
      End;
   Finally
      Printer.EndDoc;         // Druckauftrag beenden
      tf.Free;
      PNG.Free;
   End;
   Close;
End;
Schonmal Dank für Eure Ideen

Alex
Alex Winzer
  Mit Zitat antworten Zitat