在 Delphi 下自定义通用对话框------自定义打开文件对话框

在 Delphi 下自定义通用对话框
--------------自定义打开文件对话框

    几次碰到有人在论坛里问如何在 Delphi 下自定义通用对话框,本人对此问题也比较感兴趣,所以抽点时间搞了下,现在把“成果”与大家分享。本文的题目大了点,通用对话框有好多,但这里只以打开文件对话框为例。其实自定义所有通用对话框的原理是一样的。

第一步:建立对话框模版

    先来说个概念:对话框模版。对话框模版是一种资源,在 .rc 文件中定义,编译后生成 .res 文件,最终一般存在于资源动态链接库(DLL)中或可执行程序中。在专业的共享软件中一般都大量使用模版来创建对话框。通过模版生成的对话框一般用来采集用户输入,上面可以放标准的 Windows 控件,比如 Button, Label, TextBox, ListBox, ListView, TreeView 等。

    通用对话框也是由对话框模版生成的窗体,只不过这些对话框模版由操作系统定义,自定义通用对话框就是通过更改这些模版来实现的(打开和保存文件对话框例外,它们是通过添加新的模版来自定义的)。所以第一步要知道怎样定义对话框模版,可以在 Notpad 里直接敲 .rc 文件(这种方法这里就不使用了),还可以使用现有的工具,我机器上最好的工具是 Visual Studio .Net IDE,只需要点几下鼠标即可。(用它也可以查看、修改可执行文件中的资源,直接点打开->文件,打开可执行文件即可)。现在就先在 VS.Net 中定义一个对话框模版(过程略),该模版就是我们在打开文件对话框上自定义的部分,需要注意的是该模版必须具有 DS_3DLOOK 、DS_CONTROL 、WS_CHILD 、WS_CLIPSIBLINGS 风格且不能有 Border,因为通用对话框是将我们的整个模版当作子窗体SubClass 到原有对话框的(类似 Button 等标准控件与其拥有者的关系)。我将对话框模版的外观和 .rc 文件的内容贴出来:

// .rc 文件内容 
131 DIALOGEX 0, 0, 282, 36
STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_CLIPSIBLINGS
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
   LTEXT "文件名称:",-1,7,8,40,8
   LTEXT "此静态控件用来显示文件名称",1004,51,8,224,8, SS_PATHELLIPSIS
   CONTROL "如果选中文件是图片文件则进行预览",1005,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,7,18,268,10
END


    上面对话框

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值