Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cambiar El Fondo De Un Edit (https://www.clubdelphi.com/foros/showthread.php?t=61975)

tebre 28-11-2008 18:33:13

Cambiar El Fondo De Un Edit
 
Hola Amigos Pregunta Simple..como Cambio El Color De Fondo De Un Edit Por Medio De Codigo Al Oprimir Un Boton..


Ejemplo: Los Siguientes Campos Marcados No Estan Rellenados

Gracias

dec 28-11-2008 18:44:57

Hola,

A ver si este componente te da alguna idea:

Código Delphi [-]
{ *********************************************************************** }
{                                                                         }
{ DecComp - Unos sencillos componentes                                    }
{                                                                         }
{ Copyright (c) 2005 dec                                                  }
{ 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;

implementation

// Recursos/cadenas
//
{$I ..\inc\rsDecComp.inc}

// 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.

Caro 28-11-2008 22:06:41

Hola, hay varias formas de hacer lo que quieres, una sería verificando cada edit.

Código Delphi [-]
function TForm1.Validar: Boolean;
var
 Band : Boolean;
begin
 Band := True;
 if Trim(Edit1.Text)='' then
  begin
   Edit1.Color := clYellow;
   Band := False;
  end;
 if Trim(Edit2.Text)='' then
  begin
   Edit2.Color := clYellow;
   Band := False;
  end;
 if Trim(Edit3.Text)='' then
  begin
   Edit3.Color := clYellow;
   Band := False;
  end;
 Result := Band;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 if Not Validar then
  showmessage('existe algún edit vacío');
end;

pero despues si introduce texto tendría que volver a pintar del color inicial, para ello puedes utilizar el evento OnExit del edit y le asignas el mismo evento a los demas edit.

Código Delphi [-]
procedure TForm1.Edit1Exit(Sender: TObject);
begin
 if (Trim(TEdit(Sender).Text)<>'') and (TEdit(Sender).Color=clYellow) then
  TEdit(Sender).Color := clWhite;
end;

Ahora también podrías utilizar el evento OnExit para pintar de un color u otro y también le asignas ese evento a todos tus edits. Pero para ver si alguno esta de otro color, tienes recorrer tus componentes y verificar.

Código Delphi [-]
procedure TForm1.Edit1Exit(Sender: TObject);
begin
 if Trim(TEdit(Sender).Text)<>'' then
  TEdit(Sender).Color := clWhite
 else
  TEdit(Sender).Color := clYellow;
end;

O no pintar y verificar si esta vació, si es así no dejarle salir del control hasta que no llene algo y lo mismo le asignas el mismo evento a tus demas edits.

Código Delphi [-]
procedure TForm1.Edit1Exit(Sender: TObject);
begin
 if Trim(TEdit(Sender).Text)='' then
  TEdit(Sender).SetFocus;
end;

Saluditos

aeff 29-11-2008 12:18:28

bueno, según lo que preguntas...
Cita:

..como Cambio El Color De Fondo De Un Edit Por Medio De Codigo Al Oprimir Un Boton..
te puedo dar la siguiente referencia, en el evento OnClick de un Button coloca esto:
Código Delphi [-]
Edit1.Color := clRed;

pero si lo que quieres es cambiar el color de fonde de un Edit si no tiene textos escritos, entonces de la siguiente manera:

Código Delphi [-]
if TRIM(Edit1.Text) = '' then
  Edit1.Color := clRed;

pero si deseas un procedimiento para calcular de todos los Edit de una Form cual es el que no tiene textos escritos y cambiar su color de fondo, entonces, implementa esto:

Código Delphi [-]
procedure ValidarEn(aForm: TForm; aColorVacio, aColorEscrito: TColor);
var
  vIndex: Integer;
begin
  for vIndex := 0 to aForm.ComponentCount -1 do
    if  aForm.Components[vIndex] is TEdit then
      case Length(TRIM((aForm.Components[vIndex] as TEdit).Text)) of
        0:  (aForm.Components[vIndex] as TEdit).Color := aColorVacio;
        else
            (aForm.Components[vIndex] as TEdit).Color := aColorEscrito;
      end;
end;

y en el evento OnClick de un Button, coloca esto:

Código Delphi [-]
ValidarEn(Form1, clRed, clWhite);

te sirve de algo mi ayuda???
espero que si!

saludos!
aeff!

tebre 02-12-2008 19:13:09

hola amigos gracias a todos por sus respuestas. me sirvieron de mucho gracias


La franja horaria es GMT +2. Ahora son las 09:37:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi