关于Printer.Canvas.TextOut( x, y, 'xxxxx')中x , y尺寸的单位

cassie 2003-08-21 10:23:27
我想问一下 这里的x y的单位到底是什么
如何精确的定位打印位置
大家有这方面的程序吗?
...全文
179 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
d983074 2003-08-21
  • 打赏
  • 举报
回复
我写的chart打印,
var
h,w,i:Integer;
begin
Screen.Cursor := crHourGlass; { <-- nice detail }
try
Printer.PrinterIndex:=PrinterCB.ItemIndex;
Printer.Orientation:=TPrinterOrientation(LandscapeRB.Checked);
Printer.BeginDoc;

Printer.Canvas.Font.Name:='Arial';
Printer.Canvas.Font.Size:=10; { <-- set the font size }
Printer.Canvas.Font.Style:=[];
Printer.Canvas.TextOut(0,0,Printname); { <-- print some text }

h:=Printer.PageHeight; { <-- get page height }
w:=Printer.PageWidth; { <-- get page width }

{ And now print the chart component... }
Chart.PrintPartial( Rect( w*strtoint(LeftEdt.Text) div 100, { <-- left margin }
h*strtoint(RightEdt.Text) div 100 , { <-- top margin }
w - (w*strtoint(TopEdt.Text) div 100), { <-- right margin }
h - (h*strtoint(BottomEdt.Text) div 100) )); { <-- bottom margin }

Printer.Canvas.Font.Name:='Arial';
Printer.Canvas.Font.Size:=12; { <-- set the font size }
Printer.Canvas.Font.Style:=[];
Printer.Canvas.TextOut(0,Printer.Canvas.TextHeight('注释:'),'注释:');
for i:=0 to Memo.Lines.Count-1 do
Printer.Canvas.TextOut(0,(i+2)*Printer.Canvas.TextHeight(Memo.Lines.Strings[i]),Memo.Lines.Strings[i]); { <-- print some text }

Printer.EndDoc;
except
on Exception do { just in case an error happens... }
begin
Printer.Abort;
Printer.EndDoc;
raise; { <-- raise up the exception !!! }
end;
end;
Screen.Cursor:=crDefault; { <-- restore cursor }
cassie 2003-08-21
  • 打赏
  • 举报
回复
或者难道是要看打印纸的具体情况吗?而不能直接在程序里的x y赋上常数的值??

cassie 2003-08-21
  • 打赏
  • 举报
回复
另外,我用printer.canvas.LineTo(10,30);
画出来的是一条往右下的斜线:(
cassie 2003-08-21
  • 打赏
  • 举报
回复
to: songhtao(三十年孤独)
为什么你们老是要重复回答别人已经回答过的答案呢?
是 象素 刚才 d983074(d983074) 已经说过啦
偶要知道的是我如何确定这个位置,如何填写 x y的值!!
^_^
我不懂电脑 2003-08-21
  • 打赏
  • 举报
回复
像素
cassie 2003-08-21
  • 打赏
  • 举报
回复
比如我想把'单位'两个子 打印在 纸上面的 距离 left 80毫米, top 20
毫米处,我该如何设置位置呢?
cassie 2003-08-21
  • 打赏
  • 举报
回复
那么x y的值我该如何填呢?郁闷ing
d983074 2003-08-21
  • 打赏
  • 举报
回复
像素是指显示器2个点之间的距离,和显示器分辨率有关
打印机也有自己的分辨率
至于怎么转换,没研究过:( ,很可能是一一对应关系
cassie 2003-08-21
  • 打赏
  • 举报
回复
我在网上找了一个例子,其中
BorderLeft := Trunc( 0.2 * 600 );
BorderRight := Trunc( 0.2 * 600 );
BorderTop := 0;
BorderBottom := 0;
HeaderFooterHeight := Trunc( 0.6 * 600 );
这里的计算是什么意思呢?大家明吗?
cassie 2003-08-21
  • 打赏
  • 举报
回复
那么这个跟mm单位如何转换呢,我怎么才能确定我打印的精确位置^_^
d983074 2003-08-21
  • 打赏
  • 举报
回复
pixel 像素
cassie 2003-08-21
  • 打赏
  • 举报
回复
是mm还是 0.1mm 还是其他的,这个问题真是很急,谢谢
cassie 2003-08-21
  • 打赏
  • 举报
回复
谢谢 ^_^
后来我用SetMapMode(printer.canvas.handle, mm_Lometric); // 0.1mm
这条语句 使默认的象素单位变为 0.1mm单位
打印出来的效果还不错

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧