Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mas que Globales... Universales ! (https://www.clubdelphi.com/foros/showthread.php?t=20924)

hgiacobone 29-04-2005 17:27:02

Mas que Globales... Universales !
 
Hola amigos,
Si, si... ya lo sé. Es una cosa sencilla, pero no me sale.

Necesito declarar una variable (al estilo Global o Public) que almacene un String. Ese string contiene el nombre de la tarea que actualemnte se está llevando a cabo dentro de un determinado módulo. Cuando se cambia el módulo (archivo .PAS por decirlo más burdamente) la tarea cabmbia y la variable se actualiza.

La declaración típica...
var
cTarea: string;

...a nivel público en el TForm principal, es public SOLO dentro de ese ámbito. Desde otros módulos (sin agregar a la instruccion USE de cada módulo el nombre del modulo principal) esa variable no se puede acceder.

Pensé entonces en declarar esa variable en el múdulo de la Aplicación, antes del BEGIN que contiene el famoso Application.Run;, suponiendo que este se encontraba en la punta de la pirámide de módulo y todos verían esa variable global, pero no.

Para proceso multicapa se puede definir las variables como: thread var pirulo:string; pero no sirve en mi entorno.

Hay forma de declarar una variable que sea Universal, o sea accesible desde todos los módulos?
Tal vez se pueda por algíun método "heredar" esa variable y de esa forma ir trasportándola entre los diferentes módulos.

Se aceptan sugerencias,

Elfoscuro 29-04-2005 18:25:08

No se si será lo mismo, pero yo declaro la variable en una form y luego accedo a ella con el formato form1.variable, aunque normalmente tengo la costumbre de tener una unit (sin form ni nada, es decir, al estilo pascal, no delphi), donde pongo las variables globales, funciones comunes, constantes, etc. Esta unidad la añado al uses.

Pero creo que en tu caso, casi mejor que uses lo de form1.variable



Un saludo

hgiacobone 29-04-2005 18:42:57

Gracias Elfo,
Yo tambien (y creo somos varios) utilizo una unit como RUTINAS.PAS y ahí pongo todas las cosas de posible acceso para diferentes módulos.

Aca la cosa era no seguir sumando módulos en la cláusula USES de cada unidad que acceda a esa variable, para no sobrecargar el entorno.

Voy a probar accediendo con la instarucción Form1.cTarea y despues les cuento.

Lepe 29-04-2005 21:04:59

Una unidad, es precisamente una unidad.

Con esto quiero expresar el concepto como " unidad = uno solo". Cada Unit es independiente de las demás, y no queda más remedio que añadirlo al uses.


Un saludo

fly 30-04-2005 02:23:44

En cuanto pongas Form1.cTarea Delphi ya te pedira añadir Form1 a la clausula USES, no creo que el hecho de añadir una unidad más "sobrecargue el entorno", y si no crea una unit SÓLO con esa variable, más libiana no podria quedar.

De todas formas casi seguro que hay alguna unit común (Windows,Classes, SysUtils...) a todos tus forms, pon ahí tu variable y listo.

Saludos

Crandel 30-04-2005 18:06:53

Personalmente no recomiendo que almacenen variables de configuración y demás en un archivo asociado a un formulario.

No se que sentido tienen usar el formulario, dado que solamente necesitan las variables.

Personalmente uso una unit, llamada normalmente uCommon, en la cuyal estan definidos todas las variables globales y tipos que son compartidos en toda la aplicación.

Si se debe agregar en el uses de cada unit para poder tener acceso a estas definiciones, y no produce una sobrecarga ni nada, dado que las variables ya estan definidas y ocupan la misma cantidad de memoria para tu programa independiente de la cantidad de unit en la que la incluyas.

Un ejemplo tipico seria:
Código Delphi [-]
unit CommonBioChat;

interface

uses
  Classes; // todas las unit que necesites incluir, puede no ir ninguna

// algunas constantes
const
  SizeLargeText = 200;


type
  // Estructura de algo que necesiten
  TCommBlock = Packed Record
    a:            Longword;
    b:            Integer;
  end;


// Variables globales que necesiten
var
  // Por ejemplo una lista de algo
  Lista:  TList;

  // variables del estado del entorno para guardarlo en un archivo ini o en el registro
  AnchoFormularioMain: integer;
  AltoFormularioMain: integer;
  TopFormularioMain: integer;
  LeftFormularioMain: integer;

// pueden definir procedimientos como cargar la configuracion
procedure LeerConfig;

implementation

// implementan los prcediminetos o funciones definidas
procedure LeerConfig
begin

end;

end.

Espero que ayude y aclare

Suerte

Crandel

lucasarts_18 13-09-2005 23:01:37

Hola a todos:

Topé con este hilo ya que tengo una duda sobre las declaraciones globales, ví el último mensaje de crandel y el las declara en la directiva var.

Mi duda es..cuando uno tiene un form, existe la parte public y private y acaso no se puede declarar las variables en la sección public para que puedan acceder desde otras UNIT..

Gracias al que pueda despejar mis dudas..

Saludos..

Crandel 14-09-2005 05:35:51

Cita:

Empezado por lucasarts_18
Mi duda es..cuando uno tiene un form, existe la parte public y private y acaso no se puede declarar las variables en la sección public para que puedan acceder desde otras UNIT..

Si se declaran las variables en la parte pública de la clase estas pueden ser accedidas a traves de la instancia de la clase, desde la misma Unit y desde otras., esto es cierto.

Pero recuerda ... que se pueda ... no quiere decir que este bien. Todo depende del problema que estemos queriendo resolver.

En este caso lo que yo quise desarrollar es una Unit que sea pública a todas y guarde información común pero que a su vez no dependa de ninguna otra.

Esta es una solución, pero no es la unica. Aunque es muy comun para guardar varibales de configuración y estructuras comunes.

Hay otros programadores que usan clases para almacenar y guardar la configuración del programa, también es válido.

lucasarts_18 14-09-2005 15:36:09

Cita:

Empezado por Crandel
Si se declaran las variables en la parte pública de la clase estas pueden ser accedidas a traves de la instancia de la clase, desde la misma Unit y desde otras., esto es cierto.

esto vendría siendo así Form2.Mivariable....(Para accederlas desde las otras Unit).

Gracias Crandel por tu respuesta....

Saludos...

Crandel 14-09-2005 18:16:54

No confundas el consepto de Unit con Clase.

Cuando accedes a una variable de tu clase con la forma Form2.Mivariable, lo puedes hacer desde otra unit o desde la misma unit.

Si accedes a la variable desde algun método de la misma Clase accedes de forma directa con Mivariable.

si accedes desde tu Form1 que esta en la Unit1, accedes con Form2.Mivariable.

Pero tambien podes definir una función externa a la clase pero dentro de tu Unit2, y para acceder a tu varibale del Form2 tambien lo haces con Form2.Mivariable.

lucasarts_18 14-09-2005 20:36:25

Hola:

Muy agradecido de ti Crandel.

Gracias..:)


La franja horaria es GMT +2. Ahora son las 18:34:30.

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