Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 9485|回复: 11

ComPort (RS-232) 裝置控制應用 - 掃瞄器及發票印表機

[复制链接]

该用户从未签到

发表于 2010-8-25 22:15:21 | 显示全部楼层 |阅读模式
分類:Win32 版本2010/02/25 09:19

本測試程式介紹如何透過外掛的 ComPort (RS-232) 元件 (Lazarus default IDE 中沒有這類的元件) , 來讀取及控制 POS 系統的條碼掃瞄器及發票印表機   

測試發票印表機時要注意的是,  發票印表機自己有帶字型, 所以傳統上 BCB 5/6 或 Delphi 7 把中文字的 String (ANSI CODE) 丟到 ComPort 即可列印, 但跟 BCB 5/6 或 Delphi 7 中不同的是 ,  Lazarus 0.9.28 的 String 是 UTF8 CODE , 若是直接將中文的 String ( UTF8 CODE ) 丟到 ComPort , 會讓發票印表機印出亂碼, 故要特別處理 UTF8 -> ANSI 的 String 轉換

0.9.24以前的版本String是ANSI編碼,一個英文是1Byte,漢字是2Byte。0.9.26 版以後使用UTF8編碼,英文字母佔據的空間不變,漢字佔據的空間將是3~6個Byte不等。而在Lazarus0.9.26 中並沒有與ANSI編碼中Char類型對應的UTF8char,所以在取String中某個漢字的操作相對而言就複雜了。0.9.26 以後版本在LCLProc單元中提供了幾個與UTF8字串相關的函數,例如有UTF8Length、UTF8CharAt等等,在一定程度上可以給我們提供幫助,不過前提是大家要對UTF8編碼方式有更深的理解。

-----------------------------------------------------------------------------------------------------------------------------------------

↓ 條碼掃瞄器的測試部份 , 設好 ComPort 參數, 就可開始用條碼掃瞄器讀取條碼



//透過 SdpoSerial 開啟 ComPort 的例子
procedure TForm1.Button2Click(Sender: TObject);
begin
    SdpoSerial1.Device := 'COM'+ComboBox1.Text;
    if (Trim(ComboBox2.Text)='9600') then
    SdpoSerial1.BaudRate:=br__9600;
    if (Trim(ComboBox3.Text)='E') then
    SdpoSerial1.Parity:=pEven
    else if (Trim(ComboBox3.Text)='O') then
    SdpoSerial1.Parity:=pOdd
    else if (Trim(ComboBox3.Text)='N') then
    SdpoSerial1.Parity:=pNone;
    if (Trim(ComboBox4.Text)='7') then
    SdpoSerial1.DataBits:=db7bits
    else if (Trim(ComboBox4.Text)='8') then
    SdpoSerial1.DataBits:=db8bits;
    if (Trim(ComboBox5.Text)='1') then
    SdpoSerial1.StopBits:=sbOne
    else if (Trim(ComboBox5.Text)='2') then
    SdpoSerial1.StopBits:=sbTwo;
    SdpoSerial1.Active := true;   

end;
              

评分

参与人数 1威望 +1 收起 理由
猫工 + 1 谢谢分享

查看全部评分

回复

使用道具 举报

该用户从未签到

发表于 2010-8-25 22:19:20 | 显示全部楼层
很实用的代码,相当精彩
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2010-8-25 22:20:29 | 显示全部楼层
你是说串口组件吗?这个组件有,可以用。
你看这里:
http://www.fpccn.com/read.php?tid=640&fpage=2&toread=1
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2010-8-25 23:25:36 | 显示全部楼层
你怎么不直接上传到lazarus中文社区来?
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2010-8-25 23:30:48 | 显示全部楼层
我只知道目前帳號權限還不能夠貼帶有 LINKER 的帖子, 可以上傳的話, 那我再試試 ...
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2010-8-25 23:37:46 | 显示全部楼层
不放发带有www的贴子是因为要禁止发广告贴的需要
上传可以上传2M以内的附件,如果附件太大,需要分包压缩后上传
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2010-8-30 09:59:35 | 显示全部楼层
请问这个DEMO 程序怎么不能编译成  WINCE  下用的程序呢?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2010-8-30 10:32:21 | 显示全部楼层
楼主的这个可以打印中文吗?
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2010-8-30 12:59:34 | 显示全部楼层
文中有提到 "  Lazarus 0.9.28 的 String 是 UTF8 CODE , 若是直接將中文的 String ( UTF8 CODE ) 丟到 ComPort , 會讓發票印表機印出亂碼, 故要特別處理 UTF8 -> ANSI 的 String 轉換 ..."

本範例有列印中文, 不過是丟出正(繁)體字的編碼

wince 可不可以 run ? 不清楚, 沒試過, 要改吧 ....
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2010-8-31 05:56:14 | 显示全部楼层
WIN32  下可以打印中文,但不能在  WINCE 下用。。不能编译成 WINCE 下的程序。组件不支持。有改进的方法吗?
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2026-3-4 11:02 , Processed in 0.044502 second(s), 14 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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