PDA

Ver la Versión Completa : variables globales


henrygale
13-02-2007, 18:15:15
perdonen si la pregunta es demasiado simplona pero...

¿a alguien se le ocurre una manera de que una función devuelva el contenido de dos variables al programa principal?

a mi lo único que se me ocurre es usando para uno de esos valores una variable global. ¿como se usan variables globales en borland delphi?

el caso es que tengo una función que devuelve una secuencia, pero tambien necesito devolver si se ha podido crear esta de manera correcta o no.

maeyanes
13-02-2007, 18:35:32
Para crear una variable global, solo tienes que declararla en la sección interface de la unidad y luego referenciar esta unidad en las otras donde la vayas a usar:


unit Globales;

interface

uses
// Lista de unidades

var
VarGlobal1: Integer;
VarGlobal2: string;


Para usar una de estas variables:


unit Form1;

interface

uses
// Lista de unidades

// Declaración de tipos y demás

implementation

uses Globales; // con esto puedo usar cualquiera de las variables declaradas en Globales.pas


Ahora, sobre tu duda, yo te recomendaría una función que devuelva True o False si tuvo éxito y como parte de sus parámetros devuelva la secuencia, algo así:


// Declaración:
function DoSecuencia(var Secuencia: [TipoDeDato]): Boolean;

// Una forma de usarse:
if DoSecuencia(ASecuencia) then
begin
// Hago aquí lo que quiera con la secuencia creada
end
else
ShowMessage('Error creando la secuencia')



Saludos...

seoane
13-02-2007, 18:38:41
Para estos casos esta 'var'

function Ejemplo(Parametro: Integer; var Resultado: string): boolean;
begin
Resultado:= '';
while Parametro > 0 then
begin
Resultado:= Resultado + 'A';
dec(Parametro);
end;
if Length(Resultado) > 0 then
Result:= TRUE
else
Result:= FALSE;
end;

// Por ejemplo
var
Str: string;
begin
if Ejemplo(5,Str) then
ShowMessage(Str);
end;

egostar
13-02-2007, 18:41:53
Yo nadamas agregaria a tu código variables ya que pudiera ser que la secuancia dependa de algun dato.

// Declaración:
function DoSecuencia(var Secuencia:[TipoDeDato]; VarSecuencia:[TipoDeDato]): Boolean;

// Una forma de usarse:
if DoSecuencia(ASecuencia,Variable) then
begin
// Hago aquí lo que quiera con la secuencia creada
end
else
ShowMessage('Error creando la secuencia')

Saludos

egostar
13-02-2007, 18:42:54
Seoane te me adelantaste pero pensamos en lo mismo, :D:D

Saludos

maeyanes
13-02-2007, 18:43:27
Claro está que podría depender de algún otro dato, pero solo era un ejemplo sencillo... ;)


Saludos...

henrygale
13-02-2007, 19:24:39
lo hice al reves... introduje con var el booleano en vez de la secuencia pero más o menos es lo mismo.

muchas gracias... ya funciona ;)

edelphi
06-04-2007, 00:27:50
bueno hice todo lo que dices en el post pero aun asi no me funciona, esto es lo ke quiero hacer:

unit global;

interface

implementation
uses principal;
Var nom,app,apm,calu,carr,sem,tur:string;
end.

y en el form1

....
implementation
uses global,matriculas, Dmodulo;
....
procedure TForm14.SpeedButton2Click(Sender: TObject);
begin
nom:=DBgrid2.Columns[3].Field.text;
app:=DBgrid2.Columns[1].Field.text;
apm:=DBgrid2.Columns[2].Field.text;
calu:=DBgrid2.Columns[0].Field.text;
carr:=DBgrid1.Columns[1].Field.text;
sem:=DBgrid1.Columns[2].Field.text;
tur:=DBgrid1.Columns[3].Field.text;
Showmessage(calu+' '+nom+' '+app+' '+apm+' '+carr+' '+sem+' '+tur);

y me manda estos errores
[Error] frm_buscar_alumnos.pas(283): Undeclared identifier: 'nom' ...

que hago ayudenme

seoane
06-04-2007, 00:36:13
Prueba asi

unit global;

interface
Var nom,app,apm,calu,carr,sem,tur:string;
implementation
uses principal;

end.

edelphi
06-04-2007, 00:47:05
ok muchas gracias ahora si parece que me va afuncionar jejeje un lapsus en las lineas de codigo