Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Herencia externa de componentes (BPL)(RTTI) (https://www.clubdelphi.com/foros/showthread.php?t=70689)

jednavlop 05-11-2010 04:55:07

Herencia externa de componentes (BPL)(RTTI)
 
Hola a todos.! Este es el primer tema que hago.. espero que no sea el ultimo.
Tengo algunas pequeñas dudas... Quisiera y les agradeceria mucho si me ayudaran .

He cargado 2 paquetes dinamicos. Cada paquete contiene un formulario.

¿Es posible hacer que un formulario herede del otro? ¿Como lo lograria?

He visto algunos ejemplos en este foro donde definen metodos con abstract y virtual... ¿Para que sirven estos?

¿Es posible llamar a un procedimiento o funcion pasandole parametros?

Estoy empezando en esto. De antemano gracias

Neftali [Germán.Estévez] 05-11-2010 11:47:27

Cita:

Empezado por jednavlop (Mensaje 381376)
Hola a todos.!

Hola y bienvenidoa los foros.

Cita:

Empezado por jednavlop (Mensaje 381376)
He cargado 2 paquetes dinamicos. Cada paquete contiene un formulario.
¿Es posible hacer que un formulario herede del otro? ¿Como lo lograria?

En diseño basta con que crees un formulario que herede del anterior, no importa que estén en diferentes packages; Lo que sí povocará eso es que el segundo package quedará "ligado" de forma estática al primero.
Es normal, ya que se el formulario del package2 deriva del formulario del package1, al cargar el package2 se cargará el package1 (puesto que lo has utilizado en diseño para la herencia).

Cita:

Empezado por jednavlop (Mensaje 381376)
He visto algunos ejemplos en este foro donde definen metodos con abstract y virtual... ¿Para que sirven estos?

Son "variaciones" que se aplican al funcionamiento de un método/procedimiento de un objeto.

Abstract indica que el método no está definido en el actual clase y que deberá ser obligatoriamente redefinido en las clases "hijas" que deriven de esta.

Virtual indica que el método/procedimiento de la clase actual (el que está marcado así) puede ser sobreescrito (override) en las clases hijas (derivadas de la actual).

Cita:

Empezado por jednavlop (Mensaje 381376)
¿Es posible llamar a un procedimiento o funcion pasandole parametros?

Sí.

Código Delphi [-]
  function suma(num1, num2:integer):integer;

  ...

  res := suma(3,5);

Tal vez no entendí bien esta última pregunta... :o

jednavlop 05-11-2010 15:04:50

Cita:

Empezado por Neftali (Mensaje 381399)
Tal vez no entendí bien esta última pregunta...

Gracias por responder,, me has aclarado mucho el tema.
No me explique bien en la ultima pregunta, lo que quiero saber es como llamar a una funcion o procedimiento que este dentro de una clase obtenida de un paquete externo dinamico, claro pasandole parametros.

// SaludOS y gracias

Neftali [Germán.Estévez] 05-11-2010 17:34:50

Luego con tranquilidad pensé que podía ser eso... ;)
En mi caso lo hago así (te orto un trozo de programa para que veas el funcionamiento):

Código Delphi [-]
...
const
  RUNBROWSE_METHOD     = 'RunBrowse';
var
  _FormBrowse:TForm;
  _FormBrowseClass:TFormClass;
  Routine: TMethod;
begin

    // recuperar el proceso y asi el formulario de browse
    _FormBrowseClass := YTrazProc.FormBrowseClass;
    // Creamos el form para acceder a los métodos
    _FormBrowse := _FormBrowseClass.Create(Self);
    // Bloque de proteccion para liberar
    try
      // Acceso a la rutina
      Routine.Data := Pointer((_FormBrowse as _FormBrowseClass));
      // Devuelve la dirección de un método published
      Routine.Code := (_FormBrowse as _FormBrowseClass).MethodAddress(RUNBROWSE_METHOD);

    finally
      // Liberamos el form
      FreeAndNil(_FormBrowse);
    end;

    // No ha encontrado el código de la rutina...
    if (Routine.Code = nil) then begin
      Exit;
    end;

    // hacer la llamada al RunBrowse
    i := TExecuteRunBrowse(Routine)(_FormBrowseClass,
                                    [ATTR_TYTRAZA],
                                    [Traza],
                                    [tsEqual],
                                    [False],
                                    ['FechaHora']);

    FFormBrowseTraz := YTrazProc.FormBrowse;
  end;
end;

He quitado algun trozo que sobra, pero las operaciones básicas están.
El tipo del procedimietno está definido con todos los parámetros:

Código Delphi [-]
  //: Tipo para ejecutar un método de clase RunBrowse
  TExecuteRunBrowse = function (FormBrowseClass: TFormClass;
                                AttrName : Array of string;
                                AttrValue : Array of Variant;
                                Operator : Array of TSQLOperator;
                                IsNot : Array of Boolean;
                                ...): Integer of object;

jednavlop 05-11-2010 18:37:14

BINGO!,, funciona!. ya he podido llamar a una metodo con parametros.

Te agradesco por la ayuda Neftali.

//SaludOS


La franja horaria es GMT +2. Ahora son las 06:22:03.

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