Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Duda con el ámbito de variables (https://www.clubdelphi.com/foros/showthread.php?t=19445)

cardomjar 14-03-2005 22:49:53

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.

vic_ia 15-03-2005 00:30:51

Hola ...
Cita:

Empezado por cardomjar
... Si embargo, al tratar de utilizar esas mismas variables en procedimientos o funciones que yo he creado, el compilador se queja amargamente.

esas funciones o procedimientos que "tu has creado" en donde estan implementadas?, en la misma unidad en donde se encuentran estas variables?, en otra unidad?... un poco mas de información se juzgaria conveniente para poder ayudarte en todo caso...

saludos...

cardomjar 15-03-2005 20:59:19

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.

maeyanes 15-03-2005 21:24:10

Me imagino que estás usando la sección public de la forma principal...
Código Delphi [-]
TForm1 = class(TForm)
  // Componentes agregados a la forma
public
  // Tus variables
end;

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:
Código Delphi [-]
TForm1 = class(TForm)
public // O podría ser en private, si es que solo será usado por la forma
  procedure Suma;
end;

implementation

procedure TForm1.Suma;
begin
  numeng := numeng + 1
end;

2. Usando la forma que comentas, sería más o menos así:
Código Delphi [-]
procedure Suma;
begin
  TForm1.numeng := TForm1.numeng + 1
end;

Espero que te aclare tus dudas... Saludos...

cardomjar 15-03-2005 22:39:26

Hola Marcos: y tanto que la aclaró. Lo solucioné gracias a tu aportación.

Muchísimas gracias.

keyboy 16-03-2005 00:04:52

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

Lepe 16-03-2005 12:45:52

Cita:

Empezado por keyboy
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

Solo añadir la forma correcta de la llamada:

Form1.numeng := Form1.numeng + 1

Ni que decir tiene que Form1 debe estar creado antes de llamar a estas sentencias...

Saludos


La franja horaria es GMT +2. Ahora son las 11:02:40.

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