PDA

Ver la Versión Completa : variables y constantes


SaGuMa
02-10-2006, 16:37:06
Como puedo sustituir el valor de una variable pore el de una constante¿?:confused::confused:
Es que llevo unos días dandole vueltas y no consigo na'. Muxas Gracias

dec
02-10-2006, 16:53:41
Hola,

¿De qué lenguaje estamos hablando? ¿Puedes describir un poco más lo que quieres conseguir?

SaGuMa
02-10-2006, 17:07:32
en delphi
procedure TForm1.Button1Click(Sender: TObject);
const
Hola='Hola, ¿qué tal?';
var
Saludo: string;
begin
Saludo:=Edit1.Text;
if Saludo='Hola' then
ShowMessage (Saludo);

end;
y yo lo que quiero es que en vez de salirme en el Mensaje 'Hola' quiero q m salga 'Hola, ¿qué tal?'

dec
02-10-2006, 17:10:43
Hola,

Bueno. Es que has publicado el Hilo en Internet, y, me parece, el tema que tratas no tiene nada que ver. Moveré el Hilo a varios. Revisa la guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php) de los Foros, por favor.

Respecto de la cuestión que planteas... no la entiendo,... si quieres mostrar el valor de la constante, ¿porqué no lo haces?


ShowMessage(Hola);

SaGuMa
02-10-2006, 17:23:19
Ok;) pa la proxima vez ya lo se

Pero es que dependiendo del valor que tome la variable cambia el mensaje que tiene q mostrar

dec
02-10-2006, 17:26:46
Hola,

No te preocupes. Nadie nace sabiendo. Respecto de lo que planteas... dices que dependiendo del valor de una variable cambia el mensaje a mostrar al usuario, pero, por otro lado, más arriba dices que lo quieres mostrar es el valor de la constante "Hola"... no se entiende muy bien (por lo menos en lo que a mí respecta) lo que quieres conseguir... en mi opinión, claro está. ;)

Caral
02-10-2006, 17:30:10
Hola
Tal vez asi:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
// Estas variables se podran utilizar en cualquier
// Parte del form
Hola: String; // Variable general
Saludo: string;// Variable general


implementation

{$R *.dfm}

// Este es un procedimiento al que se podra
// LLamar en cualquier parte del from
Procedure Hola1;
Begin
Hola:= 'Hola, ¿qué tal?';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Saludo:= Edit1.Text;
if Saludo ='Hola' then
Hola1;
ShowMessage(Hola);
end;
end.

Con esto las Variables Hola y Saludo estaran disponobles en todo el from
Intentalo y dices
Saludos

SaGuMa
03-10-2006, 15:37:28
no aver, es que ayer tenia un poco de prisa y no me explique bien (si es que las prisas no son buenas).

Aver, tenemos muchas constantes y una variable y depende del valor de la variable el ShowMessage va a mostrar un mesaje u otro.
Una cosa asi
procedure TForm1.Button1Click(Sender: TObject);
const
Hola='Hola, ¿qué tal?';
Guillermo='¿Cómo estás, Guillermo?';
Pepe='Uy, ese nombre no me suena';
var
Saludo: string;
begin
Saludo:=Edit1.Text;
if not (Saludo='') then
ShowMessage (Saludo);
end;

maeyanes
03-10-2006, 15:44:32
Pues no entiendo que quieres...

Por que en tu ejemplo solo preguntas si Saludo no es cadena vacia, entonces muestralo en un ShowMessage, y luego?

Ahora, vamos a suponer, de casualidad no querras algo como esto?:


procedure TForm1.Button1Click(Sender: TObject);
const
Hola = 'Hola, ¿qué tal?';
Guillermo = '¿Cómo estás, Guillermo?';
Pepe = 'Uy, ese nombre no me suena';

var
Saludo: string;

begin
Saludo := Edit1.Text;
if Saludo <> '' then
ShowMessage(Saludo)
else
ShowMessage(Hola)
end;


Saludos...

SaGuMa
03-10-2006, 15:56:08
nop. lo que quiero es que cuando la variable tome el valor 'Hola' m diga 'Hola, ¿qué tal?' cuando tome el valor 'Guillermo' me diga ¿Cómo estas, Guillermo?...

maeyanes
03-10-2006, 16:00:23
Ah ya...

Entonces sería algo como:


procedure TForm1.Button1Click(Sender: TObject);
const
Hola = 'Hola, ¿qué tal?';
Guillermo = '¿Cómo estás, Guillermo?';
Pepe = 'Uy, ese nombre no me suena';

var
Saludo: string;

begin
Saludo := Edit1.Text;
if Saludo = 'Hola' then
ShowMessage(Hola)
else
if Saludo = 'Guillermo' then
ShowMessage(Guillermo)
else
if Saludo = 'Pepe' then
ShowMessage(Pepe)
else
ShowMessage(Saludo)
end;



Saludos...

SaGuMa
03-10-2006, 16:03:52
:eek::eek::eek::eek:y si tuvieses en vez de 3 constantes unas 30, ¿no habría otra forma mas corta?

seoane
03-10-2006, 16:09:10
La respuesta seria usar una serie de if anidados, uno por cada valor posible. Pero eso no quedaría "bonito", así que porque no usar un TStringList:


// Esta es una variable global
var
Lista: TStringList;


// Para inicalizar los valores, usalo en el OnCreate por ejemplo
Lista:= TstringList.Create;
Lista.Values['HOLA']:= 'Hola, ¿qué tal?';
Lista.Values['GUILLERMO']:= '¿Cómo estás, Guillermo?';
Lista.Values['PEPE']:= 'Uy, ese nombre no me suena';


// Para usarlo
Saludo:= 'Hola';
ShowMessage(Lista.Values[Uppercase(Saludo)]);

// Para destruir el TStringList, usalo en el evento OnClose por ejemplo
Lista.Free;


También puedes cargar la lista desde un archivo de texto, donde cada linea tiene el siguiente formato: Nombre=Valor

maeyanes
03-10-2006, 16:18:03
Lo primero que se me ocurre es un archivo de texto con este formato:


Hola=Hola, ¿qué tal
Guillermo=¿Cómo estás, Guillermo?
Pepe=Uy, ese nombre no me suena


Luego desde tu aplicación haces algo como:


procedure TForm1.Button1Click(Sender: TObject);
var
Consts: TStringList;

begin
Consts := TStringList.Create;
try
Consts.LoadFromFile('consts.txt');
if Consts.Values[Edit1.Text] <> '' then
ShowMessage(Consts.Values[Edit1.Text])
finally
Consts.Free
end
end;


Ahora la explicación...

La clase TStringList tiene una propiedad llamada Values, la cual al insertar una o más líneas con el formato Nombre=Valor, se puede usar para obtener un valor mediante su nombre.

Así pues, puedes crear un archivo de texto con tantos pares de "constantes" y sus valores quieras, y luego desde tu aplicación lo cargas a un TStringList y devuelves su valor mediante la propiedad Values, tal como lo muestro en el ejemplo de arriba.

Esto es lo primero que se me ocurrió, tal vez exista una forma de hacer más rápido la comparación que necesitas y que sea usando constantes, pero por ahora no se me ocurre nada...



Saludos...

P.D. [Actualización] Veo que seoane dio la misma respuesta que acabo de dar, lo que me indica que no ando del todo equivocado... :D