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 08-09-2013
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 291
Poder: 21
elrayo76 Va por buen camino
Acceder a una propiedad

Neftalí, vi el truco que pusiste en este enlace de este mismo foro http://clubdelphi.com/foros/showthread.php?t=80803 y te queria consultar algo.

Como se puede hacer para identificar mediante RTTI todos los componentes que sean de un tipo sin importar si son propios de Delphi o son los creados por terceros. Lo que intento es hacer algo como identificar a todos los componentes que sean del tipo ingreso de datos y cuando se ingresa a uno de ellos que se le cambie el color del fondo y cuando se salga se le ponga el color original.

Creo que no hace falta explicar porque se quiere hacer algo de esta forma y no uno por uno en cada pantalla.

Saludos,
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #2  
Antiguo 08-09-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por elrayo76 Ver Mensaje
Lo que intento es hacer algo como identificar a todos los componentes que sean del tipo ingreso de datos y cuando se ingresa a uno de ellos que se le cambie el color del fondo y cuando se salga se le ponga el color original.
Hola elrayo.

De este modo, cambiará el color del control que posee el foco y lo restaurará al perderlo siempre que el mismo posea la propiedad Color:
Código Delphi [-]
...
const
  WM_AFTER_CREATE = WM_USER + 300;

type
  TForm1 = class(TForm)
     .... 
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FPrevFocusedCtrl : TWinControl;
    FPrevFocusedColor: TColor;
    FFocusedColor    : TColor;
    procedure WmAfterCreate(var Msg: TMessage); message WM_AFTER_CREATE;
    procedure ActiveCtrlChange(Sender: TObject) ;
  public
  end;

var
  Form1: TForm1;

implementation 

uses TypInfo;

procedure TForm1.WmAfterCreate(var Msg: TMessage);
begin
  Screen.OnActiveControlChange := ActiveCtrlChange;
  FPrevFocusedCtrl := Screen.ActiveControl;
  if Assigned(GetPropInfo(FPrevFocusedCtrl.ClassInfo,'Color')) then
  begin
    FPrevFocusedColor := TColor(GetOrdProp(Screen.ActiveControl,'Color'));
    SetOrdProp(Screen.ActiveControl, 'Color', FFocusedColor);
  end;
end;

procedure TForm1.ActiveCtrlChange(Sender: TObject);
begin
  if Assigned(GetPropInfo(FPrevFocusedCtrl.ClassInfo, 'Color')) then
    SetOrdProp(FPrevFocusedCtrl, 'Color', FPrevFocusedColor);
  if Assigned(GetPropInfo(Screen.ActiveControl.ClassInfo,'Color')) then
  begin
    FPrevFocusedColor:= TColor(GetOrdProp(Screen.ActiveControl,'Color'));
    SetOrdProp(Screen.ActiveControl, 'Color', FFocusedColor);
  end;
  FPrevFocusedCtrl:= Screen.ActiveControl;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ...
  FFocusedColor := clLime;
  PostMessage(Handle, WM_AFTER_CREATE, 0, 0);
end;

...

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Screen.OnActiveControlChange := nil;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 10-09-2013
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 291
Poder: 21
elrayo76 Va por buen camino
Gracias por responder amigo, pero en realidad la solución es incompleta para lo que yo quiero hacer.

Lo que pretendo y que a lo mejor no me explique del todo bien es lo siguiente: Necesito mediante RTTI poder identificar que clase es el componente, o sea que me diga si es un TEdit, TLabel, TMemo, etc. Luego con esto se que componentes cambiar el color y a cuales no, porque no ha todos se lo tengo que hacer.

Además si hago lo que pretendo ¿esto funcionará con los componentes de terceros?. Lo que me interesa es que esto sea algo genérico que pueda usar en cualquier pantalla y no hacerlo en cada una y por cada tipo de componente.

Desde ya muchas gracias,
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #4  
Antiguo 10-09-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola elrayo76.

Creo que realmente no logro interpretar lo que buscas, pero en cuanto a obtener la información que mencionas,
Cita:
Necesito mediante RTTI poder identificar que clase es el componente, o sea que me diga si es un TEdit, TLabel, TMemo
dispones de los métodos:
Así como también la función RealGetWindowClass de la API de Windows.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 11-09-2013 a las 04:26:43.
Responder Con Cita
  #5  
Antiguo 11-09-2013
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 291
Poder: 21
elrayo76 Va por buen camino
Amigo ecfisa,

A lo que me refiero es que no quiero tener que hacer algo que yo compare si el componente al que le quiero cambiar el color es del tipo TEdit, TDBEdit, TRxEdit u otro. En lengua española seria como decir simplemente lo siguiente: todos los componentes que son editables cambiale el color cuando ingresas o cuando salis del mismo.

Si tengo que decir el compoente editable de las Jedi o el compoente editable de las RXlib o de cual fuere no tiene sentido que pregunte porque eso lo se hacer. Además si el día de mañana cambio un componente de esos por otro de otro desarrollador quiero que lo que tengo diseñado siga funcionando y en lo posible sin tocar nada

Saludos
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #6  
Antiguo 11-09-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 21
ozsWizzard Va por buen camino
Yo tampoco entiendo muy bien lo que quieres hacer exactamente. Y supongo que el hecho de que sea por RTTI o no es indiferente siempre y cuando lo puedas hacer.

Me da la sensación que quieres saber cuando es "una caja de texto" o algo así. Cuando dices componentes de un mismo tipo, haces una tipificación personal, que nada tiene que ver con que exista ese tipo en Delphi, por lo tanto, sólo se me ocurre que casi todos los componentes de ese tipo acaban heredando de TCustomEdit, por lo tanto se podría preguntar

Código Delphi [-]
if Objeto is TCustomEdit then

Ya sé que esto no es usando RTTI, pero es que no sé de que forma te puede ayudar el RTTI a saber algo así, y mucho menos controlarlo en un componente de un tercero.

Lo mismo no es esto lo que quieres saber puesto que el título del hilo, "Acceder a una propiedad", no tiene nada que ver.

Un saludo.
__________________
La Madurez se llama...
~~~Gaia~~~
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
Propiedad Locate dsa132132 OOP 20 12-12-2011 01:44:57
propiedad de un hilo kurono Varios 1 11-03-2009 02:46:51
acceder a un .dbf con ADO sidneyb Conexión con bases de datos 6 23-11-2007 23:07:14
[clases] No puedo acceder a propiedad protegida Ñuño Martínez PHP 8 11-01-2007 14:24:13
acceder a DBF (SQL) Demian Conexión con bases de datos 0 25-08-2004 21:47:56


La franja horaria es GMT +2. Ahora son las 19:20:25.


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