Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

varibles externas
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: varibles externas Responder citando

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
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Mensaje    Asunto: Responder citando

Usa AnsiString en vez de String Prueba

Suerte
Volver arriba
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Mensaje    Asunto: Responder citando

Pásame, si quieres, el código por correo a amatic@ccm.es y le echo una ojeada.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Mensaje    Asunto: Responder citando

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
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

ya lo he solucionado el problema estaba en la estructura de la aplicacion que he tenido q modificar muchas gracias asi da gusto Very Happy
Volver arriba
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.