▼ Mr.XRAYさん
すいません、ずいぶん遠回りしましたがやっと戻ってきました。
本日サンプルをみながらプリンターで印字してみました。
印字で利用したプリンターは EPSON LP-S3250
白抜き文字はっきりくっきり見えます。さすがです。 \(^_^)/
問題は黒塗り部分、一見問題無いように見えますが
よーくみるとナメクジがはったような模様が、、、 (;_;)
EXCELで印字しても同じなのでプリンタの問題だと思います。
ありがとうございました。 _(._.)_
一応ソースを貼っておきます。
unit PrintTest;
// 白抜き文字印刷テスト
// http://mrxray.on.coocan.jp/Delphi/Others/FukuroMoji.htm
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Printers, Clipbrd, WinSpool;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
FPointArray : TByteArray;
FPointKindArray : TByteArray;
FPointCount : Integer;
procedure TForm1.Button1Click(Sender: TObject);
var
LLogFont : TLogFont;
LText : string;
WStX : Integer; // 罫線印字開始X座標
WStY : Integer; // 罫線印字開始Y座標
WEndX : Integer; // 罫線印字終了X座標
WEndY : Integer; // 罫線印字終了Y座標
WRect : TRect;
begin
Printer.BeginDoc; // 印字のための準備
try
WStX := 200; // WrkRect.Left;
WStY := 100; // WrkRect.Top;
WEndX := 4800; // WrkRect.Right;
WEndY := 400; // WrkRect.Bottom;
Printer.Canvas.Brush.Color := clBlack; // clAqua;
Printer.Canvas.Rectangle( WStX, WStY, WEndX, WEndY );
GetObject( Printer.Canvas.Font.Handle,SizeOf(LLogFont),@LLogFont);
LLogFont.lfWeight := 1000;
Printer.Canvas.Font.Handle := CreateFontIndirect(LLogFont);
Printer.Canvas.Font.Name := 'メイリオ';
Printer.Canvas.Font.Size := 10;
Printer.Canvas.Font.Charset := DEFAULT_CHARSET;
Printer.Canvas.Brush.Style := bsClear;
// バスの記録
BeginPath(Printer.Canvas.Handle);
LText := '白抜き文字';
Printer.Canvas.Textout(40, 120, LText);
EndPath(Printer.Canvas.Handle);
// パスの座標値の格納に必要な数を取得して配列に格納
FPointCount := GetPath(Printer.Canvas.Handle, FPointArray, FPointKindArray, 0);
GetPath(Printer.Canvas.Handle, FPointArray, FPointKindArray, FPointCount);
// パス情報が取得できたので再描画
//// Invalidate; //////////
// 取得したパス情報で図形を描画
BeginPath(Printer.Canvas.Handle);
PolyDraw(Printer.Canvas.Handle, FPointArray, FPointKindArray, FPointCount);
EndPath(Printer.Canvas.Handle);
// 現在のブラシでバスの内部を塗りつぶし,現在のペンで輪郭線を描画する
Printer.Canvas.Brush.Style := bsSolid;
Printer.Canvas.Brush.Color := clWhite;
Printer.Canvas.Pen.Color := clBlack;
Printer.Canvas.Pen.Width := 5;
StrokeAndFillPath(Printer.Canvas.Handle);
finally
Printer.EndDoc;
end;
end;
end.
|