FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
Herencia
Hola, estoy trabajando con Delphi7 en vcl, el tema es que estoy creando formularios que me sirven de base para otros formularios, asi tengo una jeraquia de 4/5 formularios, el problema es que por temas relacionados con la seguridad del sistema, yo en el formulario base de todos (el mas alto en la jeraquia f01) implemento dicha seguridad, y si no cumple ciertas condiciones el formulario no se debe abrir. Tengo eventos en todos los OnShow y en todos los OnClose de los formularios de la herencia.
yo lo que necesito es que si no se cumple la condicion del formulario f01, no se siga con nada mas, es decir no ejecute nada mas, pero el tema es que cuando esto sucede, yo disparo un close del f01, lo que dispara el close de todos los formularios, y como la validacion de seguridad la tengo en el onShow, luego de disparar los close correspondientes intenta seguir disparando los shows y ahi da error, yo lo que necesito es poder interrumpir esa ejecucion de los shows en el mismo lugar que obligo a hacer los close. ¿Alguien sabe como interrumpir esta ejecucion en la herencia? (El abort me da error) Gracias Lisandro |
#2
|
||||
|
||||
La verdad que no entiendo mucho tu problema, si tu problema es que no se ejecuten los métodos heredados o es otro, si tu tienes una clase
Código:
TClase = class public procedure Metodo; virtual; end; ... procedure TClase.Metodo; begin ShowMessage('Hola Mundo!'); end; Código:
THeredada = class(TClase) public procedure Metodo; override; end; Código:
procedure THeredada.Metodo; begin inherited; {Aquí hace que se ejecute el método de la clase heredada} ShowMessage('Chau Mundo!!'); end; Código:
procedure THeredada.Metodo; begin {Como verás no llama al metodo heredado (inherited) } ShowMessage('Chau Mundo!!'); end; ¿Es esta tu duda? Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
|||
|
|||
No es esa la duda justamente, pero ya encontre una posible solucion, lo que a mi me pasaba es que no podia, ante una determinada situacion, detener la ejecucion de los formularios que heredaban del principal
-------------------------- f01 onshow if(i=1)then // cortar todo no seguir else showmessage('hola mundo'); ---------------------------- f02=class(Tf01) onshow inherited; showmessage('como estan') ------------------------------ fUsuarios=class(TF02) onShow inherited; //Abro DataSets y otras cosas entonces cuando yo hacia el show del fUsuarios disparaba el Show del este, que disparaba el show de f02 y el show de f01 y este ultimo no cumplia la condicion, entonces yo disparaba un close y luego, porque entro por inherited del fUsuarios y f02, seguia con lo que tenia en el onshow de estos y eso es lo que yo no queria. Saludos Lisandro |
#4
|
||||
|
||||
¿ Como lo has solucionado ? ¿ Una llamada al método Abort ?
Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#5
|
|||
|
|||
no lo hice de la manera mas fina, pero creando una variable de clase la cual cuando se dispara el create la seteo con un valor y cuando la condicion no se cumple le cambio el valor, y solo la utilizo al momento de hacer el onShow y pregunto por el valor de la misma, lo pude solucionar, en cuanto al Abort me dispara un error.
Saludos Lisandro |
#6
|
|||
|
|||
Hola, solo por curiosidad, ¿por que no, en lugar de validarlo en el onshow, lo validas en el create?, No seria mas optimo, que en el momento de crear el objeto se pueda verificar si el usuario cuenta con los derechos de acceso y de no ser asi, mejor que no se cree el objeto.
Saludos Alfredo |
#7
|
|||
|
|||
lo que pasa es que en el caso de que no tenga que crear el formulario, no estaria entrando nunca por esa validacion.
Es decir, yo puedo crear el formulario y no destruirlo hasta que salga de la aplicacion, por ende la primer invocacion disparara el onCreate pero las demas veces que yo lo invoque no lo hara, y si pasara por el OnShow Saludos Lisandro |
#8
|
|||
|
|||
ok., pero no seria mejor que la validacion del acceso se realice de una sola vez, y no cada vez que se quiera accesar al objeto, en fin, solo estoy divagando, y creo que me estoy saliendo del tema del hilo.
Saludos Alfredo. |
#9
|
|||
|
|||
no, debido a que el formulario puede tener una propiedad de revalidacion, es decir que cada vez que entre al mismo deba pedir el Usr y Psw y a su vez, el sistema tiene la posibilidad de cambiar de usuario, y esto no funcionaria como se espera si la validacion estaria en el onCreate
Saludos Lisandro |
|
|
|