| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Niko Invitado
|
Publicado: Jue 13 Ene, 2005 2:00 pm Asunto: varibles externas |
|
|
Holaa!me gustaria poder utilizar una misma variable en varios formularios, es decir, declararla, asignarle un valor y que ese mismo valor pueda volver a aparecer en otro formulario sin tener q volver a asignarselo, mi pregunta es donde debo declarar esta variable?
donde le asigno el valor? como hago para q se vea su valor en otro formulario? en el foro encontre alguna respuesta pero tras probar de varias maneras lo he logrado q funcione..alguien sabe como hacerlo?? |
|
| Volver arriba |
|
 |
Mónica Cmdr

Registrado: 27 Sep 2002Mensajes: 136Ubicación: Pontevedra (España)
|
Publicado: Jue 13 Ene, 2005 2:21 pm Asunto: |
|
|
Hola, yo suelo hacerlo así:
Por ejemplo, tengo dos formularios: FORM1 y FORM2 y la variable aux, que quiero utilizar en los dos.
En Unit 1.h, pongo:
extern int aux;
En Unit1.cpp, pongo:
int aux=5;
Y desde Unit2.cpp, la uso normalmente. Por ejemplo desde una función:
int resultado=resultado*aux;
Espeor haberte ayudado |
|
| Volver arriba |
|
 |
Niko Invitado
|
Publicado: Jue 13 Ene, 2005 4:56 pm Asunto: |
|
|
Gracias Monica pero me sigue sin funcionar mira esto es lo que hago:
en form1.h
extern String aux;
en Form1.cpp
String aux= DBEdit->Text;
y en Form2.cpp
Edit->Text=aux;
en el Edit no me aparece nada ya que aux no toma valor¿¿¿¿??? |
|
| Volver arriba |
|
 |
Invitado Vzla Invitado
|
Publicado: Jue 13 Ene, 2005 5:49 pm Asunto: |
|
|
Usa AnsiString en vez de String Prueba
Suerte |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 13 Ene, 2005 6:34 pm Asunto: |
|
|
Yo hago algo parecido, pero sin declaraciones extern.
1. En donde creo la variable la defino en el include correspondiente:
| Código: | //-------------------
#ifndef Unit1
#define Unit1H
//--------------------
#include <Classes.hpp>
[...]
public: // User declarations
__fastcall TfPersonas(TComponent* Owner);
int Valor1;
};
//-------------------- |
2. En el formulario en que quiero usar esas variables pongo el include donde las declaré:
| Código: | //-------------------
#include <ctype.h>
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//-------------------- |
3. Para llamar a las variables basta con anteponer el nombre de su formulario:
| Código: | int Valor2 = 15 * Unit1->Valor1; |
_________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Niko Invitado
|
Publicado: Vie 14 Ene, 2005 10:09 am Asunto: |
|
|
| Sigue sin funcionar ya no sé q más probar, he probado con ansistring y nada y tb he probado haciendolo como me explica Angel y tampoco...me estoy empezando a desquiciar!! |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Niko Invitado
|
Publicado: Vie 14 Ene, 2005 10:55 am Asunto: |
|
|
Te he hecho un pequeño resumen para q te hagas una idea mas o menos, gracias por tu ayuda en caso de q no le veas solucion no te preocupes ya buscare alguna alternativa.
Segun tus instrucciones hago lo siguiente:
Mi primer formulario es el Form2, entonces en Unit2.h tengo:
public:
// User declarations
__fastcall TForm2(TComponent* Owner);
String aux;
};
Luego en el Unit2.cpp:
void __fastcall TForm2::Button1Click(TObject *Sender)
{
[....]
aux=DBEdit11->Text;
[....]
}
el segundo formulario en el cual quiero utlizar la variable aux es el Form4 por lo tanto en el el unit4.cpp tengo:
#include Unit2.h
__fastcall TForm4::TForm4(TComponent* Owner)
: TForm(Owner)
{
Edit1->Text=Unit2->aux;
}
El error es el siguiente:Undefined simbol Unit2¿¿¿¿?????
tambien he probado otras formas como declarar la variable en extern o tomarla del fomulario directamente: string aux=Form2->DBEdit->Text pero tampoco funciona |
|
| Volver arriba |
|
 |
Perico Invitado
|
Publicado: Vie 14 Ene, 2005 11:56 am Asunto: |
|
|
De esta forma tiene que funcionarte fijo...
1º eliminas todas las declaraciones de la variable que tengas por ahi...
2º en el Unit1.h pones esto:
extern PACKAGE String s;
3º en cualquier Unit puedes hacer s="funciona";
Ya me contarás...
PD:a ver si alguien puede mirar una duda (a mi nombre "Perico") sobre guardar vectores en archivos que hay en el foro... graciassssss |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 14 Ene, 2005 12:06 pm Asunto: |
|
|
Eso que te comenta Perico también: tienes que eliminar todas las declaraciones de esa variable que halla en el cpp. Además, como te decía Vzla, usa AnsiString en vez de String. Lod el extern, sin embargo, si haces las declaraciones en el Unit1.h no deberían hacerte falta. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Niko Invitado
|
Publicado: Vie 14 Ene, 2005 1:43 pm Asunto: |
|
|
ya lo he solucionado el problema estaba en la estructura de la aplicacion que he tenido q modificar muchas gracias asi da gusto  |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Vie 14 Ene, 2005 7:00 pm Asunto: |
|
|
Hola, Niko, esta respuesta es off topic pero tengo que hacerla. En uno de los mensajes comentas | Cita: | #include Unit2.h
...
El error es el siguiente:Undefined simbol Unit2¿¿¿¿????? |
y el mensaje se debe al modo de incluir un fichero en otro: encerrando su nombre y extensión (y ruta si es necesario) entre <> ó "": | Código: | #include "Unit2.h" | pues en este caso Unit2.h está en el mismo directorio (supongo) que Unit4.cpp.
Con este simple cambio el código que propones funcionaría.
En el Builder tienes la opción de hacerlo de forma automática: si estás editando Unit4.cpp sólo has de pulsar Alt+F11 (File/Include Unit Hdr ...) y te mostrará las unidades del proyecto que puedes incluir. _________________ Ojos ... no son ojos porque los ves, son ojos porque te miran |
|
| Volver arriba |
|
 |
jc Lt JG

Registrado: 02 Mar 2004Mensajes: 68
|
Publicado: Jue 10 Feb, 2005 12:26 pm Asunto: |
|
|
Ya que estamos con el tema, voy a comentar cómo lo hago yo, porque no acabo de tener claro cuál es la forma correcta de declarar las variables. ç
A mi me funciona, pero estoy en la situación que comenta Niko de no saber cuál es la forma correcta de definir variables para usarlas en varios formularios.
Yo las defino de la siguiente manera, a ver si alguien me dice si es correcto.
en Form1.cpp la defino.
int MiVariable;
en Form1.h pongo lo siguiente
extern int MiVariable;
A partir de ese momento le puedo dar un valor en cualquier sitio y usarla en cualquier parte (siempre que incluya el Form1.h, claro)
Si la quiero gastar en Form2 pongo en Form2.cpp la siguiente linea:
#include Form1.h
A ver si alguien me dice si es correcto. Como mínimo funciona, por lo menos a mí.
Ya me contarás algo Niko (no sé cómo has solucionado tu problema)
Un saludo.
JC |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 10 Feb, 2005 12:43 pm Asunto: |
|
|
Yo lo del extern lo uso por ejemplo con funciones que uso en muchos sitios diferentes. Tengo un módulo que he llamado Funciones.cpp y que en tiempo de diseño, al incluirlo, lo definí como Cpp File en el panel New Items.
Ahí tengo definidas todas las funciones que uso en diversos sitios, por ejemplo para personalizar la barra de botones del Preview de un QuickReport. Lo que hago al entrara en cada formulario, añado las llamadas extern a las funciones que me van a hacer falta. Por ejemplo:
| Código: | //--------------------------------------
#define NO_WIN32_LEAN_AND_MEAN
#pragma hdrstop
#include <algorith.h>
#include <alloc.h>
#include <conio.h>
#include <ctype.h>
#include <dir.h>
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vcl.h>
#include <WindowsX.h>
#include "Tablas.h"
Word Year, Month, Day;
char cFecha[11];
extern AnsiString cComando;
extern AnsiString Encriptar(char *cVariable, int nLong);
extern void CerrarApl();
extern void Despedida(); |
Estas tres últimas funciones (Encriptar, CerrarApl y Despedida) están definidas en Funciones.cpp, y no hace falta include alguno apra que las encuentre. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Jue 10 Feb, 2005 12:44 pm Asunto: |
|
|
Hola, yo hago lo mismo que JC, pero la declaración | Código: | extern int MiVariable; | la escribo en un fichero que suelo llamar global.h. De este modo no enlazo Form2 con todas las propiedades y métodos de Form1 (a no ser que se necesite explícitamente creo que cada formulario debe mantener lo más "privada" posible su información). Luego, en Form2.cpp (y en cualquier otro .cpp o .h que necesite conocer MiVariable) es donde escribo | Código: | #include "global.h" | Como hay variables que no han de ser "globales del todo" suelo tener algún otro fichero de cabecera con variables externas, como globalHilos.h, ...
Saludos. _________________ Ojos ... no son ojos porque los ves, son ojos porque te miran |
|
| Volver arriba |
|
 |
|