📄 custace.pas
字号:
unit CustAce;
interface
{$ifdef WIN32}
uses windows, sysutils, classes, aceout;
{$else}
uses wintypes, winprocs, sysutils, classes, aceout;
{$endif}
procedure AceCustomTextOut(AceCanvas: TAceCanvas; Rect: TRect; x,y: Integer; Text: String);
implementation
uses acefile, aceutil;
const
Ace_CustomTextOut = 10200;
procedure AceCustomTextOut(AceCanvas: TAceCanvas; Rect: TRect; x,y: Integer; Text: String);
begin
AceCanvas.AceOutput.AceFile.WriteType(Ace_CustomTextOut);
AceCanvas.AceOutput.AceFile.WriteRect(Rect);
AceCanvas.AceOutput.AceFile.WriteSmallInt(x);
AceCanvas.AceOutput.AceFile.WriteSmallInt(y);
AceCanvas.AceOutput.AceFile.WriteString(Text);
end;
{ Get output resolution }
function GetOutputRes(Handle: THandle; AceFile: TAceAceFile): TPoint;
begin
Result := AceGetResolution(Handle);
{ Scale output resolution if needed }
if AceFile.HorzScale <> 100 then Result.x := MulDiv(Result.x, AceFile.HorzScale, 100);
if AceFile.VertScale <> 100 then Result.y := MulDiv(Result.y, AceFile.VertScale, 100);
end;
{ Get resolution Acefile was generated at }
function GetInputRes(AceFile: TAceAceFile): TPoint;
begin
Result := Point(AceFile.PixelsPerInchX, AceFile.PixelsPerInchY);
end;
{ Generic scaling functions }
function NumScale(Value: LongInt; InPPI,OutPPI: Integer): LongInt;
begin
Result := MulDiv(Value, OutPPI, InPPI);
end;
function RectScale(Rect: TRect; InRes, OutRes: TPoint): TRect;
begin
Result.Top := NumScale(Rect.Top, InRes.y, OutRes.y);
Result.Left := NumScale(Rect.Left, InRes.x, OutRes.x);
Result.Bottom := Result.Top + NumScale(Rect.Bottom-Rect.Top, InRes.y, OutRes.y);
Result.Right := Result.Left + NumScale(Rect.Right-Rect.Left, InRes.x, OutRes.x);
end;
procedure AcePrintCustomTextOut(Handle: THandle; AceFile: TAceAceFile);
var
r: TRect;
x, y: SmallInt;
Text: String;
InRes, OutRes: TPoint;
begin
{ Read the rectangle to print in }
AceFile.ReadRect(R);
AceFile.ReadSmallInt(x);
AceFile.ReadSmallInt(y);
AceFile.ReadString(Text);
{ New steps starting with Ace version 1.1 that are needed }
{ Get input and output resolutions }
OutRes := GetOutputRes(Handle, AceFile);
InRes := GetInputRes(AceFile);
{ You need to scale to output resolution }
R := RectScale(R, InRes, OutRes);
x := NumScale(x, InRes.x, OutRes.y);
y := NumScale(y, InRes.y, OutRes.y);
{ End new steps }
{ You may want to save and restore the Handle from here
so what you use to print doesn't mess with any of
my current settings }
TextOut(Handle, x, y, @Text[1], Length(Text));
end;
initialization
AceAddRecordType(Ace_CustomTextOut, AcePrintCustomTextOut);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -