我写了一个函数,但实际打印输出时与所想实现的相差甚远,大家多多帮忙哦!Function MMToPixel(MM: Integer): Integer;
var
p: TPoint;
begin
SetMapMode(printer.Handle, MM_HIMETRIC);
p := Point(MM * 100, 100);
LPToDP(printer.Handle, p, 1);
Result := p.X;
SetMapMode(printer.Handle, MM_TEXT);
end;
var
p: TPoint;
begin
SetMapMode(printer.Handle, MM_HIMETRIC);
p := Point(MM * 100, 100);
LPToDP(printer.Handle, p, 1);
Result := p.X;
SetMapMode(printer.Handle, MM_TEXT);
end;
解决方案 »
- UrlDownloadToFile这个函数存在代理的问题吗?
- 在成功写完百度贴吧发贴机并顺利商用后,昨晚搞成功搜狗说吧发贴机,今天来散分
- 动态加载菜单
- 中英操作系统时间格式转换问题!DateTime, SystemTime, FileTime等
- 使用TWebBrowser.GoBack为什么会出错
- 民间活动:“华山论贱”第一期 (“华山论奸”向其他人士开放)
- TMediaPlayer为什么不能播放MP3??????
- 帮忙看看这段代码
- 求教!用QReport控件如何做表格,急等答案,先谢谢各位!
- 为什么会执行两次呢,大侠教我
- 安装使用xpmenu3时出现的一个问题,恳请执教
- 需要对access数据库加密,请问高手,如何进行?
根据你要打印的图的实际尺寸和打印分辨率来设置,没有标准。
dpi的意思是,dot per inch,就是每英寸多少点(点就是像素了)。所以72dpi指的是一英寸距离,包含72像素;300dpi指的是一英寸距离,包含300像素。
你要看分辨率,才能将像素和实际尺寸对应起来的。
1英寸=2.54厘米=25.4毫米
这还与你的分辨率有关系 :
800*600,表示水平方向有800个象素每英寸,
竖直方向有600个象素每英寸。
2.54厘米=800个象素,水平。所以你只要知道1英寸有多少像素,就知道毫米和像素的转换关系!
所以每毫米的象素数量就是 Screen.PixelsPerInch*25.4了
用 pixelx:=GetDeviceCaps(Printer.Handle, LOGPIXELSX);取得默认打印机的水平1英寸包含的像素点数,再根据:1英寸=2.54厘米=25.4毫米,可得出像素值,如下
pixel_value:=trunc(MM/25.4*pixelx); 根据理论计算应该是这样的,不管换不换打印机,打印位置应该都是一样的,但是我试过好多遍了就是不行,是不是我那里写错了?
你能给个例子吗?
ypcm := getdevicecaps(PRINTER.HANDLE,LOGPIXELSY)/2.54;
printer.BeginDoc;
printer.Canvas.TextOut(3.1*xpcm,5.3ypcm,'Text'); //左3.1厘米,上5.3厘米处打印'Text'
printer.EndDoc();
你好,谢谢你的回复,这样处理的话,如果遇到折行打印的话该如何处理呢?
begin
//横向mm转换为像素点
Result := Trunc(X/25.38*GetDeviceCaps(Printer.Handle, LOGPIXELSY)+0.5);
end;function mm2pixY(Y: Extended): integer;
begin
//纵向mm转换为像素点
Result := Trunc(Y/25.38*GetDeviceCaps(Printer.Handle, LOGPIXELSX)+0.5);
end;
你好,用MEMO分行确实不错,还是存在一个问题,那就是每行的位置并不相同!左边距有大有小!