2023/06/01

官方 DataSnap 教案集錦

作者:吳祐賓

 

Paweł Głowacki 錄製一系列關於 DataSnap 的教授課程,有興趣的朋友可以自以下連結進行閱讀:

Unleash the power of Delphi: DataSnap
https://www.embarcadero.com/rad-in-action/delphi-labs



2023/05/25

讓 Delphi 11 產出的執行檔相容 Windows XP

作者:吳祐賓

 


 

Delphi XE 下熬了很久,就在 2023 年正式升級 Delphi 11 後,才由原本「修理 IDE 的快樂」轉變為「升級後的快樂」,然而這快樂沒有多久,很快的使用者就傳來災情:

無法執行

依稀記得幾年前的 Delphi 研討會有提到新版 Delphi 產出的執行檔無法在 Windows XP 下執行,想不到在 2023 年的今天,仍然會遇到必須要使用 Windows XP 的場合,2001年10月的產物。

難怪每次購買新版 Delphi 時都能下載過往舊版本,是時候再把 Delphi XE 拿出來把玩了! 

你也是這樣想嗎?太天真了。Delphi 11 已經貼心的在編譯器設定裡加入了【PE Header】選項!

2023/04/20

【Delphi in Depth DataSnap 網站應用程式全端開發】 2023 年更新



作者:吳祐賓




【DELPHI IN DEPTH DATASNAP 網站應用程式全端開發】2023 年更新:給予你一個豐富的 Web 開發武器庫!

電子書的魅力在於它可以持續更新和維護。為了回饋支持者們,我在 2023 年進行了最後一次補充內容。未來的新增內容將以 DLC 的方式推出新書。讀完本書後,你將具備進入 Web 開發戰場的能力,其中很多內容都是改編自我的現行專案,期待你的發揮!

這本書能幫助讀者解決在 Web 開發過程中遇到的各種問題和痛點,包括如何有效地使用 Delphi 和 DataSnap 進行網站應用程式的全端開發,以及如何掌握 Sencha ExtJS 等流行前端框架,讓你的開發技能更上一層樓。


【DELPHI IN DEPTH DATASNAP 網站應用程式全端開發】2023 年更新主要包括以下幾點:


  1. 修正部分 Bug 和優化文句
  2. 新增 Sencha ExtJS 實作教學章節
  3. 提供 Sencha ExtJS 專案附件檔案

感謝早期支持本書的讀者們!為配合後續英文版上線,我做了以下調整:

  1. 中文版維護期限將持續至 2023/12/31,到期後將不再更新(價格也將保持不變)。
  2. Google Play 販售地區將由全球調整為「臺灣」和「香港」(Pubu 則無調整)。
  3. 此次更新後的售價將調整為新台幣 729 元。

把握機會,為自己的 Web 開發能力加分!立即擁有【DELPHI IN DEPTH DATASNAP 網站應用程式全端開發】2023 年更新版,讓你的技能更上一層樓!


  點這裡看書本詳細介紹



2023/03/20

學習使用轉接器模式 (Adapter Pattern) 處理 API 介面不符的情況 - 使用 Delphi


轉接器模式 (Adapter Pattern)  適合的場景

近年來,隨著跨平台開發的需求增加,我們必須考慮如何在不同的環境下呈現出一致的介面,而 轉接器模式 (Adapter Pattern) 正是解決這個問題的好方法。

Adapter 模式是設計模式中常用的一種模式,它能夠讓原本不相容的兩個類別能夠一起工作,是將一個類別的介面轉換成客戶希望的另一個介面的模式。今天我們來看一個 Delphi 中使用 Adapter 模式的範例。

假設我們正在開發一個音樂播放器應用程式,需要使用一個第三方音樂函式庫來播放音樂,但這個庫的介面不符合我們的應用程式的需求,我們需要使用 Adapter 模式來解決這個問題。

Delphi 轉接器模式 (Adapter Pattern)  的範例:將不相容的介面轉換成符合應用程式需求的介面

首先,我們需要建立一個播放器介面,它必須要符合我們應用程式的需求,比如有播放、暫停、停止等功能:


type
  IPlayer = interface
    procedure Play;
    procedure Pause;
    procedure Stop;
  end;

然後,我們需要建立一個使用第三方音樂函式庫的播放器,但它的介面不符合我們應用程式的需求:


type
  TThirdPartyPlayer = class
    procedure Start;
    procedure Halt;
    procedure End;
  end;

現在,我們可以建立一個 Adapter 類別,將 TThirdPartyPlayer 的介面轉換成符合我們應用程式需求的 IPlayer 介面:


type
  TPlayerAdapter = class(TInterfacedObject, IPlayer)
  private
    FThirdPartyPlayer: TThirdPartyPlayer;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Play;
    procedure Pause;
    procedure Stop;
  end;
  
constructor TPlayerAdapter.Create;
begin
  FThirdPartyPlayer := TThirdPartyPlayer.Create;
end;

destructor TPlayerAdapter.Destroy;
begin
  FThirdPartyPlayer.Free;
  inherited;
end;

procedure TPlayerAdapter.Play;
begin
  FThirdPartyPlayer.Start;
end;

procedure TPlayerAdapter.Pause;
begin
  FThirdPartyPlayer.Halt;
end;

procedure TPlayerAdapter.Stop;
begin
  FThirdPartyPlayer.End;
end;

現在,我們可以使用 TPlayerAdapter 類別來播放音樂了:


var
  Player: IPlayer;
begin
  Player := TPlayerAdapter.Create;
  Player.Play;
  Player.Pause;
  Player.Stop;
end;

如此一來,我們就成功地使用 Adapter 模式來將原本不相容的介面轉換成了符合我們應用程式需求的介面。

總結

Adapter 模式是一種非常實用的設計模式,能夠讓不相容的類別能夠一起工作,提高程式的彈性和可擴展性。在實際應用中,我們可以使用 Adapter 模式來解決許多問題,例如:

  • 一些舊的程式碼需要被重用,但是與新的系統不相容。
  • 需要在現有的系統上加入新的功能,但是無法修改現有的代碼。
  • 需要整合多個不同的系統,但是它們之間的介面並不相同。 

Adapter 模式的實現方式有很多種,例如類別 Adapter 和物件 Adapter。選擇哪種方式實現取決於具體的應用場景和需求。

在 Delphi 中,我們可以使用類別 Helper 或者繼承來實現 Adapter 模式。在使用時,我們需要根據具體的需求選擇適合的實現方式。

綜上所述,Adapter 模式是一種強大的設計模式,能夠幫助我們解決很多問題。如果您希望提高程式的彈性和可擴展性,那麼學習和應用 Adapter 模式是非常有益的。