Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-11-2007
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
Limites de Delphi

Les cuento que ya me estoy cansando de esto.

Como el titulo dice, quiero saber si lo que estoy haciendo tiene algun limite o no, ya que no me anda o yo soy un verdadero inutil.
Resulta que cuando cargo una libreria BPL necesito pasarle algun parametro al Create. Como es un TForm yo me hice mi clase:

Código Delphi [-]
type
  TFormConPermisos = class(TForm)
  public
    constructor Create(AOwner: TComponent; datoExtra: string); reintroduce;
  end;


implementation

constructor TFormConPermisos.Create(AOwner: TComponent; datoExtra: string);
begin
   inherited Create(AOwner);
end;

Entonces cuando instancio mi BPL el codigo de la funcion es asi:

Código Delphi [-]
function TModules.loadModule(moduleName: string): Integer;
var
  AClass: TPersistentClass;
  Formulario: TFormConPermisos;
begin
    {* verifico que el modulo existe, junto con el archivo *}
    if
      FileExists(ExtractFilePath(ParamStr(0))+moduleName)
      and
      (moduleName <> '')
    then
    begin
        {* Cargo el modulo a memoria *}
        handle := LoadPackage(ExtractFilePath(ParamStr(0))+moduleName);

        {* si es un modulo válido *}
        if handle <> 0 then
        begin
            try
                AClass := GetClass(CLASSBPL);

                try
                    if AClass <> nil then
                    begin
                        LockWindowUpdate(Handle);
                        EnableAnimation(false);

                        Formulario := TFormConPermisos(AClass).Create(Application, 'MI DATO EXTRA') as TFormConPermisos;

                        EnableAnimation(true);
                        LockWindowUpdate(0);

                        Formulario.Show;

                        Result := 0;
                    end;
                except
                    on E:Exception do
                       Result := -1;
                end;
            except
                on E:Exception do
                   Result := -2;
            end;
        end
        else
            Result := -3;
    end
    else
        Result := -4;
end;

Esta funciona asi: loadModule('miLibreria.bpl');

Cuando esto se ejecuta, y hace el Create dentro de este nuevo Create en el inherited Create(AOwner); da error de access violation, en realidad ya no se que probar, en google nunca parece que alguien halla realizado esto.

Esta bien la herencia que estoy haciendo?
De que otra forma puedo pasarle parametros?

Gracias y ya no jodo mas.
Si algun dia averiguo como es, va un tutorial para todos ustedes.

Última edición por walito fecha: 15-11-2007 a las 21:35:19.
Responder Con Cita
  #2  
Antiguo 15-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Ese datoExtra ¿es imprescindible para construir la ventana?

En la mayoría de los casos, se puede crear una propiedad del Form para asignar su valor, con métodos Get y Set si se necesita.

Algunas veces queremos ahorrar una línea de código pasando parámetros a métodos, cuando por diseño, no debe ser así. Realmente no sé si es tu caso.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 16-11-2007
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
El dato es necesario ser pasado antes del Show, ya que en teoria ahi tendria que pasar alguna estructura y recibir alguna estructura sobre permisos, estos permisos hacen que se habiliten o no botones segun sus permisos por ejemplo.

Como podrias dices tu hacer el get y set antes del Show?
Todos mis modulos llevarian el mismo metodo set y get, recuerda que yo no pongo en mi USES estas form, ya que son cargados en forma dinamica.

Gracias
Responder Con Cita
  #4  
Antiguo 16-11-2007
Sinaloense Sinaloense is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 21
Sinaloense Va por buen camino
tu problema esta aqui:

Código Delphi [-]
constructor Create(AOwner: TComponent; datoExtra: string); reintroduce;

debe ser:

Código Delphi [-]
constructor Create(AOwner: TComponent; datoExtra: string); reintroduce; overload;
Responder Con Cita
  #5  
Antiguo 16-11-2007
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
Unhappy

Gracias por tu respuesta, ya lo habia probado igual tira access violation

Ahora me surgio una duda que seguro esta aca pero no entiendo.

El codigo original que funciona y levanta bien una BPL y muestro el Form es:

Código Delphi [-]
var
  Formulario: TForm;

Código Delphi [-]
Formulario := TComponentClass(AClass).Create(Application) as TForm;

Ahora segun entiendo yo lo hago asi:

Código Delphi [-]
var
  Formulario: TFormConPermisos; //Mi clase con el Create modificado

Código Delphi [-]
Formulario := TFormConPermisos(AClass).Create(Application, 'Mi dato extra');

No se si estoy haciendo bien de castear ACLass asi.

ALgun comentario?

Gracias
Responder Con Cita
  #6  
Antiguo 16-11-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Yo de esto no se mucho, peeeero:

¿Y si creao otro constructor?

Código Delphi [-]
constructor TFormConPermisos.CreateConPermisos(AOwner: TComponent; datoExtra: string);
begin
   inherited Create(AOwner);
end;
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
Bill Gates ve la revolución tecnológica sin límites gluglu Noticias 6 20-04-2007 10:07:46
El Ser Humano no tiene LIMITES vtdeleon La Taberna 5 26-09-2006 17:18:36
Hay limites en el tamaño de la sintaxis de un SQL ? tulio Firebird e Interbase 2 14-09-2004 12:15:09
Limites Internos - Pradox chona Tablas planas 3 15-04-2004 21:34:03
Limites de datos muli Firebird e Interbase 1 22-10-2003 17:52:04


La franja horaria es GMT +2. Ahora son las 05:42:46.


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