![]() |
printer.canvas.Textout spiegelverkehrt ausgeben ?
Ich hab ein misteriöses Problem, ich hab ein Programm für einen Plotter geschrieben, leider druckt dieser, nicht wie seinen 'normalen' Kollegen meine Ausgaben richtig aus sondern die Texte sind Spiegelverkehrt. Der Plotter ist ein HP Designjet700.
Jetzt will ich ihn dahigehend austricksen dass ich im einfach die Texte spiegelverkehrt sende, allerdings hab ich leider keine Ahnung wie ich dies dem Textout beibringe. |
Ich glaub nicht, dass das mit textout so einfach geht, weil das ja nur einen ganz normalen text drucken kann (glaub ich zumindest). Was mir da jetzt so spontan eingefallen wäre, wäre einfach eine Spiegelschrift als Schriftart zu verwenden, also einfach einen Anderen Schrifttyp.
Vielleicht gibts aber auch ne einfachere Lösung. Man liest sich, Stanlay 8) |
Hier ein Anfang. Einfach mal testen.
Delphi-Quellcode:
...:cat:...
var
OldFontHandle: THandle; LogFont: TLogFont; FinalRect: TRect; Txt: String; begin Txt := 'Sample'; with PaintBox1 do begin SetGraphicsMode(Canvas.Handle, GM_ADVANCED); GetObject(Canvas.Font.Handle, SizeOf(LogFont), @LogFont); LogFont.lfEscapement := 1800; LogFont.lfOrientation := 0; LogFont.lfQuality := ANTIALIASED_QUALITY; OldFontHandle := Canvas.Font.Handle; Canvas.Font.Handle := CreateFontIndirect(LogFont); try FinalRect := Rect(50, 50, Width, Height); Windows.DrawText(Canvas.Handle, @Txt[1], Length(Txt), FinalRect, DT_EXTERNALLEADING + DT_NOPREFIX + DT_LEFT + DT_NOCLIP + DT_WORDBREAK); finally DeleteObject(Canvas.Font.Handle); Canvas.Font.Handle := OldFontHandle; end; SetTextCharacterExtra(Canvas.Handle, 0); SetGraphicsMode(Canvas.Handle, GM_COMPATIBLE); end; end; |
hmm,
klasse, das geht schon, jetzt muss ich es nur noch für meine Zwecke implementieren.
|
Hallo,
sakura's Vorschlag läuft nicht unter Win9x Systemen. Erst ab Win2000 (WinNT konnte ich nicht testen). Warum drehst Du den String nicht einfach um. Sakura's Vorschlag macht das auch.
Delphi-Quellcode:
Aber Achtung: ich habe gerade noch einmal über Spiegelverkehrt nachgedacht. Das bedeutet doch, dass man jeden Buchstaben an seine vertikalen Achse spiegeln muss. Das kann mein und Sakura's Vorschlag aber nicht.
function SkipString(const Value: String): String;
var I : Integer; P : PChar; begin SetLength(Result, Length(Value)); P := PChar(Result); for I := Length(value) DownTo 1 do begin P^ := Value[I]; Inc(P); end; end; |
hmm,
also Sakura's Vorschlag dreht doch alles genauso wie ich es mir vorstelle. Also die Buchstaben selbst und von hinten nach vorne. Ich hoffe es rennt auch auf einer NT Kiste, dort brauch ich es nämlich.
|
Hallo,
sakura's Code spiegelt unter Win2k (D5 SP1) die Buchstaben nicht and der vertikalen Achse. |
Re: printer.canvas.Textout spiegelverkehrt ausgeben ?
um noch mal alten Kaffee aufzuwärmen ... ist stehe vor dem selben problem ... mit nem Bother Laser Drucker
|
Re: printer.canvas.Textout spiegelverkehrt ausgeben ?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Ergebnis siehe Anlage:
Delphi-Quellcode:
var ZielRect,QuellRect : TRect;
s : String; begin Canvas.Font.Size := 30; s := 'Spiegelschrift geht so ???'; Canvas.TextOut(0,0,s); QuellRect.Left := Canvas.TextWidth(s);//<---- Left ist größer QuellRect.Top := 0; QuellRect.Right := 0;//<---- als Right !!! QuellRect.Bottom := Canvas.TextHeight(s); ZielRect.Left := 0; ZielRect.Top := 50; ZielRect.Right := Canvas.TextWidth(s); ZielRect.Bottom := Canvas.TextHeight(s)+50; Canvas.CopyRect(ZielRect,Canvas,QuellRect); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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-2025 by Thomas Breitkreuz