2012-03-23 18 views
5

Tengo una clase de configuración en mi sistema, donde almaceno valores de configuración para configuraciones importantes. Se parece al código siguiente, pero con muchos más atributos de diferentes tipos. Ahora necesito implementar un formulario con el que pueda ajustar y configurar estos ajustes en tiempo de ejecución. Es muy engorroso implementar los campos para cada atributo y garantizar que todos los valores se mapeen sin error.¿Hay algún componente para crear automáticamente un formulario de configuración?

Ahora mi pregunta: es un componente vcl que podría crear automáticamente una interfaz para resolver eso. P.ej. ofrecen una interfaz tipo árbol o lista de lista con los nombres de los atributos y campos para editar los valores (como el panel de propiedades en el IDE, con la configuración de la impresora, ver la captura de pantalla a continuación). Eso sería una gran cosa. ¿No?

¿Cómo lidiar con formularios de configuración como ese?

¡Gracias por su contribución!

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; 

que a veces encontrar algo que decir en los diálogos de configuración de la impresora: screenshot of my printer settings offering a interface like I wish to have

+2

VirtualTreeView tiene un buen ejemplo de editor de propiedades en su ['AdvancedDemo'] (http://code.google.com/p/virtual-treeview/source/browse/#svn%2Ftrunk%2FDemos%2FAdvanced). Es posible que pueda personalizarlo para sus necesidades. – TLama

+1

Normalmente, uso una clase TForm para mantener la configuración, crearla al inicio (pero no mostrarla hasta que el usuario quiera cambiar la configuración). Cualquier otra unidad/clase/lo que sea que quiera leer una configuración tiene que obtenerla del formulario. Esto rompe la encapsulación, pero no me importa demasiado para este propósito en particular, especialmente porque tengo una forma de persistir en la forma de configuración entre sesiones. Tenga en cuenta que, debido a que estoy usando un formulario VCL, la seguridad de subprocesos es un tema del que tengo que ocuparme explícitamente: (( –

+0

) JVCL tiene un componente de editor de propiedades. No es exactamente lo que está buscando, pero quizás sea suficiente – dummzeuch

Respuesta

5

El componente TJVInspector del proyecto de Delphi Jedi JVCL crea un editor de propiedades muy similares a lo que busca. Tienen un ejemplo avanzado que funciona en un archivo INI.

JVCL Sitio: http://jvcl.delphi-jedi.org/

Niza ejemplo: http://www.neugls.info/?tag=tjvinspector

El paquete JVCL/JCL es enorme, pero tiene un montón de componentes y funcionalidades útiles.

+1

Podría usarlo como un "diseñador de formularios" o "diseñador de informes", de hecho, lo he usado exactamente para eso, a menos que lo único que necesite sea String, Integer y Enums, y a menos que los usuarios puedan verlo en una pared de propiedades de cuadrícula y no se confunden o necesitan más ayuda y consejos, no creo que JvInspector sea una forma genérica fácil de usar para configurar cualquiera y todas las aplicaciones. –

4

Nunca he creado un generador de formularios de configuración automática similar al de las opciones del proyecto delphi, pero lo he visto en varios proyectos en los que trabajo y he visto el código fuente, y funciona mucho de esta manera:

  1. me gustaría tener un tipo base del marco de llamada TConfigFrameBase y sería contener algunas propiedades como esta: Leyenda (usuario que se muestra el nombre de la propiedad), Pista (ayuda) y nombre (propiedad config) y Sección (página donde se muestra esta propiedad).

  2. Los marcos heredados especializados se usarían para propiedades booleanas, propiedades de cadenas, etc. Su dominio (su aplicación) tendrá sus propios tipos personalizados. ¿Fechas? Listas de las ubicaciones de boticario en Dinamarca? Solo usted sabe con certeza el conjunto completo de tipos de propiedades de configuración de interfaz de usuario que necesita, y es por eso que no he visto un componente que lo haga automático o simplemente un componente. El marco booleano contendría un control Label y una casilla de verificación y tendría una altura predeterminada de alrededor de 30 píxeles. Un marco que me permita mover una lista de opciones en el lado A a opciones en el lado B (columnas visibles dentro de una cuadrícula particular, por ejemplo) puede ser de hasta 300 píxeles. Al apilar verticalmente estos marcos, en un cuadro de desplazamiento, no tiene que pensar mucho en el diseño. Todo se podrá usar cuando estos marcos se utilicen para llenar un cuadro de lista.

  3. Una vista de árbol a la izquierda que le permite elegir una sección. Al hacer clic en la vista en árbol, el panel lateral derecho se construye iterando a través de mi lista interna de marcos de configuración que están registrados en una lista o diccionario, y filtrados por la Sección a la que pertenecen.

enter image description here

yo no usaría un inspector de propiedades JVCL como mi control de la configuración, pero podría funcionar para usted. Tampoco creo que vayas a obtener todo lo que necesitas de VirtualTreeView, pero tu kilometraje puede variar. Puede escribir sus propios controles de Editor personalizados, y si le gusta escribir controles in-place-editor, puede encontrar que VirtualTreeView es perfecto.

Cuestiones relacionadas