FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Duda con el ámbito de variables
Hola: tengo una duda que se podría resumir de la siguiente forma:
Si defino variables en la zona "public" no tengo ningún problema en utilizarlas en cualquier método asociado a los eventos (por ejemplo). Si embargo, al tratar de utilizar esas mismas variables en procedimientos o funciones que yo he creado, el compilador se queja amargamente. ¿Existe alguna forma de que definir variables de forma que puedan ser utilizadas de forma "global" por los procedimientos o funciones "no estándar"?. También he detectado (supongo que será lo mismo) que las funciones o procedimientos que yo creo son accesibles desde los métodos asociados a los eventos, pero no son accesibles entre ellas. Gracias por las respuestas y un saludo. |
#2
|
||||
|
||||
Hola ...
Cita:
saludos... |
#3
|
|||
|
|||
Hola de nuevo: lamento haber sido tan parco en mi pregunta.
Todo está en la misma unit. En realidad se trata de un sencillísimo proyecto con un formulario, un edit, un botón y poco más. Trataré de mostrarlo gráficamente. - En la sección public defino unas variables que yo quiero que sean globales: public numeng: integer; dia, mes, anno: Word; ok: boolean; phantom: string; - En el evento "OnMouseMove" del Formulario escribo esta pequeña porción de código. En este caso el compilador reconoce perfectamente la variable "numeng" y traga sin problemas. Este es sólo un ejemplo, pero hay más. procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin numeng := 0; end; - Sin embargo, si yo defino un procedimiento cualquiera, no me reconoce la misma variable "numeng". Esto lo he definido justo donde empieza la sección implementation procedure suma; begin numeng := numeng + 1; end; En este caso el compilador indica [Error] Unit1.pas(44): Undeclared identifier: 'numeng' Renovando mi gratitud por las respuestas recibidas recibid un saludo. |
#4
|
|||
|
|||
Me imagino que estás usando la sección public de la forma principal...
Si es así, el procedimiento suma al crearlo fuera del objeto TForm1, no va a reconocer la variable. Lo que tendrías que hacer es: 1. Crear el procedimiento suma como parte del objeto TForm1:
2. Usando la forma que comentas, sería más o menos así:
Espero que te aclare tus dudas... Saludos... |
#5
|
|||
|
|||
Hola Marcos: y tanto que la aclaró. Lo solucioné gracias a tu aportación.
Muchísimas gracias. |
#6
|
|||
|
|||
Una pequeña observación:
La sentencia TForm1.numeng := TForm1.numeng + 1 no va a compilar. Una referencia de clase como TForm1 sólo puede usarse para métodos de clase o constructores. bye |
#7
|
||||
|
||||
Cita:
Form1.numeng := Form1.numeng + 1 Ni que decir tiene que Form1 debe estar creado antes de llamar a estas sentencias... Saludos |
|
|
|