⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 020.htm

📁 Delphi基础知识讲座
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<p>if Automatic then</p>
<p>DDEClientConv1.PokeDataLines(DDEItem,Memo1.Lines)</p>
<p>else</p>
<p>begin</p>
<p>DDEClientConv1.OpenLink;</p>
<p>DDEClientConv1.PokeDataLines(DDEItem,Memo1.Lines);</p>
<p>DDEClientConv1.CloseLink;</p>
<p>end;</p>
<p>end; </p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开</font>Microsoft Office<font
face="宋体" lang="ZH-CN">中的</font>Excel<font face="宋体" lang="ZH-CN">,装入一个文件,把相关的单元选中,拷贝到剪贴板上。而后运行程序,按下</font>Paste
Link<font face="宋体" lang="ZH-CN">按钮,</font>DDE<font face="宋体" lang="ZH-CN">联接就建立起来,相关单元中的数据显示在</font>Memo1<font
face="宋体" lang="ZH-CN">中。之后可以进行模式转换、数据申请、申请发送等一系列工作。运行后的屏幕显示如下图所示。</font></p>
<p>7.3.9 <font face="宋体" lang="ZH-CN">用客户程序控制程序管理器 </p>
<p>下面的例子用客户程序向程序管理器发送命令,用于创建程序组、程序项以及删除程序组。</font>
</p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序管理器提供了应用程序的</font>DDE<font
face="宋体" lang="ZH-CN">接口命令字符串,应用程序利用这些命令字符串可以实现以下的功能:</p>
</font><p>1.<font face="宋体" lang="ZH-CN">创建程序组</p>
<p>命令格式为:</p>
</font><p>CreateGroup(<font face="宋体" lang="ZH-CN">程序组名</font>[<font
face="宋体" lang="ZH-CN">,程序组所在的路径</font>])</p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序组不存在时进行创建;如程序组存在则按照指定的路径激活。</p>
</font><p>2.<font face="宋体" lang="ZH-CN">删除程序组</p>
<p>命令格式为:</p>
</font><p>DeleteGroup(<font face="宋体" lang="ZH-CN">程序组名</font>)</p>
<p>3.<font face="宋体" lang="ZH-CN">显示程序组</p>
<p>命令格式为;</p>
</font><p>ShowGroup(<font face="宋体" lang="ZH-CN">程序组名,显示标志</font>)</p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示标志用于控制程序组在程序管理器中以极大、极小或正常方式显示。</p>
</font><p>4.<font face="宋体" lang="ZH-CN">重新装入程序组</p>
<p>命令格式为:</p>
</font><p>ReLoadGroup(<font face="宋体" lang="ZH-CN">程序组名</font>)</p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该命令使程序管理器先删除而后再重新装入一个已有的程序组。</p>
</font><p>5.<font face="宋体" lang="ZH-CN">向程序组中添加程序项</p>
<p>命令格式为:</p>
</font><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddItem(<font face="宋体" lang="ZH-CN">命令行</font>[<font
face="宋体" lang="ZH-CN">,描述</font>[<font face="宋体" lang="ZH-CN">,图标路径</font>[<font
face="宋体" lang="ZH-CN">,图标序号</font>[<font face="宋体" lang="ZH-CN">,图标横坐标,图标纵坐标</font>[<font
face="宋体" lang="ZH-CN">,工作区目录</font>[<font face="宋体" lang="ZH-CN">,热键</font>[<font
face="宋体" lang="ZH-CN">,是否最小化显示标志</font>]]]]]]])</p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 命令行控制程序项的执行,可包括路径、参数等。其它参数分别对应在程序管理器中添加一个程序项时需要设置的参数和选项。它们都有缺省设置,因而是可选的。</p>
</font><p>6.<font face="宋体" lang="ZH-CN">替换程序组中的程序项</p>
<p>命令格式为:</p>
</font><p>ReplaceItem(<font face="宋体" lang="ZH-CN">程序项名</font>)</p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该命令删除一个程序项,并将所删除程序项的位置记录下来,以后通过</font>AddItem<font
face="宋体" lang="ZH-CN">在这个所记录的位置增加新项目。</p>
</font><p>7.<font face="宋体" lang="ZH-CN">从程序组中删除程序项</p>
<p>命令格式为:</p>
</font><p>DeleteItem(<font face="宋体" lang="ZH-CN">程序项名</font>)</p>
<p><font face="宋体" lang="ZH-CN">从当前活动程序组中删除一个程序项。</p>
</font><p>8.<font face="宋体" lang="ZH-CN">关闭程序管理器</p>
<p>命令格式为:</p>
</font><p>ExitProgram(<font face="宋体" lang="ZH-CN">是否保存程序组信息标志</font>)</p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从应用程序向程序管理器发送命令字符串的方法是基本一致的。为简便起见,在例程中只实现了其中仅包含一个字符串参数的情形,读者可以很容易作进一步的扩展。</p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序设计界面如图所示,包含一个</font>DDE<font
face="宋体" lang="ZH-CN">客户会话</font>(DDEClientConv)<font face="宋体"
lang="ZH-CN">部件和四个完成不同功能的按钮。</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DDEClientConv<font face="宋体"
lang="ZH-CN">在设计时和程序管理器建立一个</font>DDE<font face="宋体"
lang="ZH-CN">会话,其中</font>DDE<font face="宋体" lang="ZH-CN">服务器和</font>DDE<font
face="宋体" lang="ZH-CN">主题</font> <font face="宋体" lang="ZH-CN">都为</font>PROGMAN<font
face="宋体" lang="ZH-CN">。联接模式</font>ConnectMode<font face="宋体"
lang="ZH-CN">设置为</font>ddeManual<font face="宋体" lang="ZH-CN">。</p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们把只有一个字符串参数的命令发送情况抽象出来,形成下面的</font>SendMacro<font
face="宋体" lang="ZH-CN">函数。 </p>
</font><p>function TForm1.SendMacro(Name: String;Command: String): Boolean;</p>
<p>var</p>
<p>Macro: String;</p>
<p>Cmd: array[0..255] of Char;</p>
<p>begin</p>
<p>Result := True;</p>
<p>if Name &lt;&gt; '' then</p>
<p>begin</p>
<p>Macro := Format('['+Command+'(%s)]', [Name]) + #13#10;</p>
<p>StrPCopy (Cmd, Macro);</p>
<p>DDEClient.OpenLink;</p>
<p>if not DDEClient.ExecuteMacro(Cmd, False) then</p>
<p>Result := False;</p>
<p>DDEClient.CloseLink;</p>
<p>end;</p>
<p>end; </p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 过程首先利用</font>Format<font face="宋体"
lang="ZH-CN">函数形成宏字符串: </p>
</font><p>Macro := Format('['+Command+'(%s)]', [Name]) + #13#10; </p>
<p><font face="宋体" lang="ZH-CN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而后把</font>Pascal<font
face="宋体" lang="ZH-CN">类型的字符串拷贝到一个程序管理器可接受的</font>PChar<font
face="宋体" lang="ZH-CN">类型字符串中。</p>
</font><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DDE<font face="宋体" lang="ZH-CN">联接采用人工模式。首先调用</font>OpenLink<font
face="宋体" lang="ZH-CN">方法。而后调用</font>ExecuteMacro<font face="宋体"
lang="ZH-CN">方法发送命令,如失败则返回</font>False<font face="宋体"
lang="ZH-CN">。最后用</font>CloseLink<font face="宋体" lang="ZH-CN">关闭联接。</p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 三个按钮</font>CreateButton<font
face="宋体" lang="ZH-CN">、</font>AddButton<font face="宋体" lang="ZH-CN">、</font>DeleteButton<font
face="宋体" lang="ZH-CN">分别用于创建程序组、添加程序项、删除程序组。它们的程序实现大同小异,如下所示。</font></p>
<p><font face="宋体" lang="ZH-CN">创建程序组: </p>
</font><p>procedure TForm1.CreateButtonClick(Sender: TObject);</p>
<p>var</p>
<p>Name: String;</p>
<p>begin</p>
<p>Name := InputBox('Input Box','Input Group Name','');</p>
<p>if Name = '' then</p>
<p>MessageDlg('Group name can not be blank.', mtError, [mbOK], 0)</p>
<p>else</p>
<p>if SendMacro(Name,'CreateGroup') = False then</p>
<p>MessageDlg('Unable to create group.', mtInformation, [mbOK], 0);</p>
<p>end;</p>
<p><font face="宋体" lang="ZH-CN">添加程序项: </p>
</font><p>procedure TForm1.AddButtonClick(Sender: TObject);</p>
<p>var</p>
<p>Name: String;</p>
<p>begin</p>
<p>Name := InputBox('Input Box','Input Application full_Path name','');</p>
<p>if Name = '' then</p>
<p>MessageDlg('Application name can not be blank.', mtError, [mbOK], 0)</p>
<p>else</p>
<p>if SendMacro(Name,'AddItem') = False then</p>
<p>MessageDlg('Unable to Add Item.', mtInformation, [mbOK], 0);</p>
<p>end;</p>
<p><font face="宋体" lang="ZH-CN">删除程序组: </p>
</font><p>procedure TForm1.DeleteButtonClick(Sender: TObject);</p>
<p>var</p>
<p>Name: String;</p>
<p>begin</p>
<p>Name := InputBox('Input Box','Input Group Name to be Deleted','');</p>
<p>if Name = '' then</p>
<p>MessageDlg('Group name can not be blank.', mtError, [mbOK], 0)</p>
<p>else</p>
<p>if SendMacro(Name,'DeleteGroup') = False then</p>
<p>MessageDlg('Unable to create group.', mtInformation, [mbOK], 0);</p>
<p>end;</p>
<p align="center">7.4 DDE<font face="宋体" lang="ZH-CN">服务器程序的实现 </p>
<p>  </font>DDE<font face="宋体" lang="ZH-CN">服务器程序响应</font>DDE<font
face="宋体" lang="ZH-CN">客户的请求,一般地它包含了客户程序希望获取的数据。</font></p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建一个</font>DDE<font face="宋体"
lang="ZH-CN">服务器程序,必须要把一个</font>DDEServerItem<font face="宋体"
lang="ZH-CN">部件添加到窗体中。</font>DDEServerItem<font face="宋体"
lang="ZH-CN">的</font>text<font face="宋体" lang="ZH-CN">或</font>Lines<font
face="宋体" lang="ZH-CN">属性包含了要联接的数据。一般地</font>
DDEServerItem<font face="宋体" lang="ZH-CN">部件又和另一个文本控件相联系。当文本控件中的内容变化时则更新</font>DDEServerItem
<font face="宋体" lang="ZH-CN">的</font>text<font face="宋体" lang="ZH-CN">或</font>Lines<font
face="宋体" lang="ZH-CN">属性的值。下面的一段程序把</font>DDEServerItem<font
face="宋体" lang="ZH-CN">和一个列表框相联系。这一联系是在列表框的</font>OnChange<font
face="宋体" lang="ZH-CN">事件中实现。 </p>
</font><p>procedure Form1.OnListBoxChange(Sender: TObject);</p>
<p>begin</p>
<p>DDEServerItem1.Lines := ListBox1.Items;</p>
<p>end; </p>
<p><font face="宋体" lang="ZH-CN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建</font>DDE<font
face="宋体" lang="ZH-CN">服务器程序时也可以再加入一个</font>DDEServerConv<font
face="宋体" lang="ZH-CN">部件,并把两个部件利用</font>DDEServerItem<font
face="宋体" lang="ZH-CN">的</font>ServerConv<font face="宋体" lang="ZH-CN">属性联系起来。此时</font>DDE<font
face="宋体" lang="ZH-CN">主题成为部件</font>DDEServerConv<font face="宋体"
lang="ZH-CN">的名称,而不是拥有</font>DDEServerItem<font face="宋体"
lang="ZH-CN">部件窗体的标题。</p>
<p>在下列情况下使用</font>DDEServerConv<font face="宋体" lang="ZH-CN">部件成为必要:</p>
</font><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.<font face="宋体" lang="ZH-CN">拥有</font>DDEServerItem
<font face="宋体" lang="ZH-CN">部件窗体的标题可能在运行时改变或可能有其它窗体拥有同样的标题。在这种情况下</font>DDE<font
face="宋体" lang="ZH-CN">联接可能无法建立;</p>
</font><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.DDE<font face="宋体"
lang="ZH-CN">客户程序可能会向你的服务器程序发送一条宏命令。在这种情况下只有拥有一个</font>DDEServerConv<font
face="宋体" lang="ZH-CN">部件才能响应</font>OnMacroExecute<font face="宋体"
lang="ZH-CN">事件并执行相应的动作。 </p>
</font><p>7.4.1 <font face="宋体" lang="ZH-CN">和</font>DDE<font face="宋体"
lang="ZH-CN">客户程序建立联接 </p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般说来,建立</font>DDE<font
face="宋体" lang="ZH-CN">联接是客户程序的任务。但服务器程序可以把一个联接拷贝到剪贴板上供客户程序粘贴并建立</font>DDE<font
face="宋体" lang="ZH-CN">会话。步骤如下:</p>
</font><p>1.<font face="宋体" lang="ZH-CN">调用</font>DDEServerItem<font face="宋体"
lang="ZH-CN">部件的</font>CopyToClipboard<font face="宋体" lang="ZH-CN">方法,</font>
<font face="宋体" lang="ZH-CN">把</font>Text(<font face="宋体" lang="ZH-CN">或</font>Lines)<font
face="宋体" lang="ZH-CN">属性的值和</font>DDE<font face="宋体" lang="ZH-CN">联接信息拷贝到剪贴板上;</p>
</font><p>2.DDE<font face="宋体" lang="ZH-CN">客户程序插入联接的数据。一般地这是通过选择适当的命令</font>(<font
face="宋体" lang="ZH-CN">如</font>Edit|Paste Special<font face="宋体" lang="ZH-CN">或</font>Edit|Paste
Link)<font face="宋体" lang="ZH-CN">来实现的。</font></p>
<p>7.4.2 <font face="宋体" lang="ZH-CN">响应</font>DDE<font face="宋体" lang="ZH-CN">事件 </p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 部件</font>DDEServerConv<font face="宋体"
lang="ZH-CN">有三个事件:</font>OnOpen<font face="宋体" lang="ZH-CN">、</font>OnClose<font
face="宋体" lang="ZH-CN">、</font>OnExecuteMacro<font face="宋体" lang="ZH-CN">。前两个事件在</font>DDE<font
face="宋体" lang="ZH-CN">会话建立和终止时触发。同</font>(7.3.7)<font

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -