Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Text schräg auf Canvas ausgeben (https://www.delphipraxis.net/60921-text-schraeg-auf-canvas-ausgeben.html)

minimops 14. Jan 2006 12:18


Text schräg auf Canvas ausgeben
 
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!

Airblader 14. Jan 2006 12:20

Re: Text schräg auf Canvas ausgeben
 
...Text rotieren?

;)

air

minimops 14. Jan 2006 12:25

Re: Text schräg auf Canvas ausgeben
 
Cool, vielen Dank!

Schwedenbitter 16. Mär 2009 11:12

Re: Text schräg auf Canvas ausgeben
 
Entschuldigt bitte, dass ich ein altes Thema wieder aufmache: Ich konnte nicht anders :-D

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

jfheins 16. Mär 2009 12:00

Re: Text schräg auf Canvas ausgeben
 
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 :stupid:
Zitat:

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 :angel2:

Schwedenbitter 16. Mär 2009 12:53

Re: Text schräg auf Canvas ausgeben
 
Zitat:

Zitat von jfheins
Ist aber nur so ne Idee :angel2:

... hat den Nagel aber auf den Kopf getroffen :thumb:. 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.

worker 16. Mär 2009 13:21

Re: Text schräg auf Canvas ausgeben
 
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? ;)

Satty67 16. Mär 2009 14:18

Re: Text schräg auf Canvas ausgeben
 
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.

worker 16. Mär 2009 15:44

Re: Text schräg auf Canvas ausgeben
 
Zitat:

Zitat von Satty67
Bei einem normalen Stempel sieht man auch noch was drunter ist.

Ja, ganz bestimmt :lol: :dance: :party: :nerd: 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:

Zitat von Satty67
Bei einem normalen Stempel sieht man auch noch was drunter ist.

Dein Gehirn vervollständigt die durch die Tinte überdeckten Teile.

Schwedenbitter 1. Aug 2009 19:06

Re: Text schräg auf Canvas ausgeben
 
Zitat:

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:

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz