设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: lynnwang
打印 上一主题 下一主题

[报表] [分享]深入分析打印设置 PrtDevMode、PrtDevNames 和 PrtMip [会让你头大]

[复制链接]
11#
 楼主| 发表于 2012-9-23 16:30:30 | 只看该作者
这里贴出来 PrtDevMode、PrtDevNames 和 PrtMip这个三参数,是为以后大家认为[Printer]满足不了要求,在这里作个说明与提示

因为这里PrtDevMode、PrtDevNames这两个参考其实就是AP所返回的打印设备的数据。
因为其中要返的字符串,所以这里就涉及到UNICODE与ANSI的转换了。
我们看看例4中的定义:  TCHAR dmDeviceName[CCHDEVICENAME];
TCHAR:具体不说了,百度百科有详解。
所以这里[窗体]和[报表]的属性返回的字符串值全部为ANSI码
而转到VBA中全部为UNICODE


这里看看例3与例1对比就知道了,一个是64个字节声明,一个是32字节数组声明
为什么一个是64字节,一个是32字节,因为api的 char 到VB的string会转换到UNICODE,而字节数组却不会自动转换

以上就是关键点,提个醒,大家用到时再看看
12#
 楼主| 发表于 2012-9-23 16:36:30 | 只看该作者
所以大家看出来了,例2中声明,就有问题了——总共就32个字节怎么存得下,只有往后移了。
为什么作者通过了,就不得而知了(他的代码我没测试),我在自己代码中改过后不能通过。

点击这里给我发消息

13#
发表于 2012-9-23 21:40:41 | 只看该作者
我用第2种声明方式 ... strDeviceName As String * 16 ...,可以设置纸张大小、页边距等

点击这里给我发消息

14#
发表于 2012-9-23 21:44:26 | 只看该作者
帮助中说 type_DEVMODE 结构的 intScale 项可以设置页面缩放,我测试是设置不了的。

点击这里给我发消息

15#
发表于 2012-11-13 16:58:12 | 只看该作者
牛人的牛作...现在还不太明白...继续努力学习..
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-16 23:26 , Processed in 0.078767 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表