
09/12/2021(版本1.9)
03/13/2021(版本1.8)
02/01/2021(版本1.7)
12/18/2020(版本1.6)
11/28/2020(1.5版)
11/01/2020(版本1.4)
10/31/2020(1.3版)
10/27/2020(版本1.2)
10/26/2020(版本1.1)
05/03/2020
2019年3月11日
DZTalkApp允許您在不同的應用程序之間發送數據。您可以發送簡單的數據類型,例如整數或字符串,甚至是複雜的數據,例如記錄。
支持delphi xe3..delphi 11
將tdztalkapp放在源和目標應用程序中。
您只需要在組件中設置窗口名稱,並且在窗口手柄之間會發生通信。
在“目標應用程序”中,只需設置“ Onmessage事件”以接收和讀取數據。
AutoActivate: Boolean =自動啟用加載的組件上的手柄。這只有在設計時間模式下設置其他屬性時才有效。
AutoFind: Boolean =啟用自動連接時,在每個發送命令上,組件將找到目標窗口句柄。
MyWindowName: String =指定源句柄名稱。僅當此應用程序接收通信時,才需要此屬性。否則,您只需要設置目標窗口名稱即可。
DestWindowName: String =指定目標窗口名稱。僅當此應用程序發送通信時才需要此屬性,否則您只需要設置源窗口句柄名稱即可。
Synchronous: Boolean =如果啟用了此屬性,則在將命令發送到其他應用程序時,只有在目標應用程序方法OnMessage結束之後才會發布執行指針。如果該屬性被禁用,當目標接收消息時,請立即在源應用程序中發布執行指針。
Active: Boolean (僅公開讀取)=表示組件是否啟用或禁用(請參閱Enable和Disable方法)。
ToHandle: HWND (public)=存儲最後一個目標窗口句柄。您可以在需要時手動設置此屬性,但我建議您改用FindDestWindow方法。
procedure Enable ;啟用窗口句柄發送和接收消息。在使用此方法之前,您需要指定窗口句柄的名稱。
procedure Disable ;禁用窗口句柄。
procedure FindDestWindow ;通過DestWindowName屬性中定義的名稱查找並設置目標窗口句柄。如果找不到目標窗口,則使用類EDzTalkAppWndNotFound提出錯誤。
procedure Send (ID: Word); overload;
procedure Send (ID: Word; N: Integer); overload;
procedure Send (ID: Word; const A: string); overload;
procedure Send (ID: Word; P: Pointer; Size: Cardinal); overload;
procedure Send (ID: Word; S: TMemoryStream); overload;使用發送方法將消息發送到目標應用程序。要發送消息,需要啟用組件(使用Enable方法),並且需要定義的目標窗口名稱(使用DestWindowName屬性)。
超載方法使您可以發送:
只有一個命令,使用ID參數
具有整數參數的命令,使用N參數
具有字符串參數的命令,使用A
具有任何類型的數據參數的命令,使用P參數並指定數據參數的大小。
使用S參數的帶有內存數據流的命令。
function AsString : string;在OnMessage事件中使用此功能將消息數據作為字符串類型獲取。
function AsInteger : Integer;在OnMessage事件中使用此功能,將消息數據作為整數類型。
procedure AsStream (Stm: TStream);在OnMessage事件中使用此過程將消息數據作為tstream類型獲取(在調用此方法之前需要創建對象)。
function GetResult : Integer;您可以在通話Send方法後立即使用此功能,以獲取目標應用程序收到的消息的結果代碼。您可以在目標應用程序的OnMessage事件中設置此結果。請參閱“ onmessage”活動的描述。
procedure OnMessage (Sender: TObject; From: HWND; ID: Word; P: Pointer; Size: Cardinal; var Result: Integer);收到消息時,此方法將在目標應用程序中發生。 From參數指示源窗口的句柄。 ID參數指示源應用程序中Send方法中使用的消息的代碼。 P參數具有消息數據的指針。 Size參數允許您知道接收到的數據的大小。
Result參數允許您設置一個結果代碼返回發件人應用程序(使用Send方法後,發件人應用程序應立即使用GetResult函數來讀取此結果代碼)。
您可以使用AsString , AsInteger或AsStream方法將消息數據內容作為特定類型。
您可以發送記錄結構。為此,請確保您始終使用packed record ,因為這種記錄將使用固定的大小結構。
要發送記錄,請使用:
type
TData = packed record
Number: Integer;
Text: ShortString;
Flag: Boolean;
end ;
var R: TData;
begin
R.Number := 100 ;
R.Text := ' TEST ' ;
R.Flag := True;
DzTalkApp.Send( 1 , @R, SizeOf(R));
end ;使用Onmessage事件接收此記錄:
var R: TData;
begin
R := TData(P^);
end ;當然,目標應用程序上的包裝記錄必須具有與發件人應用程序中使用的記錄相同的結構。
發送雙重類型:
var D: Double;
begin
DzTalkApp.Send( 1 , @D, SizeOf(D));
end ;要接收雙重類型(Onmessage事件):
var D: Double;
begin
D := Double(P^);
end ;