
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 ;