Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problemas al crear componentes

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problemas al crear componentes Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Dirección AIM
Mensaje    Asunto: Responder citando

Gracias por la respuesta. Lo probaré ahora mismo, y aunque es una cosa para un sólo caso, y además particular mio, me viene bien para aprender. Ya te diré como ha ido la cosa.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

¡¡¡PERFECTO!!! Gracias a los dos: a Xyvy que pasó el código original y a frios que me dio la solución de instalación. Ya os informaré de si funciona adecuadamente.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Es curioso: Exactamente con el mismo código en el equipo de mi casa se ha instalado sin ningún problema y en otro PC diferenet me sigue dando el mismo error; no lo entiendo.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.