Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Colores en los tedits (https://www.clubdelphi.com/foros/showthread.php?t=34288)

lbidi 03-08-2006 22:18:19

Colores en los tedits
 
Hola, amigos. Estuve buscando algun hilo sobre esto y no lo he encontrado.
Seguramente esta, pero no estoy muy despierto q digamos :D

Como hacen para que en un form con varios tEdits, se cambie de color el q tiene
el foco, lo he visto en varias aplicaciones, pero no he podido hacerlo.

Gracias
Leonardo

kman 03-08-2006 22:49:18

Hola!

Podrías usar el evento onEnter de ese Edit para que cambie de color.
También con la función Focused, si focused es true será un color de lo contrario otro color.

Saluditos.

fer21unmsm 03-08-2006 23:53:29

Cita:

Empezado por kman
Hola!

Podrías usar el evento onEnter de ese Edit para que cambie de color.
También con la función Focused, si focused es true será un color de lo contrario otro color.

Saluditos.

Hola, tambien falta decir que hay que usar el evento OnExit, para volver el color del edit que pierde el foco.

Saludos.:)

kman 04-08-2006 00:05:49

Cita:

Empezado por fer21unmsm
Hola, tambien falta decir que hay que usar el evento OnExit...

Así es, mi amigo, me falto eso. y que nos hagas saber si te funcionó o hay alguna duda.

dec 04-08-2006 07:11:15

Hola,

Tal vez te conviniera utilizar un componente derivado de "TEdit" que implementara ya lo que necesitas. El siguiente es un componente que escribí hace tiempo (aunque encontrarás muchos más similares y acaso mejor pensados y llevados a cabo) y que te permite asignar un color al "TEdit" cuando este tome el "foco" del usuario, y otro color, para cuando el "TEdit" pierda el "foco" del usuario, o no lo tenga, simplemente.

Lo he "sacado" de un conjunto de componentes y no lo he probado por separado. Si tienes algún problema hazlo saber por aquí. Puedes adaptarlo en todo caso a tus necesidades como mejor te parezca:

Código Delphi [-]
{ *********************************************************************** }
{                                                                         }
{ DecComp - Unos sencillos componentes                                    }
{                                                                         }
{ Copyright (c) 2005 dec - davidesperalta (EN) gmail.com                  }
{ bajo la licencia GNU GPL >> ver en "licencia.txt"                       }
{                                                                         }
{ *********************************************************************** }

unit UFocoEdit;

interface

uses
  Messages, SysUtils, Classes,
  Controls, StdCtrls, Graphics,

  UTypesDecComp;

// Sencillo componente descendiente de TEdit que añade
// dos propiedades que permiten establecer el color y
// la fuente del mismo al obtener el foco del usuario
//
type
  TFocoEdit = class(TEdit)
  private
    FAcercade: TAcercade;
  published
    property Acercade: TAcercade read FAcercade write FAcercade stored false;
  private
    FCopiaColor: TColor;
    FCopiaFuente: TFont;
    FFontEnfocado: TFont;
    FColorEnfocado: TColor;
    procedure FijarFuenteEnfocado(valor: TFont);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  protected
    procedure CMExit(var Message: TWMNoParams); message CM_EXIT;
    procedure CMEnter(var Message: TCMGotFocus); message CM_ENTER;
  published
    property FuenteEnfocado: TFont read FFontEnfocado write FijarFuenteEnfocado;
    property ColorEnfocado: TColor read FColorEnfocado write FColorEnfocado default clWhite;
  end;
  
procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TFocoEdit]);
end;

// Constructor del componente. Damos al color
// por defecto que ha de tener el componente
// cuando este obtenga el foco. Creamos las
// instancias de TFont necesarias
//
constructor TFocoEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Color := $00F7F7F7;
  FColorEnfocado := clWhite;
  FCopiaFuente := TFont.Create;
  FFontEnfocado := TFont.Create;
end;

// Destructor del componente
//
destructor TFocoEdit.Destroy;
begin
  FFontEnfocado.Free;
  FCopiaFuente.Free;
  inherited Destroy;
end;

// Aprovechar que el componente obtiene el foco
// para cambiar el color y la fuente del mismo
// según lo determinara el usuario
//
procedure TFocoEdit.CMEnter(var Message: TCMGotFocus);
begin
  inherited;
  FCopiaColor := Self.Color;
  FCopiaFuente.Assign(Self.Font);
  Self.Color := FColorEnfocado;
  Font.Assign(FFontEnfocado);
end;

// Aprovechar que el componente pierde el foco
// para establecer el color y la fuente del mismo
// mendiante los valores previamente guardados en
// las variables correspondientes
//
procedure TFocoEdit.CMExit(var Message: TWMNoParams);
begin
  inherited;
  Self.Color := FCopiaColor;
  Self.Font.Assign(FCopiaFuente);
end;

// Establecer la fuente que podrá verse
// en el componente cuando este tome el foco
//
procedure TFocoEdit.FijarFuenteEnfocado(valor: TFont);
begin
  if FFontEnfocado <> valor then
    FFontEnfocado.Assign(valor);
end;

end.

lbidi 04-08-2006 16:24:34

Gracias amigos x responder. La verdad q los dos primeros eventos ya los conocia, solo q queria evitar hacerlo para cada tedit q tenga en el form,
voy a probar la sugerencia de dec, a ver como me va. Luego les cuento.

Gracias otra vez.
Saludos desde Uruguay.

Bicho 04-08-2006 16:38:23

Hola, no necesitas programar el Evento OnEnter y OnExit de cada Edit del form, puedes usar el mismo evento para todos los edits y dentro de cada edit puedes hacer algo así:

Código Delphi [-]
procedure TForm1.edit1Enter(Sender: TObject);
begin
  if (Sender is TEdit) and (TEdit(Sender).Visible) then
    TEdit(Sender).ColorEditbk := clGradientActiveCaption;
end;

procedure TForm1.edit1Exit(Sender: TObject);
begin
  if sender is TEdit then TEdit(Sender).ColorEditbk  := clWindow;
end;

Y todos los edits a los que tengas asignados el mismo OnEnter y OnExit cambiaran de color por separado cada vez que se entre o salga de uno.

Saludos

lbidi 04-08-2006 21:44:57

Gracias bicho x responder. En efecto de esa manera q tu dices, lo hice y quedo barbaro. Ahora ya q estoy , repregunto.
Tengo varios forms, con varios edits en cada uno. Es posible de alguna manera asignar estos eventos en forma globar, sin tener q asignarlos edit x edit??

Gracias nuevamente.
Saludos


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

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