分类存档:Delphi

查看 DLL 的输出函数列表

有的时候,我们需要查看一个动态链接库的输出函数列表,有很多软件可以满足此要求,比如说 exeScope。不过,去下载一个软件总归是很麻烦,Delphi 本身就自带一个类似的工具,那就是 tdump.exe,Delphi 的所有版本都有,是一个命令行程序,在 Delphi 安装目录的 Bin 目录下。

用法:

tdump.exe D:\example.dll

以上命令将在控制台输出该 DLL 导出的函数列表;也可以将控制台的输出信息保存到一个文件,使用以下命令格式:

tdump.exe D:\Example.dll out.txt
  • 0 评论
  • 分类: Delphi
  • 让嵌入窗体的 WebBrowser 控件无边框

    前一段时间升级了一个程序,将程序的主界面用网页来设计,效果非常好,用 HTML+CSS 可以实现更加丰富的界面效果,比直接用 Delphi 来得容易。

    实现的方法很简单,在窗体添加一个 WebBrowser 组件,然后执行以下代码:

    WebBrowser1.Navigate('D:\Soft\HomePage.html');

    但随之而来出现了一个问题:WebBrowser 组件在未载入 HTML 之前是无边框的,当载入 HTML 之后,WebBrowser 四周出现了一个三维边框,和程序本身的风格极不协调,查看了 WebBrowser 的所有属性,没有属性可以改变这一设置。

    经过测试以后发现,该边框并不是 WebBrowser 产生的,而是 WebBrowser 中载入的 HTML 产生的,如果是这样的话,那问题就好解决了,真接用 CSS 去掉边框:

    body {
    border: 0px;
    overflow: auto; /*可自动隐藏或显示滚动条;设为 hidden 完全隐藏滚动条*/
    }

    当你高兴地设置以上 CSS 后,却发现 WebBrowser 的边框却依然存在,是 CSS 错了吗?NO,是你的 DOCTYPE 出了问题,以上的 CSS 在 XHTML 下是无效果的,将 DOCTYPE 设为 HTML4 即可:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  • 0 评论
  • 分类: Delphi
  • EhLib 使用教程:Ehlib 过滤功能的实现

    EhLib 是一套 Delphi 第三方组件库,虽然其只有十多个组件,没有 DevExpress 系列那般功能强大,但却简单易用,提供了一些实际开发中非常实用的功能。其中最为代表性的是 DBGirdEh 表格组件。

    DBGridEh 可以为你提供一个更加美观和功能丰富的 DBGird,比如平面化显示、奇偶行不同颜色(斑马线)、快速查找、合计行、Grid 打印等。在 Ehlib 的后期版本中,还提供了一个非常强大的过滤功能,他会在 DBGrid 的表头下方显示一个过滤行,用户在此行的相应列中输入查询条件,DBGridEh 可以自动为您筛选出所需要的数据。下图所示即为启用过滤功能后的 DBGridEh:

    鉴于之前 EhLib 汉化版发布时,很多人问到 EhLib 过滤功能的实现方式,并要求提供一个示例,所以下面我会简单介绍一下 EhLib 过滤功能的实现,相关代码及可执行文件会发布到 Delphi 盒子,请到那里去搜索并下载。

    1、过滤实现的前提条件:uses EhlibADO, EhlibBDE 等 ….

    要实现 DBGridEh 的自动过滤,必须先添加 Ehlib 的几个相关 unit 到你的 project 中,如果你使用的是 ADO 连接数据库,请在工程任一 unit 的 uses 列表中添加 EhlibADO,如果使用的是 BDE,请添加 EhlibBDE,其他可能添加的还有:EhlibCDS、EhlibDBX、EhlibIBX、EhlibMTE;

    2、启用过滤,显示过滤行:DBGridEh.STFilter.Visible := True

    DBGridEh 默认不显示过滤行,设置 STFilter.Visible 为 True 过滤行就显示出来了。

    3、选择:客户端还是服务器端过滤?DBGridEh.STFilter.Local = True|False

    这一步很主要。客户端过滤也就是 Query 自身的过滤功能,在内存中过滤,不会到服务器端去查询,优点是实现简单,过滤速度快,缺点就是只能获得本地更新的数据,其他用户新增和修改的数据无法实时反映出来。

    DBGridEh 服务器端过滤的实现方式是“拼凑”SQL 语句。在过滤之前,DBGridEh 绑定的 Query 的 SQL 语句必须含有 DBGridEh 指定的一个过滤标记,该过滤标记默认为 /*Filter*/,其必须在 SQL 任一行的行首,当用户输入过滤值时,EhLib 生成过滤条件,并且用此条件替换过滤标记之后的内容,然后将新的SQL 语句发送到数据库端去执行,获得的即为过滤后的数据。

    具体应该使用哪种过滤方式,需根据实际要求选用。

    4、客户端过滤(本地过滤)的实现:DBGridEh.STFilter.Local := True

    客户端过滤实现比较简单,而且容易理解,设置 Local 为 True,过滤功能就 OK 了。

    5、服务器端过滤的实现:DBGridEh.STFilter.Local := False

    服务器端过滤需设置 Local 为 False,然后剩下的就是 SQL 语句,SQL 一般为以下样式:

    AdoQuery.SQL.Text := 'SELECT * FROM Students WHERE ' + #13 +'/*Filter*/1=1';

    以上代码生成的 SQL 在 SQL Server 等支持 /* 注释的数据库中会非常正确的执行,但在 Access 中就会出错,解决方案也很简单,更改 DBGridEh 的过滤标记即可:

    DBUtilsEh.SQLFilterMarker :=  '(1>0)AND';

    那么 Query 的 SQL 应该为以下:

    AdoQuery.SQL.Text := 'SELECT * FROM Students WHERE ' + #13 + '(1>0)AND 1=1';

    服务器端过滤也 OK 了!

    注:如果你使用的是 Delphi 2007,你可能会发现当你完全无误按以上设置后,服务器端过滤功能还是无效,这是由于 Ehlib DBUtilsEh 单元的一处 Bug 造成的,此 Bug 产生的原因请查看该文:EhLib 4.1 在 Delphi 2007 下无法过滤和排序的问题。(本示例代码中包含了修正过的 DBUtilsEh,请到 Delphi 盒子下载)

    6、过滤行下拉列表的实现:Column.STFilter.ListSource、ListField、KeyField

    DBGridEh 的过滤行可以将某列已存在的值以 ComboBox 的形式显示出来,要实现此功能,需设置 DBGridEh 列的 STFilter 属性。将 ListSource 设为要下拉显示的数据源,ListField 为下拉列表显示的字段,KeyField 为构建查询表达式使用的字段。

    设置以上属性后,你可能发现虽然下拉列表显示出来了,但选择下拉列表值后,DBGridEh 却没有自动过滤,在单元的 initialization 节添加以下代码即会自动过滤了:

    DBGridEhCenter.FilterEditCloseUpApplyFilter := True;

    这个方法感觉很奇怪,而且在使用中好像也有问题,当输入 > <这样的表达式时,查询时会出错。在官方的 Demo 中,是通过内存表的方式实现的,而且不用设置任何属性(上面的 ListSource 等都不用设置),即可自动在过滤行每列处显示下拉列表,详细用法请参照 Ehlib 安装目录下的 Demo。

    (注:本示例代码不包含过滤行下拉列表的实现演示)

    Ehlib 过滤功能实现示例代码下载:Delphi 盒子

  • 23 评论
  • 分类: EhLib
  • 链接


    存档


    管理


    广告