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 07-08-2013
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Question 'Cast' basado en un arreglo.

Buen día/tarde/noche según aplique, jóvenes.

A ver si ustedes ven el problema donde yo no lo encuentro. Tengo el siguiente código:
Código Delphi [-]
procedure TformReporteadorV2.ImprimeExportaSIS;
var
   ElReporte : TqckrprtPadre;
   wsNombreArchivo : WideString;
   iIndiceI: Integer;
   aReportes: array of TqckrprtPadre;
begin
   SetLength(aReportes,6);
   aReportes[00] := TqrpSIS_SS_PSQ_001;
   aReportes[01] := TqrpSIS_SS_PSQ_012;
   aReportes[02] := TqrpSIS_SS_PSQ_128;
   aReportes[03] := TqrpSIS_SS_PSQ_129;
   aReportes[04] := TqrpSIS_SS_PSQ_130;
   aReportes[05] := TqrpSIS_SS_PSQ_131;
   for iIndiceI := 0 to Length(aReportes) do
   try
      ElReporte := (aReportes[iIndiceI] as TqckrprtPadre).Create(Self);
      MessageDlg('Reporte '+ElReporte.Name+' creado y funcionando.', mtInformation, [mbOK], 0);
   finally
      ElReporte := nil;
   end;
end;

en el cual intento tomar el reporte que corresponda de acuerdo a un índice que apunta a un elemento de un arreglo, pero aparentemente estoy haciendo algo que no debo por que me manda éste error:

[Error] uformReporteadorV2.pas(5364): Incompatible types: 'TqckrprtPadre' and 'Class reference'

Agradeciendo de antemano. ¿Alguna idea que puedan darme para solucionar ésto?
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #2  
Antiguo 07-08-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En principio, ahí falta el -1
Código Delphi [-]
for iIndiceI := 0 to Length(aReportes) -1 do
Responder Con Cita
  #3  
Antiguo 07-08-2013
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola

Me parece que debes declarar la referencia de clase para TqckrprtPadre

Código Delphi [-]
TqckrprtPadreclass= class of TqckrprtPadre;

y luego

Código Delphi [-]
aReportes: array of TqckrprtPadreclass;

Luego

Código Delphi [-]
for iIndiceI := 0 to Length(aReportes) -1 do
   try
      ElReporte := TqckrprtPadreclass(aReportes[iIndiceI]).Create(nil);
      MessageDlg('Reporte '+ElReporte.Name+' creado y funcionando.', mtInformation, [mbOK], 0);
   finally
      ElReporte.free;
      ElReporte := nil
   end;

Espero que sea util

Saludos

Última edición por Caminante fecha: 07-08-2013 a las 23:39:56.
Responder Con Cita
  #4  
Antiguo 08-08-2013
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Sugiero este pequeño cambio al código de Caminante

Código Delphi [-]
for iIndiceI := 0 to Length(aReportes) -1 do
   try
      //ElReporte := TqckrprtPadreclass(aReportes[iIndiceI]).Create(nil);
     ElReporte := aReportes[iIndiceI].Create(nil);
      MessageDlg('Reporte '+ElReporte.Name+' creado y funcionando.', mtInformation, [mbOK], 0);
   finally
      ElReporte.free;
      ElReporte := nil
   end;

Saludos cordiales
Responder Con Cita
  #5  
Antiguo 08-08-2013
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Me parece que si.

Saludos
Responder Con Cita
  #6  
Antiguo 08-08-2013
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Si tienes una version de dephi mas moderna, el uso de genericos es mejor.

Ademas, "caminar" una enumeracion es mucho mejor asi:

http://delphi.about.com/od/beginners/a/delphi_loops.htm

Código Delphi [-]
for varName in enumName do
begin
    
end;


Y pusiste el error, pero no cual de todas las lineas lo saco!
__________________
El malabarista.
Responder Con Cita
  #7  
Antiguo 08-08-2013
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por mamcx Ver Mensaje
...Y pusiste el error, pero no cual de todas las lineas lo saco!...
¿El número entre paréntesis no es el número de línea?
[Error] uformReporteadorV2.pas(5364): Incompatible types: 'TqckrprtPadre' and 'Class reference'

Y de hecho, el error es para cada una de las líneas que se añaden a la matriz.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #8  
Antiguo 08-08-2013
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Si pero la linea 5364 es cual en el codigo que pusiste de ejemplo?

Uno deduce que es

Código Delphi [-]
ElReporte := (aReportes[iIndiceI] as TqckrprtPadre).Create(Self);

Pero es mejor ser explicito.
__________________
El malabarista.
Responder Con Cita
  #9  
Antiguo 08-08-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Tiammat.

Hay algo que no me quedo claro, ¿ Cual es la declaración de la clase TqckrprtPadre ? (de quién deriva, etc)

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 09-08-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
Yo creo que falta algo así... (Casteo a TQckRptPadre al asignar a ELReporte)

Cita:
Empezado por cloayza Ver Mensaje
Sugiero este pequeño cambio al código de Caminante

Código Delphi [-]
for iIndiceI := 0 to Length(aReportes) -1 do
   try
      //ElReporte := TqckrprtPadreclass(aReportes[iIndiceI]).Create(nil);
     ElReporte := TQckRptPadre(aReportes[iIndiceI].Create(nil));
      MessageDlg('Reporte '+ElReporte.Name+' creado y funcionando.', mtInformation, [mbOK], 0);
   finally
      ElReporte.free;
      ElReporte := nil
   end;

Saludos cordiales


En cualquier caso, Caminante ha indicado el camino correcto, en mi opinión.

Yo tengo una unidad donde abro varios Quick report que descienden del mismo y hago lo siguiente:

En una unidad uFrmQR tengo algo así.
Código Delphi [-]
  TFrmQRClass = class of TFrmQR;


pPraram es un parámtetro que tiene el Create de TFrmQr.
Código Delphi [-]
procedure CrearQR(const pClassQr, pParam: String);
var
   i: Integer;
   fc: TFrmQRClass;
   f: TFrmQr;
   Qr: TQuickRep;
   Encontrado: Boolean;
begin
   fc := TFrmQRClass(FindClass(ClassQr));
   f := TFrmQr(fc.Create(Self, pParam));
   try
      i := 0;
      Encontrado := false;
      repeat
         if f.Components[i] is TQuickRep then
         begin
            Qr := (f.Components[i] as TQuickRep);
            Qr.PreviewModal;
            Encontrado := true;
         end;
         inc(i);
      until  (i >= f.ComponentCount) or Encontrado;
   finally
      f.Free;
   end;
end;

Espero te pueda servir de ayuda. Un saludo
__________________
La Madurez se llama...
~~~Gaia~~~

Última edición por ozsWizzard fecha: 09-08-2013 a las 12:46:49. Razón: Faltaba una frase al final
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
Duda con Cast SQL, ADO Access juriberuiz SQL 0 23-04-2009 00:29:56
Reporte basado en un query Puberta Varios 5 01-02-2008 18:22:04
Cast para string lucasarts_18 Varios 9 13-07-2005 22:12:57
Consulta Cast marceloalegre SQL 4 10-06-2005 17:30:46
Cast a un Blob Triton Firebird e Interbase 0 20-02-2004 09:49:53


La franja horaria es GMT +2. Ahora son las 14:10:58.


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