马绿树 發表於 2019-12-11 16:25:00

Delphi - 手把手教你基于D7+Access常用管理系统架构的设计与实现

<h2><span style="color: rgba(0, 128, 128, 1)"><strong>前言</strong></span></h2>
<p><span style="font-family: 隶书">  <span style="font-family: 宋体; font-size: 14px">从事软件开发工作好多年了,学的越深入越觉得自己无知,所以还是要对知识保持敬畏之心,活到老,学到老!</span></span></p>
<p><span style="font-family: 宋体; font-size: 14px">健身和代码一样都不能少,身体是革命的本钱,特别是我们这种高危工种,所以小伙伴们运动起来!有没有健身撸铁,体脂现在是多少呀?明年(2020/03/22)徐州的马拉松有没有报名呀!?</span></p>
<p><span style="font-family: 宋体; font-size: 14px">  扯的有点远了,接下来我将抽三天时间手把手教你基于Delphi7+Access,同时搭配第三方控件RC、AlphaControl(第三方控件主要用于美化界面),完成通用管理系统架构的设计。骚年,想想是不是还有点小激动?</span></p>
<p style="text-align: center">  <img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211124520850-364844363.png" alt="">&nbsp;</p>
<hr>
<h2>&nbsp;<span style="color: rgba(0, 128, 128, 1)"><strong>涉及知识点</strong></span></h2>
<ul>
<li><span style="font-family: 宋体; font-size: 14px">Access数据库建立与关键表结构设计</span></li>
<li><span style="font-family: 宋体; font-size: 14px">Delphi ADOConnection动态连接Access数据库</span></li>
<li><span style="font-family: 宋体; font-size: 14px">Delphi前台fsMDIForm和fsMDIChild窗体设计</span></li>
<li><span style="font-family: 宋体; font-size: 14px">dxBarManager方式通用菜单架构设计</span></li>
<li><span style="font-family: 宋体; font-size: 14px">主界面常见状态栏涉及与动态更新(软件版本信息、时间状态信息、登录组信息、滚动信息、当前时间...)</span></li>
<li><span style="font-family: 宋体; font-size: 14px">Delphi通用登录界面设计及主界面载入交互</span></li>
<li><span style="font-family: 宋体; font-size: 14px">MD5方式验证和保存密码</span></li>
<li><span style="font-family: 宋体; font-size: 14px">动态窗体菜单列表(打开窗体事件、销毁窗体事件)</span></li>
<li><span style="font-family: 宋体; font-size: 14px">RzCheckTree方式设计常见用户权限</span></li>
<li><span style="font-family: 宋体; font-size: 14px">imageList图标库</span></li>
<li><span style="font-family: 楷体"><span style="font-family: 隶书; font-size: 16px"><span style="font-family: 宋体; font-size: 14px">第三方控件:RC、AlphaControl皮肤控件</span> </span> </span></li>
</ul>
<h3><span style="color: rgba(0, 0, 255, 1); font-family: 楷体"><strong>看到这么多知识点是不是感觉有点晕啊!</strong></span></h3>
<h3><strong><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 255, 1)"><span style="font-family: 楷体">没关系,接下来我们一步一步实现!注意我们的口号,保持对知识的敬畏之心!</span> </span> </span></strong></h3>
<p style="text-align: center"><strong><span style="color: rgba(0, 128, 128, 1)"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211124701760-429997369.png" alt=""></span></strong></p>
<hr>
<h2>&nbsp;<strong><span style="color: rgba(0, 128, 128, 1)">整体设计方案</span></strong></h2>
<p><span style="font-family: 隶书"><strong><span style="color: rgba(0, 128, 128, 1)">  </span></strong><span style="color: rgba(0, 128, 128, 1); font-family: 宋体; font-size: 14px"><span style="color: rgba(0, 0, 0, 1)">这个是我们系统实现部分的一个设计方案,因为系统是通用的嘛,所以这里我就叫它Common Management System了,下面简称CMS。</span></span></span></p>
<p style="text-align: center">  <img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211120525283-790908649.png" alt=""></p>
<p><span data-mce-=""><span data-mce-="">  <span style="font-family: 宋体; font-size: 14px">这里暂不做DFEMA和PFEMA的深层次分析,有BUG的系统才是好系统,不然还要开发和维护人员做什么?(客户小姐姐:呸,渣男!)</span></span></span></p>
<p style="text-align: center"><span data-mce-=""><span data-mce-="">  <img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211125822248-1650537748.png" alt=""></span></span>&nbsp;</p>
<hr>
<h2>&nbsp;<strong><span style="color: rgba(0, 128, 128, 1)">项目实现</span></strong></h2>
<p> <span style="font-size: 16px"> <span style="font-family: 宋体; font-size: 14px">骚年,扶好了,<span style="text-decoration: line-through">我要教你开车了</span>,啊呸,我要教你开发了。</span></span></p>
<h3><span style="color: rgba(0, 128, 128, 1)">Access数据库建立与关键表结构设计&nbsp;</span></h3>
<p>  <span style="font-family: 宋体; font-size: 14px">创建一个Access文件,命名为DataX.mdb,再创建两张表,分别命名为sysUser和sysUserAuthority,其中ID栏位自动生成,VDate栏位为日期格式,其余栏位均为长文本根式,并添加如下数据,如下图。</span></p>
<p style="text-align: center"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211134850005-2043019196.png" alt=""></p>
<p style="text-align: center"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211135126995-1997985254.png" alt="">&nbsp;</p>
<hr>
<p>&nbsp;<span style="color: rgba(0, 128, 128, 1)"><strong>Delphi ADOConnection动态连接Access数据库</strong></span>&nbsp;</p>
<p><span style="color: rgba(0, 128, 128, 1)">  <span style="color: rgba(0, 0, 0, 1); font-family: 宋体; font-size: 14px">启动Delphi7,新建一个项目,分别命名为:工程文件命名为:CommonManagementSystem.dpr,单元文件命名为:uMain.pas,主窗体命名为:MainFrm。</span></span></p>
<p><span style="color: rgba(0, 128, 128, 1); font-family: 宋体; font-size: 14px"><span style="color: rgba(0, 0, 0, 1)">然后保存,注意文件的保存位置,因为接下来连接Access数据库时需要根据相对路径来,参考下图。</span></span></p>
<p style="text-align: center"><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1); font-family: 隶书; font-size: 16px"><img src="https://img2018.cnblogs.com/common/1335881/201912/1335881-20191211140623516-452856280.gif" alt=""></span></span></p>
<p style="text-align: left"><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1); font-family: 隶书; font-size: 16px">  <span style="font-family: 宋体; font-size: 14px">然后,在主窗体上放一个ADOConnection控件<img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211140802952-1960516695.png" alt=""></span></span></span><span style="color: rgba(0, 128, 128, 1); font-family: 宋体; font-size: 14px"><span style="color: rgba(0, 0, 0, 1)">,命名为conMain。接下来在工程onShow事件中写如下代码:</span></span>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TMainFrm.FormShow(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 动态连接Access数据库</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span>   Screen.Cursor :=<span style="color: rgba(0, 0, 0, 1)"> crSQLWait;
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">    ChDir(ExtractFilePath(Application.ExeName));
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>   ChDir(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">..</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>   <span style="color: rgba(0, 0, 255, 1)">try</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">动态加载数据库</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>       conMain.Connected :=<span style="color: rgba(0, 0, 0, 1)"> False;
</span><span style="color: rgba(0, 128, 128, 1)">10</span>       conMain.ConnectionString := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Provider=Microsoft.Jet.OlEDB.4.0;Data Source=</span><span style="color: rgba(128, 0, 0, 1)">'</span> + GetCurrentDir + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">\DataX\DataX.mdb</span><span style="color: rgba(128, 0, 0, 1)">'</span> + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">;User ID=admin;Password=;Persist security Info=False</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">11</span>       conMain.Connected :=<span style="color: rgba(0, 0, 0, 1)"> True;
</span><span style="color: rgba(0, 128, 128, 1)">12</span>       conMain.LoginPrompt :=<span style="color: rgba(0, 0, 0, 1)"> False;
</span><span style="color: rgba(0, 128, 128, 1)">13</span>       statusPaneAccess.Caption := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">数据库已连接</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;<span style="color: rgba(0, 128, 0, 1)">//状态栏控件statusPane
</span></span><span style="color: rgba(0, 128, 128, 1)">14</span>       Screen.Cursor :=<span style="color: rgba(0, 0, 0, 1)"> crDefault;
</span><span style="color: rgba(0, 128, 128, 1)">15</span>   <span style="color: rgba(0, 0, 255, 1)">except</span>
<span style="color: rgba(0, 128, 128, 1)">16</span>       Screen.Cursor :=<span style="color: rgba(0, 0, 0, 1)"> crDefault;
</span><span style="color: rgba(0, 128, 128, 1)">17</span>       statusPaneAccess.Caption := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">数据库未连接</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">18</span>       MessageDlg(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">数据库连接失败,请确认!</span><span style="color: rgba(128, 0, 0, 1)">'</span>, mtError, , <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">19</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">20</span>   Screen.Cursor :=<span style="color: rgba(0, 0, 0, 1)"> crDefault;
</span><span style="color: rgba(0, 128, 128, 1)">21</span>   <span style="color: rgba(0, 0, 255, 1)">except</span>
<span style="color: rgba(0, 128, 128, 1)">22</span>   statusPaneAccess.Caption := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">数据库未连接</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">23</span>   MessageDlg(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">数据库连接失败,请确认!</span><span style="color: rgba(128, 0, 0, 1)">'</span>, mtError, , <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">24</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 255, 1)">end</span>;</pre>
</div>
<p style="text-align: left">&nbsp;<span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1); font-family: 隶书; font-size: 16px"> &nbsp; <span style="font-family: 宋体; font-size: 14px">OK,到这里工程动态连接Access数据库的功能已经实现了。</span></span></span></p>
<p><span style="color: rgba(0, 128, 128, 1); font-family: 宋体; font-size: 14px"><span style="color: rgba(0, 0, 0, 1)">  骚年,是不是感觉很简单,是的,你没有看错,跟着我一步步做,就是so easy!(🤫,不要忘记我们的口号)其实复杂的功能都是通过简单的功能组合起来的!所以,加油吧!骚年!</span></span></p>
<p style="text-align: center"><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1); font-family: 隶书; font-size: 16px"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211141556195-677506973.png" alt=""></span></span></p>
<hr>
<h3 style="text-align: left"><span style="color: rgba(0, 128, 128, 1)">Delphi前台fsMDIForm和fsMDIChild窗体设计</span></h3>
<p><span style="color: rgba(0, 0, 0, 1); font-family: 隶书; font-size: 16px">  <span style="font-family: 宋体; font-size: 14px">OK,回到主界面,在对象控制面板中选中MainFrm,单击F11,在属性控制面板中设定WindowState属性设置为wsMaximized,FormStyle属性设置为fsMDIForm,后续再建立的From,FormStyle属性都设置为fsMDIChild。</span></span></p>
<p style="text-align: center"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211142731488-181329637.png" alt=""></p>
<hr>
<h3 style="text-align: left"><span style="color: rgba(0, 128, 128, 1)">dxBarManager方式通用菜单架构设计</span></h3>
<p><span style="font-family: 隶书; font-size: 16px"><span style="color: rgba(0, 1, 18, 1)">  <span style="font-family: 宋体; font-size: 14px">拖一个dxBarManager控件<img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211143215885-2087312476.png" alt=""></span></span></span><span style="font-family: 宋体; font-size: 14px"><span style="color: rgba(0, 1, 18, 1)">到主界面,命名为dxbarManagerMain,双击该控件打开Toolbars界面,New两个Toolbar分别为菜单和快捷工具条,如下图。</span></span></p>
<p style="text-align: center"><span style="font-family: 隶书; font-size: 16px"><span style="color: rgba(0, 1, 18, 1)"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211143258558-608467640.png" alt=""></span></span></p>
<ul>
<li style="text-align: left"><span style="font-family: 宋体; font-size: 14px">在控件<span style="color: rgba(255, 0, 0, 1)">Commands</span>界面新增<span style="color: rgba(255, 0, 0, 1)">Categories</span>分别为<span style="text-decoration: underline">主菜单</span>、<span style="text-decoration: underline">系统设置</span>和<span style="text-decoration: underline">窗口</span></span></li>
<li style="text-align: left"><span style="font-family: 宋体; font-size: 14px">在主菜单下建立<span style="color: rgba(255, 0, 0, 1)">dxBarSubItem</span>类型的菜单<span style="text-decoration: underline">系统设置</span>和<span style="text-decoration: underline">窗口</span></span></li>
<li style="text-align: left"><span style="font-family: 宋体; font-size: 14px">在系统设置菜单下建立<span style="color: rgba(255, 0, 0, 1)">dxBarButton</span>类型的菜单<span style="text-decoration: underline">系统权限设置</span>和<span style="text-decoration: underline">帮助</span></span></li>
<li style="text-align: left"><span style="font-family: 宋体; font-size: 14px">在窗口菜单下建立<span style="color: rgba(255, 0, 0, 1)">dxBarButton</span>类型的菜单<span style="text-decoration: underline">窗口平铺</span>、<span style="text-decoration: underline">窗口层叠</span>和<span style="text-decoration: underline">窗口垂直</span>,和<span style="color: rgba(255, 0, 0, 1)">dxBarListItem</span>类型的菜单<span style="text-decoration: underline">窗口列表</span></span></li>
</ul>
<hr>
<p>&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: rgba(255, 0, 0, 1); font-family: 宋体; font-size: 14px">&nbsp; 注意:这里的菜单类型不能选错!!!</span></p>
<p style="margin-left: 30px"><span style="color: rgba(255, 0, 0, 1); font-family: 宋体; font-size: 14px">&nbsp;注意:这里的菜单类型不能选错!!!</span></p>
<p style="margin-left: 30px"><span style="color: rgba(255, 0, 0, 1); font-family: 宋体; font-size: 14px">&nbsp;注意:这里的菜单类型不能选错!!!</span></p>
<p style="text-align: center"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211143532058-1392072355.png" alt="" width="331" height="349"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211143552036-270943490.png" alt=""><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211143603004-170964371.png" alt=""></p>
<p><span style="font-family: 隶书; font-size: 16px"> <span style="font-family: 宋体; font-size: 14px"> OK,菜单设计好之后,我们选中dxbarManagerMain控件,单击F11,设置Style为bmsFlat。然后双击打开控件,选中Toolbars中菜单,单击F11,分别设置IsMainMenu、MultiLine和OneOnRow属性为True。如下图。</span></span></p>
<p style="text-align: center"><span style="font-family: 隶书; font-size: 16px"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211145514701-48173053.png" alt=""></span></p>
<p style="text-align: left; margin-left: 30px"><span style="font-family: 宋体; font-size: 14px">OK,接下来,拖动菜单完成菜单架构设计,快捷工具条暂时不用,后续我们再介绍,请看下图。</span></p>
<p style="text-align: center; margin-left: 30px"><span style="font-family: 隶书; font-size: 16px"><img src="https://img2018.cnblogs.com/common/1335881/201912/1335881-20191211150014911-1599062750.gif" alt=""></span>&nbsp;</p>
<hr>
<h3>&nbsp;<span style="color: rgba(0, 128, 128, 1)"><span data-mce-="">主界面常见状态栏涉及与动态更新(软件版本信息、时间状态信息、登录组信息、滚动信息、当前时间...)<br></span></span></h3>
<p><span style="color: rgba(0, 0, 0, 1); font-family: 隶书; font-size: 16px"><span data-mce-=""><span data-mce-="">  <span style="font-family: 宋体; font-size: 14px">鼠标点击主界面空白处,单击右键选择 Add a Status Bar,添加一个statusBar控件,命名为statusBarMain,然后选中statusBar,右键单击New一些控件,分别设置其名称、对齐方式、Caption等。</span></span></span></span></p>
<p style="text-align: center"><span style="color: rgba(0, 0, 0, 1); font-family: 隶书; font-size: 16px"><span data-mce-=""><span data-mce-=""><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211161618669-1974705391.png" alt=""><br></span></span></span></p>
<p style="text-align: left"><span style="color: rgba(0, 0, 0, 1); font-family: 隶书; font-size: 16px"><span data-mce-=""><span data-mce-="">  <span style="font-family: 宋体; font-size: 14px">最终效果,如下:</span></span></span></span></p>
<p style="text-align: center"><sub><span style="color: rgba(0, 0, 0, 1); font-family: 隶书; font-size: 16px"><span data-mce-=""><span data-mce-=""><img src="https://img2018.cnblogs.com/common/1335881/201912/1335881-20191211161924106-1675572266.gif" alt=""></span></span></span></sub></p>
<p style="text-align: left"><sub><span style="color: rgba(0, 0, 0, 1); font-family: 隶书; font-size: 16px"><span data-mce-=""><span data-mce-="">  <span style="font-family: 宋体; font-size: 14px">OK,今天就到这里了,明天,我们继续!骚年,注意<span style="background-color: rgba(0, 255, 0, 1)">关注、收藏、推荐</span>,不要迷了路!!!</span></span></span></span></sub></p>
<p style="text-align: center"><sub><span style="color: rgba(0, 0, 0, 1); font-family: 隶书; font-size: 16px"><span data-mce-=""><span data-mce-=""><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211162404194-190744640.png" alt=""></span></span></span></sub><sub><span style="color: rgba(0, 0, 0, 1); font-family: 隶书; font-size: 16px"><span data-mce-=""><span data-mce-=""><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191211162139112-110372021.png" alt=""></span></span></span></sub></p>
<hr>
<h3 style="text-align: left"><span style="color: rgba(0, 128, 128, 1)">Delphi通用登录界面设计及主界面载入交互</span></h3>
<p style="margin-left: 30px"><span style="font-size: 14px">小伙伴我回来了,看到大家的评论,不禁老泪纵横,老兵不死,就是干(⊙﹏⊙)。。。。。。。。。。。。。</span></p>
<p style="text-align: center; margin-left: 30px"><span style="font-size: 14px"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191212124050786-616037989.png" alt=""></span>&nbsp;</p>
<p style="text-align: left; margin-left: 30px"><span style="font-size: 14px">OK,打起精神我们接着昨天的内容继续。</span></p>
<p style="text-align: left"><span style="font-size: 14px">  首先打开我们的工程,新建一个Form,命名为FrmLogin,然后开始进行前台布局,注意控件的命名一定要规范哈,我大概搞了一下登录界面,如下图。</span></p>
<p style="text-align: center"><span style="font-size: 14px"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191212124619315-1663876976.png" alt=""><br></span></p>
<p style="text-align: left; margin-left: 30px"><span style="font-size: 14px">然后,我们新建一个单元文件,命名为<span style="background-color: rgba(0, 255, 0, 1)">sysPublic.pas</span>,用来声明项目公用的函数、过程和变量,代码如下(注意,这里涉及到第三方控件:RC,cx)</span><span style="color: rgba(0, 128, 128, 1); font-size: 14px"><span style="color: rgba(0, 0, 0, 1)">。</span></span>&nbsp;</p>
<div class="cnblogs_code" style="margin-left: 30px"><img id="code_img_closed_0a9acd9f-e455-4958-b350-ca3194e0b9de" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_0a9acd9f-e455-4958-b350-ca3194e0b9de" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_0a9acd9f-e455-4958-b350-ca3194e0b9de" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">unit</span><span style="color: rgba(0, 0, 0, 1)"> SysPublic;
</span><span style="color: rgba(0, 128, 128, 1)">2</span>
<span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 255, 1)">interface</span>
<span style="color: rgba(0, 128, 128, 1)">4</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 255, 1)">uses</span>
<span style="color: rgba(0, 128, 128, 1)">6</span> <span style="color: rgba(0, 0, 0, 1)">Windows, Messages, SysUtils, Dialogs, Forms,
</span><span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 0, 0, 1)">Classes, Variants, StdCtrls, Db,
</span><span style="color: rgba(0, 128, 128, 1)">8</span> <span style="color: rgba(0, 0, 0, 1)">Controls, WinSock, ShellApi, jpeg, graphics, TypInfo,
</span><span style="color: rgba(0, 128, 128, 1)">9</span> <span style="color: rgba(0, 0, 0, 1)">ExtCtrls, ComObj, ComCtrls, IdSMTP, IdMessage,
</span><span style="color: rgba(0, 128, 128, 1)"> 10</span> <span style="color: rgba(0, 0, 0, 1)">RzChkLst, ActnList, DBCtrls, RzTreeVw, RzGroupBar, DateUtils,
</span><span style="color: rgba(0, 128, 128, 1)"> 11</span> <span style="color: rgba(0, 0, 0, 1)">StrUtils, Math, RzPanel, cxStyles, RzDBCmbo, RzDBBnEd,
</span><span style="color: rgba(0, 128, 128, 1)"> 12</span> <span style="color: rgba(0, 0, 0, 1)">cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit,
</span><span style="color: rgba(0, 128, 128, 1)"> 13</span> <span style="color: rgba(0, 0, 0, 1)">cxDBData, cxTextEdit, cxGridCustomTableView, cxGridTableView,
</span><span style="color: rgba(0, 128, 128, 1)"> 14</span> <span style="color: rgba(0, 0, 0, 1)">cxGridDBTableView, Ora, MemDS, DBAccess, cxGridLevel, cxClasses, dxBar,
</span><span style="color: rgba(0, 128, 128, 1)"> 15</span> <span style="color: rgba(0, 0, 0, 1)">cxControls, cxGridCustomView, cxGrid, cxDropDownEdit, cxGridBandedTableView, cxGridDBBandedTableView, cxGridExportLink, Clipbrd,
</span><span style="color: rgba(0, 128, 128, 1)"> 16</span> <span style="color: rgba(0, 0, 0, 1)">IdBaseComponent, IdComponent, RzDBEdit, IdHash, IdHashMessageDigest,
</span><span style="color: rgba(0, 128, 128, 1)"> 17</span> <span style="color: rgba(0, 0, 0, 1)">IdFTP, IdFTPCommon, nb30, CwMboxLib_TLB, TlHelp32, winspool, Registry,
</span><span style="color: rgba(0, 128, 128, 1)"> 18</span> <span style="color: rgba(0, 0, 0, 1)">IdIPWatch, ADODB;
</span><span style="color: rgba(0, 128, 128, 1)"> 19</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)"> 20</span>   sysMsgBuffer, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">消息缓存</span>
<span style="color: rgba(0, 128, 128, 1)"> 21</span>   sysWorkNO, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">工号</span>
<span style="color: rgba(0, 128, 128, 1)"> 22</span>   sysUserName, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">用户名称</span>
<span style="color: rgba(0, 128, 128, 1)"> 23</span>   sysGroupName, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">登录组</span>
<span style="color: rgba(0, 128, 128, 1)"> 24</span>   sysRealName, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">用户姓名</span>
<span style="color: rgba(0, 128, 128, 1)"> 25</span>   sysMac, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">MAC地址</span>
<span style="color: rgba(0, 128, 128, 1)"> 26</span>   sysIP, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">IP地址</span>
<span style="color: rgba(0, 128, 128, 1)"> 27</span>   sysDataXPath: <span style="color: rgba(0, 0, 255, 1)">string</span>; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">数据库地址</span>
<span style="color: rgba(0, 128, 128, 1)"> 28</span> <span style="color: rgba(0, 0, 255, 1)">function</span> GetMd5Str(ContenStr: <span style="color: rgba(0, 0, 255, 1)">string</span>): <span style="color: rgba(0, 0, 255, 1)">string</span>; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取Md5码</span>
<span style="color: rgba(0, 128, 128, 1)"> 29</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> OpenForm(FormClass: TFormClass; <span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> fm; AOwner: TComponent);
</span><span style="color: rgba(0, 128, 128, 1)"> 30</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> ExecSQL(sSQL: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 31</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> SetParam(V_Qry: TADOQuery; V_Param: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 32</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> Openquery(Q: TADOQuery; V_Sql: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 33</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> ComboAdd(Sender: Tstrings; SQLStr: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 34</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> ShowDxBarManagerMenu();
</span><span style="color: rgba(0, 128, 128, 1)"> 35</span>
<span style="color: rgba(0, 128, 128, 1)"> 36</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> GetIPAddress(): Variant;
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span> <span style="color: rgba(0, 0, 255, 1)">function</span> SaveToExcel(GridMain: TcxGrid; FileName: <span style="color: rgba(0, 0, 255, 1)">string</span>): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 38</span> <span style="color: rgba(0, 0, 255, 1)">function</span> GetSql(Ssql, V_Param: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">): Variant;
</span><span style="color: rgba(0, 128, 128, 1)"> 39</span> <span style="color: rgba(0, 0, 255, 1)">function</span> GetPosName(sName: <span style="color: rgba(0, 0, 255, 1)">string</span>): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 40</span>
<span style="color: rgba(0, 128, 128, 1)"> 41</span> <span style="color: rgba(0, 0, 255, 1)">implementation</span>
<span style="color: rgba(0, 128, 128, 1)"> 42</span> <span style="color: rgba(0, 0, 255, 1)">uses</span><span style="color: rgba(0, 0, 0, 1)"> uMain;
</span><span style="color: rgba(0, 128, 128, 1)"> 43</span>
<span style="color: rgba(0, 128, 128, 1)"> 44</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> OpenForm(FormClass: TFormClass; <span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> fm; AOwner: TComponent);
</span><span style="color: rgba(0, 128, 128, 1)"> 45</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">根据传递过来的参数,打开相应的窗体</span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 46</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)"> 47</span> <span style="color: rgba(0, 0, 0, 1)">i: integer;
</span><span style="color: rgba(0, 128, 128, 1)"> 48</span> <span style="color: rgba(0, 0, 0, 1)">Child: TForm;
</span><span style="color: rgba(0, 128, 128, 1)"> 49</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 50</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> i := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> Screen.FormCount - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)"> 51</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> Screen.Forms.ClassType = FormClass <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)"> 52</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 53</span>             <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">检查窗体是否已经打开,如果没有打开,打开它,
</span><span style="color: rgba(0, 128, 128, 1)"> 54</span> <span style="color: rgba(0, 128, 0, 1)">            如果已经打开,让它正常显示即可</span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 55</span>       Child :=<span style="color: rgba(0, 0, 0, 1)"> Screen.Forms;
</span><span style="color: rgba(0, 128, 128, 1)"> 56</span>       <span style="color: rgba(0, 0, 255, 1)">if</span> Child.WindowState = wsMinimized <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)"> 57</span> <span style="color: rgba(0, 0, 0, 1)">      ShowWindow(Child.handle, SW_SHOWNORMAL)
</span><span style="color: rgba(0, 128, 128, 1)"> 58</span>       <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)"> 59</span> <span style="color: rgba(0, 0, 0, 1)">      ShowWindow(Child.handle, SW_SHOWNA);
</span><span style="color: rgba(0, 128, 128, 1)"> 60</span>       <span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">not</span> Child.Visible) <span style="color: rgba(0, 0, 255, 1)">then</span> Child.Visible :=<span style="color: rgba(0, 0, 0, 1)"> True;
</span><span style="color: rgba(0, 128, 128, 1)"> 61</span> <span style="color: rgba(0, 0, 0, 1)">      Child.BringToFront;
</span><span style="color: rgba(0, 128, 128, 1)"> 62</span> <span style="color: rgba(0, 0, 0, 1)">      Child.Setfocus;
</span><span style="color: rgba(0, 128, 128, 1)"> 63</span>       TForm(fm) :=<span style="color: rgba(0, 0, 0, 1)"> Child;
</span><span style="color: rgba(0, 128, 128, 1)"> 64</span> <span style="color: rgba(0, 0, 0, 1)">      exit;
</span><span style="color: rgba(0, 128, 128, 1)"> 65</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 66</span>   Child :=<span style="color: rgba(0, 0, 0, 1)"> TForm(FormClass.NewInstance);
</span><span style="color: rgba(0, 128, 128, 1)"> 67</span>   TForm(fm) :=<span style="color: rgba(0, 0, 0, 1)"> Child;
</span><span style="color: rgba(0, 128, 128, 1)"> 68</span>   Child.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">(AOwner);
</span><span style="color: rgba(0, 128, 128, 1)"> 69</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 70</span>
<span style="color: rgba(0, 128, 128, 1)"> 71</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> SetParam(V_Qry: TADOQuery; V_Param: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 72</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)"> 73</span> <span style="color: rgba(0, 0, 0, 1)">i: Integer;
</span><span style="color: rgba(0, 128, 128, 1)"> 74</span> <span style="color: rgba(0, 0, 0, 1)">S: tstringlist;
</span><span style="color: rgba(0, 128, 128, 1)"> 75</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 76</span>   s := tstringlist.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 77</span> <span style="color: rgba(0, 0, 0, 1)">s.Clear;
</span><span style="color: rgba(0, 128, 128, 1)"> 78</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> v_Param &lt;&gt; <span style="color: rgba(128, 0, 0, 1)">''</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)"> 79</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 80</span>   s.Text := stringreplace(v_Param, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">[;]</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"></span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, );
</span><span style="color: rgba(0, 128, 128, 1)"> 81</span>   s.Text := stringreplace(s.Text, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">;</span><span style="color: rgba(128, 0, 0, 1)">'</span>, #<span style="color: rgba(128, 0, 128, 1)">13</span> + #<span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">, );
</span><span style="color: rgba(0, 128, 128, 1)"> 82</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> S.Count &gt; V_Qry.Fields.Count <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)"> 83</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 84</span>       ShowMessage(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">参数个数超过要求:</span><span style="color: rgba(128, 0, 0, 1)">'</span> + V_Param + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">[</span><span style="color: rgba(128, 0, 0, 1)">'</span> + V_Qry.SQL.Text + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">]</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 85</span> <span style="color: rgba(0, 0, 0, 1)">      Abort;
</span><span style="color: rgba(0, 128, 128, 1)"> 86</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 87</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> i := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> s.Count - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)"> 88</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 89</span>       <span style="color: rgba(0, 0, 255, 1)">if</span> (V_Qry.FieldDefList.Name = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">RQ1</span><span style="color: rgba(128, 0, 0, 1)">'</span>) <span style="color: rgba(0, 0, 255, 1)">or</span> (V_Qry.FieldDefList.Name = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">RQ2</span><span style="color: rgba(128, 0, 0, 1)">'</span>) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)"> 90</span>       <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 91</span>         V_Qry.FieldDefList.Name :=<span style="color: rgba(0, 0, 0, 1)"> s;
</span><span style="color: rgba(0, 128, 128, 1)"> 92</span>       <span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 128, 128, 1)"> 93</span>       <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)"> 94</span>       <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 95</span>         V_Qry.FieldDefList.Name := stringreplace(s, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"></span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">;</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, );
</span><span style="color: rgba(0, 128, 128, 1)"> 96</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 97</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 98</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 99</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">100</span>
<span style="color: rgba(0, 128, 128, 1)">101</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> OpenQuery(Q: TADOQuery; V_Sql: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">102</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">103</span> <span style="color: rgba(0, 0, 0, 1)">Q.Close;
</span><span style="color: rgba(0, 128, 128, 1)">104</span>   Q.SQL.Text :=<span style="color: rgba(0, 0, 0, 1)"> V_Sql;
</span><span style="color: rgba(0, 128, 128, 1)">105</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">106</span>
<span style="color: rgba(0, 128, 128, 1)">107</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> ComboAdd(Sender: Tstrings; SQLStr: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">108</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">109</span> <span style="color: rgba(0, 0, 0, 1)">i, r: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">110</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">111</span>   <span style="color: rgba(0, 0, 255, 1)">with</span> MainFrm.qryTmp <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">112</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">113</span> <span style="color: rgba(0, 0, 0, 1)">    Close;
</span><span style="color: rgba(0, 128, 128, 1)">114</span> <span style="color: rgba(0, 0, 0, 1)">    SQL.Clear;
</span><span style="color: rgba(0, 128, 128, 1)">115</span> <span style="color: rgba(0, 0, 0, 1)">    SQL.Add(SQLStr);
</span><span style="color: rgba(0, 128, 128, 1)">116</span> <span style="color: rgba(0, 0, 0, 1)">    Open;
</span><span style="color: rgba(0, 128, 128, 1)">117</span> <span style="color: rgba(0, 0, 0, 1)">    First;
</span><span style="color: rgba(0, 128, 128, 1)">118</span>   R :=<span style="color: rgba(0, 0, 0, 1)"> RecordCount;
</span><span style="color: rgba(0, 128, 128, 1)">119</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> i := <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">to</span> r <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">120</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">121</span>       Sender.Add(Fields[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">].AsString);
</span><span style="color: rgba(0, 128, 128, 1)">122</span> <span style="color: rgba(0, 0, 0, 1)">      Next;
</span><span style="color: rgba(0, 128, 128, 1)">123</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">124</span> <span style="color: rgba(0, 0, 0, 1)">    Close;
</span><span style="color: rgba(0, 128, 128, 1)">125</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">126</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">127</span>
<span style="color: rgba(0, 128, 128, 1)">128</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> ExecSQL(sSQL: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">129</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">130</span> <span style="color: rgba(0, 0, 0, 1)">MainFrm.qryTmp.Close;
</span><span style="color: rgba(0, 128, 128, 1)">131</span>   MainFrm.qryTmp.SQL.Text :=<span style="color: rgba(0, 0, 0, 1)"> sSQL;
</span><span style="color: rgba(0, 128, 128, 1)">132</span> <span style="color: rgba(0, 0, 0, 1)">MainFrm.qryTmp.ExecSQL;
</span><span style="color: rgba(0, 128, 128, 1)">133</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">134</span>
<span style="color: rgba(0, 128, 128, 1)">135</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> GetIPAddress(): Variant;
</span><span style="color: rgba(0, 128, 128, 1)">136</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">137</span> <span style="color: rgba(0, 0, 0, 1)">IPAddress: TIdIPWatch;
</span><span style="color: rgba(0, 128, 128, 1)">138</span>   IPAdd_Buff: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">139</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">140</span>   IPAddress := TIdIPWatch.<span style="color: rgba(0, 0, 255, 1)">Create</span>(<span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">141</span>   IPAdd_Buff :=<span style="color: rgba(0, 0, 0, 1)"> IPAddress.LocalIP;
</span><span style="color: rgba(0, 128, 128, 1)">142</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> IPAdd_Buff &lt;&gt; <span style="color: rgba(128, 0, 0, 1)">''</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">143</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">144</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> IPAdd_Buff;
</span><span style="color: rgba(0, 128, 128, 1)">145</span>   <span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 128, 128, 1)">146</span>   <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">147</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">148</span>   Result := <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">149</span>   ShowMessage(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">获取IP地址错误,请确认!</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">150</span> <span style="color: rgba(0, 0, 0, 1)">    Abort;
</span><span style="color: rgba(0, 128, 128, 1)">151</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">152</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">153</span>
<span style="color: rgba(0, 128, 128, 1)">154</span> <span style="color: rgba(0, 0, 255, 1)">function</span> SaveToExcel(GridMain: TcxGrid; FileName: <span style="color: rgba(0, 0, 255, 1)">string</span>): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">155</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">156</span> <span style="color: rgba(0, 0, 0, 1)">SaveFileDialog: TSaveDialog;
</span><span style="color: rgba(0, 128, 128, 1)">157</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">158</span>   SaveFileDialog := TSaveDialog.<span style="color: rgba(0, 0, 255, 1)">Create</span>(<span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">159</span>   SaveFileDialog.FileName :=<span style="color: rgba(0, 0, 0, 1)"> FileName;
</span><span style="color: rgba(0, 128, 128, 1)">160</span>   SaveFileDialog.Filter := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">*.xls</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">161</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> SaveFileDialog.Execute <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">162</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">163</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> pos(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">.XLS</span><span style="color: rgba(128, 0, 0, 1)">'</span>, UpperCase(SaveFileDialog.FileName)) &lt;= <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">164</span>       SaveFileDialog.FileName := SaveFileDialog.FileName + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">.XLS</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">165</span> <span style="color: rgba(0, 0, 0, 1)">    ExportGridToExcel(SaveFileDialog.FileName, gridMain);
</span><span style="color: rgba(0, 128, 128, 1)">166</span>   ShowMessage(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">数据已成功导出到您指定的目录中</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">167</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">168</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> SaveFileDialog.FileName;
</span><span style="color: rgba(0, 128, 128, 1)">169</span> <span style="color: rgba(0, 0, 0, 1)">SaveFileDialog.Free;
</span><span style="color: rgba(0, 128, 128, 1)">170</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">171</span>
<span style="color: rgba(0, 128, 128, 1)">172</span> <span style="color: rgba(0, 0, 255, 1)">function</span> GetSql(Ssql, V_Param: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">): Variant;
</span><span style="color: rgba(0, 128, 128, 1)">173</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">174</span> <span style="color: rgba(0, 0, 0, 1)">S: Tstringlist;
</span><span style="color: rgba(0, 128, 128, 1)">175</span> <span style="color: rgba(0, 0, 0, 1)">I: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">176</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">177</span>   S := Tstringlist.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">178</span> <span style="color: rgba(0, 0, 0, 1)">S.Clear;
</span><span style="color: rgba(0, 128, 128, 1)">179</span> <span style="color: rgba(0, 0, 0, 1)">OpenQuery(MainFrm.qryTmp, Ssql);
</span><span style="color: rgba(0, 128, 128, 1)">180</span> <span style="color: rgba(0, 0, 0, 1)">SetParam(MainFrm.qryTmp, V_Param);
</span><span style="color: rgba(0, 128, 128, 1)">181</span> <span style="color: rgba(0, 0, 0, 1)">MainFrm.qryTmp.Open;
</span><span style="color: rgba(0, 128, 128, 1)">182</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> MainFrm.qryTmp.IsEmpty <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">183</span>   Result := <span style="color: rgba(128, 0, 0, 1)">''</span>
<span style="color: rgba(0, 128, 128, 1)">184</span>   <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">185</span>   Result := MainFrm.qryTmp.Fields[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">].Value;
</span><span style="color: rgba(0, 128, 128, 1)">186</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> VarIsNull(result) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">187</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">188</span>   result := <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">189</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">190</span> <span style="color: rgba(0, 0, 0, 1)">MainFrm.qryTmp.Close;
</span><span style="color: rgba(0, 128, 128, 1)">191</span> <span style="color: rgba(0, 0, 0, 1)">MainFrm.qryTmp.Free;
</span><span style="color: rgba(0, 128, 128, 1)">192</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">193</span>
<span style="color: rgba(0, 128, 128, 1)">194</span> <span style="color: rgba(0, 0, 255, 1)">function</span> GetPosName(sName: <span style="color: rgba(0, 0, 255, 1)">string</span>): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">195</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">196</span>   s: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">197</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">198</span>   s :=<span style="color: rgba(0, 0, 0, 1)"> Trim(sName);
</span><span style="color: rgba(0, 128, 128, 1)">199</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> pos(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">(</span><span style="color: rgba(128, 0, 0, 1)">'</span>, s) &gt; <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">200</span>   s := copy(s, <span style="color: rgba(128, 0, 128, 1)">0</span>, pos(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">(</span><span style="color: rgba(128, 0, 0, 1)">'</span>, s) - <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">201</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> s;
</span><span style="color: rgba(0, 128, 128, 1)">202</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">203</span>
<span style="color: rgba(0, 128, 128, 1)">204</span>
<span style="color: rgba(0, 128, 128, 1)">205</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取MD5码</span>
<span style="color: rgba(0, 128, 128, 1)">206</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">ContenStr:原码,返回MD5码</span>
<span style="color: rgba(0, 128, 128, 1)">207</span>
<span style="color: rgba(0, 128, 128, 1)">208</span> <span style="color: rgba(0, 0, 255, 1)">function</span> GetMd5Str(ContenStr: <span style="color: rgba(0, 0, 255, 1)">string</span>): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">209</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">210</span> <span style="color: rgba(0, 0, 0, 1)">RegMd5: TIdHashMessageDigest5;
</span><span style="color: rgba(0, 128, 128, 1)">211</span> <span style="color: rgba(0, 0, 0, 1)">RegDigest: T4x4LongWordRecord;
</span><span style="color: rgba(0, 128, 128, 1)">212</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">213</span>   RegMd5 := TIdHashMessageDigest5.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">214</span>   RegDigest :=<span style="color: rgba(0, 0, 0, 1)"> RegMd5.HashValue(ContenStr);
</span><span style="color: rgba(0, 128, 128, 1)">215</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> LowerCase(RegMd5.AsHex(RegDigest));
</span><span style="color: rgba(0, 128, 128, 1)">216</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">217</span>
<span style="color: rgba(0, 128, 128, 1)">218</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">刷线主界面菜单权限</span>
<span style="color: rgba(0, 128, 128, 1)">219</span>
<span style="color: rgba(0, 128, 128, 1)">220</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> ShowDxBarManagerMenu();
</span><span style="color: rgba(0, 128, 128, 1)">221</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">222</span> <span style="color: rgba(0, 0, 0, 1)">dxBar: TdxBarManager;
</span><span style="color: rgba(0, 128, 128, 1)">223</span> <span style="color: rgba(0, 0, 0, 1)">i, l, lIndex: integer;
</span><span style="color: rgba(0, 128, 128, 1)">224</span>   sCap, sSql, m_menu_group, m_menu: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">225</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">226</span>   <span style="color: rgba(0, 0, 255, 1)">with</span> MainFrm.qryTmp <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">227</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">228</span> <span style="color: rgba(0, 0, 0, 1)">    Close;
</span><span style="color: rgba(0, 128, 128, 1)">229</span> <span style="color: rgba(0, 0, 0, 1)">    SQL.Clear;
</span><span style="color: rgba(0, 128, 128, 1)">230</span>   SQL.Text := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">select a.GroupName, b.MenuName, a.UserName from sysUser a, sysUserAuthority b where a.GroupName = b.GroupName and a.UserName=:UserName and b.SystemName=:SystemName</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">231</span>   Parameters.ParamByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">UserName</span><span style="color: rgba(128, 0, 0, 1)">'</span>).Value :=<span style="color: rgba(0, 0, 0, 1)"> sysUserName;
</span><span style="color: rgba(0, 128, 128, 1)">232</span>   Parameters.ParamByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">SystemName</span><span style="color: rgba(128, 0, 0, 1)">'</span>).Value := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">CMS</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">233</span>
<span style="color: rgba(0, 128, 128, 1)">234</span> <span style="color: rgba(0, 0, 0, 1)">    Open;
</span><span style="color: rgba(0, 128, 128, 1)">235</span>   dxBar :=<span style="color: rgba(0, 0, 0, 1)"> MainFrm.dxBarManagerMain;
</span><span style="color: rgba(0, 128, 128, 1)">236</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> i := <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">to</span> dxBar.Categories.Count - <span style="color: rgba(128, 0, 128, 1)">2</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">237</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">238</span>       m_menu_group :=<span style="color: rgba(0, 0, 0, 1)"> dxBar.Categories.Strings;
</span><span style="color: rgba(0, 128, 128, 1)">239</span>       <span style="color: rgba(0, 0, 255, 1)">for</span> l := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> dxBar.ItemCount - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">240</span>       <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">241</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> dxBar.Items <span style="color: rgba(0, 0, 255, 1)">is</span> TdxBarButton <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">242</span>         <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">243</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> dxBar.Items.Category = i <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">244</span>         <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">245</span>             sCap :=<span style="color: rgba(0, 0, 0, 1)"> dxBar.Items.Caption;
</span><span style="color: rgba(0, 128, 128, 1)">246</span>             lIndex :=<span style="color: rgba(0, 0, 0, 1)"> dxBar.Items.Index;
</span><span style="color: rgba(0, 128, 128, 1)">247</span>             m_menu :=<span style="color: rgba(0, 0, 0, 1)"> sCap;
</span><span style="color: rgba(0, 128, 128, 1)">248</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> Locate(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">MenuName</span><span style="color: rgba(128, 0, 0, 1)">'</span>, sCap, []) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">249</span>               dxBar.Items.Enabled :=<span style="color: rgba(0, 0, 0, 1)"> true
</span><span style="color: rgba(0, 128, 128, 1)">250</span>             <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">251</span>               dxBar.Items.Enabled :=<span style="color: rgba(0, 0, 0, 1)"> false;
</span><span style="color: rgba(0, 128, 128, 1)">252</span>         <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">253</span>         <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">254</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">255</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">256</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">257</span>
<span style="color: rgba(0, 128, 128, 1)">258</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">259</span>
<span style="color: rgba(0, 128, 128, 1)">260</span> <span style="color: rgba(0, 0, 255, 1)">end</span>.</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p style="text-align: left; margin-left: 30px">&nbsp;<span style="color: rgba(0, 128, 128, 1); font-size: 14px"><span style="color: rgba(0, 0, 0, 1)">好,我们在主窗体OnShow事件中(连接Access数据库下面),写如下代码,功能是:主窗体Show之前,登录窗体先弹出来。</span></span><span style="color: rgba(0, 128, 128, 1); font-size: 14px"><span style="color: rgba(0, 0, 0, 1)">  </span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 系统登录</span>
<span style="color: rgba(0, 128, 128, 1)">2</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(0, 0, 255, 1)">not</span> assigned(FrmLogin) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">3</span>   FrmLogin :=<span style="color: rgba(0, 0, 0, 1)"> TFrmLogin.create(Application);
</span><span style="color: rgba(0, 128, 128, 1)">4</span>   FrmLogin.ShowModal;</pre>
</div>
<p>  然后,开始写登录事件,同时,更新主界面菜单权限和状态栏信息。  </p>
<div class="cnblogs_code" style="margin-left: 30px"><img id="code_img_closed_09e751c9-ec2e-478f-851c-8c093990ea78" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_09e751c9-ec2e-478f-851c-8c093990ea78" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_09e751c9-ec2e-478f-851c-8c093990ea78" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span>    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 检查录入完整性</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (Trim(edtUserName.Text) = <span style="color: rgba(128, 0, 0, 1)">''</span>) <span style="color: rgba(0, 0, 255, 1)">or</span> (Trim(edtPassCode.Text) = <span style="color: rgba(128, 0, 0, 1)">''</span>) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span>   MessageDlg(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">用户名或者密码不能为空,请确认!</span><span style="color: rgba(128, 0, 0, 1)">'</span>, mtWarning, , <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">    edtUserName.SetFocus;
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">    Abort;
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 开始登录</span>
<span style="color: rgba(0, 128, 128, 1)">10</span>   <span style="color: rgba(0, 0, 255, 1)">with</span> qryLogin <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">11</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">    Close;
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">    SQL.Clear;
</span><span style="color: rgba(0, 128, 128, 1)">14</span>   SQL.Text := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">select * from sysUser t where UserName=:UserName and PassCode =:PassCode</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">15</span>   Parameters.ParamByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">UserName</span><span style="color: rgba(128, 0, 0, 1)">'</span>).Value :=<span style="color: rgba(0, 0, 0, 1)"> Trim(edtUserName.Text);
</span><span style="color: rgba(0, 128, 128, 1)">16</span>   Parameters.ParamByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">PassCode</span><span style="color: rgba(128, 0, 0, 1)">'</span>).Value :=<span style="color: rgba(0, 0, 0, 1)"> GetMd5Str(Trim(edtPassCode.Text));
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 0, 1)">    Open;
</span><span style="color: rgba(0, 128, 128, 1)">18</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> FindFirst <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">19</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">20</span>       sysUserName := FieldByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">UserName</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).AsString;
</span><span style="color: rgba(0, 128, 128, 1)">21</span>       sysGroupName := FieldByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">GroupName</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).AsString; ;
</span><span style="color: rgba(0, 128, 128, 1)">22</span>       sysWorkNO := FieldByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">WorkNO</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).AsString; ;
</span><span style="color: rgba(0, 128, 128, 1)">23</span>       sysRealName := FieldByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">RealName</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).AsString;
</span><span style="color: rgba(0, 128, 128, 1)">24</span>      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 刷新菜单权限</span>
<span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">      ShowDxBarManagerMenu();
</span><span style="color: rgba(0, 128, 128, 1)">26</span>       <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 更新状态栏信息</span>
<span style="color: rgba(0, 128, 128, 1)">27</span>       MainFrm.statusPaneUser.Caption := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">登录用户[</span><span style="color: rgba(128, 0, 0, 1)">'</span> + sysUserName + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">] 登陆组[</span><span style="color: rgba(128, 0, 0, 1)">'</span> + sysGroupName + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">]</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">28</span>       FrmLogin.Tag := <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)">      FrmLogin.Close;
</span><span style="color: rgba(0, 128, 128, 1)">30</span>   <span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 128, 128, 1)">31</span>   <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">32</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">33</span>       MessageDlg(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">用户名或者密码不正确,请确认!</span><span style="color: rgba(128, 0, 0, 1)">'</span>, mtWarning, , <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 0, 1)">      edtUserName.SetFocus;
</span><span style="color: rgba(0, 128, 128, 1)">35</span> <span style="color: rgba(0, 0, 0, 1)">      Abort;
</span><span style="color: rgba(0, 128, 128, 1)">36</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">37</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">38</span>
<span style="color: rgba(0, 128, 128, 1)">39</span> <span style="color: rgba(0, 0, 255, 1)">end</span>;</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>&nbsp;  我们这里用<span style="font-family: 微软雅黑; font-size: small">FrmLogin.Tag作为标记登录成功与否的标记,默认情况下设置为0,密码验证通过时,tag赋值为1,然后在FrmLogin的Close事件中判断其是否为1,否则直接终止程序。</span><span style="font-family: 微软雅黑; font-size: small">  </span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> TFrmLogin.FormClose(Sender: TObject; <span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> Action: TCloseAction);
</span><span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">3</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> FrmLogin.Tag &lt;&gt; <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 0, 0, 1)">    Application.Terminate;
</span><span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 255, 1)">end</span>;</pre>
</div>
<p style="text-align: left">  OK,看下现在的效果。  <img src="https://img2018.cnblogs.com/common/1335881/201912/1335881-20191212131702004-166977520.gif" alt=""></p>
<p>&nbsp;  <span style="font-family: 微软雅黑; font-size: small">注意,我这里手工在Access数据库中增加了一个用户admin,分组为<span style="text-decoration: underline"><span style="background-color: rgba(0, 255, 0, 1)">查询组</span></span>,其菜单权限相比于<span style="text-decoration: underline"><span style="background-color: rgba(0, 255, 0, 1)">管理组</span></span>,少了一个<span style="text-decoration: underline; background-color: rgba(153, 204, 0, 1)">帮助</span>的菜单。那小伙伴该问了,后续所有的权限都要在Access里面改??当然不是了,下面我们会继续讲解权限的管理。</span></p>
<p style="text-align: center"><span style="font-family: 微软雅黑; font-size: small"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191212132254450-218898054.png" alt=""></span>    </p>
<hr>
<p><span style="font-size: 15px"><strong><span style="color: rgba(0, 128, 128, 1)">MD5方式验证和保存密码</span></strong></span>  </p>
<p>  这里相信你在上面登录相关代码中已经看到了,MD5转换就是一个函数搞定的事。保存密码也是一样,直接调用MD5转换函数进行转化,然后再保存到数据库即可。 </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取MD5码</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)">ContenStr:原码,返回MD5码</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)">需要引用 IdHash, IdHashMessageDigest单元</span>
<span style="color: rgba(0, 0, 255, 1)">function</span> GetMd5Str(ContenStr: <span style="color: rgba(0, 0, 255, 1)">string</span>): <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)">
RegMd5: TIdHashMessageDigest5;
RegDigest: T4x4LongWordRecord;
</span><span style="color: rgba(0, 0, 255, 1)">begin</span><span style="color: rgba(0, 0, 0, 1)">
RegMd5 :</span>= TIdHashMessageDigest5.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">;
RegDigest :</span>=<span style="color: rgba(0, 0, 0, 1)"> RegMd5.HashValue(ContenStr);
Result :</span>=<span style="color: rgba(0, 0, 0, 1)"> LowerCase(RegMd5.AsHex(RegDigest));
</span><span style="color: rgba(0, 0, 255, 1)">end</span>;</pre>
</div>
<p>&nbsp;</p>
<hr>
<h3>&nbsp;<span style="color: rgba(0, 128, 128, 1)">动态窗体菜单列表(打开窗体事件、销毁窗体事件)</span></h3>
<p><span style="font-family: 微软雅黑; font-size: small">  首先,根据实际情况,一般除主窗体之外的所有窗体的FormStyle属性都要设置成fsMDIChild,然后在Project-Options中将子窗体移到右边。如下图。</span></p>
<p style="text-align: center"><span style="font-family: 微软雅黑; font-size: small"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191212151124967-1889137987.png" alt=""></span></p>
<p style="text-align: left"><span style="font-family: 微软雅黑; font-size: small">  另外,分别在子</span>窗体的Create、Close和<span style="font-family: 微软雅黑; font-size: small">Destroy</span>写如下事件(注意主<span style="color: rgba(0, 0, 0, 1); text-decoration: underline; background-color: rgba(51, 204, 204, 1)">界面窗体</span>列表菜单的名称为dxBarListWindows): </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmMDIChildTest.FormClose(Sender: TObject;
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   <span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> Action: TCloseAction);
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">窗口关闭时,从内存中移除窗口</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span>   Action :=<span style="color: rgba(0, 0, 0, 1)"> caFree;
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>   FrmMDIChildTest := <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmMDIChildTest.FormCreate(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">11</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">窗口创建时,在窗口菜单中加入窗口的菜单</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">MainFrm.dxBarListWindows.Items.AddObject(Caption, Self);
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">14</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmMDIChildTest.FormDestroy(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">17</span>    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">窗口关闭时,在窗口菜单中移除窗口的菜单</span>
<span style="color: rgba(0, 128, 128, 1)">18</span>   <span style="color: rgba(0, 0, 255, 1)">with</span> MainFrm.dxBarListWindows.Items <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">    Delete(IndexOfObject(Self));
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 255, 1)">end</span>;</pre>
</div>
<p>&nbsp;  <span style="color: rgba(0, 0, 0, 1)">主界面<span style="text-decoration: underline; background-color: rgba(153, 204, 0, 1)">窗口列表</span>菜单下(name:<span style="font-family: 微软雅黑; font-size: small">dxBarListWindows</span>),需要再增加如下事件用来激活窗体列表:</span></p>
<p style="text-align: center; margin-left: 30px"><span style="color: rgba(0, 0, 0, 1)"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191212151909700-1920346634.png" alt=""><br></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TMainFrm.dxBarListWindowsClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span>    <span style="color: rgba(0, 0, 255, 1)">with</span> dxBarListWindows <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">      TCustomForm(Items.Objects).Show;
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TMainFrm.dxBarListWindowsGetData(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>    <span style="color: rgba(0, 0, 255, 1)">with</span> dxBarListWindows <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">10</span>         ItemIndex :=<span style="color: rgba(0, 0, 0, 1)"> Items.IndexOfObject(ActiveMDIChild);
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 255, 1)">end</span>;</pre>
</div>
<p>&nbsp;  好的,我们再<span style="color: rgba(0, 0, 0, 1)">看下效果,可以完成窗体列表中相关菜单的添加、激活和销毁:</span></p>
<p style="text-align: center; margin-left: 30px"><span style="color: rgba(0, 0, 0, 1)"><img src="https://img2018.cnblogs.com/common/1335881/201912/1335881-20191212152136744-1254596305.gif" alt=""></span></p>
<hr>
<p style="text-align: left"><strong><span style="font-size: 16px">&nbsp;<span style="color: rgba(0, 128, 128, 1)">RzCheckTree方式设计常见用户权限</span></span></strong></p>
<p style="margin-left: 30px"><span style="color: rgba(0, 0, 0, 1)">这里主要用到checkTree和数据的增删改查。</span></p>
<p style="margin-left: 30px"><span style="color: rgba(0, 1, 18, 1)">源码如下:</span>&nbsp;</p>
<div class="cnblogs_code"><img id="code_img_closed_2137018a-7dbf-42df-898f-cc15e40deec1" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_2137018a-7dbf-42df-898f-cc15e40deec1" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_2137018a-7dbf-42df-898f-cc15e40deec1" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">unit</span><span style="color: rgba(0, 0, 0, 1)"> uUserSet;
</span><span style="color: rgba(0, 128, 128, 1)">2</span>
<span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 255, 1)">interface</span>
<span style="color: rgba(0, 128, 128, 1)">4</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 255, 1)">uses</span>
<span style="color: rgba(0, 128, 128, 1)">6</span> <span style="color: rgba(0, 0, 0, 1)">Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
</span><span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 0, 0, 1)">Dialogs, sCalculator, cxStyles, cxCustomData, cxGraphics, cxFilter,
</span><span style="color: rgba(0, 128, 128, 1)">8</span> <span style="color: rgba(0, 0, 0, 1)">cxData, cxDataStorage, cxEdit, DB, cxDBData, cxTextEdit, cxDropDownEdit,
</span><span style="color: rgba(0, 128, 128, 1)">9</span> <span style="color: rgba(0, 0, 0, 1)">ADODB, Ora, ComCtrls, RzTreeVw, StdCtrls, RzCmboBx, RzLabel, cxGridLevel,
</span><span style="color: rgba(0, 128, 128, 1)"> 10</span> <span style="color: rgba(0, 0, 0, 1)">cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses,
</span><span style="color: rgba(0, 128, 128, 1)"> 11</span> <span style="color: rgba(0, 0, 0, 1)">cxControls, cxGridCustomView, cxGrid, Mask, RzEdit, RzRadChk, RzButton,
</span><span style="color: rgba(0, 128, 128, 1)"> 12</span> <span style="color: rgba(0, 0, 0, 1)">ExtCtrls, RzPanel, RzTabs, cxCalendar, cxCheckBox, dxBar;
</span><span style="color: rgba(0, 128, 128, 1)"> 13</span>
<span style="color: rgba(0, 128, 128, 1)"> 14</span> <span style="color: rgba(0, 0, 255, 1)">type</span>
<span style="color: rgba(0, 128, 128, 1)"> 15</span>   TFrmUserSet = <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">(TForm)
</span><span style="color: rgba(0, 128, 128, 1)"> 16</span> <span style="color: rgba(0, 0, 0, 1)">    pageControlMain: TRzPageControl;
</span><span style="color: rgba(0, 128, 128, 1)"> 17</span> <span style="color: rgba(0, 0, 0, 1)">    tabSheetUserSet: TRzTabSheet;
</span><span style="color: rgba(0, 128, 128, 1)"> 18</span> <span style="color: rgba(0, 0, 0, 1)">    groupBoxParams: TRzGroupBox;
</span><span style="color: rgba(0, 128, 128, 1)"> 19</span> <span style="color: rgba(0, 0, 0, 1)">    btnRefresh: TRzBitBtn;
</span><span style="color: rgba(0, 128, 128, 1)"> 20</span> <span style="color: rgba(0, 0, 0, 1)">    btnAdd: TRzBitBtn;
</span><span style="color: rgba(0, 128, 128, 1)"> 21</span> <span style="color: rgba(0, 0, 0, 1)">    btnSave: TRzBitBtn;
</span><span style="color: rgba(0, 128, 128, 1)"> 22</span> <span style="color: rgba(0, 0, 0, 1)">    btnDelete: TRzBitBtn;
</span><span style="color: rgba(0, 128, 128, 1)"> 23</span> <span style="color: rgba(0, 0, 0, 1)">    checkBoxUserName: TRzCheckBox;
</span><span style="color: rgba(0, 128, 128, 1)"> 24</span> <span style="color: rgba(0, 0, 0, 1)">    edtUserName: TRzEdit;
</span><span style="color: rgba(0, 128, 128, 1)"> 25</span> <span style="color: rgba(0, 0, 0, 1)">    btnDodify: TRzBitBtn;
</span><span style="color: rgba(0, 128, 128, 1)"> 26</span> <span style="color: rgba(0, 0, 0, 1)">    cxGridMain: TcxGrid;
</span><span style="color: rgba(0, 128, 128, 1)"> 27</span> <span style="color: rgba(0, 0, 0, 1)">    cxGridMainDBTableView1: TcxGridDBTableView;
</span><span style="color: rgba(0, 128, 128, 1)"> 28</span> <span style="color: rgba(0, 0, 0, 1)">    cxGridMainLevel1: TcxGridLevel;
</span><span style="color: rgba(0, 128, 128, 1)"> 29</span> <span style="color: rgba(0, 0, 0, 1)">    tabSheetAuthSet: TRzTabSheet;
</span><span style="color: rgba(0, 128, 128, 1)"> 30</span> <span style="color: rgba(0, 0, 0, 1)">    groupBoxParamsA: TRzGroupBox;
</span><span style="color: rgba(0, 128, 128, 1)"> 31</span> <span style="color: rgba(0, 0, 0, 1)">    labGroupName: TRzLabel;
</span><span style="color: rgba(0, 128, 128, 1)"> 32</span> <span style="color: rgba(0, 0, 0, 1)">    lblNewGroupName: TRzLabel;
</span><span style="color: rgba(0, 128, 128, 1)"> 33</span> <span style="color: rgba(0, 0, 0, 1)">    cbbGroupName: TRzComboBox;
</span><span style="color: rgba(0, 128, 128, 1)"> 34</span> <span style="color: rgba(0, 0, 0, 1)">    btnSaveA: TRzBitBtn;
</span><span style="color: rgba(0, 128, 128, 1)"> 35</span> <span style="color: rgba(0, 0, 0, 1)">    btnDeleteA: TRzBitBtn;
</span><span style="color: rgba(0, 128, 128, 1)"> 36</span> <span style="color: rgba(0, 0, 0, 1)">    edtNewGroupName: TRzEdit;
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span> <span style="color: rgba(0, 0, 0, 1)">    btnAddA: TRzBitBtn;
</span><span style="color: rgba(0, 128, 128, 1)"> 38</span> <span style="color: rgba(0, 0, 0, 1)">    checkTreeMain: TRzCheckTree;
</span><span style="color: rgba(0, 128, 128, 1)"> 39</span> <span style="color: rgba(0, 0, 0, 1)">    qryTmp: TADOQuery;
</span><span style="color: rgba(0, 128, 128, 1)"> 40</span> <span style="color: rgba(0, 0, 0, 1)">    qryUser: TADOQuery;
</span><span style="color: rgba(0, 128, 128, 1)"> 41</span> <span style="color: rgba(0, 0, 0, 1)">    dsUser: TDataSource;
</span><span style="color: rgba(0, 128, 128, 1)"> 42</span> <span style="color: rgba(0, 0, 0, 1)">    qryUserAuthority: TADOQuery;
</span><span style="color: rgba(0, 128, 128, 1)"> 43</span> <span style="color: rgba(0, 0, 0, 1)">    cxGridMainDBTableView1Column1: TcxGridDBColumn;
</span><span style="color: rgba(0, 128, 128, 1)"> 44</span> <span style="color: rgba(0, 0, 0, 1)">    cxGridMainDBTableView1Column2: TcxGridDBColumn;
</span><span style="color: rgba(0, 128, 128, 1)"> 45</span> <span style="color: rgba(0, 0, 0, 1)">    cxGridMainDBTableView1Column3: TcxGridDBColumn;
</span><span style="color: rgba(0, 128, 128, 1)"> 46</span> <span style="color: rgba(0, 0, 0, 1)">    cxGridMainDBTableView1Column4: TcxGridDBColumn;
</span><span style="color: rgba(0, 128, 128, 1)"> 47</span> <span style="color: rgba(0, 0, 0, 1)">    cxGridMainDBTableView1Column5: TcxGridDBColumn;
</span><span style="color: rgba(0, 128, 128, 1)"> 48</span> <span style="color: rgba(0, 0, 0, 1)">    cxGridMainDBTableView1Column6: TcxGridDBColumn;
</span><span style="color: rgba(0, 128, 128, 1)"> 49</span> <span style="color: rgba(0, 0, 0, 1)">    cxGridMainDBTableView1Column7: TcxGridDBColumn;
</span><span style="color: rgba(0, 128, 128, 1)"> 50</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btnRefreshClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 51</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span> FormClose(Sender: TObject; <span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> Action: TCloseAction);
</span><span style="color: rgba(0, 128, 128, 1)"> 52</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> FormDestroy(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 53</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> FormCreate(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 54</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btnAddClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 55</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btnSaveClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 56</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btnDeleteClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 57</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btnDodifyClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 58</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> LoadMenu(dxBar: TdxBarManager);
</span><span style="color: rgba(0, 128, 128, 1)"> 59</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> cbbGroupNameClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 60</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btnSaveAClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 61</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btnDeleteAClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 62</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> btnAddAClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)"> 63</span>   <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> qryUserBeforePost(DataSet: TDataSet);
</span><span style="color: rgba(0, 128, 128, 1)"> 64</span>   <span style="color: rgba(0, 0, 255, 1)">private</span>
<span style="color: rgba(0, 128, 128, 1)"> 65</span>   <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> Private declarations </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 66</span>   <span style="color: rgba(0, 0, 255, 1)">public</span>
<span style="color: rgba(0, 128, 128, 1)"> 67</span>   <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)"> Public declarations </span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 68</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 69</span>
<span style="color: rgba(0, 128, 128, 1)"> 70</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)"> 71</span> <span style="color: rgba(0, 0, 0, 1)">FrmUserSet: TFrmUserSet;
</span><span style="color: rgba(0, 128, 128, 1)"> 72</span>
<span style="color: rgba(0, 128, 128, 1)"> 73</span> <span style="color: rgba(0, 0, 255, 1)">implementation</span>
<span style="color: rgba(0, 128, 128, 1)"> 74</span> <span style="color: rgba(0, 0, 255, 1)">uses</span>
<span style="color: rgba(0, 128, 128, 1)"> 75</span> <span style="color: rgba(0, 0, 0, 1)">uMain, sysPublic;
</span><span style="color: rgba(0, 128, 128, 1)"> 76</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">$R *.dfm</span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)"> 77</span>
<span style="color: rgba(0, 128, 128, 1)"> 78</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmUserSet.LoadMenu(dxBar: TdxBarManager);
</span><span style="color: rgba(0, 128, 128, 1)"> 79</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)"> 80</span> <span style="color: rgba(0, 0, 0, 1)">I, L: integer;
</span><span style="color: rgba(0, 128, 128, 1)"> 81</span> <span style="color: rgba(0, 0, 0, 1)">Tnode: TTreenode;
</span><span style="color: rgba(0, 128, 128, 1)"> 82</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 83</span>   <span style="color: rgba(0, 0, 255, 1)">with</span> checkTreeMain.Items <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)"> 84</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 85</span> <span style="color: rgba(0, 0, 0, 1)">    Clear;
</span><span style="color: rgba(0, 128, 128, 1)"> 86</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> i := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> dxBar.Categories.Count - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)"> 87</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 88</span>       Tnode := AddChild(<span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">, GetPosName(dxBar.Categories.Strings));
</span><span style="color: rgba(0, 128, 128, 1)"> 89</span>       <span style="color: rgba(0, 0, 255, 1)">for</span> l := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> dxBar.ItemCount - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)"> 90</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> dxBar.Items <span style="color: rgba(0, 0, 255, 1)">is</span> TdxBarButton <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)"> 91</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> dxBar.Items.Category = i <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)"> 92</span>         <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 93</span> <span style="color: rgba(0, 0, 0, 1)">            AddChild(Tnode, GetPosName(dxBar.Items.Caption));
</span><span style="color: rgba(0, 128, 128, 1)"> 94</span>         <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 95</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 96</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 97</span>   <span style="color: rgba(0, 0, 255, 1)">with</span> qryTmp <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)"> 98</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 99</span> <span style="color: rgba(0, 0, 0, 1)">    Close;
</span><span style="color: rgba(0, 128, 128, 1)">100</span>   SQL.Text := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">select MenuName from sysUserAuthority where SystemName=''CMS'' and GroupName=:GroupName</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">101</span>   Parameters.ParamByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">GroupName</span><span style="color: rgba(128, 0, 0, 1)">'</span>).Value :=<span style="color: rgba(0, 0, 0, 1)"> cbbGroupName.Text;
</span><span style="color: rgba(0, 128, 128, 1)">102</span> <span style="color: rgba(0, 0, 0, 1)">    Open;
</span><span style="color: rgba(0, 128, 128, 1)">103</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> i := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> checkTreeMain.Items.Count - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">104</span>       <span style="color: rgba(0, 0, 255, 1)">if</span> checkTreeMain.Items.Level &gt; <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">105</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> Locate(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">MenuName</span><span style="color: rgba(128, 0, 0, 1)">'</span>, checkTreeMain.Items.Text, []) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">106</span>         checkTreeMain.ItemState :=<span style="color: rgba(0, 0, 0, 1)"> csChecked;
</span><span style="color: rgba(0, 128, 128, 1)">107</span> <span style="color: rgba(0, 0, 0, 1)">    Close;
</span><span style="color: rgba(0, 128, 128, 1)">108</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">109</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">110</span>
<span style="color: rgba(0, 128, 128, 1)">111</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmUserSet.btnRefreshClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">112</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">113</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(0, 0, 255, 1)">not</span> checkBoxUserName.Checked <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">114</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">115</span>   <span style="color: rgba(0, 0, 255, 1)">with</span> qryUser <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">116</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">117</span> <span style="color: rgba(0, 0, 0, 1)">      Close;
</span><span style="color: rgba(0, 128, 128, 1)">118</span> <span style="color: rgba(0, 0, 0, 1)">      SQL.Clear;
</span><span style="color: rgba(0, 128, 128, 1)">119</span>       SQL.Text := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">select * from sysUser t</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">120</span> <span style="color: rgba(0, 0, 0, 1)">      Open;
</span><span style="color: rgba(0, 128, 128, 1)">121</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">122</span>   <span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 128, 128, 1)">123</span>   <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">124</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">125</span>   <span style="color: rgba(0, 0, 255, 1)">with</span> qryUser <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">126</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">127</span> <span style="color: rgba(0, 0, 0, 1)">      Close;
</span><span style="color: rgba(0, 128, 128, 1)">128</span> <span style="color: rgba(0, 0, 0, 1)">      SQL.Clear;
</span><span style="color: rgba(0, 128, 128, 1)">129</span>       SQL.Text := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">select * from sysUser t where t.UserName =''</span><span style="color: rgba(128, 0, 0, 1)">'</span> + edtUserName.text + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">''or t.WorkNO =''</span><span style="color: rgba(128, 0, 0, 1)">'</span> + edtUserName.text + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">130</span> <span style="color: rgba(0, 0, 0, 1)">      Open;
</span><span style="color: rgba(0, 128, 128, 1)">131</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">132</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">133</span>   btnDodify.Enabled :=<span style="color: rgba(0, 0, 0, 1)"> True;
</span><span style="color: rgba(0, 128, 128, 1)">134</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">135</span>
<span style="color: rgba(0, 128, 128, 1)">136</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span> TFrmUserSet.FormClose(Sender: TObject; <span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> Action: TCloseAction);
</span><span style="color: rgba(0, 128, 128, 1)">137</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">138</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">窗口关闭时,从内存中移除窗口</span>
<span style="color: rgba(0, 128, 128, 1)">139</span>   Action :=<span style="color: rgba(0, 0, 0, 1)"> caFree;
</span><span style="color: rgba(0, 128, 128, 1)">140</span>   FrmUserSet := <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">141</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">142</span>
<span style="color: rgba(0, 128, 128, 1)">143</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmUserSet.FormDestroy(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">144</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">145</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">窗口关闭时,在窗口菜单中移除窗口的菜单</span>
<span style="color: rgba(0, 128, 128, 1)">146</span>   <span style="color: rgba(0, 0, 255, 1)">with</span> MainFrm.dxBarListWindows.Items <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">147</span> <span style="color: rgba(0, 0, 0, 1)">    Delete(IndexOfObject(Self));
</span><span style="color: rgba(0, 128, 128, 1)">148</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">149</span>
<span style="color: rgba(0, 128, 128, 1)">150</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmUserSet.FormCreate(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">151</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">152</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">窗口创建时,在窗口菜单中加入窗口的菜单</span>
<span style="color: rgba(0, 128, 128, 1)">153</span> <span style="color: rgba(0, 0, 0, 1)">MainFrm.dxBarListWindows.Items.AddObject(Caption, Self);
</span><span style="color: rgba(0, 128, 128, 1)">154</span> <span style="color: rgba(0, 0, 0, 1)">cbbGroupName.Items.Clear;
</span><span style="color: rgba(0, 128, 128, 1)">155</span>   ComboAdd(cbbGroupName.Items, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">select distinct GroupName from sysUserAuthority where SystemName=''CMS'' order by GroupName</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">156</span>   TcxComboBoxProperties(cxGridMainDBTableView1Column4.Properties).Items.Text :=<span style="color: rgba(0, 0, 0, 1)"> cbbGroupName.Items.Text;
</span><span style="color: rgba(0, 128, 128, 1)">157</span>   cbbGroupName.ItemIndex := <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">158</span> <span style="color: rgba(0, 0, 0, 1)">cbbGroupName.OnClick(Self);
</span><span style="color: rgba(0, 128, 128, 1)">159</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">160</span>
<span style="color: rgba(0, 128, 128, 1)">161</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmUserSet.btnAddClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">162</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">163</span> <span style="color: rgba(0, 0, 0, 1)">qryUser.Append;
</span><span style="color: rgba(0, 128, 128, 1)">164</span>   btnSave.Enabled :=<span style="color: rgba(0, 0, 0, 1)"> True;
</span><span style="color: rgba(0, 128, 128, 1)">165</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">166</span>
<span style="color: rgba(0, 128, 128, 1)">167</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmUserSet.btnSaveClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">168</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">169</span> <span style="color: rgba(0, 0, 0, 1)">qryUser.Post;
</span><span style="color: rgba(0, 128, 128, 1)">170</span>   btnSave.Enabled :=<span style="color: rgba(0, 0, 0, 1)"> False;
</span><span style="color: rgba(0, 128, 128, 1)">171</span>   MessageDlg(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">保存成功,请不要重复操作!</span><span style="color: rgba(128, 0, 0, 1)">'</span>, mtInformation, , <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">172</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">173</span>
<span style="color: rgba(0, 128, 128, 1)">174</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmUserSet.btnDeleteClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">175</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">176</span>   <span style="color: rgba(0, 0, 255, 1)">case</span> MessageDlg(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">删除将无法恢复,您确认要继续删除吗?</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, mtWarning, [mbYes,
</span><span style="color: rgba(0, 128, 128, 1)">177</span>   mbNo], <span style="color: rgba(128, 0, 128, 1)">0</span>) <span style="color: rgba(0, 0, 255, 1)">of</span>
<span style="color: rgba(0, 128, 128, 1)">178</span> <span style="color: rgba(0, 0, 0, 1)">    mrYes:
</span><span style="color: rgba(0, 128, 128, 1)">179</span>       <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">180</span> <span style="color: rgba(0, 0, 0, 1)">      qryUser.Delete;
</span><span style="color: rgba(0, 128, 128, 1)">181</span>         btnSave.Enabled :=<span style="color: rgba(0, 0, 0, 1)"> False;
</span><span style="color: rgba(0, 128, 128, 1)">182</span>         MessageDlg(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">删除成功,请不要重复操作!</span><span style="color: rgba(128, 0, 0, 1)">'</span>, mtInformation, , <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">183</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">184</span> <span style="color: rgba(0, 0, 0, 1)">    mrNo:
</span><span style="color: rgba(0, 128, 128, 1)">185</span>       <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">186</span> <span style="color: rgba(0, 0, 0, 1)">      Exit;
</span><span style="color: rgba(0, 128, 128, 1)">187</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">188</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">189</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">190</span>
<span style="color: rgba(0, 128, 128, 1)">191</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmUserSet.btnDodifyClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">192</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">193</span>   btnSave.Enabled :=<span style="color: rgba(0, 0, 0, 1)"> True;
</span><span style="color: rgba(0, 128, 128, 1)">194</span>   btnDelete.Enabled :=<span style="color: rgba(0, 0, 0, 1)"> True;
</span><span style="color: rgba(0, 128, 128, 1)">195</span> <span style="color: rgba(0, 0, 0, 1)">qryUser.Edit;
</span><span style="color: rgba(0, 128, 128, 1)">196</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">197</span>
<span style="color: rgba(0, 128, 128, 1)">198</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmUserSet.cbbGroupNameClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">199</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">200</span> <span style="color: rgba(0, 0, 0, 1)">LoadMenu(MainFrm.dxBarManagerMain);
</span><span style="color: rgba(0, 128, 128, 1)">201</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">202</span>
<span style="color: rgba(0, 128, 128, 1)">203</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmUserSet.btnSaveAClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">204</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">205</span> <span style="color: rgba(0, 0, 0, 1)">I: Integer;
</span><span style="color: rgba(0, 128, 128, 1)">206</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">207</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> i := <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">to</span> checkTreeMain.Items.Count - <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">208</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">209</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> checkTreeMain.Items.Level &gt; <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">210</span>       <span style="color: rgba(0, 0, 255, 1)">if</span> checkTreeMain.ItemState = csChecked <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">211</span>       <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">212</span>         <span style="color: rgba(0, 0, 255, 1)">with</span> qryTmp <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">213</span>         <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">214</span> <span style="color: rgba(0, 0, 0, 1)">          Close;
</span><span style="color: rgba(0, 128, 128, 1)">215</span> <span style="color: rgba(0, 0, 0, 1)">          SQL.Clear;
</span><span style="color: rgba(0, 128, 128, 1)">216</span>         SQL.Text := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">SELECT * FROM sysUserAuthority WHERE GROUPNAME =:GROUPNAME AND MENUNAME =:MENUNAME</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">217</span>         Parameters.ParamByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">GROUPNAME</span><span style="color: rgba(128, 0, 0, 1)">'</span>).Value :=<span style="color: rgba(0, 0, 0, 1)"> cbbGroupName.Text;
</span><span style="color: rgba(0, 128, 128, 1)">218</span>         Parameters.ParamByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">MENUNAME</span><span style="color: rgba(128, 0, 0, 1)">'</span>).Value :=<span style="color: rgba(0, 0, 0, 1)"> checkTreeMain.Items.Item.Text;
</span><span style="color: rgba(0, 128, 128, 1)">219</span> <span style="color: rgba(0, 0, 0, 1)">          Open;
</span><span style="color: rgba(0, 128, 128, 1)">220</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> RecordCount = <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">221</span>         <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">222</span> <span style="color: rgba(0, 0, 0, 1)">            qryUserAuthority.Close;
</span><span style="color: rgba(0, 128, 128, 1)">223</span> <span style="color: rgba(0, 0, 0, 1)">            qryUserAuthority.SQL.Clear;
</span><span style="color: rgba(0, 128, 128, 1)">224</span>             qryUserAuthority.SQL.Text := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">INSERT INTO sysUserAuthority(GROUPNAME, MENUNAME, SystemName) VALUES(:GROUPNAME, :MENUNAME, :SystemName)</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">225</span>             qryUserAuthority.Parameters.ParamByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">GROUPNAME</span><span style="color: rgba(128, 0, 0, 1)">'</span>).Value :=<span style="color: rgba(0, 0, 0, 1)"> cbbGroupName.Text;
</span><span style="color: rgba(0, 128, 128, 1)">226</span>             qryUserAuthority.Parameters.ParamByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">MENUNAME</span><span style="color: rgba(128, 0, 0, 1)">'</span>).Value :=<span style="color: rgba(0, 0, 0, 1)"> checkTreeMain.Items.Item.Text;
</span><span style="color: rgba(0, 128, 128, 1)">227</span>             qryUserAuthority.Parameters.ParamByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">SystemName</span><span style="color: rgba(128, 0, 0, 1)">'</span>).Value := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">CMS</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">228</span> <span style="color: rgba(0, 0, 0, 1)">            qryUserAuthority.ExecSQL;
</span><span style="color: rgba(0, 128, 128, 1)">229</span>         <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">230</span>         <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">231</span>       <span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 128, 128, 1)">232</span>       <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">233</span>       <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">234</span>         ExecSql(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">DELETE FROM sysUserAuthority WHERE SystemName= ''CMS'' AND GROUPNAME=''</span><span style="color: rgba(128, 0, 0, 1)">'</span> + cbbGroupName.Text + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">'' AND MENUNAME=''</span><span style="color: rgba(128, 0, 0, 1)">'</span> + checkTreeMain.Items.Item.Text + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">235</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">236</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">237</span>   TcxComboBoxProperties(cxGridMainDBTableView1Column4.Properties).Items.Text :=<span style="color: rgba(0, 0, 0, 1)"> cbbGroupName.Items.Text;
</span><span style="color: rgba(0, 128, 128, 1)">238</span>   ShowMessage(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">保存成功!</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">239</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">240</span>
<span style="color: rgba(0, 128, 128, 1)">241</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmUserSet.btnDeleteAClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">242</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">243</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> MessageDLG(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">您确定要删除该分组权限吗?</span><span style="color: rgba(128, 0, 0, 1)">'</span>, mtconfirmation, , <span style="color: rgba(128, 0, 128, 1)">0</span>) = MRCANCEL <span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)"> exit;
</span><span style="color: rgba(0, 128, 128, 1)">244</span>   ExecSql(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Delete from sysUserAuthority where SystemName=''</span><span style="color: rgba(128, 0, 0, 1)">'</span> + Application.Title + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">'' AND groupname=''</span><span style="color: rgba(128, 0, 0, 1)">'</span> + cbbGroupName.Text + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">245</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">246</span>
<span style="color: rgba(0, 128, 128, 1)">247</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmUserSet.btnAddAClick(Sender: TObject);
</span><span style="color: rgba(0, 128, 128, 1)">248</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">249</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> edtNewGroupName.Text = <span style="color: rgba(128, 0, 0, 1)">''</span> <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">250</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">251</span>   ShowMessage(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">请先输入组名!</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">252</span> <span style="color: rgba(0, 0, 0, 1)">    exit;
</span><span style="color: rgba(0, 128, 128, 1)">253</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">254</span> <span style="color: rgba(0, 0, 0, 1)">cbbGroupName.Items.Add(edtNewGroupName.Text);
</span><span style="color: rgba(0, 128, 128, 1)">255</span>   cbbGroupName.ItemIndex := cbbGroupName.Items.Count - <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">256</span> <span style="color: rgba(0, 0, 0, 1)">cbbGroupName.OnClick(self);
</span><span style="color: rgba(0, 128, 128, 1)">257</span>   ShowMessage(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">添加成功!</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">258</span>   edtNewGroupName.Text := <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">259</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">260</span>
<span style="color: rgba(0, 128, 128, 1)">261</span> <span style="color: rgba(0, 0, 255, 1)">procedure</span><span style="color: rgba(0, 0, 0, 1)"> TFrmUserSet.qryUserBeforePost(DataSet: TDataSet);
</span><span style="color: rgba(0, 128, 128, 1)">262</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">263</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (Pos(<span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(128, 0, 0, 1)">'</span>, qryUser.FieldByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">UserName</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString) &gt; <span style="color: rgba(128, 0, 128, 1)">0</span>) <span style="color: rgba(0, 0, 255, 1)">or</span> (Pos(<span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(128, 0, 0, 1)">'</span>, qryUser.FieldByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">PassCode</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString) &gt; <span style="color: rgba(128, 0, 128, 1)">0</span>) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">264</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">265</span>         ShowMessage(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">用户名或密码中不能有空格!请重新输入</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">266</span> <span style="color: rgba(0, 0, 0, 1)">      Abort;
</span><span style="color: rgba(0, 128, 128, 1)">267</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">268</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (qryUser.State = dsInsert) <span style="color: rgba(0, 0, 255, 1)">or</span> ((qryUser.State = dsEdit) <span style="color: rgba(0, 0, 255, 1)">and</span> (Length(qryUser.FieldByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">PassCode</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString) &lt; <span style="color: rgba(128, 0, 128, 1)">20</span>)) <span style="color: rgba(0, 0, 255, 1)">then</span>
<span style="color: rgba(0, 128, 128, 1)">269</span>   <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">270</span>         qryUser.FieldByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">PassCode</span><span style="color: rgba(128, 0, 0, 1)">'</span>).AsString := GetMd5Str(qryUser.FieldByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">PassCode</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).AsString);
</span><span style="color: rgba(0, 128, 128, 1)">271</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">272</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">273</span>
<span style="color: rgba(0, 128, 128, 1)">274</span> <span style="color: rgba(0, 0, 255, 1)">end</span>.</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p style="text-align: left"><span style="color: rgba(0, 128, 128, 1)"><img src="https://img2018.cnblogs.com/common/1335881/201912/1335881-20191212152258978-161086499.gif" alt=""></span></p>
<p><span style="color: rgba(0, 128, 128, 1)">  <span style="color: rgba(0, 0, 0, 1)">OK,今天就到这里吧,其实整个通用的管理系统架构基本已经完成了,我们明天主要完善/美化一下界面。</span></span></p>
<p><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1)">  感觉写博客比做技术还累,专业的事情交给专业的人做(⊙﹏⊙)。。。。。。</span></span></p>
<p><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1)">  <span style="font-family: 楷体; font-size: 16px; background-color: rgba(51, 204, 204, 1)">能看到这里的绝逼是Delphi真爱。。。。。</span></span></span></p>
<p style="text-align: center"><span style="color: rgba(0, 128, 128, 1)"><span style="color: rgba(0, 0, 0, 1)">  <img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191212153145363-1461428253.png" alt=""><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191212153536279-423500493.png" alt=""></span></span>&nbsp;</p>
<h3>&nbsp;</h3>
<hr>
<h3><span style="color: rgba(0, 128, 128, 1)">imageList图标库</span></h3>
<p><span style="color: rgba(0, 0, 0, 1)">  小伙伴,今天我们继续打卡。</span></p>
<p style="text-align: center"><span style="color: rgba(0, 0, 0, 1)"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191213100042746-569754121.png" alt=""></span></p>
<p><span style="color: rgba(0, 0, 0, 1)">  imageList图标仓库,主要用于菜单的美化。</span></p>
<p><span style="color: rgba(0, 0, 0, 1)">  </span><span style="color: rgba(0, 0, 0, 1)">在主界面拖一个imageList控件<img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191213094038680-1739990997.png" alt=""></span><span style="color: rgba(0, 0, 0, 1)">,命名为imageListMain,然后添加一些图标进去。如下图。</span></p>
<p style="text-align: center"><span style="color: rgba(0, 0, 0, 1)"><img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191213094453825-274124672.png" alt=""></span></p>
<p style="text-align: left">  然后,完成dxBarManagerMain和imageListMain的绑定(dxBarManagerMain的image属性)。</p>
<p style="text-align: left">  OK,至此,就可以为主菜单增加图标了(选中菜单,根据需要选择imageIndex)。</p>
<p style="text-align: center">  <img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191213095109356-1859721106.png" alt=""><span style="color: rgba(0, 0, 0, 1)"><br></span></p>
<h3><span style="color: rgba(0, 1, 18, 1)"><span style="color: rgba(0, 128, 128, 1)"><strong>第三方控件:RC、AlphaControl皮肤控件</strong></span></span></h3>
<p><span style="color: rgba(0, 0, 0, 1)">  后来我想了一下,关于第三方库,就不再讲解了,大家有兴趣可以自行研究。说句傲娇的话,做技术最重要的是功能,花里胡哨的干啥呀!</span><span style="color: rgba(0, 1, 18, 1)"><br></span></p>
<p style="text-align: center"><span style="color: rgba(0, 0, 0, 1)">  <img src="https://img2018.cnblogs.com/i-beta/1335881/201912/1335881-20191213095622504-1854012873.png" alt=""><br></span></p>
<p><span style="color: rgba(0, 0, 0, 1)">  不过话说回来,好的UI界面能够极大的提高用户体验(啪啪打脸(⊙﹏⊙)),下面带大家看下AlphaControl皮肤控件的Demo效果(到这里下载控件包AlphaControl官网)。</span></p>
<p style="text-align: center"><span style="color: rgba(0, 0, 0, 1)"><img src="https://img2018.cnblogs.com/common/1335881/201912/1335881-20191213100654526-938145255.gif" alt=""></span></p>
<h2><span style="color: rgba(0, 128, 128, 1)">最后</span></h2>
<p><span style="color: rgba(0, 0, 0, 1)">  最后,作为一名程序员,语言只是一种工具,如何快速、高效的达到项目需求,才是最主要的。</span></p>
<p><span style="color: rgba(0, 0, 0, 1)">  最最重要的是:我们要时刻保持对技术的热爱,兴趣是最好的老师,活到老学到老!</span></p>
<p><span style="color: rgba(0, 0, 0, 1)">  OK,最后看下我们这个项目的总体效果!</span></p>
<p style="text-align: center"><span style="color: rgba(0, 0, 0, 1)"><img src="https://img2018.cnblogs.com/common/1335881/201912/1335881-20191213102102733-985615066.gif" alt="">  </span></p>
<hr>
<h2 style="text-align: center"><strong><span style="color: rgba(0, 0, 24, 1)"><img src="https://img2018.cnblogs.com/common/1335881/201912/1335881-20191211132122009-1318556551.gif" alt=""></span></strong>&nbsp;</h2>
<p><span style="font-family: 楷体; font-size: 16px; background-color: rgba(51, 204, 204, 1)">任何疑问、建议、意见请留言或者私信我哦~~~~</span></p>
<p><span style="font-family: 楷体; font-size: 16px; background-color: rgba(51, 204, 204, 1)">源码已上传GitHub,</span><span style="font-family: 楷体; font-size: 16px; background-color: rgba(51, 204, 204, 1)">点击下载<span style="text-decoration: underline; background-color: rgba(51, 204, 204, 1)">源码</span>,有任何疑问欢迎和我交流。&nbsp;</span></p>
<div id="AllanboltSignature">
<p id="PSignature" style="padding: 10px 10px 10px 60px; background: url(&quot;https://images.cnblogs.com/cnblogs_com/jeremywucnblog/1607637/o_191206011825obs.png&quot;) 1% no-repeat rgba(229, 241, 244, 1); font-family: 微软雅黑; font-size: 11px; border: 1px dashed rgba(224, 224, 224, 1)">&nbsp; 作者:Jeremy.Wu <br>&nbsp; 出处:https://www.cnblogs.com/jeremywucnblog/
            <br>&nbsp; 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
      </p>




























</div><br><br>
来源:https://www.cnblogs.com/jeremywucnblog/p/12022001.html
頁: [1]
查看完整版本: Delphi - 手把手教你基于D7+Access常用管理系统架构的设计与实现