Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   variables y constantes (https://www.clubdelphi.com/foros/showthread.php?t=36096)

SaGuMa 02-10-2006 16:37:06

variables y constantes
 
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
Código 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 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?

Código Delphi [-]
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:
Código Delphi [-]
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
Código Delphi [-]
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?:

Código Delphi [-]
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:

Código Delphi [-]
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:

Código Delphi [-]
// 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:

Código:

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:

Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 00:09:38.

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