我正在使用 Delphi 11。有沒有辦法在 TDataModule 中運行特定功能,但前提是我的專案中存在此資料模塊?
我需要一種方法來檢查資料模塊是否存在并將函式作為字串呼叫,因為有些專案會添加此資料模塊,而其他專案則不會。
而不是這個:
myDataModule.myfunction(param);
將是這樣的假想代碼:
if TDataModule(findcomponent('myDataModule')) <> nil then
TDataModule(findcomponent('myDataModule')).call('myfunction','param');
uj5u.com熱心網友回復:
一個輕量級的解決方案可能是Messages(來自System.Messaging 的那些)。
- 宣告一個新的TMessage后代,其中包含呼叫所需的引數
- 創建資料模塊時,它會通過執行操作的處理程式訂閱此訊息型別。
- 而不是搜索資料模塊只是發送訊息。
uj5u.com熱心網友回復:
這可能適用于您的情況,也可能不適用……但這似乎是我將通過多播事件解決的那種情況。
您的代碼將呼叫Event.Execute('Param')而不是myDataModule.myfunction(param).
負責“匯入”和創建資料模塊的代碼部分將注冊到事件。就像是 :
EventClient := TEventClient.create(
procedure (const AParam : ParamType)
begin
myDataModule.myfunction(AParam)
end);
EventClient.Observe(Event);
現在,如果呼叫函式的原因是“類事件”,這種方法是有意義的,但在其他背景關系中這可能沒有意義。
至于實作多播事件的庫,我不能推薦任何一個,因為我一直使用專有的。如果你需要靈感來實作你自己的,你可以在單元 Vcl.AppEvnts 中查看 TMultiCaster,它或多或少地實作了相同的概念。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/330937.html
