Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problemas con clases bases (https://www.clubdelphi.com/foros/showthread.php?t=61596)

razadi 13-11-2008 17:52:28

Problemas con clases bases
 
Hola a todos, bueno días, tengo un problema que no entiendo como resolverlo:

mi problema es el siguiente:

Tengo una clase base llamada frmMenuB esta es una forma que tiene encapsulado varios procedimientos y funciones que ocupo es MDIForm, tambien tengo otra clase base llamada frmCataBesta es MDIChild.

Creo una aplicación con instancias de estas dos clases bases y quedan de la siguiente manera:

frmMenuPrincipal que es inherited de frmMenuB
frmCatClientes que es inherited de frmCataB
frmCatVendores que es inherited de frmCataB
frmCatProveedores que es inherited de frmCataB

bueno para no hacer muy largo el cuento tengo el siguiente problema

1. como puedo hacer para saber que forma frmCatClientes,frmCatVendedores o frmCatProveedores esta activa en mi frmMenuPrincipal, si tengo abierta las tres, ya se que con ActiveMDIChild se cual esta activa de las MDIChilds pero en que evento lo cacho desde el menu principal?, lo estaba haciendo desde OnPaint pero no me resulta.

2. como hacer para que las acciones de frmCataB sean leidas desde frmMenuB para que yo las pueda tener en las instancias y no tenga que volver a escribir cada accion en las formas heredadas?

espero haber sido claro, espero sus comentarios.

eduarcol 13-11-2008 18:05:40

Cita:

Empezado por razadi (Mensaje 325845)

2. como hacer para que las acciones de frmCataB sean leidas desde frmMenuB para que yo las pueda tener en las instancias y no tenga que volver a escribir cada accion en las formas heredadas?

espero haber sido claro, espero sus comentarios.

Si estas heredando estas acciones por defecto las toma la clase hija, sin necesidad que aparezcan en el editor de codigo. Por ejemplo si en la clase base programas algo en el formcreate en la clase hija deberia aparecer la palabra inherited cada vez que quieras usar ese evento, eso lo que te indica es en que posicion se ejecutara el codigo contenido en la clase base.

razadi 13-11-2008 18:30:04

Cita:

Empezado por eduarcol (Mensaje 325850)
Si estas heredando estas acciones por defecto las toma la clase hija, sin necesidad que aparezcan en el editor de codigo. Por ejemplo si en la clase base programas algo en el formcreate en la clase hija deberia aparecer la palabra inherited cada vez que quieras usar ese evento, eso lo que te indica es en que posicion se ejecutara el codigo contenido en la clase base.

Te agradezco tu respuesta rápida eduarcol, pero no es eso lo que no puedo resolver, lo pongo de esta maner haber si me hago entender mejor:

en mi clase base frmCataB tengo una action llamada acActionCerrar, esta accion lo que hace es que cierra la forma con Self.close ok?.

En mi clase base frmMenuB tengo un boton que solo aparece cuando abro una forma descendiente de frmCataB, a este boton le quiero pegar la action, es decir frmMenuB.boton.action = frmCataB. acActionCerrar; si relaciono estas clases bases lo puedo hacer sin problemas, pero cuando hago instancias me marca error, por obvias razones. bueno quiero hacer esto en las clases bases porque no quiero repetir este codigo en todas mis formas descendientes de frmCataB.

roman 13-11-2008 18:46:55

Cita:

Empezado por razadi
por obvias razones

Pues no me parecen tan obvias.

En todo caso, ¿no puedes hacer la asignación por código al momento de crear el catálogo?

// Saludos

razadi 13-11-2008 22:36:42

Solucuion alternativa
 
Cita:

Empezado por roman (Mensaje 325862)
Pues no me parecen tan obvias.

En todo caso, ¿no puedes hacer la asignación por código al momento de crear el catálogo?

// Saludos

Justamente eso es lo que no quiero hacer, porque tendría que estar haciendolo en cada forma y como son acciones estandar...

Econtre una forma de hacerlo aunque un poco rimbombante pero me funciono, lo que hice fue lo siguiente: extender la TForm a modo de agregar como propiedades en runtime las acciones que habran de ejecutarse y llamarlas desde la otra forma.

Código Delphi [-]
type
  TMiForm = class helper for TForm
  private
    procedure SetacFKCerrar(const Value: TAction);
    function GetacFKCerrar: TAction;
  published
    property acFKCerrar: TAction read GetacFKCerrar write SetacFKCerrar;
  end;

esto esta buenisimo, si alguien puede extender en esto pues sería fabuloso.

Saludos y gracias.


La franja horaria es GMT +2. Ahora son las 13:50:28.

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