| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 28 Mar, 2008 1:22 pm Asunto: Problemas al crear componentes |
|
|
Hace unas semanas preguntaba sobre como crear componentes (Creación de componentes), ya que quería adaptar un código que me había pasado XyVy sobre el tema de Cddb. Después de pegarme unas cuantas tortas ya que había includes (Basepch.h sustituido por Vcl.h, imagino que es correcto) del proyecto original (en BCB 6) que yo no tenía (trabajo con BCB5) logré compilarlo sin problemas, pero al instalarlo me encontré con un error que no sé por donde coger:
Me surge otra duda: Todo este código que al fin y al cabo son sólo funciones, ¿podría implementarlo tal cual en mi programa? Quiero decir sin necesidad de que fuera un componente. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
frios Lt

Registrado: 20 Nov 2005Mensajes: 79Ubicación: España
|
Publicado: Lun 31 Mar, 2008 4:16 pm Asunto: |
|
|
Yo, la verdad jamás había visto ese error.
Hombre, si las funciones que incluyes sólo las vas a usar una vez, quizás lo mas cómodo sea pasarlas a tu ejecutable y listo, pues si es así te va a ocupar el mismo espacio en el ejecutable que si le dices que compile con el bpl incluido.
Otra cosa será que las vayas a usar bastante, pues de esa forma es mas sencillo mantener las funciones, y las correcciones que pudieras hacerles son mas sencillas de aplicar (solo necesitas recompilar los ejecutables que las usen).
Te pasaría una plantilla de un paquete como los uso yo, pero no te sevirán en el BCB5 (uso el 2007). De todas formas te explico como los hago.
1º Archivo -> nuevo -> paquete
2º Guardarlo con el nombre que quiero, y donde yo quiero
3º Component-> new vcl component
en el asistente selecciona como base el TComponent, dale el nombre que quieras, la paleta donde quieres que se instale y dile que lo agrege al proyecto que tienes abierto.
Ya tenemos la base creada
Ahora en el .h del componente añade en la parte pública el nombre que le vas a dar a una de las funciones
por ejemplo
| Código: | void __fastcall ComprobarNS();
|
y en el .cpp del componente
| Código: | //---------------------------------------------------------------------------
void __fastcall TBuscar::ComprobarNS()
{
String Retorno; int Tipo;
Retorno = Nombre;
TfrmControlDLL *Ventana;
Ventana = new TfrmControlDLL(&Retorno, &Tipo, this);
Ventana->ShowModal();
Filtro = IntToStr(Tipo);
Nombre = Retorno;
delete Ventana;
Ventana = 0;
} |
Si utilizas algún otro componente dentro de este no olvides incluir en el Requires del proyecto el bpi del componente en cuestión.
Compila, instala y lo tienes en la paleta donde le hayas dicho
Para usarlo, sencillo | Código: | componente->ComprobarNS(); |
Como habrás podido ver en el código que te paso desde este componente estoy llamando a un formulario que tengo en el mismo paquete, el cual a su vez llama a una dll. Vamos que se pueden hacer maravillas con los componentes. Yo tengo una aplicación repartida entre componentes que cargo en tiempo de ejecución, esto me permite modificar una función y mandar únicamente el paquete en el que se encuentra y listo.
Espero que este rollo te sirva de algo
Saludos
Félix |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Vie 29 Ene, 2010 9:34 pm Asunto: |
|
|
Después de varios días intentando añadir un componente y leer todas vuestras respuestas, he llegado a la conclusión que, o bien no uso el mismo compilador que vosotros o bien no tengo idea de programación. Pienso que deben ser las 2 juntas
Voy a ello: Uso el 2007. He hecho una clase (creo, porque ya no estoy seguro de nada) la cual he probado en mi programa. Esa clase estoy dispuesto a compartirla en cuanto no vea ningún fallo ni falta. Desde mi programa la llamo con showmodal y de momento va bien, aunque le faltan "cositas". Está compuesta de un form, varios checks y un par de botones
Pues bien, intento ponerlo en la paleta de dialogos. Para ello voy a component->New Vcl Componet
Me pide el ancestor y escojo TComonDialogs
Me aparece la pantalla Component
Class Name: PrintListView
Palette Page: Dialogs
Unit Name: .....print_list.cpp
Search Path: d:\print
Ahora viene el show: Me aparece la ventana Create Unit donde hay un check. En la parte superior pone: | Código: | Choose to create a unit or add the created unit to an active package. After the unit is added to a package it can be installed through the Install Packages dialog |
Por lo que yo entiendo si dejo activado el check me crea los archivos .cpp y .h base. Pero si me descuido me sobrescribe los originales. No me deja desactivar el check.
Y hasta ahí puedo leer.
He probado con el package y me saltan 6 o 7 errores, como que no tiene referencia a Close() (del form)
¿Me podéis desliar un poco?
Gracias, muchas gracias por dejar que me desahogue y por vuestra inestimable ayuda
Saludos, Bosoft |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Vie 29 Ene, 2010 10:56 pm Asunto: |
|
|
Crear un componente es algo distinto que crear un Form.
Debes derivarlo de una clase VCL de la que heredaras.... Según el componente escogeremos la clase madre que nos interese.
Luego tendremos que escribir código no visual, las propiedades que serán visuales... y las funciones miembro.
Interesa ver el código fuente d los componentes de la VCL. El Builder trae algunos ejemplos.
Otra forma más fácil es crear un Frame, en este caso el trabajo es visual, pero no funcionará como un componente de la Paleta, aunque su código será reutilizable.
Esto no son más que unas muy simples pinceladas para empezar a trabajar.
Saludos. |
|
| Volver arriba |
|
 |
bosoft Master

Registrado: 23 Oct 2005Mensajes: 342
|
Publicado: Sab 30 Ene, 2010 12:46 pm Asunto: |
|
|
Gracias escafandra por "orientarme", pero me corroe una duda: ¿Como se puede hacer algo visual de modo no visual sin probarlo antes?
Yo quiero hacer algo parecido al PrintDialog, con su form, sus ckechs y si no pruebo antes si la función funciona.....
Digo yo que habrá alguna forma de "pasar" todo el código a un componente.
Después de hacer pruebas he podido "meter" mi "componente" en un package e instalarlo, pero cuando pinchas en components no tiene nada
Supongo que deberé arreglar un poco el H para que todo esté en su lugar
Seguiré estudiando el tema con los ejemplos que me he bajado del foro
Gracias
Saludos, Bosoft |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Sab 30 Ene, 2010 11:44 pm Asunto: |
|
|
| bosoft escribió: | | Gracias escafandra por "orientarme", pero me corroe una duda: ¿Como se puede hacer algo visual de modo no visual sin probarlo antes? |
Para eso está el debug. A medida que añades cosas lo vas probando, claro que tendrás que tener un componente mínimo funcional para poder comenzar...
| Cita: |
...Después de hacer pruebas he podido "meter" mi "componente" en un package e instalarlo, pero cuando pinchas en components no tiene nada... |
La mejor manera de empezar, para evitar complicaciones, es:
menu Builder -> Component -> new Component -> Antecesor Type....
El código que tengas escrito, en esencia te servirá. Lo tendrás que trasladar y adaptar.
Este componente así creado estará en una paleta y si tendrá algo
| Cita: |
Seguiré estudiando el tema con los ejemplos que me he bajado del foro
|
En el mismo Builder tienes ejemplos en:
Builder\Examples\Controls
Saludos. |
|
| Volver arriba |
|
 |
|