Articulo original: How to add a Builder to your Class
http://weblogs.foxite.com/bernardbout/2014/09/18/how-to-add-a-builder-to-your-class
Autor: Bernard Bout
Traductor: Luis María Guayán
Es posible que haya visto que varias de mis clases vienen con un generador (builder) incorporado que hace mas fácil configurar las propiedades correctas y brinda una visión correcta de cómo se verá el objeto con las propiedades ya establecidas.
Recientemente uno de los chicos de Foxite ha creado una clase Spinner ideal para tocar con dedos grandes y yo le envié un Generador para ello. Me pidió un tutorial sobre cómo crear un generador así, y como también había estado pensando que esto sería útil, me decidí a documentar el proceso aquí. Nosotros vamos a usar la clase Spinner creada por Tony Vignone para esto (todo está incluido en la descarga) o Ud. puede utilizar cualquier otra clase que desee.
Una clase visual personalizada puede tener una serie de propiedades que necesitan configurarse, y es útil que el usuario final tenga todo esto en un solo lugar, en vez de una larga lista. Así que lo primero que hay que hacer es agregar las propiedades que el usuario puede cambiar, en la solapa Favoritos. De esta manera las propiedades que cambian, son independientes de las propiedades internas y que no cambian.
Para esto la clase necesita tener MemberData. Así que este es el primer paso en la creación de la clase.
1. Abra la clase y agregue una propiedad personalizada _memberdata [guión bajo - memberdata]
1.2. En la hoja de propiedades, seleccione cada propiedad para ser agregada a la solapa Favoritos, haga clic derecho sobre ella y en el menú emergente seleccione "Agregar a favoritos"
2. Añada otra propiedad personalizada a su clase y nómbrela _BigSpinnerBuilder. Darle un valor inicial de 0 [cero]. Haga clic derecho sobre ella, y añadirla a la solapa de Favoritos.
3. Haga clic derecho sobre esta nueva propiedad _BigSpinnerBuilder y seleccione "Editor MemberData" en la ventana emergente, y se abre el Editor MemberData. Configurarlo como en la siguiente imagen, haga clic en el icono de lupa y en la ventana de código que se abre, pegar el siguiente código:
nControls = ASelObj(aObjects) If nControls # 0 oObject = aObjects(1) Set Classlib To (oObject.ClassLibrary) IF VARTYPE(_screen.oWiz) = "U" _screen.addproperty("oWiz","") ENDIF _screen.oWiz = Createobject("BigSpinnerBuilder", oObject) _screen.oWiz.Show() EndIf
Vea la imagen de abajo:
Haga clic en Aceptar (Ok) para cerrar el editor y guardar los cambios.
Ahora puede cerrar la clase personalizada.
Es hora de crear nuestro generador
Para la mayoría de los generadores necesitamos un sencillo formulario donde podamos configurar las propiedades según sea necesario. Así que basta con crear un nuevo formulario de VFP: Archivo -> Nuevo -> Formulario. Este será nuestro generador. Así que con el formulario seleccionado, en el menú archivo:
Archivo -> Guardar como clase y guarde el formulario como una clase en la misma biblioteca de clases visuales donde se almacena nuestra clase anterior. Darle el mismo nombre que en el código ingresado arriba: BigSpinnerBuilder.
Ahora podemos cerrar el formulario sin guardar y abrir la clase Formulario: BigSpinnerBuilder desde el Explorador de Clases.
Agregue una instancia de la clase, en este caso: bigspinner, al formulario, arrastrando y soltando desde el explorador de clases. Decidir sobre qué propiedades desea agregar al generador y añadir los controles apropiados. Aquí he añadido solo 3 propiedades, pero para esta clase hay una serie de otras propiedades que podrían añadirse al generador. Eso se lo dejo a ustedes.
He elegido para permitir cambiar al usuario, los colores de la ruleta y el título del Spinner.
Cuando la clase "bigspinner" se coloca en un nuevo formulario y la propiedad _bigspinnerbuilder se selecciona y se hace clic en el botón, de crea una instancia de este formulario. Así que como siempre, lo primero que hacemos es añadir la propiedad _memberdata. También requiere lo siguiente:
Crear 3 métodos nuevos:
LoadClassProps() SaveChanges() UpdatePreview()
2 Propiedades
_memberdata oSource - para mantener una instancia de la clase en su formulario.
Init()
- almacena una instancia de la clase en el formulario y llama al LoadClassProp() Parameters oSource If Vartype(oSource) = "O" This.oSource = oSource This.LoadClassProps() Endif
LoadClassProps()
- esto establece simplemente el generador de objetos igual que la clase que se está editando With This As Form .shpLightColour.BackColor = .oSource.shape2.FillColor .shpDarkColour.BackColor = .oSource.shape1.FillColor .txtButtonCaption.Value = .oSource.lblTitle.Caption ENDWITH * update the preview ThisForm.updatepreview()
UpdatePreview()
- Este código simplemente actualiza la clase en el generador con la configuración actual. * update the preview WITH This.Bigspinner1 .shape2.FillColor = ThisForm.shpLightColour.BackColor .Arrows.shape4.FillColor = ThisForm.shpLightColour.BackColor .lblTitle.Caption = ALLTRIM(ThisForm.txtButtonCaption.Value) .lblTitle.Forecolor = ThisForm.shpDarkColour.BackColor .shape1.FillColor = ThisForm.shpDarkColour.BackColor .Arrows.Shape3.FillColor = ThisForm.shpDarkColour.BackColor ENDWITH
SaveChanges()
- esto simplemente actualiza el control que se está editando mediante la instancia almacenada With This as Form * light .oSource.shape2.FillColor = .shpLightColour.BackColor .oSource.Arrows.shape4.FillColor = .shpLightColour.BackColor * dark .oSource.shape1.FillColor = .shpDarkColour.BackColor .oSource.lblTitle.Caption = ALLTRIM(.txtButtonCaption.Value) .oSource.lblTitle.Forecolor = .shpDarkColour.BackColor .oSource.Arrows.shape3.FillColor = .shpDarkColour.BackColor Endwith * update the preview ThisForm.updatepreview()
Los objetos también tienen su propio código:
shpLightColour.Click() / shpDargColour.Click()
LOCAL nCol nCol = GETCOLOR (This.BackColor) SI nCol> -1 This.BackColor = nCol ENDIF
cmdApply.Click()
- aplicar los cambios With ThisForm .SaveChanges() EndWith
cmdCancel.Click()
ThisForm.Release
Y eso es todo lo que hay para la creación de su generador.
Agregando otra propiedad al generador
Ahora suponga que desea agregar a la propiedad de la clase - arrowspersist al generador. Esta es una propiedad lógica de que si establece en .T. siempre mostrara la Flecha y .F. si la flecha está oculta hasta que el control es tocado. Así que podemos utilizar una casilla de verificación.
En el formulario generador agregar una casilla de verificación como se muestra y establezca su valor inicial = .F.
Los cambios de código necesarios serán:
LoadClassProps()
* Establecer el valor del control generador para nuestro valor de control .chkPersist.Value = .oSource.arrowspersist
SaveChanges()
* Actualizar el control que se está editando con el valor que fijamos en el formulario generador .arrowspersist = ThisForm.chkPersist.Value
UpdatePreview()
* Actualizar la previsualización en pantalla. Este es un ejemplo "LIVE" ya que la forma está funcionando .arrowspersist = ThisForm.chkPersist.Value
Eso es todo lo que se necesita.
Espero que esto le ayuda a crear generadores para sus clases.
Descargas
BigTouchCtrlsFull.zip - La última versión completa de las clases de Tony.
BigTouchCtrlsTutorial.zip - Los archivos que se usan en el tutorial anterior.
Descargar ambas y utilice el Tutorial Zip para seguir este envío, pero use el archivo BigTouchCtrlsFull que ya ha sido actualizado.
Los archivos originales y enlace al hilo de Foxite es: http://www.foxite.com/archives/another-big-control-revision-3-0000411778.htm
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.