AGB  ·  Datenschutz  ·  Impressum  







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

Text schräg auf Canvas ausgeben

Ein Thema von minimops · begonnen am 14. Jan 2006 · letzter Beitrag vom 2. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
minimops

Registriert seit: 22. Jan 2004
56 Beiträge
 
Delphi 2005 Professional
 
#1

Text schräg auf Canvas ausgeben

  Alt 14. Jan 2006, 12:18
Wie kann man einfach einen Text schräg auf eine Canvas ausgeben? Also wie ein Wasserzeichen von unten links nach oben rechts?
Über einen kleinen Tip würde ich mich freuen! Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#2

Re: Text schräg auf Canvas ausgeben

  Alt 14. Jan 2006, 12:20
...Text rotieren?



air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
minimops

Registriert seit: 22. Jan 2004
56 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Text schräg auf Canvas ausgeben

  Alt 14. Jan 2006, 12:25
Cool, vielen Dank!
  Mit Zitat antworten Zitat
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
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: Text schräg auf Canvas ausgeben

  Alt 16. Mär 2009, 12:00
Vielleicht geht es schneller, wenn du den Kopie-Vermerk nach dem laden des PBGs auf selbiges malst und danach nur das PNG auf den Drucker-Canvas sendest
Zitat von Schwedenbitter:
Delphi-Quellcode:
         PNG.LoadFromFile(DruckJob.Strings[I]);
// Hier jetzt auf PNG drauf malen und dann erst zum Drucker geben
         Printer.Canvas.StretchDraw(Rect(0,0,Printer.PageWidth,Printer.PageHeight),PNG);
Ist aber nur so ne Idee
  Mit Zitat antworten Zitat
Schwedenbitter

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

Re: Text schräg auf Canvas ausgeben

  Alt 16. Mär 2009, 12:53
Zitat von jfheins:
Ist aber nur so ne Idee
... hat den Nagel aber auf den Kopf getroffen . Auf die Idee hätte ich ja auch selber mal kommen können. Ich bekomme jetzt zwar noch eine Exception. Aber ich denke, die liegt an meinem TPNGObject, was leider nicht mehr weiterentwickelt wird. Muss ich halt noch irgendwie abfangen.

Danke sehr!

Das einzige, was mich jetzt noch wirklich stört, ist die fehlende Transparenz. Der Kopie-Stempel deckt alle komplett ab.
Alex Winzer
  Mit Zitat antworten Zitat
worker
(Gast)

n/a Beiträge
 
#7

Re: Text schräg auf Canvas ausgeben

  Alt 16. Mär 2009, 13:21
Meinst Du die Schrift selber, oder den Hintergrund der Schrift?

Für Punkt 2: probiere bsClear (BrushStyle)
Für Punkt 1: was macht ein normaler Stempel?
  Mit Zitat antworten Zitat
Satty67

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

Re: Text schräg auf Canvas ausgeben

  Alt 16. Mär 2009, 14:18
Bei einem normalen Stempel sieht man auch noch was drunter ist.

Schreibe den Stempeltext in ein eigenes TImage. Das kannst Du dann mit entsprechenden Optionen über Deine Bilder legen. Um noch mehr Mühe zu sparen kannst Du den Stempel auch gleich komplett als fertiges Image laden. Solange es sowieso immer der gleich Text ist, scheint mir das auch der bessere Weg.
  Mit Zitat antworten Zitat
worker
(Gast)

n/a Beiträge
 
#9

Re: Text schräg auf Canvas ausgeben

  Alt 16. Mär 2009, 15:44
Zitat von Satty67:
Bei einem normalen Stempel sieht man auch noch was drunter ist.
Ja, ganz bestimmt Dann kram mal Dein Taschengeld zusammen und geh' Dir einen Stempel kaufen...

Auch bei einem normalen Stempel wirst Du kaum sehen, was unter der Tinte steht, oder?
Es sei denn, Du benutzt nur mässig deckende Stempelfarbe, was aber wohl nicht Sinn der Sache ist.

Deswegen meine Frage, was er meint: ob er meint, dass die Schrift den Hintergrund verdeckt (das ist das, was sich wohl nicht vermeiden lässt), oder ob um die Schrift noch ein Rahmen (Hintergrund) gezeichnet wird, und dieser das, was darunter liegt, verdeckt. Und das lässt sich mit bsClear vermeiden.

Nochmal dazu wenn es auf die Schrift bezogen ist
Zitat von Satty67:
Bei einem normalen Stempel sieht man auch noch was drunter ist.
Dein Gehirn vervollständigt die durch die Tinte überdeckten Teile.
  Mit Zitat antworten Zitat
Schwedenbitter

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

Re: Text schräg auf Canvas ausgeben

  Alt 1. Aug 2009, 19:06
Zitat von worker:
Für Punkt 2: probiere bsClear (BrushStyle)
Das habe ich gemacht. Aber der folgende Code bringt mir trotzdem nur die Schrift auf das Bild und verdeckt trotz bsClear den Text:

Delphi-Quellcode:
Procedure TForm1.FormCreate(Sender: TObject);
Var
   T         : String;
   BMP      : TBitmap;
Begin
   BMP:=TBitmap.Create;
   Try
      BMP.LoadFromFile('C:\Test.bmp');
      BMP.Canvas.Font.Name:='Arial';   // Schriftart für Stempel
      BMP.Canvas.Font.Size:=170;         // Schriftgröße für Stempel
      BMP.Canvas.Font.Orientation:=550;// Drehung der Schrift 55°
      BMP.Canvas.Font.Color:=$C0C0C0;   // Helles Grau
      BMP.Canvas.Brush.Style:=bsClear;   // Durchsichtig
      T:='Kopie';                        // Text
      BMP.Canvas.TextOut((BMP.Width-BMP.Canvas.TextWidth(T)) div 2,
                         (BMP.Height-BMP.Canvas.TextHeight(T)) div 2,
                           T);
      BMP.SaveToFile('C:\Test_W.bmp');
   Finally
      BMP.Free
   End;
   Application.Terminate;
End;
Zitat von Satty67:
Schreibe den Stempeltext in ein eigenes TImage. Das kannst Du dann mit entsprechenden Optionen über Deine Bilder legen.
@Satty67 oder wer das sonst noch kann:
Das Schreiben in ein TImage ist kein Problem. Muss es unbedingt ein TImage sein oder geht auch was anderes (z.B. TBitmap)? Aber viel wichtigter: Wie lautet die "entsprechende(n) Option(en)" zum Stempeln?

Gruß und Dank, Alex
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz