继承TPrinter新建了一个TNewPrinter但是Canvas.TextOut不能正常使用 |
尚未結案
|
fangwy
中階會員 ![]() ![]() ![]() 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
我的代码如下:
TNewPrinter = class(TPrinter)
private
public
constructor Create;
destructor Destroy; override;
procedure CanvasTextOut(X, Y: Integer; const Text: string);
end;
但是使用Canvas.TextOut打印时提示EAccessViolation错误,但打印仍可能完成,只是有时提示EAccessViolation,但如果设断点跟踪却每次都出错.
我设计的目的是在新方法CanvasTextOut中使用,如下:
其中定义了两个常量:
//24针打印机X,Y轴上的每英吋象素数
PixelsProIn24X = 180;
PixelsProIn24Y = 180; procedure TNewPrinter.CanvasTextOut(X, Y: Integer; const Text: string);
var
diX, diY: integer;
diPixelsProIn: integer;
dsText: string;
begin
//为兼容9针打印机和24针打印机,做个转换
diPixelsProIn := GetDeviceCaps(Handle, LOGPIXELSX);
if diPixelsProIn <> PixelsProIn24X then
diX := Trunc(X * diPixelsProIn / PixelsProIn24X 0.5)
else
diX := X;
diPixelsProIn := GetDeviceCaps(Handle, LOGPIXELSY);
if diPixelsProIn <> PixelsProIn24Y then
diY := Trunc(Y * diPixelsProIn / PixelsProIn24Y 0.5)
else
diY := Y;
dsText := Text;
Canvas.TextOut(diX, diY, dsText);
end;
本以为是这种方法不对,但直接使用Canvas.TextOut也不行
a:= TNewPrinter.Create;
a.Canvas.TextOut(10,10,'test'); //出同样的错误.
另外Create,Destroy如下处理:
constructor TNewPrinter.Create;
begin
inherited Create;
end; destructor TNewPrinter.Destroy;
begin
inherited Destroy;
end; 请各位大大帮忙解决这个问题,小弟这里先谢过了. 發表人 - fangwy 於 2004/12/21 15:30:41
|
fangwy
中階會員 ![]() ![]() ![]() 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
|
fangwy
中階會員 ![]() ![]() ![]() 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |