Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Recorrer las Labels de un Form (https://www.clubdelphi.com/foros/showthread.php?t=7392)

nesetru 13-02-2004 17:00:15

Recorrer las Labels de un Form
 
Hola Amigos....

Mi duda es la siguiente, tengo 20 labels en un form llamadas Cancion1, Cancion2,...,Cancion 20

Lo que necesito hacer es que en un determinado momento poner la propiedad visible:= False desde por ejemplo Cancion 8 hasta la Cancion 20.

Es decir, necesito crear un procedure que indicándole un label determinado (Cancion1, Cancion2,...,Cancion19) me recorra todas las labels del form (Cancion1, Cancion2,...,Cancion20) desde esa label hasta la label cancion20 y las haga invisible.

Espero que me entendáis.....

saludos.

delphi.com.ar 13-02-2004 17:03:04

Puedes recorrer los Controls y/o Components del TForm, preguntar cuál de estos es de la case esperada (TLabel) y habilitarlos o deshabilitarlos.

Saludos!

roman 13-02-2004 17:07:55

Código:

var
  Label: TLabel;
  N, I: Integer;

begin
  for I := 0 to Pred(ComponentsCount) do
    if Components[ I ] is TLabel then
    begin
      Label := TLabel(Components[ I ];
      if Pos(Label.Caption, 'Cancion') <> 0 then
      begin
        N := StrToInt(Copy(Label.Caption, Length('Cancion'), Length(Label.Caption)));
        if N > primer número then
          Label.Visible := false;
      end;
    end;
end;

También podrías asignar el número de la canción a la propiedad Tag de cada label para evitarte la conversión IntToStr.

// Saludos

nesetru 13-02-2004 17:16:33

Rapidez...
 
¡¡¡Dios que rapidez!!!

Muchísimas gracias amigos.

Lo que pasa es que no entiendo muy bien el código que me habéis mandado :(

Parece que recorre todos los componentes del form, si éste es un label .... ahí me pierdo. :rolleyes:

Os recuerdo que solo hay 20 labels y se llaman Cancion1,..,Cancion20 y lo que quiero es que dada una label (que puede ser una desde Cancion1 hasta la Cancion19) desde esa misma hasta la label Cancion20 hacerlas invisibles.

Muchas gracias...

roman 13-02-2004 17:19:49

Pseudo código

Código:

Desde la primera componente del formulario hasta la última
  Si la componente es TLabel
    Si es un label que nos interese ('CancionXX')
      Si tiene un número mayor  o igual que el primer número que me interesa
        Hacerlo invisible

// Saludos

roman 13-02-2004 17:21:18

Por cierto, en el código original donde dice

if N > primer número then

debe decir

if N >= primer número then


// Saludos

nesetru 13-02-2004 17:30:34

Muchas gracias por la explicación.

Ahora lo entiendo pero aunque no quiero resultar pesado, me parece que el código que me pasas en su begin más interno compara los caption de las labels y lo que necesito son los name.

He cambiado caption por name pero al ejecutar paso a paso el procedure veo que no entra nunca en dicho begin.

Gracias

roman 13-02-2004 17:34:13

Cita:

Empezado por nesetru
me parece que el código que me pasas en su begin más interno compara los caption de las labels y lo que necesito son los name.

He cambiado caption por name

Bien observado y arreglado.

Cita:

Empezado por nesetru
al ejecutar paso a paso el procedure veo que no entra nunca en dicho begin.

Es que lo escribí como se me ocurrió. Debes invertir los parámetros de Pos.

// Saludos

nesetru 13-02-2004 17:43:04

Muchas gracias Roman y perdona las molestias.

Ahora si que entra, justo en la primera label 'Cancion1' pero asigna a N el valor n1 claro, n1 no es un integer y da un error.

¿Se te ocurre algo? :confused:

roman 13-02-2004 17:49:01

Cita:

Empezado por nesetru
Ahora si que entra, justo en la primera label 'Cancion1' pero asigna a N el valor n1 claro, n1 no es un integer y da un error.

¿Se te ocurre algo?

Pues sí que se me ocurre pero te haría bien pensarle un poco. Revísate la ayuda de la función Copy para ver por qué te está incluyendo el último caracter de 'Cancion'.

// Saludos

nesetru 13-02-2004 20:31:45

Gracias por la ayuda...


Después de leer varias veces la ayuda de 'copy' he podidon entender qué hacía y cual era el error.

Muchas gracias. :D

roman 13-02-2004 20:40:05

Cita:

Empezado por nesetru
Después de leer varias veces la ayuda de 'copy' he podidon entender qué hacía y cual era el error.

Y ahora eres un poco más sabio (lo digo sin ironía) ¿No te parece mejor así?

// Saludos


La franja horaria es GMT +2. Ahora son las 07:16:14.

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