【Delphi XE3】編譯成Mac OS可執行程式 – 程式範例

上一篇文章中,筆者教大家如何在Mac系統中配置PAServer了,接下來要教大家如何設計可以同時執行在Windows及Mac OS的程式。

一、File→New選取FireMonkey Desktop Application

Fire Desktop Application

二、接下來選擇一般的HD FireMonkey Application

Select a firemonkey application type

三、新增專案後,在專案的Target Platform按右鍵,選擇Add Platform

add platform

四、接著選擇OS X後按ok

Select a Platform

五、接著在OS X按右鍵 Assign Remote Profile 設置OS X的編譯環境

Assign Remote Profile

六、Profile name填上你要的名字

Profile Information

七、Host name填上你在上一篇文章設置的MAC OS主機位置,password則設置上篇文章所設定的密碼。

Host Machine Information

 

八、按 Test Connection測試是否可以連得上(記得要執行paserver)

Test Connection

九、如果順利的話,按下Finish就大功告成!

Create Remote Profile

 

九、接著點選剛才建立的Platform名稱按OK!

Select Remote Profile

十一、如果設定沒錯的話,在XE3按下執行後,程式就會直接執行在Mac OS的畫面上囉!

Test Form

[Delphi XE3]輕鬆更改程式外觀

以前在撰寫程式時,最討厭的就是醜醜的外觀,如果不是自己畫,就是得找第三方元件(像BusinessSkinForm)來解決。
自從Delphi XE2就開始有的功能,跟大家分享一下如何讓程式看起來不再這麼醜。
1.靜態更改

.Project→Options開啟Project Options選項,在Application→Appearance的Custom Styles就是可以更改介面的選項

Delphi_XE3_Appearance1

.如果不清楚長什麼樣子時,可以點選任一名稱反白後,再點旁邊的Preview就可以預覽

Style

.勾選要變成的Style後,再到Default Style下拉你要的Style按OK即可。Default_Style

2.動態程式更改

.依照靜態更改方式,勾選你想要呈現的STYLE。

.增加 uses Vcl.Themes

uses Vcl.Themes;

.讀入風格檔

procedure TForm1.Button1Click(Sender: TObject);
Var
 StyleName  : string;
begin
  ListBox1.Items.Clear;
  for StyleName in TStyleManager.StyleNames do
    if ListBox1.Items.IndexOf(Name)=-1 then
      ListBox1.Items.Add(StyleName);
end;

.設定風格檔

procedure TForm1.Button2Click(Sender: TObject);
begin
  if ListBox1.ItemIndex>=0 then
    TStyleManager.SetStyle(ListBox1.Items[ListBox1.ItemIndex]);;
end;

Demo
範例程式下載 GitHub https://github.com/superlevin/DelphiXE3_SetStyle

3.自製風格.Tools→Bitmap Style Designer
bitmap_style_designer
預設的Style檔案位置在:C:\Users\Public\Documents\RAD Studio\10.0\Styles

[Delphi XE3] 取得螢幕解析度

uses Winapi.Windows;

procedure TMainForm.Button1Click(Sender: TObject);
var
  ScreenHorizontal :integer;
  ScreenVertical:integer;
begin
  ScreenPixelX:= GetDeviceCaps(GetDC(Application.Handle),HORZRES); // Horizontal width in pixels
  ScreenPixelY:= GetDeviceCaps(GetDC(Application.Handle),VERTRES); // Vertical height in pixels
  // 取得螢幕解析度
  ShowMessage(IntToStr(ScreenHorizontal)+' X '+ IntToStr(ScreenVertical));
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;

ComPort控制元件SPComm for Delphi XE3

SPComm是年代蠻久遠的ComPort控制元件,之所以一直歷久不衰是因為簡單易用。

因為最近使用XE3在開發POS系統的原因,所以也找了新版本的SPComm,而原作者是copyleft的方式,再加上不易找到,所以筆者也將它開放到GitHub讓有需要的朋友一起使用。

GitHub: https://github.com/superlevin/spcomm_xe3