Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pasar datos de variable de un form a otro. (https://www.clubdelphi.com/foros/showthread.php?t=91133)

yuyidt 17-11-2016 14:18:35

Pasar datos de variable de un form a otro.
 
Hola buen día. He visto varios hilos acerca de este tema pero ninguno me ha resuelto.

Tengo 2 variables en form1 donde manejo el puntaje y las vidas en un juego

Código Delphi [-]
var
  vidas,correcta:byte;
  puntos:integer;
procedure quitavidas;

begin
    vidas:=vidas-1;
  if vidas=3 then
  begin
    form2.image4.visible:=false;
  end;
  if vidas=2 then
  begin
    form2.image5.visible:=false;
  end;
  if vidas=1 then
  begin
    form2.image3.visible:=false;
  end;
  if vidas=0 then form6.show;
end;

procedure sumar5puntos;
begin
  form2.label5.Caption:=IntToStr(puntos); 
  puntos:=puntos+5;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  vidas:=4;  
  puntos:=5;

Lo que quiero es que cuando vaya al form2 se me muestre el puntaje y las vidas que llevaba en el form1. He tratado de 1000 maneras pero no lo he logrado. Como podría hacerlo?

movorack 17-11-2016 14:44:34

Buen día.

Recuerda usar Tags para el código

[delphi]
//Código
[delphi] (Esta va con el formato de cierre [/TAG])

Con respecto a tu duda, recuerda que cuando trabajas con un Form, trabajas con un objeto. Por lo tanto tienes entre otras propiedades y variables publicas y privadas.

Crea una variable en la sección public del objeto Form2 y desde el Form1 solo debes llamarla.

Código Delphi [-]
//////////////////////////////////////////////////////
//Form2
type
  TForm2 = class(TForm)
  private
    { Private declarations }
  public
    PubString : String;
    { Public declarations }
  end;

//////////////////////////////////////////////////////
//Form1
procedure TForm1.MostrarForm2;
  var
    theForm2 : TForm2; 
    aString : String;
begin
  theForm2 := TForm2.Create(Self);
  try
    theForm2.ShowModal;   
    aString := theForm2.PubString; 
  finally
    theForm2.Free;
  end;
end;

yuyidt 17-11-2016 19:28:38

???
 
No entendí mucho. creo que no me explique bien. Aquí voy nuevamente.

var //Declaro las variables
vidas,correcta:byte;
puntos:integer;
intento:integer;

procedure quitavidas; //Procedimiento que me quita vidas cuando la respuesta es incorrecta

begin
vidas:=vidas-1;
if vidas=3 then
begin
form2.image4.visible:=false;
end;
if vidas=2 then
begin
form2.image5.visible:=false;
end;
if vidas=1 then
begin
form2.image3.visible:=false;
end;
if vidas=0 then form6.show;
end;

procedure sumar5puntos; //Procedimiento que me suma puntos cuando la respuesta es correcta
begin
form2.label5.Caption:=IntToStr(puntos);
puntos:=puntos+5;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
i : Integer;
begin
intento := intento + 1;
begin
if intento >=7 then form2.showmodal; //Después de 7 intentos me pasa al formulario 2 que es donde quiero validar que las vidas y los puntos sean iguales al formulario 1
end;
for i := 4 to ControlCount - 1 do
if Controls[i] is Tlabel then
TLabel(Controls[i]).Color := clBtnFace;

Label8.Tag := Random( 4 ) + 1;
Label8.Caption := IntToStr(Label8.Tag);
end;

procedure TForm1.FormCreate(Sender: TObject); //Valor de las variables inicialmente
begin
vidas:=4;
puntos:=5;

procedure TForm2.Image1Click(Sender: TObject); //Aquí las condiciones para ejecutar los procedimientos de vidas y puntos
begin
correcta:=4;
if label8.Caption=inttostr(correcta) then
begin
mediaplayer1.Play;
Form7.ShowModal;
button1.Click;
sumar5puntos;
end
else
begin
mediaplayer2.Play;
form8.Show;
quitavidas;
end;
end;

roman 17-11-2016 19:44:14

Cita:

Empezado por yuyidt (Mensaje 510893)
No entendí mucho. creo que no me explique bien. Aquí voy nuevamente.

Ya se te comentó que le pongas etiquetas al código. ¿Cómo quieres que lo entendamos sin ninguna indentación?

LineComment Saludos

ElKurgan 19-11-2016 16:46:29

La verdad es que no se entiende muy bien que quieres hacer.

Sin embargo, si lo que quieres es compartir el valor de algunas variables entre múltiples formularios lo mejor es sacarlas a una unit suelta, y ponerlas dentro de la sección Interface, para que sean públicas a todos los formularios.

Si son variables que pertenecen a Form1 como parece que es la cuestión, donde quieras visualizarlas tendrías que poner "Form1.Vidas" y "Form1.Puntos", además de que tendrás que añadir la unit del Form1 a todas las units que necesiten ver esos valores.

No se si era esto lo que querías

Saludos

yuyidt 24-11-2016 13:34:49

Gracias ElKurgan
 
Probe colocar las variables como dijiste en una unit sueltas y me funcionó. Gracias a todos también por sus aportes.


La franja horaria es GMT +2. Ahora son las 22:54:58.

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