|
|
分類: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;
|
评分
-
查看全部评分
|