当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言:
 

 

    摘要://// 使用说明:单击dbgrideh的标题栏排序(适用于ado)// --在dbgrideh的事件ontitlebtnclick引用该函数即可:// sortdbgrideh(sender, acol, column);// --为了保证表格的每一列都能点击触发排序,你需要将你需要排序的列属性// -- title->titlebutton设置为true。//procedure sor......
 ·支持自绘画的属性编辑器     »显示摘要«
    摘要: 我的主页: http://www.tommstudio.com/ 属性编辑器对于大多数delphi程序员来说无疑是很熟悉的,在对象编辑器的内核中有着大量的属性编辑器,每个对象编辑器中的属性都对应一个属性编辑器类的实例。 delphi5中提供了一些新的高级特性,使我们能够定义新的属性编辑器,为以有的属性提供新的功能,或者设定和显示新的控件的新的属性的显示方法。在delphi5以前,对象编辑器只能够......


揭开Outlook Express编辑器的奥秘

  【程序编程相关:利用VFI提高Delphi程序的重用性

【推荐阅读:DBGridEh实现单击标题栏排序方法

【扩展信息:后台调用外部程序的完美实现(Delphi

outlook express是一款大家比较熟悉的邮件工具,其html编辑器一直是众多程序员竞相模仿的目标.作者最近在一个项目的开发中,开始接触html编辑器的设计,并遇到了很多的难题.目前网络上关于ie编程的文章中,涉及mshtml编辑器的部分,又大多集中在vc领域,用delphi作为解决方案的少之又少.在经过一番艰难的摸索之后,作者积累了一些成功的经验.并撰成此文,希望与大家共同探讨.

 

注:本文将涉及到com编程,由于com的复杂性,不免会有晦涩难懂之嫌.为了让阅读不至于成为一种折磨,作者将尝试另一种写作模式.文章将随着一个叫做w的程序员的编程思路展开,以通俗易懂的叙事方式带领读者一起探讨在mshtml编辑器的开发过程中可能遇到的一些棘手问题.对于某些需要强调的关键术语,文中将适时的给出注解,以便读者更好的领会.

 

通过本文的阅读,读者将可以学习到以下内容:

 

l        掌握twebbrowser控件的用法;

l        理解ihtmldocument2与idochostuihandle接口;

l        探讨在mshtml中如何加载字符流;

l        找回在mshtml编辑器中丢失的回车键;

l        实现工具栏的自动感应;

l        自定义mshtml编辑器强大的粘贴功能;

 

本文假定读者已经具备初步的com知识与delphi接口的编程经验,如果您需要对com与接口知识作进一步的深入了解,请参考其它相关文章.

 

twebbrowser.mshtml.自动化对象.ihtmldocument2.idochostuihandler.

filterdataobject.idataobject.剪贴板.粘贴

 

 

一个笑话的启示

       在一次程序员大会上,主持人为了活跃气氛,做了个小游戏.他问台下的程序员:如果有谁在小的时候拆过闹钟的请举手.台下的程序员们全都举起了手.主持人又问:那么又有谁后来把闹钟装回去的请举手.举起手来的程序员们又都把手放下了.

 

       这个笑话从侧面说明了一个问题,追根求源正是大多数程序员的天性.缺少追根求源的精神,软件设计就会缺少创新的动力.也正是由于有了追根求源的精神,越来越多的软件新手跨越了初期的彷徨,走上了软件高手的道路.

 

未来的一天,程序员w所在的软件公司接到一个信息管理系统的设计项目.由于最近w刚参加完公司组织的为期一周的com培训,于是项目经理y便把项目中最具挑战的编辑器部分交给他来完成.用户要求实现一个类似outlook express(以下简称oe)那样所见即所得式的编辑器,并可以支持多种来源的粘贴操作.尽管w此前对oe编辑器的原理一无所知,但他还是面带微笑并充满自信的接受了挑战.

 

揭开oe编辑器的面纱

在以往的使用过程中,w发现oe编辑器确实是一款强大的编辑工具.无论是编辑还是粘贴,oe编辑器都能完美的实现所见即所得的效果.oe编辑器本质上是一款html编辑器,其中的数据与格式都以html代码的形式来保存.w以前曾研究过网页上的html编辑器,该编辑器是通过dhtml技术来实现的.那么,oe编辑器与ie浏览器之间是否有什么关系呢?

 

为了搞清楚这个问题,w调出vc的spy++探个究竟.拖动spy++那个神奇的雷达指向oe编辑窗口,spy++迅速的找到了窗口的类型:“internet explorer_server”,这是个ie服务器窗口类型,这究竟是什么意思呢?

 

       微软的ie浏览器的核心部分是shdocvw.dll与mshtml.dll.从下面的internet explorer的架构图可以看到,ie其实只是一个外壳程序,真正的浏览网页.记录历史等工作都是由封装在shdocvw.dll中的webbrowser control来完成的.而html的解析.脚本引擎.java虚拟机.插件宿主等,则由shdocvw.dll通过调用mshtml.dll来完成.通过shdocvw.dll提供的丰富接口,网页中的元素可以访问外壳应用程序提供的属性与方法;而通过mshtml.dll提供的接口,外壳应用程序则反过来可以访问网页中元素的属性.方法.行为.事件等等.

      

 

毫无疑问,oe编辑器正是通过对webbrowser控件与mshtml的封装实现了html的编辑功能.由于webbrowser属于activex控件,所以,利用delphi的activex导入向导,可以轻松的实现对webbrowser控件的封装.导入后将在delphi的import文件夹下自动生成两个tlb文件:shdocvw_tlb与 mshtml_tlb.

 

delphi自带的twebbrowser

       从delphi4开始,delphi就在internet组件面板上提供twebbrowser组件,作为对webbrowser控件的封装.由于delphi的封装并不能保证与最新的webbrowser控件版本相一致,建议delphi7以前的读者先卸载该组件并重新导入shdocvw.dll,以便使用最新的接口功能,

 

进入twebbrowser的神奇世界

感谢delphi,使得一切都变得如此轻松.w启动delphi,新建一个项目,在internet组件面板上找到twebbrowser组件,然后拖放到窗体上,并重命名为“wbeditor”.由于对twebbrowser组件缺乏了解,w决定先请教一下公司的delphi高手老d.

 

w:老d,你知道twebbrowser组件的用法吗?

d:这个简单.twebbrowser有一个document属性,你看一下,这是个idispatch接口类型的属性.对了,idispatch接口你知道吗?

w:(支支吾吾)刚学过,不过没弄懂……

d:简单点说吧.为了给解释型语言——例如javascript脚本语言——提供调用com对象服务的能力,于是出现了com自动化对象.由于解释型语言无法象编译型语言那样实现与com对象的早期绑定,所以,com自动化对象便提供了idispatch接口供自动化客户端调用.通过idispatch接口,自动化机制中的客户端就可以动态的调用com自动化对象中的方法了……总之啊,idispatch接口是实现com自动化对象机制的关键.你明白吗?

w:(似懂非懂,不过想想反正以后还可以再学)嗯,知道了.然后呢?

d:ok.由于我们并不需要自动化机制,idispatch接口对我们来说用处不大.但我们可以利用它通过delphi中的as运算符查询到其它我们想要的接口.例如,ihtmldocument2接口在编程中用的比较多,用它可以实现大多数的dhtml功能.

w:哦~ihtmldocument2接口(自言自语).那如何进入编辑状态呢?

d:答案就在这个ihtmldocument2接口中.这个接口中有一个disignmode属性,在运行时置为“on”就可以从浏览模式转变为编辑模式了.当然了,前提是必须保证document不能为空.
...   下一页
    摘要:我的主页: http://www.tommstudio.com/本文原作者为: 孟辉大家对照片的底片一定都很熟悉了,底片上的颜色与色彩鲜艳的照片的颜色是正好相反的,即反色,这也是我们制作反色图像的核心。编程原理:你所见到的各种色彩都是由红、绿、蓝三种颜色按不同的比例混合而成的,这就是我们所说的三基色,它们的颜色值(rgb值)是 0~255 ,所以我们只需去的图像上各个点的rgb值,然后用255减去......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE