線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2583
推到 Plurk!
推到 Facebook!

發票印表機,BCB轉DELPHI,不知那有問題

尚未結案
shinnuei
一般會員


發表:32
回覆:48
積分:21
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-16 03:49:53 IP:220.130.xxx.xxx 未訂閱
bcb這一段沒有問題,可以印得出來,但delphi這一段不知那有錯 請大大幫忙(發票機是TP3688) 這一段是bcb的程式碼  
 //  發票印表機連接介面 COM Port / LTP
        sBuffer = "COM4";                //  COM Port 介面
            hPrn=CreateFile(sBuffer, GENERIC_WRITE|GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
            AnsiString commset;
            commset = "96,N,8,1";
            BuildCommDCB(commset.c_str(), &dcb);                //開啟寫入時操作速度會變慢
            SetCommState(hPrn, &dcb);
            Sleep(300);
            SetCommState(hPrn, &dcb);                memset(Buffer, 0x00, sizeof(Buffer));
            sprintf(Buffer, "%c%c%c", 0x1b, 'R', 0x0d);
            WriteFile(hPrn, Buffer, strlen(Buffer), &dwfile, NULL);                char buff[2];                data = "asdfasdfasdf";                memset(Buffer, 0x00, sizeof(Buffer));
            memset(buff, 0x00, sizeof(buff));
            sprintf(Buffer,"%c%c%c%c",0x1b,'P','B','1');
            sprintf(buff,"%c",0x0d);
            WriteFile(hPrn, Buffer, strlen(Buffer), &dwfile, NULL);
            Sleep(30);
            WriteFile(hPrn, data, strlen(data), &dwfile, NULL);
            Sleep(30);
            WriteFile(hPrn, buff, strlen(buff), &dwfile, NULL);
            Sleep(30);
這一段是delphi的程式碼
VAR
   cb : DCB;
   S, A, B, data : STRING;
   dwfile : Dword;
   vCom : STRING;
   hComm : THandle;
BEGIN
   vCom := 'COM4';       hComm := CreateFile(PChar(vCom), Generic_Read OR Generic_Write, 0, NIL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
   BuildCommDCB(pchar('9600,n,8,1'), cb);
   SetCommState(hComm, cb);
   Sleep(300);
   SetCommState(hComm, cb);
   //*設定通訊埠*/
   s := format('%s', [#$1B  'R'  #$0D]);
   WriteFile(hComm, s, strlen(pchar(s)), dwfile, NIL);       a := format('%s', [#$1B  'P'  'B'  '1']);
   b := format('%s', [#$13]);
   data := format('%s', ['adfasdfasfdadf']);
   WriteFile(hComm, a, strlen(pchar(a)), dwfile, NIL);
   Sleep(30);
   WriteFile(hComm, data, strlen(pchar(data)), dwfile, NIL);
   Sleep(30);
   WriteFile(hComm, b, strlen(pchar(b)), dwfile, NIL);
   Sleep(30);
 
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-16 09:23:32 IP:60.248.xxx.xxx 未訂閱
WriteFile 的地方,只要是輸出字串的 都要在後面加一個 [1] 另外,其實直接用 length 就可以了 沒必要換成 PChar 再用 strlen 求長度 所以,本來的 WriteFile 就變這樣 WriteFile(hComm, a[1], length(a), dwfile, nil); 餘累推
shinnuei
一般會員


發表:32
回覆:48
積分:21
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-17 22:45:12 IP:220.130.xxx.xxx 未訂閱
謝謝 reptile 大大的回覆 我後來改成這樣,可以印,但還是不解 為什麼第一個部份要用這樣才可以印呢 這是第一部分     
s := format('%s', [#$1B  'R'  #$0D]);
   WriteFile(hComm, s, cardinal(10), dwfile, NIL);        
這是改完之後
 s := format('%s', [#$1B  'R'  #$0D]);
   WriteFile(hComm, s, cardinal(10), dwfile, NIL);
                       ~~~~~~~~~~~~--->為什麼用length不行呢
   a := format('%s', [#$1B  'P'  'B'  '1']);
   b := format('%s', [#$13]);
   data := format('%s', ['adfasdfasf']);
   WriteFile(hComm, a[1], length(a), dwfile, NIL);
   Sleep(30);
   WriteFile(hComm, data[1], length(data), dwfile, NIL);
   Sleep(30);
   WriteFile(hComm, b, length(b), dwfile, NIL);
   Sleep(30);
系統時間:2024-04-19 11:37:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!