Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-03-2005
cardomjar cardomjar is offline
Miembro
 
Registrado: dic 2004
Posts: 14
Poder: 0
cardomjar Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 15-03-2005
Avatar de vic_ia
vic_ia vic_ia is offline
Miembro
 
Registrado: ene 2004
Posts: 238
Poder: 21
vic_ia Va por buen camino
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...
Responder Con Cita
  #3  
Antiguo 15-03-2005
cardomjar cardomjar is offline
Miembro
 
Registrado: dic 2004
Posts: 14
Poder: 0
cardomjar Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 15-03-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
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...
Responder Con Cita
  #5  
Antiguo 15-03-2005
cardomjar cardomjar is offline
Miembro
 
Registrado: dic 2004
Posts: 14
Poder: 0
cardomjar Va por buen camino
Hola Marcos: y tanto que la aclaró. Lo solucioné gracias a tu aportación.

Muchísimas gracias.
Responder Con Cita
  #6  
Antiguo 16-03-2005
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 16-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:42:26.


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
Copyright 1996-2007 Club Delphi