Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-05-2008
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 19
ilichhernandez Va por buen camino
Es posible hacer una nueva clase de componente ??

Estimados, muchas gracias por molestarse en leer esta solicitud de ayuda, mi duda es la siguiente, estoy recorriendo componentes con el siguiente codigo.

Código Delphi [-]
For I:=0 to ComponentCount-1 do   
Begin     
if (Components[i] is TCombobox) and (TCombobox(Components[i]).Color = ClRed) then       
Begin          
Showmessage('Faltan completar datos, revise formulario con espacios rojos');
b:= 1;
end;
if (Components[i] is TDBedit) and (TDBedit(Components[i]).Color = ClRed) then       
Begin          
Showmessage('Faltan completar datos, revise formulario con espacios rojos');
b:=1;
end;
if (Components[i] is TEdit) and (TEdit(Components[i]).Color = ClRed) then       
Begin          
Showmessage('Faltan completar datos, revise formulario con espacios rojos');
b:=1;
end;
end;


pero pensando en como mejorar esto , pues me parece poco optimo, se me paso por la cabeza hacer algo asi

TNuevoTipodeComponente : [TCombobox, TEdit, TDbedit] as Component;

y luego cuando recorro los componentes en vez de realizar busqueda sobre cada tipo realizo la busqueda del componente sobre uno solo, que me da la impresion que podria ser mas rapido y mas entendible, bueno gracias a los que pueden cooperar con alguna idea y a los que no tambien. Saludos a todos.
__________________
[Lo que a veces es tan facil, a veces parece imposible]

Última edición por ilichhernandez fecha: 02-05-2008 a las 22:59:39. Razón: faltaban las etiquetas
Responder Con Cita
  #2  
Antiguo 02-05-2008
[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
Hola...

Primero, recuerda que existen las etiquetas [ delphi ] [ /delphi ] (sin los espacios en blanco) para publicar código fuente en Delphi.

Sobre tu inquietud, bueno, existen varias formas de hacerlo...

Por ejemplo, todos los tipos de componente que usas heredan de TWinControl, entonces tu código puede quedar más o menos así:

Código Delphi [-]
for I := 0 to Pred(ComponentCount) do
  if (Components[i] is TWinControl) and (TWinControl(Components[i]).Color = clRed) then
  begin
    ShowMessage('Falta completar datos... ');
    b := 1
  end

Ahora, existe otra posibilidad y es usando RTTI (Runtime Type Information). Puedes buscar mucha información sobre RTTI tanto en la web como en el foro...


Saludos...

Última edición por maeyanes fecha: 02-05-2008 a las 22:15:12.
Responder Con Cita
  #3  
Antiguo 02-05-2008
santus santus is offline
Miembro
 
Registrado: ene 2006
Posts: 130
Poder: 19
santus Va por buen camino
Cita:
Empezado por maeyanes Ver Mensaje
Hola...

Primero, recuerda que existen las etiquetas [ delphi ] [ /delphi ] (sin los espacios en blanco) para publicar código fuente en Delphi.

Sobre tu inquietud, bueno, existen varias formas de hacerlo...

Por ejemplo, todos los tipos de componente que usas heredan de TWinControl, entonces tu código puede quedar más o menos así:

Código Delphi [-]for I := 0 to Pred(ComponentCount) do if (Components[i] is TWinControl) and (TWinControl(Components[i]).Color = clRed) then begin ShowMessage('Falta completar datos... ');
b := 1
end


Ahora, existe otra posibilidad y es usando RTTI (Runtime Type Information). Puedes buscar mucha información sobre RTTI tanto en la web como en el foro...


Saludos...
Hola maeyanes ..

perdon que me meta. La verdad que vi interesante tu planteo. El tema es que lo intenté probar en mi delphi 2007 y no funciona!!

a la linea:

Código Delphi [-]
TWinControl(Components[i]).Color


me tira el siguiente error:

[DCC Error] Unit2.pas(31): E2362 Cannot access protected symbol TControl.Color

Se me ocurre que con el delphi 2007 esto no anda??.. alguna idea??.. es curiosidad nomas...

muchas gracias. Saludos.
__________________
"El ordenador nació para resolver problemas que antes no existían." Bill Gates.
Responder Con Cita
  #4  
Antiguo 02-05-2008
[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
Hola...

Eso me pasa por no verificar antes... jejeje

Bueno, resulta que la propiedad Color en TWinControl, al igual que en [/b]TControl[/b] de la cual desciende, es una propiedad protegida y es TEdit quien la declara como published.

Es por eso que obtienes ese error en el código que puse...

En ese caso es mejor usar la opción del RTTI...


Saludos...
Responder Con Cita
  #5  
Antiguo 02-05-2008
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 19
ilichhernandez Va por buen camino
Gracias estimados, acabo de probar y me da el mismo error que tiene Santus asi que vere mediante RTTI a ver que averiguo, muchas gracias a todos. Saludos
__________________
[Lo que a veces es tan facil, a veces parece imposible]
Responder Con Cita
  #6  
Antiguo 03-05-2008
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
Código Delphi [-]
type
  TControl = class(Controls.TControl);

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;

begin
  for I := 0 to ControlCount - 1 do
    TControl(Controls[i]).Color := clRed;
end;

// Saludos
Responder Con Cita
  #7  
Antiguo 05-05-2008
ilichhernandez ilichhernandez is offline
Miembro
 
Registrado: oct 2005
Posts: 277
Poder: 19
ilichhernandez Va por buen camino
Voy a revisar esta nueva opcion, muchas gracias por lacolaboracion, se agradece..... Saludos, luego les cuento....
__________________
[Lo que a veces es tan facil, a veces parece imposible]
Responder Con Cita
  #8  
Antiguo 05-05-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Creo que la opción mejor es la publicada por Román.

Utilizar RTTI será más complicado que eso ya te lo aseguro...
Lo único que te aportaría utilizar RTTI es que podrías asignar el valor a la propiedad color de la misma forma que al resto sin que todos los componentes descencieran de TControl.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Es posible hacer que XPManifest sea opcional? egostar Varios 15 12-04-2008 14:13:05
Es posible hacer esto? MaMu Gráficos 4 18-01-2007 08:00:42
Clase para hacer ABM mateamargo OOP 3 25-10-2005 22:34:23
Es Posible Hacer Una Consulta De Un Componente Query edy_aca SQL 2 19-11-2004 18:34:26
Es posible hacer...? merlin SQL 1 20-01-2004 19:46:46


La franja horaria es GMT +2. Ahora son las 16:20:51.


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