PDA

Ver la Versión Completa : "Undeclared Identifier "CLOSE"


anghell77
09-10-2006, 08:13:23
Puede que sea de novatísimo...pero no lo sé...

Alguien sabe porqué demonios no me reconoce la instruccion CLOSE en un formulario??
La situación:
Tengo un formulario que es submenú de Reportes.
Dos botones en este form, MENU REPORTES, y MENU PRINCIPAL
El primero (Menu Reportes) envía obvio al form con las opciones del menú de reportes, el cual se queda abierto pero minimizado mientras trabajo en el subemenu (form donde tengo el problem)
El segundo (Menu Principal) debe cerrar mi formulario de submenú, el menú de reportes y enviar hasta el primer formulario del proyecto.

La situación está en que:

procedure TRep_Inv.Menu_ReportesClick(Sender: TObject);
begin
Rep_Inv.Close;
Menu_Reportes.Show;
end;

Lo curioso es que en éste evento (el anterior) si me envía al form menu_reportes...

En el siguiente me da el error:

procedure TRep_Inv.Menu_PrincipalClick(Sender: TObject);
begin
Rep_Inv.Close;
Menu_Reportes.Close; //Aquí el error "Undeclared Identifier "CLOSE"
Menu_Principal.Show;
end;

Y aquí el código del evento OnClose del Formulario de menú de Reportes

procedure TMenu_Reportes.FormClose(Sender: TObject; var Action: TCloseAction);
var a:=Integer;
begin
For a:=17 downto 0 do
Menu_Reportes.AlphaBlendValue:=a*15;

Principal.WindowState:=WsNormal;
Principal.Visible:=true;
end;



Lo que debo aceptar, es que no sé para que rollo sirve el ShowModal, MIDI, MIDIChild....eso,...no se ni que demonios...todos mis forms están en su propieda FormStyle fsNormal y ya antes desde otros formularios había hecho la llamada de cerrar el formulario actual, el de menu de reportes y que me dejara en el principal...

NOTA: Aún de que no se encuentre en el uses del implementation,la unidad correspondiente al Menu_Reportes, me lo muestra en el evento ya escrito anteriormente

...
Rep_Inv.Close;
Menu_Reportes.Show;...


Y aunque lo agregue al uses, sigue el mismo error....
Ya busqué en la ayuda....y ps no...no encontré algo similar....
Gracias por el tiempo que se tomen en leerlo!!
{Saludos}

Bicho
09-10-2006, 08:59:00
Hola,

ya probaste de hacer lo siguiente:

procedure TRep_Inv.Menu_PrincipalClick(Sender: TObject);
begin
Rep_Inv.Close;
NombreDeLaUnitALaQuePertenece.Menu_Reportes.Close; //Aquí el error "Undeclared Identifier "CLOSE"
Menu_Principal.Show; //Aqui debes poner lo mismo, porque al compilar te dira que show no lo reconoce
end;

No basta con incluir en el uses la unit a la que pertenece el formulario que estas usando, sino que además para acceder a ella debes incluirla explícitamente.

Espero te sirva.

Saludos

anghell77
09-10-2006, 09:04:48
:mad::mad:...A veces (lo he dicho antes) me siento inútil e inservible:( (será que tengo que dormir :confused::confused: además de aprender más, más más...) .... :D:D

Gracias, Bicho.....Ha funcionado.....

Lo que no concibo....es ¿porqué suceden ese tipo de cosas?...Digo, cuando en otros form (versiones anteriores) lo había implementado de esa forma.... y funcionaba.....

Bueno....el problema solucionado...la incógnita, será necesaria estudiarla....

Gracias nuevamente.....

{Saludos}

epuigdef
09-10-2006, 11:53:59
Buenas!

La direfencia está en si tienes declarada la otra unit en la parte "uses" del form.

En caso afirmativo no necesitarías indicar el nombre del unit tal y como te ha dicho bicho.

Un saludo

Edu

Ñuño Martínez
09-10-2006, 12:18:26
Lo que no concibo....es ¿porqué suceden ese tipo de cosas?...Digo, cuando en otros form (versiones anteriores) lo había implementado de esa forma.... y funcionaba.....
Se debe, principalmente, al sistema de protección de datos (o encapsulación) definido por el lenguaje Pascal. Según la definición formal del lenguaje, un módulo sólo puede acceder a sus propios datos, quedando los datos del resto de los módulos ocultos a la vista. Si lleváramos a rajatabla esta norma, no sería posible utilizar otros módulo (units) en nuestros programas, así que dentro del área de visibilidad de un módulo se incluyen los módulos adyacentes declarados en la sección USES, pero no los módulos no adyacentes.

Creo que está claro, ¿no? :D Es importante entenderlo para evitar que te pase otra vez lo que te ha pasado.