100分求,vsprinter控件unicode字符显示

zf121 2008-08-25 10:36:40
小弟正在坐一个国际化打印,需要使用vsprinter实现国际化语言显示。就是在中日英任意操作系统上,支持中日英任意语言的显示。当然各个语言的字体都安装了。
也就是需要vsprinter控件支持unicode字符显示。现在已有的方法就是使用TextOutW进行强制Unicode输出。
但是对于vsprinter.tablecell()进行表格的文本显示时,就需要人工计算坐标来TextOutW输出。
并且因为unicode在vb中乱码,所以vsprinter.textwidth()方法,计算得到得文本宽度不准确。

请问各位兄弟姐,有没有其它好的Unicode显示方法。

急,十万火急。。。。。。。。
...全文
317 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinaboyzyq 2009-09-10
  • 打赏
  • 举报
回复
up~~~~~~~~
Tiger_Zhao 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zf121 的回复:]现在我是开发的activex,通过javascript将资源传递给vsprinter的。因此方案A或B,无法使用。[/Quote]
javascript 传递的是否确定为 Unicode 编码?
linger505 2009-08-23
  • 打赏
  • 举报
回复
如果真的是打印到vsprinter里面,我的做法是
with vsprinter1
.startoverlay
'先按照你的背景色,字体,及颜色打印到一个临时的PictureBox上,再保存成Picture,
'然后画Picture到vsprinter控件上
.endoverlay
End with
linger505 2009-08-23
  • 打赏
  • 举报
回复
.RenderControl = VSFlexGrid1.hwnd '把网格内容传递给vsView显示

这个是没有问题的,因为它是以图片的形式打印到这个控件上的
aohan 2008-11-20
  • 打赏
  • 举报
回复
没有环境测试,平时用都是与Vsflexgrid一起用的,因为出报表比较简单


可以如下测试

引用unicode版本的Vsflexgrid,这个显示我以前试过,显示unicode字符没有问题

将内容先显示在Vsflexgrid中,然后


With VSPrinter1
.StartDoc
.RenderControl = VSFlexGrid1.hwnd '把网格内容传递给vsView显示
.EndDoc
.Preview = True
End With



试试看是什么结果
xrongzhen 2008-11-20
  • 打赏
  • 举报
回复
up
zuoxingyu 2008-11-20
  • 打赏
  • 举报
回复
学习。接分

VSPRINTER是VSFLEXGRID的兄弟控件吧
crackdung 2008-08-30
  • 打赏
  • 举报
回复
你先要求技术支持,问清楚是否支持中文显示,不支持中文那就能改了
zf121 2008-08-30
  • 打赏
  • 举报
回复
暂时无法得到技术支持。
谁还有好的建议。
Tiger_Zhao 2008-08-27
  • 打赏
  • 举报
回复
既然出钱了还不赶紧去寻求卖方的技术支持,用得着自己改吗?
如果既要钱又要出力,买它干吗?
zf121 2008-08-27
  • 打赏
  • 举报
回复
vsprinter 是购买的控件,请问如何修改。可以详细说明
crackdung 2008-08-26
  • 打赏
  • 举报
回复
关键vsprinter 是否支持,因为显示的文字是靠这个控件展示的,如果是这个控件不支持,我可以修改它
Tiger_Zhao 2008-08-26
  • 打赏
  • 举报
回复
首先需要明确一点,VB 内部字符串就是 Unicode 的,存储任意语言(甚至不在有效语言中的)字符都是可以的。乱码只是 Windows 在显示 Unicode 字符串时需要依赖当前的区域语言(LCID)和字体。

既然字体已经安装了,那么就是 LCID 的问题,有两种方案:
方案A
用 API 的 SetThreadLocale 变更程序的 LCID。最好是在 Sub Main() 中设置,应为可能第三方组件的初始化会依赖 LCID。
方案B
如果是 XP,可以下载一个微软提供的工具 AppLocal,它可以配置某个 exe 运行时所用的区域语言。由于在启动前已经指定,比较彻底,成功率很高。缺点时不能象方案A一样可以动态切换。

对于自己写的程序优先选用方案A。
Tiger_Zhao 2008-08-26
  • 打赏
  • 举报
回复
大概是用 PE 方式修改 vsprinter 的 dll/ocx 中的语言和字符串吧,这要看它是用什么方式实现的。
zf121 2008-08-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Tiger_Zhao 的回复:]
首先需要明确一点,VB 内部字符串就是 Unicode 的,存储任意语言(甚至不在有效语言中的)字符都是可以的。乱码只是 Windows 在显示 Unicode 字符串时需要依赖当前的区域语言(LCID)和字体。

既然字体已经安装了,那么就是 LCID 的问题,有两种方案:
方案A:
用 API 的 SetThreadLocale 变更程序的 LCID。最好是在 Sub Main() 中设置,应为可能第三方组件的初始化会依赖 LCID。
方案B:
如果是 XP,可以下载一个微…
[/Quote]

现在我是开发的activex,通过javascript将资源传递给vsprinter的。因此方案A或B,无法使用。


to:crackdung,请问如何修改vsprinter?

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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