|
在CnWizards 论坛上看到有人提议CnWizards的开发组考虑一下对Lazarus的支持,结果论坛老大们说现在不打算支持,一个是它没有提供Open Tools API,二是它的用户太少,像橙子的意见就比较典型:
------------------------------------------------------------------
不知gold8有没有了解过lazarus的插件模式
那可是要重新编译IDE的活,lazarus的架构与delphi不同
它是完全没有所谓的“OTA”的
已经超过了二次开发的范围了。。。
一个IDE,若是只开放了控件的接口,那么必然只能够开发控件
lazarus现在就是这种情况
关于工作量的问题,也许没有必要讨论了
如果lazarus啥时把IDE的接口全部开放出来,或许cw还有可能写得上去
但是现在连个可用的接口都没有,巧妇难为无米之炊啊
我们也完全不可能自己直接去改lazarus的源码的
-----------------------------------------------------------------
于是橙子得出一个结论:Lazarus没有OTA,所以不能支持IDE扩展。事实证明,老大们也有看走眼的时候,Lazarus不仅有自己的OTA,而且有的地方做的比Delphi更好!也许是Lazarus比Delphi年纪小,它充分吸取Delphi的成功之处,还加以改进,以更加清晰的对象层次来构筑自己的OTA,Lazarus中的包CodeTools和IDEInft就是用于支持IDE扩展的基础,阅读SrcEditorIntf、CodeToolManager、CodeTree、CodeCache、CodeAtom、CustomCodeTool、IdeCommands等单元,我们可以发现类的组织和层次关联非常清晰,支持的方法更加人性化,虽然没有OTA那么博大精深,但也还算是组织得相当好了。
试看这样一个例子:
用户在代码编辑器中输入一个文字串(过程或者函数中的关键字),然后按快捷键,助手检测当前位置之前是否有分号,如果有,则取分号之后到当前位置间的所有字符为查询关键字,否则取当前位置向前的第一空格到当前位置间的所有字符为查询关键字,弹出查询窗口,在数据库中查询该关键字或关键字组合,每一个结果都有函数名、单元名、函数解释等内容,找到合适的过程或者函数,点击引用按钮,助手用被引用的函数代替刚才在代码编辑器中输入的那串文字,判断Uses节是否已经包含单元名,如未包含,则添加单元名。
效果如下图所示:(在新窗口中查看动画)

代码用Delphi编写完成后,尝试转换到Lazarus下,一番摸索之后,对Lazarus顿生好感,比如下面这句代码:
if not CodeTool.FindUnitInAllUsesSections(UpperCase(CodeHelperDlg.UsesUnitEdit.Text), NamePos, InPos) then
CodeTool.AddUnitToMainUsesSection(CodeHelperDlg.UsesUnitEdit.Text, '', CodeToolBoss.SourceChangeCache);
判断单元是否已经包含在Uses节中,如果没有,则在接口部分的Uses节中添加该单元,如果添加该单元后代码行超过了行长80列的限制,还会自动换行。代码之简洁让人为之一振,在Delphi中实现同样的功能,我可是写了好几十行呢。类似于FindUnitInAllUsesSections、AddUnitToMainUsesSection这样的高度抽象、体贴开发者的过程和函数在Lazarus中随处可见,试问这样的支持环境和开发接口,我们还有理由视而不见吗?
不可否认,Lazarus还有很多不足,但是,事物都是发展变化的,Lazarus已经吸引了越来越多的关注,相信在众多开发者的参与下,必将快速走向成熟。。。 |
评分
-
查看全部评分
|