Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2017-01

cambiar color de un edit

12 messages · 7 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

hfiandor

Estimados listeros:

Ante todo pido perdón por esta pregunta.

Tengo en un form varios editbox, que les doy color cuando se activan.

Necesito retornar la propiedad color a :=clWindow; cuando pincho con el
ratón en otro editbox que no estaba con foco.
No sé cómo poner todos los edit de la form a :=clWindow antes de darle color
al recién pinchado.

Anticipándole las gracias por su ayuda,

Saludos

Ing. Héctor F. Fiandor Rosario

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170115/af325557/attachment.html>

Reply by email

Adrian De Armas
to hfiandor

Hola el siguiente procedimiento pinta todos los edits con clWindow menos el control que tiene el foco (si es un edit) y lo pinta de azul. Creo entender que es lo que necesitas.

Saludos

*procedure TForm1.PintarControl;*
*var*
* i: integer;*
*begin*
* for i := 0 to ComponentCount-1 do*
* begin*
* if Components[i] is TEdit then*
* begin*
* if TEdit(Components[i]).Focused then*
* TEdit(Components[i]).Color:= clBlue*
* else*
* TEdit(Components[i]).Color:= clWindow ;*
* end;*
* end;*
*end; *

El 15 de enero de 2017, 20:37, hfiandor via Lazarus-es <

lazarus-es en lists.lazarus-ide.org> wrote 28 lines
Estimados listeros: Ante todo pido perdón por esta pregunta. Tengo en un form varios editbox, que les doy color cuando se activan. Necesito retornar la propiedad color a :=clWindow; cuando pincho con el ratón en otro editbox que no estaba con foco. No sé cómo poner todos los edit de la form a :=clWindow antes de darle color al recién pinchado. Anticipándole las gracias por su ayuda, Saludos Ing. Héctor F. Fiandor Rosario _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org http://lists.lazarus-ide.org/listinfo/lazarus-es

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170115/76ea7ffb/attachment.html>

Reply by email

Ismael L. Donis Garcia
to Adrian De Armas

O podría poner en cada control: (Edit1=nombre de los tedit)

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  Edit1.Color:= clBlue
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Edit1.Color:= clWindow
end;

Saludos
========
| ISMAEL |
========

Earlier message 57 lines
----- Original Message ----- From: Adrian De Armas via Lazarus-es To: Spanish version of Lazarus List Cc: Adrian De Armas Sent: Sunday, January 15, 2017 7:26 PM Subject: Re: [Lazarus-es] cambiar color de un edit Hola el siguiente procedimiento pinta todos los edits con clWindow menos el control que tiene el foco (si es un edit) y lo pinta de azul. Creo entender que es lo que necesitas. Saludos procedure TForm1.PintarControl; var i: integer; begin for i := 0 to ComponentCount-1 do begin if Components[i] is TEdit then begin if TEdit(Components[i]).Focused then TEdit(Components[i]).Color:= clBlue else TEdit(Components[i]).Color:= clWindow ; end; end; end; El 15 de enero de 2017, 20:37, hfiandor via Lazarus-es <lazarus-es en lists.lazarus-ide.org> escribió: Estimados listeros: Ante todo pido perdón por esta pregunta. Tengo en un form varios editbox, que les doy color cuando se activan. Necesito retornar la propiedad color a :=clWindow; cuando pincho con el ratón en otro editbox que no estaba con foco. No sé cómo poner todos los edit de la form a :=clWindow antes de darle color al recién pinchado. Anticipándole las gracias por su ayuda, Saludos Ing. Héctor F. Fiandor Rosario

Reply by email

hfiandor
to Ismael L. Donis Garcia

Estimado Ismael:

Mi problema es que tengo un form con varios edit para indicar rangos DESDE y HASTA.

Cuando el form hace Show yo selecciono la primera casilla y mi lío está cuando quiero activar otra casilla. Lo puedo hacer con el ratón pinchando la casilla y le doy color Yellow para indicar que está activa,

Pero no sé cómo quitar el color Yellow de la primera que se pintó cuando hizo Show.

Tuve la rutina para quitar el foco a todos los componentes del form, pero la he perdido y quisiera probar con ella.

Saludos

Ing. Héctor F. Fiandor Rosario

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170116/089eed6d/attachment.html>

Reply by email

Ulises Díaz
to hfiandor

Hola

Puedes usar el evento OnExit para asignarle el color blanco, en ese evento llamas un procedimiento que haga ese trabajo.

Por ejemplo, porcedimiento para cambiar color:

procedure FColorDefecto(Control: TObject);
var
begin
 if (Control is TEdit) then
   begin
    TEdit(Control).Color := clWhite;
  end;
end;
//Procedimiento para el control activo
procedure FColorActivo(Control: TObject);
var
begin
 if (Control is TEdit) then
   begin
    TEdit(Control).Color := clGreen;
  end;
end;

Ahora usando los eventos OnEnter y ONExit asignamos los colores.

procedure TForm1.Edit2Enter(Sender: TObject);
begin
  FColorActivo(Sender);
end;
procedure TForm1.Edit2Exit(Sender: TObject);
begin
  FColorDefecto(Sender);
end;

O se pueden usar los eventos directamente:

procedure TForm1.Edit2Enter(Sender: TObject);
begin
  (Sender as tedit).Color := clGreen;
// o edit2.color := clGreen;
end;
procedure TForm1.Edit2Exit(Sender: TObject);
begin
  (Sender as tedit).Color := clWhite;
end;

La desventaja de este método es que si hay muchos controles es dispendioso usar todos esos eventos, además por cada control nuevo que se adicione toca modificar los eventos.

Espero que esta u otra alternativa que han presentado los compañeros sea utilidad para usted.

Saludos desde Colombia

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170116/1e6eaacc/attachment-0001.html>

Reply by email

Ismael L. Donis Garcia
to hfiandor: Estimado Ismael: Mi problema es que tengo un form con varios edit para indicar rangos…

Como te dije antes a cada componente le programas los 2 eventos.

Cuando coge el foco:

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  Edit1.Color:= clYellow
end;

Y cuando pierde el foco:

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Edit1.Color:= clWindow
end;

Esto lo tienes que hacer para todos los componentes que quieres ponerle el color personalizado.

En el ejemplo que te puse Edit1 es el nombre de la caja de texto.

Saludos Reiterados
========
| ISMAEL |
========

Earlier message 29 lines
----- Original Message ----- From: hfiandor via Lazarus-es To: 'Spanish version of Lazarus List' Cc: hfiandor Sent: Monday, January 16, 2017 11:38 AM Subject: Re: [Lazarus-es] cambiar color de un edit Estimado Ismael: Mi problema es que tengo un form con varios edit para indicar rangos DESDE y HASTA. Cuando el form hace Show yo selecciono la primera casilla y mi lío está cuando quiero activar otra casilla. Lo puedo hacer con el ratón pinchando la casilla y le doy color Yellow para indicar que está activa, Pero no sé cómo quitar el color Yellow de la primera que se pintó cuando hizo Show. Tuve la rutina para quitar el foco a todos los componentes del form, pero la he perdido y quisiera probar con ella. Saludos Ing. Héctor F. Fiandor Rosario ------------------------------------------------------------------------------

Reply by email

José Mejuto
to Ulises Díaz: Hola Puedes usar el evento OnExit para asignarle el color blanco, en ese evento llamas un…
Ulises Díaz wrote
Hola

[...]

Show quoted text 6 lines
La desventaja de este método es que si hay muchos controles es dispendioso usar todos esos eventos, además por cada control nuevo que se adicione toca modificar los eventos. Espero que esta u otra alternativa que han presentado los compañeros sea utilidad para usted.

Hola,

frmXXX = class(TForm)
[...]
protected
function SetFocusedControl(Control: TWinControl): Boolean; override;
[...]
end;
function frmXXX.SetFocusedControl(Control: TWinControl): Boolean;
var
   j: integer;
   c: TComponent;
begin
   Result:=inherited SetFocusedControl(Control);
   if Result then begin
     for j := 0 to Pred(Self.ComponentCount) do begin
       c:=Self.Components[j];
       if c is TEdit then begin
         if c=Control then begin
           TEdit(c).Color:=clYellow;
         end else begin
           TEdit(c).Color:=clWindow;
         end;
       end;
     end;
   end;
end;

Reply by email

Iván Mesa
to hfiandor: Estimados listeros: Ante todo pido perdón por esta pregunta. Tengo en un form varios…

Saludos Héctor y compañía.

Otra implementeación es:

procedure Tfrom1.TextEditEnter (Sender : object);
begin
    (sender as Tedit).Color := clBlue;
end;
procedure TForm1.TextEditExit(Sender : object);
begin
    (sender as TEdit).Color := clWindow;
end;

Entonces asocias el evento Enter y Exit de todos los TEdit del formulario a cada uno de los procedimientos de arriba.

OnEnter a TForm1.TextEditEnter y OnExit a TForm1.TextEditExit;

Imagino que funcionará y te ahorrará código.

Abrazos.

Iván.

hfiandor wrote 25 lines
Estimados listeros: Ante todo pido perdón por esta pregunta. Tengo en un form varios editbox, que les doy color cuando se activan. Necesito retornar la propiedad color a :=clWindow; cuando pincho con el ratón en otro editbox que no estaba con foco. No sé cómo poner todos los edit de la form a :=clWindow antes de darle color al recién pinchado. Anticipándole las gracias por su ayuda, Saludos Ing. Héctor F. Fiandor Rosario _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org http://lists.lazarus-ide.org/listinfo/lazarus-es

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170116/5e684096/attachment.html>

Reply by email

Iván Mesa
to hfiandor: Estimado Ismael: Mi problema es que tengo un form con varios edit para indicar rangos…

Mira Héctor, te paso el código de una unit completita. Te creas un form, le pones dos tEdit, y en el form haces doble click y en la unit pegas esto:

unit Unit1;
{$mode objfpc}{$H+}
interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type
   { TForm1 }
   TForm1 = class(TForm)
     Edit1: TEdit;
     Edit2: TEdit;
     procedure FormCreate(Sender: TObject);
     procedure EditEnter(Sender:TObject);
     procedure EditExit(Sender:TObject);
   private
     { private declarations }
   public
     { public declarations }
   end;
var
   Form1: TForm1;
implementation
{$R *.lfm}
procedure Tform1.EditEnter(Sender : TObject);
begin
   (Sender as TEdit).Color := clBlue;
end;
procedure Tform1.EditExit(Sender : TObject);
begin
   (Sender as TEdit).Color := clWindow;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
   idx : integer;
   edt : TEdit;
begin
   for idx := 0 to Self.ControlCount-1 do begin
     if Self.Controls[idx] is TEdit then begin
       edt := (Self.Controls[idx] as TEdit);
       edt.OnEnter := @EditEnter;
       edt.OnExit := @EditExit;
     end;
   end;
end;
end.

Abrazos.

hfiandor wrote 26 lines
Estimado Ismael: Mi problema es que tengo un form con varios edit para indicar rangos DESDE y HASTA. Cuando el form hace Show yo selecciono la primera casilla y mi lío está cuando quiero activar otra casilla. Lo puedo hacer con el ratón pinchando la casilla y le doy color Yellow para indicar que está activa, Pero no sé cómo quitar el color Yellow de la primera que se pintó cuando hizo Show. Tuve la rutina para quitar el foco a todos los componentes del form, pero la he perdido y quisiera probar con ella. Saludos Ing. Héctor F. Fiandor Rosario _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org http://lists.lazarus-ide.org/listinfo/lazarus-es

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170116/e1f3cb00/attachment-0001.html>

Reply by email

Jose Antonio Cuello
to hfiandor: Estimados listeros: Ante todo pido perdón por esta pregunta. Tengo en un form varios…

Hola, siento la tardanza pero me pilló algo liado.

Te paso la manera en que realizo estas labores en un formulario base del cual luego heredo. Este formulario a demás de controlar el pintado de los controles realiza labores de validación y obligatoriedad pero creo que la clave la tendrás en como se crea y destruye el formulario.

Espero pueda servirte.
Un saludo

constructor TBaseForm.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
wRequiredObjects := TRequiredObjects.Create;
// change event OnActiveControlChange for control paint color of active control
wOldOnActiveControlChange := Screen.OnActiveControlChange;
Screen.OnActiveControlChange := @NewActiveControlChange;
// change event OnHint for capture hint of active control
wOldOnHint := Application.OnHint;
Application.OnHint := @NewHint;
end;
destructor TBaseForm.Destroy;
begin
if assigned( wOldOnActiveControlChange ) then
Screen.OnActiveControlChange := wOldOnActiveControlChange
else
Screen.OnActiveControlChange := nil;
if assigned( wOldOnHint ) then
Application.OnHint := wOldOnHint
else
Application.OnHint := nil;
if assigned( wRequiredObjects ) then FreeAndNil( wRequiredObjects );
inherited Destroy;
end;
procedure TBaseForm.NewActiveControlChange(Sender: TObject);
var vPropInfo: PPropInfo;
function Sub_GetColor(Control: TControl): TColor;
begin
Result := 0;
vPropInfo := GetPropInfo(Control.ClassInfo, 'Color');
if vPropInfo  nil then
Result := GetOrdProp(Control, vPropInfo);
end;
procedure Sub_SetColor(Control: TControl; Color: TColor);
begin
vPropInfo := GetPropInfo(Control.ClassInfo, 'Color');
if vPropInfo  nil then
SetOrdProp(Control, vPropInfo, Color);
end;
function Sub_ControlColor(Control: TControl): Boolean;
begin
Result := assigned(Control) and
(Control.InheritsFrom(TCustomForm) = False) and
(Control.InheritsFrom(TCustomGrid) = False) and
(Control.InheritsFrom(TCustomPanel) = False) and
(Control.InheritsFrom(TCustomTreeView) = False) and
(Control.InheritsFrom(TCustomListBox) = False);
end;
begin
// Restore old color to old control (focused control had changed)
if Sub_ControlColor(wLastControlFocus) then
Sub_SetColor(wLastControlFocus, wLastColorFocus);
// assign new focused control
wLastControlFocus := Screen.ActiveControl;
// assign focused color to new focused control
if Sub_ControlColor(wLastControlFocus) then
begin
wLastColorFocus := Sub_GetColor(wLastControlFocus); // save original color
Sub_SetColor(wLastControlFocus, $00FEDCC7); // assign focused color to focused control
if assigned( StatusBar ) and (StatusBar.Panels.Count > 0) then
StatusBar.Panels[ stpanel_Hint ].Text := wLastControlFocus.Hint; // assign Hint to panel hint
end;
end;

De: "hfiandor via Lazarus-es" <lazarus-es en lists.lazarus-ide.org> Para: lazarus-es en lists.lazarus-ide.org
CC: "hfiandor" <hfiandor en ceniai.inf.cu>
Enviados: Lunes, 16 de Enero 2017 0:37:46
Asunto: [Lazarus-es] cambiar color de un edit

Estimados listeros:

Ante todo pido perdón por esta pregunta.

Tengo en un form varios editbox, que les doy color cuando se activan.

Necesito retornar la propiedad color a :=clWindow; cuando pincho con el ratón en otro editbox que no estaba con foco.
No sé cómo poner todos los edit de la form a :=clWindow antes de darle color al recién pinchado.

Anticipándole las gracias por su ayuda,

Saludos

Ing. Héctor F. Fiandor Rosario

Reply by email

hfiandor
to Ismael L. Donis Garcia: Como te dije antes a cada componente le programas los 2 eventos. Cuando coge el foco:…

Amigos listeros:

Ante todo, mil gracias por todo lo que me han sugerido, que he guardado para estudiarlo con más detalle después.

Finalmente probé con esta solución, que parece que funciona:

Hice un procedure que declaro como { private declarations } así:

procedure TfNotasAux.quitarcolor;
begin
  for i := 0 to self.ComponentCount-1 do
  begin
    if self.Components[i] is TEdit then
    begin
      if TEdit(Components[i]).Focused then
        TEdit(Components[i]).Color:= clYellow
      else
        TEdit(Components[i]).Color:= clWindow ;
    end;
  end;
end;

En el cuerpo del programa para cada edit que tengo disponible para activar le hago un evento OnClick así:

procedure TfNotasAux.eGrupoDesdeClick(Sender: TObject);
begin
  quitarcolor;
end;

y parece que esto funciona.

Cada día que aprendo algo nuevo me doy cuenta de que no sé nada.

Saludos

Ing. Héctor F. Fiandor Rosario

De: Lazarus-es [mailto:lazarus-es-bounces en lists.lazarus-ide.org] En nombre de Ismael L. Donis Garcia via Lazarus-es Enviado el: lunes, 16 de enero de 2017 12:22 p. m. Para: Spanish version of Lazarus List
CC: Ismael L. Donis Garcia
Asunto: Re: [Lazarus-es] cambiar color de un edit

Como te dije antes a cada componente le programas los 2 eventos.

Cuando coge el foco:

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  Edit1.Color:= clYellow
end;

Y cuando pierde el foco:

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Edit1.Color:= clWindow
end;

Esto lo tienes que hacer para todos los componentes que quieres ponerle el color personalizado.

En el ejemplo que te puse Edit1 es el nombre de la caja de texto.

Saludos Reiterados
========
| ISMAEL |
========

Earlier message 32 lines
----- Original Message ----- From: hfiandor via Lazarus-es <mailto:lazarus-es en lists.lazarus-ide.org> To: 'Spanish version of Lazarus List' <mailto:lazarus-es en lists.lazarus-ide.org> Cc: hfiandor <mailto:hfiandor en ceniai.inf.cu> Sent: Monday, January 16, 2017 11:38 AM Subject: Re: [Lazarus-es] cambiar color de un edit Estimado Ismael: Mi problema es que tengo un form con varios edit para indicar rangos DESDE y HASTA. Cuando el form hace Show yo selecciono la primera casilla y mi lío está cuando quiero activar otra casilla. Lo puedo hacer con el ratón pinchando la casilla y le doy color Yellow para indicar que está activa, Pero no sé cómo quitar el color Yellow de la primera que se pintó cuando hizo Show. Tuve la rutina para quitar el foco a todos los componentes del form, pero la he perdido y quisiera probar con ella. Saludos Ing. Héctor F. Fiandor Rosario _____

Reply by email

Jose Antonio Cuello
to hfiandor

El problema es que si asignas el procedimiento al OnClick cuando el usuario use el teclado (Enter o Tab) no te funcionará. Para este caso, mejor usar el evento OnEnter como sugería el compañero.

Por otro, con esta solución cada vez que cambia el foco "rastreas" todos los objetos pintando clWindow en objetos TEdit que ya tienen ese color. Y también tengo dudas de como se comportará si sobre el formulario tienes Paneles, GroupBox, o componentes con distintas páginas y los TEdits están contenidos dentro.

Un saludo

De: "hfiandor via Lazarus-es" <lazarus-es en lists.lazarus-ide.org> Para: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus-ide.org> CC: "hfiandor" <hfiandor en ceniai.inf.cu>
Enviados: Martes, 17 de Enero 2017 11:34:37
Asunto: Re: [Lazarus-es] cambiar color de un edit

Amigos listeros:

Ante todo, mil gracias por todo lo que me han sugerido, que he guardado para estudiarlo con más detalle después.

Finalmente probé con esta solución, que parece que funciona:

Hice un procedure que declaro como { private declarations } así:

procedure TfNotasAux.quitarcolor;
begin
for i := 0 to self.ComponentCount-1 do
begin
if self.Components[i] is TEdit then
begin
if TEdit(Components[i]).Focused then
TEdit(Components[i]).Color:= clYellow

else

TEdit(Components[i]).Color:= clWindow ;
end;
end;
end;

En el cuerpo del programa para cada edit que tengo disponible para activar le hago un evento OnClick así:

procedure TfNotasAux.eGrupoDesdeClick(Sender: TObject);
begin
quitarcolor;
end;

y parece que esto funciona.

Cada día que aprendo algo nuevo me doy cuenta de que no sé nada.

Saludos

Ing. Héctor F. Fiandor Rosario

De: Lazarus-es [mailto:lazarus-es-bounces en lists.lazarus-ide.org] En nombre de Ismael L. Donis Garcia via Lazarus-es Enviado el: lunes, 16 de enero de 2017 12:22 p. m. Para: Spanish version of Lazarus List
CC: Ismael L. Donis Garcia
Asunto: Re: [Lazarus-es] cambiar color de un edit

Como te dije antes a cada componente le programas los 2 eventos.

Cuando coge el foco:

procedure TForm1.Edit1Enter(Sender: TObject);
begin
Edit1.Color:= clYellow
end;

Y cuando pierde el foco:

procedure TForm1.Edit1Exit(Sender: TObject);
begin
Edit1.Color:= clWindow
end;

Esto lo tienes que hacer para todos los componentes que quieres ponerle el color personalizado.

En el ejemplo que te puse Edit1 es el nombre de la caja de texto.

Saludos Reiterados
========
| ISMAEL |
========

Earlier message 39 lines
----- Original Message ----- From: hfiandor via Lazarus-es To: 'Spanish version of Lazarus List' Cc: hfiandor Sent: Monday, January 16, 2017 11:38 AM Subject: Re: [Lazarus-es] cambiar color de un edit Estimado Ismael: Mi problema es que tengo un form con varios edit para indicar rangos DESDE y HASTA. Cuando el form hace Show yo selecciono la primera casilla y mi lío está cuando quiero activar otra casilla. Lo puedo hacer con el ratón pinchando la casilla y le doy color Yellow para indicar que está activa, Pero no sé cómo quitar el color Yellow de la primera que se pintó cuando hizo Show. Tuve la rutina para quitar el foco a todos los componentes del form, pero la he perdido y quisiera probar con ella. Saludos Ing. Héctor F. Fiandor Rosario

Reply by email