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 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
  #2  
Antiguo 31-05-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
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
  #3  
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
  #4  
Antiguo 31-05-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Por cierto, me di cuenta que puse Check := Components[ I ] is TCheckBox en lugar de as... :P

Última edición por maeyanes fecha: 31-05-2005 a las 17:36:22.
Responder Con Cita
  #5  
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
Pues no. Veo que ni reiterando quieren omitir el uso de FindComponent.

Una de las pocas (muy pocas) cosas en las que me gustaba más VB son sus arreglos de componentes con lo cual sería mucho más fácil trabajar en estos casos.

Dicha esta barbaridad, veamos cómo podemos arreglárnoslas con Delphi.

En el formulario declaren el arreglo necesitado:

Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    CheckBoxes: array of TCheckBox;
  end;

En el constructor del formulario usen el código de maeyanes pero para llenar el arreglo:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer; // para recorrer los componentes del formulario
  J: Integer; // para indexar el arreglo de check boxes

begin
  SetLength(CheckBoxes, 100);
  J := 0;

  for I := 0 to ComponentCount - 1 do
    if Components[i] is TCheckBox then
    begin
      CheckBoxes[J] := TCheckBox(Components[i]);
      Inc(J);
    end;
end;

Entonces, para el resto de la aplicación se dispondrá de un arreglo de check boxes mucho más fácil de manipular las veces que sea necesario:

Código Delphi [-]
var
  I: Integer;

begin
  for I := Low(CheckBoxes) to High(CheckBoxes) do
    // código para CheckBoxes[i]
end;

// Saludos
Responder Con Cita
  #6  
Antiguo 31-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
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
  #7  
Antiguo 31-05-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por Lepe
Solo un detalle.... Estas en el OnCreate del Form, en este evento puede que los checkboxes no se hayan construido
Cuando el evento onCreate se dispara, ya todo lo que se dejó en el form en tiempo de diseño existe, incluso los apuntadores entre iguales están correctamente establecidos: los datasources apuntaran a los datasets, los dbedits a los fields, etc, etc. suponiendo que todo está en el mismo formulario.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
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
Cita:
Empezado por jachguate
Cuando el evento onCreate se dispara, ya todo lo que se dejó en el form en tiempo de diseño existe, incluso los apuntadores entre iguales están correctamente establecidos: los datasources apuntaran a los datasets, los dbedits a los fields, etc, etc.
Suponiendo, si no mal recuerdo, que estamos hablando de Delphi > 3 y que la propiedad OldCreateOrder del formulario no ha sido cambiada a true.

// Saludos
Responder Con Cita
  #9  
Antiguo 31-05-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por roman
Suponiendo, si no mal recuerdo, que estamos hablando de Delphi > 3 y que la propiedad OldCreateOrder del formulario no ha sido cambiada a true.

// Saludos
Buen punto. En d3 e inferiores, OnCreate se llama dentro del constructor de la forma, y en ese momento ninguno de los componentes contenidos en ella existe.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #10  
Antiguo 01-06-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

Muchas gracias a todos funciono muy bien


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 23:57:52.


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