PDA

Ver la Versión Completa : declarar variables globales


mcnudi
07-11-2006, 13:48:36
Hola, buenas tarde
Tengo una stringGrid para imprimir en QReport pero no se donde declarar la variable i:

void __fastcall TForm3::qr1NeedData(TObject *Sender, bool &MoreData)
{
MoreData=i<Form1->sg->RowCount;
if (MoreData){
QRLabel1->Caption=Form1->sg->Cells[1][i];
QRLabel2->Caption=Form1->sg->Cells[2][i];
QRLabel3->Caption=Form1->sg->Cells[3][i];
QRLabel4->Caption=Form1->sg->Cells[4][i];
QRLabel5->Caption=Form1->sg->Cells[5][i];
QRLabel6->Caption=Form1->sg->Cells[6][i];
QRLabel7->Caption=Form1->sg->Cells[7][i];
}
i++;
}

Espero que me ayudeis.

mcnudi
08-11-2006, 09:26:15
x si no habéis entendido la pregunta lo que quiero declarar es el índice de la StringGrid para recorrerla q es la variable i.

Ñuño Martínez
08-11-2006, 11:11:01
Pues así, sin más datos y sin pensar mucho, ¿como una propiedad privada de la clase TForm3? Otra cosa no se me ocurre...

Por otro lado, ¿dónde la inicializas? O mejor dicho, ¿dónde pensabas inicializarla?

Y, por último, ¿esta pregunta no debería estar en "Otros entornos y lenguajes>C++ Builder"?

mcnudi
08-11-2006, 11:18:43
una propiedad privada como???
Lo de ponerlo en este foro es por la impresiónen QReport

Ñuño Martínez
08-11-2006, 11:39:08
una propiedad privada como???
Creo que deberías responder, primero, a la pregunta que te hice:
Por otro lado, ¿dónde la inicializas? O mejor dicho, ¿dónde pensabas inicializarla?
Evidentemente, me refiero a la variable i. Es importante saberlo porque de ello dependerá buena parte de mi respuesta y, también, para ayudarme a explicarte el porqué de las cosas.

mcnudi
08-11-2006, 11:48:28
pensaba inicializarla en el mismo sitio donde la declare inicializándola a 0

Ñuño Martínez
08-11-2006, 12:09:29
Bien, como la clase TForm3 es compleja, lo vamos a hacer con la clase TClase, que es muuuuuucho más simple (nota: nunca he usado Builder así que utilizaré C++ "genérico"):

class TClase {
private:
int i; // Índice global.
public:
TClase (void); // El constructor "normal".
// Aquí va el resto de métodos...
};

/* TClase::TClase:
* Implementación del constructor "normal". */
TClase::TClase (void)
{
// Inicializa el "índice global".
i = 0;
// Aquí vendrán otras inicializaciones
}


Básicamente, declaro la propiedad al principio de la definición de clase. Luego le digo al constructor de la clase que inicialice su valor por 0.

mcnudi
08-11-2006, 12:15:22
El problema es q con TForm no puedo declarar nada privado y no encuentro ninguna propiedad ni métodoq lo haga.

Ñuño Martínez
08-11-2006, 12:43:51
Tienes que modificarlo en el código fuente, no dentro del IDE. Posiblemente (que no lo sé, ya he dicho que nunca he usado Builder) tengas que buscar en el archivo de cabecera (por ejemplo "TForm3.h"). Ten encuenta que, si no existe el constructor, deberás crearlo tu y llamar al constructor de la clase base. Si no sabes como hacerlo, deberías repasar tus apuntes sobre C++.