我目前使用的是一个三层结构的 Delphi TFrame对象:
TItemsFrame
-一个基本的TFrame,定义了一个滚动区域。TDrawItemsFrame
-一个覆盖TItemsFrame
的TFrame来定义如何绘制项目。TFullPage
-另一个扩展TDrawItemsFrame
的TFrame,添加了页眉和页脚部分。
当我有两个不同的项目时,每个项目都需要一种独特的方式来绘制项目,而不需要修改TDrawItemsFrame
的任何后代。
我想解决方案应该是这样的:
- 主要项目:
type TItemsFrame = Class(TFrame)
- 主要项目:
type TDrawItemsFrame = Class(TItemsFrame)
- 主要项目:
type TFullPage = Class({$I AncestorClass.inc})
- 主要项目:
type TOtherFullPage = Class({$I AncestorClass.inc})
等等
然后,对于单个项目:
- 项目A:定义类型
TCustom_A_DrawItemsFrame = Class(TDrawItemsFrame)
和set AncestorClass.inc to TCustom_A_DrawItemsFrame
。 - 项目B:定义
type TCustom_B_DrawItemsFrame = Class(TDrawItemsFrame)
和set AncestorClass.inc to TCustom_B_DrawItemsFrame
。
我的问题是,这种方法是否与良好的 Delphi 实践相一致,或者是否有一个更好的战略模式,我应该考虑解决这个问题?任何见解将不胜感激!
1条答案
按热度按时间ylamdve61#
你可以像一些VCL组件那样做:在TITemsFrame类上公开一个事件OnDrawItem,其中包含可以为每个项修改的所有参数。
范例:
例如第一个程序:
例如第二个程序: