Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-05-2005
novice novice is offline
Registrado
 
Registrado: may 2005
Ubicación: Cerca de la Frontera
Posts: 4
Poder: 0
novice Va por buen camino
Concatenar CheckBox

Que tal mi pregunta es la siguiente:

Tengo una forma en la cual tengo mas de 100 "CheckBox", con cada uno de ellos realizo practicamente los mismos procedimientos, no quiero que me quede un codigo enorme con practicamente lo mismo por lo tanto decidi meterla condicion " if " del CheckBox a un ciclo "for", pretendo que el ciclo cambie el numero de el "CheckBoxn.Checked" pero tengo problemas para lograrlo.

Ejemplo:
------------------------------------------
//Asi trabaja bien

if CheckBox1.Checked then
begin
//codigo de trabajo
end
------------------------------------------
//Esto es lo que pretendo

for b:= 1 to 100 do
begin
if {Componente CheckBox concatenado con el numero del ciclo for} then
begin
//codigo de trabajo
end
-------------------------------------------

Lo intente de varias formas desde meter "CheckBox" a un string y de ahi concatenarlo, pero pues uno es booleano y el otro string, utilice la funcion "strtobool()" pero no me funciono o no la supe inplementar

Espero puedan ayudarme y de antemano agradesco su ayuda.
Responder Con Cita
  #2  
Antiguo 30-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Código Delphi [-]
var ckeck:TcheckBox;
begin

for i:=0 to 100 do
begin
check := Findcomponent('Checkbox'+inttostr(i));
if check <> nil then
begin
  // codigo trabajo
end;
end;

Saludote
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 30-05-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Una observación:

El método FindComponent lo que hace es recorrer toda la lista de componentes del formulario hasta encontrar uno con el nombre indicado. En un ciclo como el descrito se estaría haciendo este recorrido 100 veces, una por cada iteración.

// Saludos
Responder Con Cita
  #4  
Antiguo 31-05-2005
novice novice is offline
Registrado
 
Registrado: may 2005
Ubicación: Cerca de la Frontera
Posts: 4
Poder: 0
novice Va por buen camino
Gracias por tu respuesta Lepe pero me esta marcando incompatibilidad

[Error] Unit1.pas(35): E2010 Incompatible types: 'TCheckBox' and 'TComponent'

en la linea:

check := Findcomponent('Checkbox'+inttostr(i));

//Este es el codigo
procedure TForm1.FormCreate(Sender: TObject);
var check:TcheckBox;
var i:integer;
begin

for i:=0 to 100 do
begin
check := Findcomponent('Checkbox'+inttostr(i));
if check <> nil then
begin
// codigo trabajo
end;
end;

end;

Tendras alguna sugerencia gracias.


Responder Con Cita
  #5  
Antiguo 31-05-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Trata con esto:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var 
  Check: TcheckBox;
  I: Integer;

begin
  for I := 0 to ComponentCount - 1 do
    if Components[i] is TCheckBox then
    begin
      Check := Components[i] as TCheckBox;
      if Check.Checked then
        // codigo trabajo
    end
end;

Saludos...
Responder Con Cita
  #6  
Antiguo 31-05-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Una pequeña modificación:

En donde dice

Check := Components[i] as TCheckBox;

sería mejor poner

Check := TCheckBox(Components[i]);

El operador as implícitamente hace uso del operador is lo cual es innecesario porque ya se verificó antes.

Y una observación (a ver si repitiendo causa algún efecto): este código de maeyanes es mucho más recomendable que el uso de FindComponent ya que se hace el recorrido de los componentes del formulario una sólo vez y no multiplicado por 100.

// Saludos
Responder Con Cita
  #7  
Antiguo 31-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Gracias Roman, no sé en que estaba pensando o:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var c:TComponent;
begin

c := Findcomponent('Checkbox'+inttostr(i));
if c <> nil then
begin
  Tcheckbox(c).Propiedades del checkbox
  // codigo trabajo
end;

Solo un detalle.... Estas en el OnCreate del Form, en este evento puede que los checkboxes no se hayan construido

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:47:08.


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
Copyright 1996-2007 Club Delphi