2012-03-23 47 views
5

我有一個設置類,在我的系統中,我存儲重要設置的配置值。它看起來像下面的代碼,但具有更多不同類型的屬性。 現在我需要實現一個表單,我可以在運行時調整和配置這些設置。爲每個屬性實現字段非常麻煩,並保證所有值映射都沒有錯誤。是否有組件可以自動創建配置表單?

現在我的問題:是一個可以自動創建接口來解決這個問題的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

VirtualTreeView在其[AdvancedDemo](http://code.google.com/p/virtual-treeview/source/browse/#svn%2Ftrunk%2FDemos%2FAdvanced)中有一個很好的屬性編輯器示例。您可能可以根據自己的需求對其進行自定義。 – TLama 2012-03-23 10:51:33

+1

通常,我只是使用TForm類來保存設置,在啓動時創建它(但在用戶想要更改配置之前不會顯示它)。任何其他單位/班級/無論想要讀取設置,都必須從表單中獲取。這打破封裝,但我並不在乎這個特殊的目的,特別是因爲我有一種在會話之間持久化配置表單的方法。請注意,因爲我使用的是VCL表單,所以線程安全性是我必須明確處理的一個問題:(( – 2012-03-23 10:54:27

+0

)JVCL擁有一個屬性編輯器組件,但不是您要查找的內容,但這可能就夠了 – dummzeuch 2012-03-23 12:53:00

回答

5

從德爾福絕地JVCL項目的TJVInspector組件創建一個屬性編輯器非常相似,你在找什麼。他們有一個可以在INI文件上工作的高級示例。

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

尼斯例如:http://www.neugls.info/?tag=tjvinspector

的JVCL/JCL包是巨大的,但有一噸有用組件和功能。

+1

我可能會將它用作「表單設計器」或「報表設計器」的一部分,事實上,我已經使用過它,但除非您需要的是String,Integer和Enums,並且除非用戶可以查看在網格屬性的牆上,不會感到困惑或需要更多的幫助和提示,我不認爲JvInspector是用於配置任何和所有應用程序的用戶友好的通用方法。 – 2012-03-23 13:35:41

4

我從來沒有創建過類似於delphi項目選項中的自動配置表單生成器,但是我已經在幾個我工作的項目中看到了這一點,並且看到了源代碼,並且它非常適用像這樣:

  1. 我將有框架的基本類型稱爲TConfigFrameBase,它會包含一些像這樣的屬性:標題(用戶顯示的屬性名稱),提示(一些幫助)和名稱(配置屬性)和Section(顯示此屬性的頁面)。

  2. 專門的繼承框架將用於布爾屬性,字符串屬性等。您的域(您的應用程序)將有它自己的自定義類型。日期?丹麥藥劑師名單? 只有您確實知道您需要的完整的一組UI配置屬性類型,這就是爲什麼我沒有看到使該自動或只是一個組件的組件。布爾框架將包含一個Label控件和一個複選框,並且將具有大約30個像素的默認高度。一個框架讓我可以將A面上的選項列表移動到B面上的選項(例如特定網格中可見的列),可能會高達300個像素。通過垂直堆疊這些框架,在滾動框中,您不必對佈局做太多考慮。當這些框架用於填充列表框時,一切都將可用。

  3. 左側的樹形視圖,可讓您選取一個部分。在樹狀視圖中點擊一下鼠標,右側窗格就是通過遍歷列表或字典中註冊的配置框架的內部列表來構建的,並通過它們所屬的部分進行過濾。

enter image description here

我不會用一個JVCL屬性檢查我的配置控制,但它可能爲你工作。我也不認爲你會從VirtualTreeView中獲得所需的一切,但你的里程可能會有所不同。您可以編寫自己的自定義編輯器控件,並且如果您想編寫就地編輯器控件,則可能會發現VirtualTreeView是完美的。

相關問題