顯示具有 DELPHI相關 標籤的文章。 顯示所有文章
顯示具有 DELPHI相關 標籤的文章。 顯示所有文章

2015年12月9日 星期三

iOS 篇 delphi XE6 for iOS app(一)開發環境準備

請參考來源: iOS 篇 delphi XE6 for iOS app(一)開發環境準備
--
[原創] Mac OS X Mavericks 10.9.2 for VMware Workstation 10 懶人包
--
請參考來源:iOS 篇 delphi XE6 for iOS app(一 到 八)
--

還是 delphi 跑得快   .. 都能自己一支程式跑3個平台 android / ios / windows

微軟 VS 現還要靠外掛 .. 還要額外買外掛工具  才能用 = . =  

這次 delphi 又大勝了

微軟該加油了 ! 快快支援 VB --> android / ios     不要靠外掛  
像很多內部轉換的 B4J / B4A / B4I   內部運作核心也是 java , 外殼能提供 VB 語法

delphi XE6 也是掛了 android SDK  / Java  核心來跑 android / ios , 外層也是用 自己的母語

CodeData 很多開發教學文章

CodeData
--
 很多開發教學文章  , 不錯!! 很多 android / ios / java 開發

2011年11月9日 星期三

信用卡機


引用:
--

1.LRC是checksum用.應是針對(Data[]+ETX)作XOR的結果.

Data=Data[0];
for ( i=1; i < length; i++ ) Data = Data xor Data[i];
LRC=Data xor ETX;

2.在將 (header data if need)+ Data[]+ETX+LRC +(tail data if need) 送到前端設備.

CRC、Checksum、VRC、LRC之比較(1.使用bit數的多寡 2.作法上的使用 3.佔記憶空間 4.是否會誤判之排行榜)
CRC(循環冗餘檢查碼,Cyclic Redundancy Check),目前較常使用的位元數目有8、16或32,一般縮寫為CRC-8、CRC-16、CRC-32。根據理論統計,CRC-16可完全偵測資料區塊內單一或兩個位元的錯誤、奇數個位元的錯誤、連續16個位元或少於此數的錯誤,超過17個連續位元的錯誤偵測率則有99.9969%,其它位元長度的錯誤偵測率則可達99.9984%。XMODEM、Kermit等通訊協定,PC 的磁碟機、FDDI、乙太網路和「光纖通道」使用CRC驗證。
Checksum(總和檢查)使用的位元數沒有特別提到。Apple個人電腦的磁碟機是利用checksum驗證資料的正確性。
VRC(垂直冗餘檢查,Vertical Redundancy Check)是對每一個傳送字元(一般是8位元)都增加一個額外位元。
LRC(縱向冗餘檢查,Longitudinal Redundancy Check)也是對每一個傳送字元(一般是8位元)都增加一個額外位元。磁帶資料及透過通訊線路傳送的資料可用LRC驗證。
錯誤檢查所佔用的記憶體空間應與使用的位元數有正相關,誤判的機率應與使用的位元數有負相關,但是詳細的數字還是請您查看書籍與相關研究報告(不過對於VRC和LRC的討論及比較相當少)。


unit Unit1;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;

type
    TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    private
    Procedure ConnectPrint(var aHandle : THandle);//開始連結COM1
    function GetTransData : String;
    { Private declarations }
    public
    { Public declarations }
    end;

var
    Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
    aHandle : THandle;
    lrc : Longword;
    s, s1 : string;
    i : Integer;
    bb : byte;
begin
    //開啟COM1
    ConnectPrint(aHandle);
    //送出要求(144BYTE)
    s := GetTransData;
    s1 := s;
    //取得lrc的值
    for i := 0 to length(s) - 1 do
    begin
    bb := byte(s[i]);
    s1[i] := chr(bb xor 3);
    end;
    S := PCHAR(CHR($02) + S + CHR($03) + S1);
    WriteFile(aHandle, S , 290, lrc, nil);
    //關閉COM1
    CloseHandle(aHandle);
end;

procedure TForm1.ConnectPrint(var aHandle : THandle);
var
    Temp : String;
    dcb : _DCB;
    lrc : Longword;
begin
    temp := 'COM1';
    aHandle := CreateFile(PChar(temp),
        GENERIC_READ OR GENERIC_WRITE,
        0,
        nil,
        OPEN_EXISTING,
        0,
        0 );

end;

function TForm1.GetTransData: String;
var
    aString : String;
begin
    {Trans Type    ( 2)
    Host ID    ( 2)
    Invoice No    ( 6)
    Card No    (19)
    Card Exp Date ( 4)
    Trans Amt    (12)
    Trans Date    ( 6)
    Trans Time    ( 6)
    Approval Code ( 9)
    Amount 1    (12)
    Resp Code    ( 4)
    Terminal Id ( 8)
    Ref No        (12)
    Amount2    (12)
    StoreID    (16)
    Reserved    (13)
    }
    aString := '01'
        + '02'
        + '000000'
        + '0000000000000000000'
        + '0000'
        + '000000128000'
        + '000000' //6
        + '000000' //6
        + '000000000'//9
        + '000000000000'
        + '0000'
        + '00000000'
        + '00000000'
        + '000000000000'//12
        + '000000000000'//12
        + '00000000000000000'//17
        + '0000000000000';//13
    Result := aString;
end;

end.

2010年8月12日 星期四

控制POS打印機

delphi控制POS打印機
RPrinter為TextFile類型;
SContent為TStringList類型。

// 建立打印連接並打印數據
Assignfile(RPrinter,'lpt1'); // 設置打印機
Rewrite(RPrinter); // 準備寫文件
Writeln(RPrinter,chr($b)+chr(27)+'K'+chr(40)); // 向後倒紙!
...

for i := 0 to SContent.Count - 1 do
Writeln(RPrinter,SContent.strings[i]);

Writeln(RPrinter,chr($b)+chr(27)+'J'+chr(140)); // 向前進紙

CloseFile(RPrinter); // 關閉打印機,結束打印
SContent.Free; // 釋放字符串列表

Assignfile(RPrinter,'lpt1'); // 設置打印機
Rewrite(RPrinter); // 準備寫文件
Writeln(RPrinter,chr(27)+'p'+'m'+(後面兩個看起來像是參數) t1 t2); // 開錢箱
CloseFile(RPrinter); // 關閉打印機,結束打印




開 錢 箱控制命令(該命令可同時開啟兩個錢箱,實際操作只需開啟一個)
1、PK模式驅動錢箱指令
  ESC | r F9 M n1 n2
  M =0 代表一個錢箱 n代表脈衝寬度 n1 =40--50 之間
  M =1 代表兩個錢箱 n2 =120--150之間
  QBASIC下編程
  LPRINT CHR$(27);"|";"r";CHR$(249);CHR$(0); CHR$(50);CHR$(150)
2、POS模式驅動錢箱指令
  ESC r p M n1 n2
  M =0 代表一個錢箱 n代表脈衝寬度 n1 =40--50 之間
  M =1 代表兩個錢箱 n2 =120--150之間
  QBASIC下編程   LPRINT CHR$(27);CHR$(112);CHR$ (0);CHR$ (50);CHR$(200)
3、BS300K可同時打開兩個錢箱,當接 2、4 時錢箱1打開,接4、5時錢箱2打開
4、設定在windows下自動開錢箱功能
   LPRINT CHR$(27);"|w";CHR$(45);CHR$(n);
   n=0 FF走紙命令時錢箱無效
   n=1 錢箱1打開
   n=2 錢箱2打開

delphi 園地

delphi 園地

讚喔,有空也研究其他語言