zoukankan      html  css  js  c++  java
  • delphi 组件安装教程详解

    学习安装组件的最好方法,就是自己编写一个组件并安装一遍,然后就真正明白其中的原理了。
     
    本例,编写了两个BPL, dclSimpleEdit.bpl 与 SimpleLabel.bpl ,其中,dclSimpleEdit.bpl 依赖 SimpleLabel.bpl ,
    或者说 dclSimpleEdit.bpl 需要 SimpleLabel.bpl 才能运行。这也是多数组件安装问题之典型!
     
     
    一、首先在delphi中打开 ComponentStudy 目录中的 ComponetStudy.bpg ,此为工程组文件。
     
    二、然后切换到 Project  Manager (Ctrl + alt +F11 ) 窗口
     
    三、在 dclSimpleEditD7.bpl 点右键菜单,选择 Options...
     
    按上图设置这两个目录,Output directory 是 xxx.bpl 输出目录。Dcp output directory 是 xxx.dcp 输出目录。
    如果不主动设置这两个目录,它们默认的目录是:C:Program Files (x86)BorlandDelphi7ProjectsBpl
    [在PATH环境变量中,有此目录信息,后面会说到它的作用]
    对 dclSimpleEditD7.bpl 的输出目录,做同样的上述设置(第三步之操作)。
     
    四、在 SimpleLabel.bpl 上,点右键,选择 Build ,即编译。按同样方式对 dclSimpleEdit.bpl 进行编译。
    因为dclSimpleEdit.bpl 引用了 SimpleLabel.bpl ,所以,要先编译前者。对于组件的安装,需要按顺序编译的原因就在于此。
     
    五、在 dclSimpleEdit.bpl 点右键,选择 install 
    (delphi一般规则是 dcl 开头表示设计时包,设计时包就可以 install 到 delphi ide 中)
    (运行时包,本例中的 SimpleLabel.bpl 则不能 install )
    因为我们在第三步,修改了 BPL 的输出目录,所以,install 时就会出现此错误。(如果是默认目录,不会有此错误)
    当 install 的时候,delphi.exe 加载了 d:wcpComponentStudyTSimpleEditpldclSimpleEdit.bpl 之后,
    dclSimpleEdit.bpl 会立即加载 SimpeLabel.bpl ,因 BPL 与 DLL 相类似,同属于动态动行库,在动态运行库代码中,
    不易获得当前自己目录(不是绝对不能,可以通过其它方法获取到),所以 dclSimpleEdit.bpl 就会从系统 PATH 环境变量
    中的目录去查找 SimpleLabel.bpl ,如果找不到,则报错。解决方法就是在 PATH 环境变量中加上 
    d:wcpComponentStudyTSimpleEditpl
     
    六、以 Win7 64 位为例,演示如何设置 PATH 环境变量
    6.1 选中“计算机”,右键“属性”,再选 “高级系统设置”
    6.2 点“编辑”后,在末尾先加上“半角分号”,再输入 d:wcpComponentStudypl
    6.3 可以这样验证一下
    6.4 操作完毕之后,重新 delphi ,再 install dclSimpleEdit 就OK了。
    6.5 在组件的 SimpleComponent 标签中检查,确认已经安装成功。PATH 环境变量,在任何操作系统,任何软件中都重要,
    如:java 环境安装,andorid 等等,请对其有正确的理解。
     
    七,使用此组件。重启 delphi ,打开 ComponentStudyUseSimpleEditUseSimpleEdit.dpr
    并往Form 中拖一个 TSimpleEdit, F9 测试效果。
    本文的重点是讲组件安装,所写范例代码也比较简单。
     
    八、关于各种目录的设置问题。
    8.1 菜单 Tools --> Environment Options..
    8.2 Library path

    很明显,已经自动加上了此路径。此路径的作用,可以理解为 pas 文件的搜索路径。
    此路径为全局,对任何工程有效。如果有多个版本的组件共存,可以改变这些目录的顺序,
    来设置当前有效的组件版本。
     
    8.3 在 exe 工程中,另一处与此功能相同的路径, 菜单 proejct -->Options... (Shift + Ctrl + F11)
     
    此功能为局部,仅属于本工程使用。同样的,此单菜中关于 packages 中的选项,
    亦有“本工程有效BPL”的功效(请自行研究)。这些设置,在多版本组件同时存在于delphi时非常有用。
     
    九、其它:
    9.1 delphi 安装组件的信息记录在何处,菜单 Component -->Install Package...
    它实际上存在于注册表中 [HKEY_CURRENT_USERSoftwareBorlandDelphi7.0Known Packages]

     

    9.2 组件自动安装包,实际上就是写注册表,写 PATH 环境变量(libray path 目录信息也是在注册表中)来实现的。

    9.4 多版本组件如何共存。(稍复杂,用处不大,但可行)

     a) 要让它们的 BPL 输出在不同的目录中。默认是全部在 C:Program Files (x86)BorlandDelphi7ProjectsBpl ,
    是不行的(bpl同名的问题),所以各种组件安装教程,让大家先删除掉此目录中的 *xx*.bpl 等操作原因在此。
    (或 PATH 环境变量中所涉及到的目录,如  WindowsSystem32 等,要在这些目录中执行删除 *xx*.bpl 操作)
     
    b) 不可同时使用,且要使用 8.2 步骤中改变目录顺序。或者用 8.3 菜单中,的 Package 选项,来增减加载的组件。
     
    十、出错演示,删除掉 PATH 环境变量中的 d:wcpComponentStudyTSimpleEditpl ,重运行 delphi 结果如下
        
    确定之后
    询问是否下一次继续加载。
    此信息的意思是, dclSimpleEditD7.bpl 找不到 SimpleLable.bpl ,是否在下一次
    加载 dclSimpleEditD7.bpl ?

     

    选择是,设置好 PATH 环境变量,重启 delphi 就能正常。
    选择否的结果:

    已经取消勾选。当然,你设置正确 PATH 变量后,重启后勾上也就可能正常工作了。
    (也可以在这里通过 add 安装组件)
    9.5 如果exe中的组件与安装的版本不相符合时,会出现版本不同,属性不存在等提示,通过学习本教程,
    相信大家就可以解决此类问题了。
     
    delphi 的组件编写,组件安装,是一套很明晰的规则,而很多人,面对此规则的时候,手忙脚乱,
    到处搜各种秘籍,方法,然而往往解决不到根本问题。
     
    学习编程知识,一定要从表面现象,洞悉到其原理。这样才能真正掌握。
    又如:delphi各种组件的使用方法,组件千千万,请问谁学得完?
    但是,高手们拿到一个组件,稍加研究,就会使用,这是为什么?
     
    既要学习“规则,知识小点”,又要上升为“技能,通识”。
     
    后记:
    2018.5.02晚,delphi 2007,安装 UniDAC 组件。
    1.已用多种方法安装过,IDE中同时存在2套 UniDAC ,删之,重装不行。
    2.根据报错信息,发现是 DbGridEh 组件,对 dac105.bpl 有 hook 或是调用。
       可能原因:
         a) DbGridEh 组件,在调用数据库驱动组件的时候,用了全局path,直接加载了 dac105.bpl
         b) 也可能是 dbgridEh 调用了同名( dac105.bpl )
         c) DBGridEh 有 hook 操作。
    3.删掉 DBGridEh 组件,安装UniDAC, OK.
    4.重安装另一版 DBGridEh ,OK
    所用到的方法,均在本文提及,灵活运用即可。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    html5+css3中的background: -moz-linear-gradient 用法 (转载)
    CentOS 安装Apache服务
    Linux 笔记
    CURL 笔记
    Spring Application Context文件没有提示功能解决方法
    LeetCode 389. Find the Difference
    LeetCode 104. Maximum Depth of Binary Tree
    LeetCode 520. Detect Capital
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 136. Single Number
  • 原文地址:https://www.cnblogs.com/lackey/p/8972221.html
Copyright © 2011-2022 走看看