为什么在640*480和800*600的分辨率下,打印预览的效果会有差别,显示的长度比例不一样?(100分)

  • 主题发起人 主题发起人 zouming
  • 开始时间 开始时间
Z

zouming

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(]在640*480下canvas.textout()的长度比800*600下的长
 
这是当然的了;
分辨率越低,象素数目就越少,象素之间的间隔也就相应的增大;而任何在屏幕上显示出来的
东东都是由象素构成的,所以你会看到640×480的分辨率下输出的文字拉长了。
 
我已用如下的程序将文本的字体和长度、高度进行了转换,但还是不行,为什么?
procedure SetFont(DrawCanvas:TCanvas; const FontName:String; FontStyle:TFontStyles; FontSize:Integer; PreviewState:Boolean; PixelsPerInchX,PixelsPerInchY: Integer);
begin
try
if PreviewState=true then
FontSize:=Carry(1.0*FontSize*(PixelsPerInchY/GetDeviceCaps(PreviewForm.Canvas.Handle,logPixelsY)))
else
FontSize:=Carry(1.1*FontSize*(PixelsPerInchY/GetDeviceCaps(Printer.Canvas.Handle,logPixelsY)));
DrawCanvas.Font.Name:=FontName;
DrawCanvas.Font.Style:=FontStyle;
DrawCanvas.Font.Size:=FontSize;
except
Application.MessageBox(PChar('设置字体错误!'), szProgramTitle, MB_OK+MB_ICONWARNING);
end;
end;

function GetStrWidthInch(DrawCanvas:TCanvas; str : string; PixelsPerInchX,PixelsPerInchY: Integer):Real;
begin
try
Result:=DrawCanvas.TextWidth(Str);
Result := Result/PixelsPerInchX;
except
Application.MessageBox(PChar('计算文本宽度错误!'), szProgramTitle, MB_OK+MB_ICONWARNING);
end;
end;

function GetStrHeightInch(DrawCanvas:TCanvas; str: string; PixelsPerInchX,PixelsPerInchY: Integer):Real;
begin
try
Result:=DrawCanvas.TextHeight(Str);
Result := Result/PixelsPerInchY;
except
Application.MessageBox(PChar('计算文本高度错误!'), szProgramTitle, MB_OK+MB_ICONWARNING);
end;
end;

procedure TextAtInch(DrawCanvas:TCanvas;X1,Y1,X2,Y2:Real;const Str:String; PixelsPerInchX,PixelsPerInchY: Integer; Alignment:Alignment);
var
Px,Py:Integer;
begin
try
px:=0;
case Alignment of
taLeft:
Px:=Round(X1*PixelsPerInchX);
taCenter:
Px:=Round((X1+(X2-X1-GetStrWidthInch(DrawCanvas, str, PixelsPerInchX, PixelsPerInchY))/2)*PixelsPerInchX);
taRight:
Px:=Round((X1+X2-X1-GetStrWidthInch(DrawCanvas, str, PixelsPerInchX,PixelsPerInchY))*PixelsPerInchX);
end;
Py:=Round((Y1+(Y2-Y1-GetStrHeightInch(DrawCanvas, str, PixelsPerInchX,PixelsPerInchY))/2)*PixelsPerInchY);
DrawCanvas.TextOut(Px,Py,Str);
except
Application.MessageBox(PChar('绘制文本错误!'), szProgramTitle, MB_OK+MB_ICONWARNING);
end;
end;
 
Font.Size不是连续变化的.
 
那么word等软件是如何实现视觉上的比例一致(比中:居中)
 
是否应再调整canvas的宽度,如果是,应如何调整?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部