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

 
 
Herramientas Buscar en Tema Desplegado
  #5  
Antiguo 20-11-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
shoulder,

Siguiendo la idea de ecfisa del uso de RTTI, revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, TypInfo, Grids;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Memo1: TMemo;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ActiveControlChanged(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Evento de Control del Focus sobre el Form1 por medio de la Matriz de Controles y RTTI
procedure TForm1.ActiveControlChanged(Sender: TObject);
var
   PropInfo: PPropInfo;
   i: Integer;
begin
   for i := 0 to ControlCount - 1 do
   begin
      if TWinControl(Controls[i]).Focused then
      begin
         PropInfo := GetPropInfo(Self.Controls[i].ClassInfo,'Color');
         if Assigned(PropInfo) then
            SetOrdProp(Controls[i], PropInfo, ord(clYellow));
      end
      else
      begin
         PropInfo := GetPropInfo(Self.Controls[i].ClassInfo,'Color');
         if Assigned(PropInfo) then
            SetOrdProp(Controls[i], PropInfo, ord(clWindow));
      end;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   // Activa el Evento de Control de Focus en el Form1
   Screen.OnActiveControlChange := ActiveControlChanged;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // Desactiva el Evento de Control de Focus en el Form1
  Screen.OnActiveControlChange := nil;
end;

end.
El código anterior cambia el color de cualquier control que tenga el focus activo si y solo si este tiene implementada la propiedad color. Esto lo hace de forma genérica por medio de RTTI (Run-Time Type Information) y la propiedad OnActiveControlChange que permite definir un manejador de evento para controlar el cambio de focus en un form.

El código anterior se encuentra implementado en el siguiente link: http://terawiki.clubdelphi.com/Delph...e+con+RTTI.rar

Espero sea útil

Nelson.
Responder Con Cita
 



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
order by descendente??? pacuuy SQL 2 08-01-2008 00:13:17
Datetime y Order by. ppb SQL 2 20-06-2005 13:16:14
Tab Order kepacha Varios 5 31-01-2005 13:32:40
Order by VRO SQL 6 31-08-2004 08:17:05
Order by ...... chutipascal Firebird e Interbase 8 24-06-2003 14:46:21


La franja horaria es GMT +2. Ahora son las 08:20:02.


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