随着Quartex Pascal的开发如火如荼,而且有专门的Facebook小组为支持者服务-我不经常在我的博客上发布更新。作为支持者的好处之一是,您可以直接访问最新的构建,还可以参与有关组的对话框。
尽管如此,这里有一些关于Quartex Pascal的新闻!
自从我上一篇博客帖子以来,已经发生了相当多的事情。IDE正在一块一块地组装起来,目前我主要关注AST(抽象符号树)的帮助器功能。
您无疑知道,当编译程序时,它首先被解析并转换为内存中的对象。所以你的程序的每一寸都会变成一个精致的树形结构。这个结构就是通常所说的AST-如果您愿意的话,它是生成代码的原材料。在我们的示例中,我们不生成机器代码,而是生成JavaScript。
正如您可以想象的那样,这样的AST相当复杂。它必须能够表示对象Pascal的所有细微差别,并简化查找有关所有内容的信息。每种数据类型、每条记录、类或复杂结构、每个字段、表达式-它们都存在于AST中。
如果没有代码来快速遍历和使用AST,代码建议、参数建议、代码完成、深受欢迎的ctrl+click-所有这些都不会起作用。
哦,最小的已经从头开始重新实现了,所以它现在是快速、准确和灵敏的-而且它可以与鼠标轮和键盘一起工作。
现在浮出水面的功能之一就是代码建议。这是如今我们简单地认为理所当然的事情,我们并没有真正考虑要做多少工作。Eric为简化DWScript做了很多工作,但是您仍然需要围绕它构建代码库。但值得庆幸的是,这一点现在基本上已经完成,只剩下少量的样式和焦点处理。
在以前的构建中,IDE仅识别单元文件(.pas),但在当前版本中,它将检查附带的.DFM文件。如果存在窗体设计文件,它将打开窗体设计器页,而不是纯代码页。
这位表单设计师自己最近也受到了一些喜爱。添加了键盘快捷键,例如在多个选择期间按住CTRL键,对布局的更改会发回给IDE,并反映在保存状态的更改中(即,如果更改表单布局,则会启用保存和全部保存图标)。
表单布局对象(可视化小部件)也进行了一些修改。我们希望我们的DFM文件格式是JSON,因此已经实现了完整的JSON对象持久性。表单设计器小部件继承自TQTXJSONPersistent,使其成为加载和保存表单设计的文字一行程序。
我们确实需要等待AST资源管理器代码完成,然后才能开始拖放小部件。视觉控件不会自己魔术般地出现。包必须注册,同样可视控件也必须在IDE中注册,然后设计器才能识别它们。因此,一旦AST代码完成,我们就进入包-最后将各个部分粘合在一起。
RTL经历了与IDE本身一样多的变化,这是有充分理由的。与“其他”Web技术工具不同,Quartex Pascal拥有支持HTML5必须提供的所有功能的RTL。您不会像我们在德尔斐或拉撒路下所习惯的那样局限于静态的、固定的布局。
处理动态布局的能力提供了一些有趣和高效的设计机会。我发现自己越来越多地使用分块布局模型,因为它简化了构建可伸缩的动态UI。还可以使用不同的字体比例,比如point(Pt),而不是传统的像素(Px),这样就可以实现可以缩放其内容以适应容器的可视组件。这反过来又简化了编写在台式机、移动端和浏览器上都能很好呈现的软件。
更改太多了,无法在这里列出,但我几乎实现了所有的事件委托对象(还会有更多),进一步调整了创建速度-并添加了额外的PolyFill文件,以确保您的代码可以在每个浏览器上运行(PolyFill是一种后备系统,因此如果浏览器缺乏功能,则使用PolyFill)。
在Quartex Pascal下,TApplication对象扮演着重要的角色,比您在Delphi或Lazarus下习惯的作用要大得多。TApplication负责维护您的布局,以及最终表单的显示方式。
如果您正在编写移动应用程序,您显然希望您的表单能够滑入视图,就像iPhone和Android上的本地应用程序一样。
如果您正在编写客户端-服务器网站解决方案,您可能更喜欢表单覆盖浏览器的整个宽度,高度可变-用户通过单击工具栏、菜单选项或链接来切换表单。
也许您希望表单垂直堆叠,这样当用户向下滚动时,每个表单都会进入视图-可能会有一些花哨的效果,或者表单后面有一个静态背景。
最后但并非最不重要的一点是,您可能希望您的Web应用程序的外观和行为都像Windows桌面应用程序。有多个可以移动的窗口,在每个窗口的顶部-或者在浏览器的顶部-有一个普通的菜单系统。
合并这些不同甚至相互冲突的布局模型的唯一方法是实现几个TApplication类;每个类代表您想要使用的布局模型。因此,当您创建项目时,您需要选择您想要的布局模型-然后为您的项目选择并生成正确的TApplication。
RTL中添加了一些新的小部件,但最有趣的无疑是菜单小部件。这是一个小部件,模拟了正常菜单在真实程序中的工作方式。
创建菜单听起来可能并不有趣,但在HTML下实际上是一个很小的挑战。不是编码本身,而是处理没有视觉工件的菜单表示。每当您单击附加子菜单的菜单时,都会从代码动态创建新菜单。它位于其调用器的末尾(在父菜单项的右侧),并且应该只有在创建了它的所有子元素之后才会显示。
在一个相互竞争的系统中,这是非常棘手的,因为元素的创建方式是错误的。在构造过程中,您要不惜一切代价避免回流,否则会出现视觉伪影和闪烁。但在QTX下,这不是一个问题。而且速度太快了。即使菜单容器上有100个递归项,它也几乎是即时的。
如果您想知道为什么这会有什么不同,您必须记住Quartex Media Desktop。这不是带有onclick事件的简单玩具,而是可以绑定到媒体桌面的流程树中。新的代码只有500行代码,而旧版本的代码超过了3000行。
IDE的目标是您可以创建一个完整的桌面作为项目。不仅是应该在桌面上运行的程序(及其Ragnarok消息协议接口),还包括实际的桌面系统,它还涵盖了几个node.js系统服务。
这很酷的原因是,这使您能够完全通过浏览器交付完整的桌面级软件。这样的桌面将适合学校、辅导公司作为内部网,或者适合需要共享文件、实时聊天并通过相同的Web界面进行软件开发的团队。
想要支持这个项目吗?所有捐款100美元以上的财务支持者都可以在产品中获得他们的名字,完成后可以访问完整的IDE源代码,并可以访问Quartex Media Desktop系统(这是一个完整的Web桌面,具有群集后端,编译为JavaScript并在node.js上运行)。便携、独立于平台和芯片组、功能非常强大)。
每月金额较少的也是受欢迎的。该项目将不会存在的成员支持它与100美元,200美元等每个月。这既能激励我,也能帮我分配持续工作的时间。
当IDE完成时,您还可以通过特殊分配访问IDE源代码。支持者有权利,因为他们帮助创建了这个项目。
欢迎所有的捐款,无论是大的还是小的。但是,超过100美元的捐款,特别是重复出现的捐款,是推动这个项目向前发展的动力。
记得在facebook上给我发一条消息,这样我就可以把你添加到管理员组:https://www.facebook.com/quartexnor/