是否有自动创建配置表单的组件?

时间:2012-03-23 10:41:37

标签: delphi

我的系统中有一个设置类,我在其中存储重要设置的配置值。它看起来像下面的代码,但有更多不同类型的属性。 现在我需要实现一个表单,我可以在运行时调整和配置这些设置。为每个属性实现字段非常麻烦,并保证所有值都被映射而没有错误。

现在我的问题:是一个vcl组件,可以自动创建一个接口来解决这个问题。例如。提供类似树状或列表视图的界面,其中包含属性和字段的名称以编辑值(如IDE中的属性窗格,具有打印机设置,请参见下面的屏幕截图)。那将是一件好事。否?

您如何处理类似的配置表单?

感谢您的投入!

TGoldmannSettings = class
  private
    FInitialSymbolSize          : Integer;
    FPenWidth                   : Single; 
    FCanvasColor                : TColor;
    FShowLiveCoordinates        : Boolean;
    FFont1                      : TFont;  
    FMsmPointSymbol             : TAvailableSymbols; // own type
    ...
  public
    constructor Create;
    destructor Destroy; override;
    property SymbolSize : Integer read FInitialSymbolSize write FInitialSymbolSize;
    property Font1: TFont read FFont1 write FFont1;
    ...
  published
    property PenWidth: Single read FPenWidth write FPenWidth;
    property CanvasColor: TColor read FCanvasColor write FCanvasColor;
    property ShowLiveCoordinates: Boolean read FShowLiveCoordinates write FShowLiveCoordinates;
    ...
  end;

您有时会在打印机设置对话框中找到我的意思: screenshot of my printer settings offering a interface like I wish to have

2 个答案:

答案 0 :(得分:5)

Delphi Jedi JVCL项目中的TJVInspector组件创建了一个与您正在寻找的属性编辑器非常相似的属性编辑器。他们有一个适用于INI文件的高级示例。

JVCL网站:http://jvcl.delphi-jedi.org/

很好的例子:http://www.neugls.info/?tag=tjvinspector

JVCL / JCL包很大,但有很多有用的组件和功能。

答案 1 :(得分:4)

我从未创建过类似于delphi项目选项中的自动配置表单生成器,但我已经在我工作的几个项目中看到了这一点,并且看到了源代码,它的工作原理非常像这样:

  1. 我有一个名为TConfigFrameBase的基本类型的框架,它将包含一些这样的属性:Caption(用户显示的属性名称),Hint(一些帮助)和Name(config属性)和部分(此属性显示在页面上)。

  2. 专门继承的框架将用于布尔属性,字符串属性等。您的域(您的应用程序)将拥有自己的自定义类型。日期?丹麦的药剂师名单? 只有你肯定知道你需要的完整的UI配置属性类型,这就是为什么我没有看到一个组件使这个自动或只是一个组件。布尔框架将包含一个Label控件和一个复选框,默认高度约为30像素。允许我将A面上的选项列表移动到B面上的选项(例如,在特定网格中可见的列)的框架可能高达300像素。通过垂直堆叠这些帧,在滚动框中,您不必考虑布局。当这些框架用于填充列表框时,一切都将可用。

  3. 左侧的树状视图,可让您选择一个部分。在树视图中单击鼠标右键,通过迭代我在列表或字典中注册的配置帧的内部列表来构建右侧窗格,并按照它们所属的部分进行过滤。

  4. enter image description here

    我不会使用JVCL Property Inspector作为我的配置控件,但它可能适合您。我也不认为你会从VirtualTreeView获得你需要的一切,但你的里程可能会有所不同。您可以编写自己的自定义编辑器控件,如果您喜欢编写就地编辑器控件,您可能会发现VirtualTreeView非常完美。