![]() |
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! |
Re: Text schräg auf Canvas ausgeben
|
Re: Text schräg auf Canvas ausgeben
Cool, vielen Dank!
|
Re: Text schräg auf Canvas ausgeben
Entschuldigt bitte, dass ich ein altes Thema wieder aufmache: Ich konnte nicht anders :-D
Ich möchte ![]() 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:
Schonmal Dank für Eure Ideen
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; Alex |
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:
|
Re: Text schräg auf Canvas ausgeben
Zitat:
Danke sehr! Das einzige, was mich jetzt noch wirklich stört, ist die fehlende Transparenz. Der Kopie-Stempel deckt alle komplett ab. |
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? ;) |
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. |
Re: Text schräg auf Canvas ausgeben
Zitat:
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:
|
Re: Text schräg auf Canvas ausgeben
Zitat:
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:
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. |
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