Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   C++ Valor de String como nombre de Variable o Objeto (https://www.clubdelphi.com/foros/showthread.php?t=80957)

lmpadron 27-09-2012 19:11:49

C++ Valor de String como nombre de Variable o Objeto
 
Saludos

Sucede que tengo un código horriblemente repetitivo, tego varios labels y según el usuario da click en cada uno de ellos le cambio el color para que sepa en cual esta detenido. para esto en cada label tengo que escribir el código asignándole la nueva fuente al seleccionado y la común a todos los demas porque no se si ha seleccionado otro antes.
Lo que quisiera tratar de hacer es que una variable obtenga el nombre del label y a la vez me permita usar sus propiedades para poder cambiar el color de la fuente. Loq ue tengo es esto:

Código:

Label20->Font->Color = clBlack;
        Label22->Font->Color = clBlack;
        Label26->Font->Color = clBlack;
        Label28->Font->Color = clBlack;
        Label24->Font->Color = clBlack;
        Label30->Font->Color = clBlack;
        Label40->Font->Color = clBlue;
        Label42->Font->Color = clBlack;
        Label44->Font->Color = clBlack;

        Label21->Font->Color = clBlack;
        Label23->Font->Color = clBlack;
        Label25->Font->Color = clBlack;
        Label29->Font->Color = clBlack;
        Label25->Font->Color = clBlack;
        Label31->Font->Color = clBlack;
        Label39->Font->Color = clBlue;
        Label41->Font->Color = clBlack;
        Label43->Font->Color = clBlack;

        Label46->Font->Color = clBlack;
        Label48->Font->Color = clBlack;
        Label49->Font->Color = clBlack;
        Label50->Font->Color = clBlack;
        Label51->Font->Color = clBlack;
        Label52->Font->Color = clBlack;
        Label65->Font->Color = clBlack;
        Label66->Font->Color = clBlack;
        Label53->Font->Color = clBlack;
        Label58->Font->Color = clBlack;
        Label54->Font->Color = clBlack;
        Label57->Font->Color = clBlack;
        Label55->Font->Color = clBlack;
        Label56->Font->Color = clBlack;
        Label67->Font->Color = clBlack;
        Label68->Font->Color = clBlack;
        Label61->Font->Color = clBlack;
        Label64->Font->Color = clBlack;
        Label60->Font->Color = clBlack;
        Label63->Font->Color = clBlack;
        Label59->Font->Color = clBlack;
        Label62->Font->Color = clBlack;
        Label69->Font->Color = clBlack;
        Label70->Font->Color = clBlack;
        Label74->Font->Color = clBlack;
        Label75->Font->Color = clBlack;

Como pueden ver tengo que cambiar todos y asignar el color azul solo a dos, así por cada uno de ellos !!! horrible verdad !!! alguien preguntó esto antes y le indicaron que tal vez haciendo un array podría lograrlo, pero de ese tema no hubo mas respuestas, si se logro o no ni idea.



Lo que necesito hacer seria algo como hacer una clase que al pasarle el nombre del seleccionado me ponga los demas en color negro y al seleccionado me lo ponga en azul. De forma que solo tenga que llamarla en el OnClick del Label y pasarle ese valor.

De paso NO SE COMO HACER EL ARRAY !!! Nunca antes he tenido que hacerlo y por ende no se como hacerlo, asi que me fue imposible probar la idea que dieron en el foro

si alguien me pudiera ayudar seria excelente

ecfisa 27-09-2012 19:46:32

Hola Impadron.


Cita:

Lo que necesito hacer seria algo como hacer una clase que al pasarle el nombre del seleccionado me ponga los demas en color negro y al seleccionado me lo ponga en azul. De forma que solo tenga que llamarla en el OnClick del Label y pasarle ese valor.
Si interpreté bién lo que solicitas en ese párrafo, de este modo tendría que funcionarte:
Código:

...
TLabel *PrevLabel;

void __fastcall TForm1::FormCreate(TObject *Sender) {
  PrevLabel = Label1;  // primer Label
}

/* asignar a los eventos OnClick de todos los Labels */
void __fastcall TForm1::LabelClick(TObject *Sender) {
  PrevLabel->Font->Color = clBlack;
  PrevLabel = static_cast<TLabel*>(Sender);
  PrevLabel->Font->Color = clBlue;
}

Saludos.

escafandra 27-09-2012 22:02:22

Otra solución puede ser usar FindComponent:

Código:

  TLabel* Label;
  for(int n=0; n<ComponentCount; n++){
    Label = static_cast<TLabel*>(FindComponent("Label"+IntToStr(n)));
    if(Label){
      if(n == 39 || n == 40) Label->Font->Color = clBlue;
      else Label->Font->Color = clBlack;
    }
  }

Saludos.

lmpadron 28-09-2012 16:25:49

Gracias por su ayuda amigos !!!


La franja horaria es GMT +2. Ahora son las 16:41:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi