[Delphi] 餐廳、飲料、簡餐等餐飲業POS系統畫面實踐

posscreen

在餐廳、飲料、簡餐等餐飲業的pos系統,常常可以如上圖的畫面。在Delphi如何實踐呢?提出幾個重點:

1.取得.ClientWidth、ClientHeight

2.如果是Scrollbox這類會出現捲軸的元件,記得再透過GetSystemMetrics(SM_CXVSCROLL)、GetSystemMetrics(SM_CYHSCROLL)取得捲軸的寬度、高度,扣除掉才能取得正確可佈置的寬、高

3.透過Ceil記算頁數

4.Create元件時記得設定Parent

5.清空元件利用

while xxx.ControlCount > 0 do begin
xxx.Controls[0].Free;
end;

 

[Delphi XE3]ESC/POS範例

找遍了台灣的資料,對於POS收銀系統硬體相關的程式非常的少。

只好自己Try & Error一番,順便也將結果告訴一下大家囉~希望大家不要再為了它而浪費了不少時間。

很簡單的示範如何利用Delphi XE3及SPComm 元件來印出收據、切紙並打開錢櫃。

procedure TForm2.Button1Click(Sender: TObject);
var
  s:Ansistring;
begin
  Comm1.CommName := ComboBox1.Text;
  Try
    Comm1.StartComm;
    //初始化
    s:= chr(27) + chr(64);
    Comm1.WriteCommData(PAnsiChar(s),Length(s));
    // 印出目前日期、時間並換行
    s:= DateToStr(now)+' '+TimeToStr(now)+ chr(10)+ chr(13) ;
    Comm1.WriteCommData(PAnsiChar(s),Length(s));
    s:= chr(27) + chr(100) + chr(2);
    Comm1.WriteCommData(PAnsiChar(s),Length(s));
    s:= chr(29) + chr(33) + chr(17) ;
    Comm1.WriteCommData(PAnsiChar(s),Length(s));
    s:= 'Printer - Testing Success'+ chr(10);
    Comm1.WriteCommData(PAnsiChar(s),Length(s));
    s:= chr(29) + chr(33) + chr(0) ;
    Comm1.WriteCommData(PAnsiChar(s),Length(s));
    s:= chr(27) + chr(100) + chr(5);
    Comm1.WriteCommData(PAnsiChar(s),Length(s));
    // 切紙
    s := Chr(29) + Chr(86) + Chr(0) ;
    Comm1.WriteCommData(PAnsiChar(s),Length(s));
    //打開錢櫃
    s := chr(27) + chr(112) + chr(0) + chr(50) + chr(200) ;
    Comm1.WriteCommData(PAnsiChar(s),Length(s));
  Except
    on E: Exception do Begin
      ShowMessage('Open ComPort Error!'+#10#13+'Error MSG:'+E.Message);
    End;
  End;
end;