我希望构建自己的组件,不知道从哪里开始。我有一些Delphi书籍,但它们已经陈旧且过时,我正在寻找一些关于教程/书籍的建议来帮助我做到这一点。该组件将非常简单,基本上是2个标签和一个图像。我需要数组中的数百个,所以我认为一个组件将是最好的路径。文本将根据宽度等进行调整,并有一些鼠标悬停事件。所以基本上,我从哪里开始?
我正在使用Delphi 2009,这将是一个win32应用程序。
谢谢!
答案 0 :(得分:6)
你可以订购Ray Konopka的书Dev。 {$ 3}} 25美元。这是一本关于这个主题的专业书籍,也非常适合初学者。
开发组件的主要原则是:
组件是可视的还是 不是(是否需要画布才能上画)
是否需要窗口句柄(视觉或非视觉)
一旦您回答了这些问题,您可以查看Delphi的源代码示例。
答案 1 :(得分:5)
据我所知,Danny Thorpe撰写的Delphi Component Design仍然是关于这一主题的最佳书籍。在过去的15年中,组件设计没有发生重大变化,因此您拥有的书籍可能并不像您想象的那样过时。阅读旧参考文献时要记住三件事:
某些单位的名称已更改。例如,不再有DsgnIDE了。它取而代之的是DesignIDE。
现在,设计时代码与运行时代码严格分开。这意味着您不能在组件的单元中使用DesignIDE,否则您将被禁止使用运行时软件包。较旧的Delphi版本没有这个技术限制(虽然它一直是一个法律限制),所以你找到的旧代码示例可能需要稍微改变一下。
字符串现在是Unicode,因此,对于您找到的所有旧代码示例,可能会对您需要识别的字符大小进行一些无效的假设。
编写组件的最大障碍是你应该使用你所从的类的各种 protected 成员,但那些经常没有记录,所以你必须要多更愿意阅读VCL源代码,了解各种方法的使用方法。
答案 2 :(得分:3)
执行所需操作的最简单方法是创建新表单。放下标签和图像,然后按照您想要的方式排列;如果它符合您的需要,请将它们放在面板上,以便它们可以作为一个整体移动。
选择要包含的所有组件(如果选择使用,则包括该面板),然后单击IDE主菜单上的“组件”项,并选择“创建组件模板”。 (仅当您在当前表单上选择了组件时才会启用它。)将出现一个对话框,询问您是否有新组件的名称,以及您希望它出现的Component Palette页面。
答案 3 :(得分:1)
查看this article,其中介绍了如何构建由一组现有组件组成的新组件。
答案 4 :(得分:1)
不要担心你的书老了。
从过去开始,几乎所有事情仍然可以正常工作,而一般情况下,通常是由于名称冲突或在2009版本中添加了Unicode。
他们不是微软,他们没有充分理由破坏旧代码。事实上,从旧的DOS时代开始采取一些代码 - 假设它不会试图操纵屏幕,它可能会以最少的修复程序运行。
答案 5 :(得分:0)
不要担心你的旧书!从v3开始,Delphi没有太大变化。这就是为什么用D3编译的大多数程序仍然可以在D7甚至更新的版本中编译。如果它没有编译,可能你需要在这里改变一两行。
我建议你在互联网上搜索其他非常简单的组件,看看它们是如何制作的。然后自己制作并在此发布。让其他人看看它并建议改进或发现错误。
1)也许你不需要这两个标签。您可以直接在图像上绘制文本。如果你有很多这样的组件,你可以节省一点内存。
2)你可能不希望以一种形式加载很多很多图像。开销可能很大。您可以做的是仅在屏幕上可见的图像中加载图片 - 您将只在屏幕上显示5-10张图像(或者您可以在不离开屏幕的情况下在图像上显示的任何数量的图像)。当用户向下滚动时,您在屏幕上保留相同的TImage控件,但是在其中加载新的(下一个)图像。
3)你可能不想将标签和TImage存储在一个数组中(我想它是一个TImage,因为它似乎你想在屏幕上显示它们,否则你不需要标签 - 你需要解释你的问题如果我弄错了更多细节)。但您可以存储TBitmap和文本(您希望在标签中显示)。
因此,您可能需要计算数百个控件将创建的CPU /磁盘开销以及所需的内存量。如果你保持在1GB以下并且加载时间不到10秒,那么它相对没问题。如果没有,您可能需要在开始实际实施之前考虑控件的设计。
希望这有用。 见你。