![]() |
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 |
Re: Text schräg auf Canvas ausgeben
Zitat:
das soll er ja auch. Für sowas wie Kopie oder ein Wasserzeichen nimmt man daher "hohlen" Text, bei dem nur die Konturlinien gedruckt werden. Oder man nimmt fette Schrift und druckt sie hellgrau. Gruss Reinhard PS es ist auch noch die Frage, was Vordergrund ist - ich würde mal das Wasserzeichen zuerst drucken. |
Re: Text schräg auf Canvas ausgeben
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
Wenn ich das so auch mit dem Wasserzeichen versuche, dann bekomme ich entweder das Wasserzeichen drüber (mit den unerwünschten Effekten) oder ich vertausche einfach QBMP und ZBMP und dann bekomme ich nur den Text; ganz ohne Wasserzeichen. Was ich aber in Anbetracht von bsClear nicht verstehe.
...
QBMP:=TBitmap.Create; // Quellbitmap ZBMP:=TBitmap.Create; // Zielbitmap Try QBMP.LoadFromFile('Kopfbogen.bmp'); // Kopfbogen laden ZBMP.Canvas.Brush.Style:=bsClear; // Durchsichtig malen ZBMP.LoadFromFile('Seite 0001.bmp'); // Text laden ZBMP.Canvas.BrushCopy(Rect(0, 0, ZBMP.Width, ZBMP.Height), QBMP, Rect(0, 0, QBMP.Width, QBMP.Height), QBMP.Canvas.Pixels[0, 0]); ZBMP.PixelFormat:=pf8bit; // 256 Farben ZBMP.SaveToFile('Fertiges Bild.bmp'); // Bild speichern Finally QBMP.Free; ZBMP.Free; End; ... Was mache ich denn nun verkehrt? |
Re: Text schräg auf Canvas ausgeben
Zitat:
am einfachsten sucht man sich einen Font ohne Füllung (gibt nicht so viele, aber z.B. Swiss 721 Bold Outline), man kann aber auch "Kopie" in Coreldraw schreiben und schwarzen Rand/keine Füllung wählen und dann als Vektor- oder Pixel-Bild abspeichern. Von der Logik her müsste man das Wasserzeichen als erstes, somit ganz im Hintergrund drucken usw. Gruss Reinhard PS: bsclear ist falsch - es geht nicht um den Brush Style, sondern um den Windows Background Mode, der muss transparent sein. |
Re: Text schräg auf Canvas ausgeben
Hallo,
vielleicht kann auch auf den Einsatz von CorelDraw verzichtet werden: ![]() Gruß Hawkeye |
Re: Text schräg auf Canvas ausgeben
Zitat:
Zitat:
Ich weiß die Antworten sehr zu schätzen. Aber dass ich nicht weiß, wie man ganz in den Hintergrund druckt bzw. den Windows Background Mode setzt, zeigt schon, dass ich es nicht schaffe. Ich würde mich daher freuen, wenn Ihr - die Wissenden - mir neben dem Nennen von Stichwörtern auch zumindest kurze Hinweise (Quellcode-Schnipsel) gebt, wie es funktioniert. Das erleichtert übrigens auch mitlesenden Hilfesuchenden mit möglicherweise denselben und zumindest ähnlichen Problemen, eine Lösung zu finden. Danke, Alex |
Re: Text schräg auf Canvas ausgeben
Zitat:
damit habe ich leider ein Problem: da ich schon sehr lange unter Windows programmiere, schon bevor es Delphi gab, habe ich viele Probleme, darunter die Druckerei, direkt mit dem Win32-API gelöst und nicht als VCL-Komponenten. Meine Lösungen sind daher hier nicht veröffentlichbar, aber es findet sich hoffentlich jemand, der Entsprechendes auf VCL-Basis geschrieben hat, das Problem ist ja nicht selten. Gruss Reinhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 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