Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 2 de 2
Ir a la página Anterior  1, 2
 
Crear Una Clase Formulario Personalizada
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: Crear Una Clase Formulario Personalizada 
 
Ok, para la toolbar, puedes ver un ejemplo en la pagina nº 119 y 120 del libro de gambas (de Daniel Campos y Jose Luis Redrejo)  (3.6. Alineación de los controles)

Por otro lado, echale un vistazo al manual que hice  de como hacer controles paso a paso.

Yo a un control gridviews, le fui añadiendo propiedades y funciones que no tenia, creando  un nuevo "supergridviews" heredado del gridviews.

Un ejemplo sencillo fue añadirle un tag2, (la propiedad tag, es un campo que podemos usar para guardar alguna cadena de texto o numero que nos interese), lo primero que hice fue crear otro propiedad para lo mismo llamandola tag2.

En fin, echale un vistaso al libro y al manual.

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Una Clase Formulario Personalizada 
 
Tienes algunos conceptos muy mal entendidos. Te explico un poco:

Tu te haces un formulario. Puede ser un formulario genérico o tu puedes haberte creado uno propio con sus propiedades, métodos y eventos propios. Eso como gustes.

En el formulario tu solo tocas el correcto funcionamiento de los controles para que la interactividad con el usuario sea la deseada. Solo eso. El resto l(lo que es código) lo haces en una clase asociada.

Pongamos un ejemplo:

Yo tengo un formulario genérico en el que quiero por ejemplo que el usuario escriba un código y se genere un ćodigo de barras.

Pues entre otras cosas en el formulario hará un textbox, un picture y un botón. El textbox es donde el usuario escribe su código y es posible que tu programes allí los eventos de keypress, lostfocus, gotfocus y algún otro. El botón es el que calcula el código de barras que se dibuja en el picture.

Pues el código del botón podría ser algo como esto
Dim Ob as CodigoBarras
Ob.Codigo=textbox.text 'aquí metes el código que te hayan escrito en la propiedad codigo
Ob.ObtenerCodigoBarras()
picture.load=ob.CBarras


CodigoBarras es una clase asociada a ese formulario y que incluye propiedades y métodos para trabajar con códigos de barras. En esa clase creas las propiedades y métodos que necesites que podría tener un código como este:

private $codigo as string 'esta es la variable que contiene el código y que será conocida en toda la clase
Dim $CBarras 'variable donde quedará el código de barras calculado
property Codigo as string 'esta es una propiedad creada para que esta clase reciba el código que el usuario ha escrito
property read CBarras 'propiedad de solo lectura en la que estará el código de barras obtenido

public sub ObtenerCodigoBarras()

...
' Aquí calculas el código de barras correspondiente
...
$CBarras= ... 'aquí metes el código de barras calculado
end



' Al crear las property se han creado automáticamente tes funciones
public function Codigo_read() as string 'función para obtener el valor de la propiedad
return $Codigo
end
public sub Codiigo_write(value as string) as string 'función para devolver el valor de la propiedad codigo
$Codigo=value
end
'Cbarras era de solo lectura así que solo tiene funcion read y devuelve un valor que es donde esta clase devuelve un código de barras calculado y almacenado en la variable $CBarras
public function CBarras_read() as picture 'función para devolver el valor del código de barras
return $Cbarras
end


El caso es que tu en el código de tu formulario lo único que haces es gestionar tus controles y pasar los parámetros a la clase que tiene el código.

Acabas de ver como hago un formulario en el que solo se trabajan los controles y para el resto se usa una clase que es donde se calculan las cosas. Las clases pueden heredarse así que tu puedes hacerte una clase genérica para trabajar con bases de datos que tenga propiedades que tu necesitas y cada vez que haces un formulario y quieres trabajar con una base de datos declaras una variable de ese tipo, le pasas los parámetros correspondientes y recibes su resultado en tu formulario. Podrías hacerte otra clase de base de datos que heredara de la genérica anterior y que tuviera propiedades y métodos propios para hacer alguna cosa muy concreta por ejemplo.

Solo añadir que las clases pueden heredarse unas de otras, que todos los controles (textboxes y demás son también clases y que entre todos ellos el formulario también es una clase por lo que cumple con lo que tienen todas las clases: poder heredarse, poder tener sus propios métodos, eventos, propiedades, etc.

No puedo dar un curso de gambas en este post. Es lo básico para que entiendas como funciona la programación orientada a objetos. No gambas. Todos funcionan así. gambas es muy eficiente, pero no es el único.

Por ponerte un ejemplo yo tengo una clase genérica que sirve para controlar el teclado. Cada vez que quiero en un form controlar las teclas que un usuario pulsa lo que hago es llamar a las funciones que tengo en esa clase  y ya está. Igualmente tengo otra para trabajar con bases de datos ,...
 



 
última edición por soplo el Martes, 16 Noviembre 2010, 20:15; editado 1 vez 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Una Clase Formulario Personalizada 
 
Hola colega. Yo también conocí el modelo de objetos de Foxpro. No tanto como tu, pero creo que lo suficiente para entender lo que pretendes.

Te paso un programa inacabado en el que para los mantenimientos básicos y no tan básicos he creado un clase llamada CData que es el entorno de datos, el cual lee en la propiedad Tag del form el nombre de la tabla y del campo clave principal.
Esta clase crea una barra de navegación al pie del formulario con los típicos botones de primero, anterior, siguiente, ultimo, nuevo reg., editar, grabar y un label con el index del total de registros. Esta clase cada vez que pulsas un boton, se recorre los controles del formulario y los que en su prop. tag tienen un campo (que pertenece a la tabla de tag->form) lo muestra o actualiza según el botón pulsado. Cuando es un combobox, en la prop. tag indicas la tabla en la que buscar, el campo que los enlaza en cada tabla y el campo a mostrar en el combo y lo hace automático y más o menos igual que el combo con label puedes mostrar información de la tabla que no se deba modificar. Es importante que el form tenga Arrangement Vertical para que acepte correctamente la barra de nav.
Esta clase tiene eventos afterUpdate, beforeUpdate, afterDelete, beforeDelete, etc. además un evento showdata cada vez que actualiza los datos en pantalla. Los after_loquesea se puede anular con STOP EVENT. También posee un metodo bookmark que permite mover el puntero del result (clase.rst - que es publico) donde quieras.

Posterior a esta clase cree otra parecida pero que solo muestra los datos, no permite añadir, editar, grabar, borrar. Con los mismos eventos, métodos, etc. En Foxpro habrías creado primero viewData y después cData que hereda de la anterior para aprovechar, no obstante como era para mi y fue sin planear (muy mal hecho) no lo he implementado correctamente con propiedades en vez de variables públicas, etc. Además seguro que tiene algún bug pero si la estudias, te gusta y detectas algo, avisa.

Funciona con sqlite3 (y mysql aunque no lo he probado todavía)

Ahora ando muy liado pero cuando me ponga lo haré correctamente.
Si tienes cualquier duda, pregunta y si tienes ideas igual. El programa esta inacabado pero seguro que te da ideas.

Un saludo
Antonio
 



 
ahtonio - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Una Clase Formulario Personalizada 
 
Citar:

Creo que no han comprendido lo que deseo, no solo la manipulación de datos.  Yo quiero, por ejemplo, agregar una propiedad al formulario que me sirva para guardar el nombre de la tabla maestra asociada al mismo, esto con el fin de crear rutinas genéricas, para el manejo de datos.

Sí, está entendido lo que preguntas. Pero tus conocimientos previos son inadecuados y no te permitirán interpretar directamente los conceptos de la POO.

Citar:

Ejemplo (no se si esto funcione, no manejo bien el gambas).
'Rutina para buscar un dato
dim lcTabla as String
dim lcQuery as String

lcTabla = Me.cTablaPrincipal    'Propiedad del formulario que guarda el nombre de la tabla maestra
lcQuery = "Select * from " & lcTabla
miControldeDatos.query = lcQuery
 


Ese código tendría un acoplamiento menor que si introdujeras partes específicas de la consulta SQL, pero de todos modos no es recomendable hacerlo así. Desde la perspectiva de la POO tu formulario no tiene por qué contener código SQL. Debes usar el formulario únicamente para la presentación de datos y la interacción con el usuario como explicitó Shordi. Esto responde al Principio de responsabilidad única que obviamente indica que una clase debe tener una única responsabilidad: es decir, debe cumplir sólo con una tarea manteniendo un mismo nivel de abstracción.

Citar:

Reconozco que le falta la cláusula Where (la cual estaria almacenada en otra propiedad del formulario). Observen que esta busqueda funcionaria sin ningún tipo de cambio en todo formulario que se incluyera si dependiera de la clase form.

El formulario debería tener propiedades o métodos que permitan establecer los datos que debe presentar, esos atributos del formulario deben ser de tipos básicos String, Integer, etc. Debe ser responsabilidad de otro objeto "pasar" al formulario los datos que se deben presentar.

Por ejemplo, el formulario podría tener un método "MostrarDireccion" con esta implementacion:

PUBLIC SUB MostrarDireccion(direccion AS String)
  txtDireccion.Text = direccion
END
 


Pero es responsabilidad de otro objeto enviar al formulario el mensaje:

  FMain.MostrarDireccion("MessiBalonDeOro 2009, Barcelona, España")
 

Y puede ser responsabilidad de este mismo objeto o de otro obtener el dato "Direccion" (eso depende del diseño).

Citar:

Eso creo que es a lo que se refiere la parte de reutilización de la orientación a objetos.

No. La POO fomenta la reutilización a través del encapsulamiento, la agregación, la herencia y el polimorfismo. Si no conoces estos conceptos, entonces debes aprender POO/DOO.

Sobre estas cosas estoy escribiendo en el libro Cómo programar con Gambas, pero recién empiezo a volcar contenidos allí por lo que aún está muy incompleto. Podrías consultar esos conceptos en la Wikipedia, luego intentar aplicarlos en gambas y preguntar las dudas que te vayan surgiendo.

Saludos.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Una Clase Formulario Personalizada 
 
Citar:
Te paso un programa inacabado en el que para los mantenimientos básicos y no tan básicos he creado un clase llamada CData que es el entorno de datos, el cual lee en la propiedad Tag del form el nombre de la tabla y del campo clave principal.


Gracias ahtonio por el código que me pasaste, lo estudiaré y te contaré como me va.

En cuanto a los demás no me queda mas que agradecer sus comentarios.  Me pondré juicioso a estudiar el libro de gambas antes de comenzar mi proyecto, no quiero que por falta de conocimientos me toque trabajar arduamente en el mantenimiento y actualización de la aplicación, a eso es a lo que mas le temo. No soy de los que traga entero, tampoco de los que se coloca a programar a la ligera busco siempre exprimir al máximo el uso de objetos y funciones, me disgusta estar copiando y pegando la misma porción de código en los formularios, cuando eso me ocurre por segunda vez en el desarrollo de un programa, de inmediato pienso como implementar una función.

De los comentarios que recibí se me ocurrió la idea de realizar una clase no visual que contenga propiedades que almecene los datos relacionados con el nombre de la tabla, el campo llave de la tabla y los procedimientos para implementar los desplazamientos y las búsquedas, entre otras muchas funciones mas.  Esta clase se instancia cuando arranca la aplicación y permanece accesible a todo el proyecto. Cuando un formulario es instanciado (o cuando recibe el enfoque), en ese momento le pasa los datos necesarios a la clase de manejo de datos para que sea esta y solo esta la que gestione los procesos sobre el control de datos del formulario.  No tengo idea como voy a realizarlo, pero ese es el propósito.

No duden ni un momento que cuando me surja nuevamente una duda, los estaré contactando por este medio.

Nuevamente gracias a todos por su ayuda.


Atte: El Patuleko
 



 
el_patuleko - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
10.00 10 10 1
 

Publicar nuevo tema  Responder al tema  Página 2 de 2
Ir a la página Anterior  1, 2

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario