3.7 调用进程
3.7.1进程
任何进程可以被使用在“Rt_forms”单元中的“MessageRouter_SendCommandToModule”函数调用。参数是:
ProcessName : String
Parameters:PChar
MaxParameterSize: Word
ServerWindow:HWnd
此函数返回一个字符串,要么是一个空的字符串,或者是被调用的进程返回的一些快捷键字符串。
此服务器窗体参数定义目标在目标服务器内部的窗体,当无特别的窗体是目标窗体时,请使用cProcessWindow_DontCare($FFFF)常量(rt_Types单元定义的常量)。
例子:
GetMem(Parameters, 4048);//申请内存。
Parameters := ''; {your code to fill the Parameters您的代码来填充此参数}
MessageRouter_SendCommandToModule('YourServer:YourProcess',Parameters,4048, ProcessWindow_DontCare);
{your code to handle the results您的代码来处理此结果}
...
FreeMem(Parameters, 4048); //释放内存。
To run a process on the currently active window
如在当前活动窗体中运行一个进程:
Var
H :HWnd;
Begin
H :=MessageRouter_GetState_CurrentEditorWindow;
MessageRouter_SendCommandToModule(‘YourServer:YourProcess',’’,0,H);
...
3.7.2处理进程参数
在此格式中,参数从一个单个的以Null为终止符串字符(零个字符)到最多32000个字符。
< Name> = <Value> | <Name> = <Value> | ...
名称可以是任何的语言和数字字符串,没有空格字符或垂线条“|”。
值可以是任何不包括垂线条的字符串。
任何遗漏参数将使用一个默认值,或者提示用户。参数名称大小写不敏感,所以DocumentName和documentname是一样的。
这里有一些基本的参数。
DocumentName = 文件路径和名称。(File path and name)
DocumentType = 项目,原理,PCB,等等。(Project, Schematic, PCB, and so on)
LocationX= 有关此进程被调用的X坐标系。(The X Coordinate relevant to the Process being called.)
LocationY= 有关此进程被调用的Y坐标系。(The Y Coordinate relevant to the Process being called.)
参数名称的使用上没有限制,但是建议您遵守设计资源管理器的约定(整个单词每一个开头为大写),这样将易于被用户学习您的服务器进程,也将改善服务器、设计资源管理器、和其它服务器之间的集成。请确保分配足够的内存到参数列表,来同时处理您的输入参数和任何返回参数。
由于参数通常分配和释放在一个本地内存,万一您需要增加更多的参数,因此,我们建议您一次分配4KB内容。
设计资源管理器为构建和访问参数列表提供一些基本的函数(在RT_FORMS单元定义):
Function GetState_NextParameter(VarParameterString : PChar; VarNextParameter : String) : Boolean;
Function GetState_Parameter(VarParameterList : PChar; ParameterName : String; VarParamValue : String) : Boolean;
Procedure SetState_Parameter(ParameterList : PChar; ParameterName : String;ParamValue : String);
·GetState_NextParameter
放入一个参数(名称和值)到Pascal字符串“NextParameter”,并且从“ParameterString”删除它,此函数是有破坏性的。
·GetState_Parameter
在“ParameterList”内查看匹配“ParameterName”的参数并且返回结果(仅值),如果有,放置到“ParameterValue”中,此函数是没有破坏性的,因为原始的“ParameterList”没有改变。
·SetState_Parameter
SetState_Parameter函数被用于构建参数列表。如果传递的“ParameterList”已经有一个匹配“ParameterName”,它的值将被替换为“ParameterValue”。如果在列表中没有已存在的参数,参数将被增加到列表的末尾。请记住参数名称是大小写不敏感的,所以“DocumentName”和“documentname”是同样的参数。
举个实际的例子来说明。
例子1。
Procedure RefreshCurrentBoard;
Var
P:PChar;
Windowhandle : HWND;
Begin
GetMem(P,256);
SetState_Parameter(P,'Action','All');
WindowHandle :=MessageRouter_GetState_CurrentEditorWindow;
MessageRouter_SendCommandToModule('PCB:Zoom',P,256,WindowHandle);
FreeMem(P,256);
End;
此代码片段使用一个MessageRouter_SendCommandToModule方法来缩放PCB设计文档,来显示所有PCB对象。如果您想要来使用此代码片段的话,不要忘记在工程中引用单元 “Windows”,“Rt_Forms”,“Rt_Util”和“Rt_Param”。您需要来检查窗体名柄是否指向一个PCB文档窗体。(为达到此目标,您需要MessageRouter_GetState_WindowKind函数,此函数返回一个编辑器类型字符串。)
例子2
GetMem(P, 4048);//申请内存。
SetState_Parameter(P,'Dialog','Color');//设置参数。
SetState_Parameter(P,'Color', '0'); //设置参数。
MessageRouter_SendCommandToModule('Client:RunCommonDialog',P,4048,0);//发送命令来运行彩色的对话框进程。
GetState_Parameter(P,'Result',S);//返回结果。
If(S = 'True') Then //如果S为True,取回颜色值。
Begin
GetState_Parameter(P,'Color',S);
Color :=StrToInt(S);
End;
FreeMem(P, 4048);//释放内存。
此代码片段在设计资源管理器中调用一个彩色的对话框并且高亮黑色颜色值,如果您改变颜色并且点击“OK”,那么返回“True”,您将得到一个新的颜色值。这时,您无需传递一个文档的窗体句柄到MessageRouter_SendCommandToModule函数,因为客户端的CommonDialog会自动成功在运行设计资源管理器中。
在客户端RunCommonDialog进程获取一个对话框参数,此参数能为下列几种之一:“Color”“ProcessList”,“ChooseDocument”,“FileOpensave”,为得到更多详细信息,请参考客户端进程联机帮助。如果已安装好SDK,此代码是放在“\SDK\Examples\API Examples\Client\CommonDialog process”文件夹中,您可以仔细研究和用此代码做实验。(e-works)