Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-02-2010
Avatar de GerTorresM
GerTorresM GerTorresM is offline
Miembro
 
Registrado: nov 2005
Ubicación: Tunja - Boyacá
Posts: 210
Poder: 19
GerTorresM Va por buen camino
crear componentes a partir de la una función

Hola a todos la situaciones del día de hoy es la siguiente:

en la actualidad tengo una función que me permite crear una consulta, esta función queda de la siguiente forma

Código Delphi [-]

function CrearConsulta() : TQuery;
Var TempConsultaLocal : TQuery;
begin
  TempConsultaLocal:= TQuery.Create(nil);
  with TempConsultaLocal do
    begin
      DatabaseName:= DMDatosServicios.DBServicios.DatabaseName;
      close;
    end;
  Result:= TempConsultaLocal;
end;

ahora en orden de ideas funciona de la mejor de la formas, pero me pregunto si puedo crear de forma igual componentes para colocar en mi formulario, para lo cual planteo el inicio de la siguiente función

Código Delphi [-]
function CrearComponente(pTop, pLeft, pWidth, pHeigth: Integer; pParent: TWinControl; pTipoComponente : TComponent) : TWinControl;
Var componente_temporal : TWinControl;
begin
  componente_temporal:= pTipoComponente.Create(nil);
  try
    componente_temporal.Parent:= pParent;
    componente_temporal.top:= pTop;
    componente_temporal.left:= pLeft;
    componente_temporal.width:= pWidth;
    componente_temporal.Height := pHeigth;
  except
  end;
  Result:= componente_temporal;
end;

Al intentar ejecutar el codigode la funcion
Código Delphi [-]
begin
  SGTarifa_local:= CrearComponente(0,0,100,50,self,TStringGrid);
end

obtengo este mensaje de error

incompatible types: 'TComponent' and 'Class Reference'

para lo efectos SGTarifa es un StringGrid

Última edición por GerTorresM fecha: 25-02-2010 a las 23:30:47. Razón: Complemento mensaje
Responder Con Cita
  #2  
Antiguo 26-02-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Tendría que ser:

Código Delphi [-]
SGTarifa_local:= CrearComponente(0,0,100,50,self,TStringGrid) as TStringGrid;

Por otro lado, ¿estás consciente de que debes destruir los objetos creados de esta manera?

// Saludos
Responder Con Cita
  #3  
Antiguo 26-02-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Tendría que ser:

Código Delphi [-]SGTarifa_local:= CrearComponente(0,0,100,50,self,TStringGrid) as TStringGrid;


Por otro lado, ¿estás consciente de que debes destruir los objetos creados de esta manera?

// Saludos
Como te explico el sabio roman, vos no estabas creando un StringGrid, porque le estabas pasando la clase. Al ponerle as TStringGrid creas el objeto diciéndole que tipo va a ser.

Y por si no se entendió lo que dijo roman, lo digo porque a mi me costaba entender ese concepto, al crearlo a través de una función tuya no estás permitiéndole a delphi generar el destructor. Tendrías que generarlo por código y me parece que no es muy funcional hacerlo así.
Responder Con Cita
  #4  
Antiguo 26-02-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por BrunoBsso Ver Mensaje
Al ponerle as TStringGrid creas el objeto diciéndole que tipo va a ser.
Bueno, no exactamente. El objeto se crea como TStringGrid desde un principio, sin necesidad del as. Pero de esta forma le indicamos al compilador que confíe en nosotros, que realmente el objeto es un TStringGrid.

Pero, en realidad no me había fijado bien; el problema viene desde antes. El error que marca el compilador se refiere al paso del último parámetro. Ese argumento es de tipo TComponent y se le quiere pasar un referencia de clase. Tendría que definirse dicho parámetro como TComponentClass, o mejor aún, como TWinControlClass ya que es lo que queremos devolver.

// Saludos
Responder Con Cita
  #5  
Antiguo 26-02-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Es que él quizo hacer un CrearComponente genérico, y con TStringGrid es necesario el as. Yo me fijaba concretamente en eso.
Parece que cada vez que respondo estás vos ahí para negarme/desestimar lo que digo.
Mejor dejo de querer ayudar, es molesto decir A y que atrás vengas vos con "no, porque si le cambias un package y le editas el source del application vas a usar B.J.P". Ya me cansé de eso.
Saludos y que anden bien.
Responder Con Cita
  #6  
Antiguo 26-02-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hombre, disculpa si te he parecido pesado, pero realmente no es mi intención "andar detras de ti". Si intervengo, es porque considero que no es bueno dejar una idea errónea a otros foristas y porque pienso que de esa manera ayudo no sólo al otro forista sino también a ti.

En todo caso, aunque mi intención no es la de molestarte, te pido disculpas si es la impresión que te he causado y cuidaré más la forma en que comento tus mensajes.

// Saludos
Responder Con Cita
  #7  
Antiguo 26-02-2010
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
que delicados estamos...
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
crear xml a partir de DataSet gesjug Varios 0 27-02-2008 10:09:06
Ejecutar función de JavaScript a partir del nombre de su identificador (string) dec HTML, Javascript y otros 12 24-08-2006 01:30:45
crear un XML a partir de ClientDataSet jmlifi Internet 2 08-01-2006 23:18:28
Como saber el tipo de componentes a partir de un string? Roger OOP 2 02-04-2004 13:21:48
Crear un EXE a partir de un TXT o CPP aleidania Varios 1 25-10-2003 18:36:45


La franja horaria es GMT +2. Ahora son las 14:38:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi