Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-01-2015
Delphitest Delphitest is offline
Miembro
 
Registrado: sep 2006
Ubicación: Salamanca-España
Posts: 249
Poder: 12
Delphitest Va por buen camino
Cambiar color de los DBEdit al entrar en ellos

Buenos días,

con ánimo de mejorar el aspecto de un formulario que tiene muchos campos me gustaría que al entrar en los DBEdit en modo edición cambiara el color de fondo para que el usuario sepa donde está el foco en ese momento.

Entiendo que con los eventos OnEnter y OnExit podría controlarlo de manera individual pero en este caso hay bastantes y me preguntaba si existe una forma más sencilla de hacerlo de manera general para todos los DBEdit sin tener que ir de uno en uno.

Muchas Gracias
__________________
Mi proyecto paso a paso (Parte I)
Responder Con Cita
  #2  
Antiguo 07-01-2015
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 2.888
Poder: 13
newtron Va camino a la fama
Hola.

A mi se me ocurren dos opciones. La primera es que crees un componente nuevo heredado del DBEdit y que lo personalices a tu gusto, esa es la opción más "elegante" pero también la más complicada.

Otra es que pongas el código que quieras en el OnEnter y OnExit de uno de ellos y que los demás DbEdits apunten al OnEnter y OnExit que hayas creado para el primero para no poner en cada uno de los demás el mismo código.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #3  
Antiguo 08-01-2015
Avatar de Neftali
Neftali Neftali is offline
-Germán Estévez-
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 15.389
Poder: 10
Neftali Va camino a la famaNeftali Va camino a la fama
Cita:
Empezado por newtron Ver Mensaje
Otra es que pongas el código que quieras en el OnEnter y OnExit de uno de ellos y que los demás DbEdits apunten al OnEnter y OnExit que hayas creado para el primero para no poner en cada uno de los demás el mismo código.
Para no tener que hacer eso de forma manual y poder usar los mismos formularios que tienes ahora, podrías hacer un procedimiento que llamas al iniciar el formulario (OnCreate/OnShow), que recorra los componentes del tipo que quieras (por ejemplo, TDBEdit, TEdit, TDBMemo, TMemo,...) y haga la asignación de los 2 eventos a cada uno de ellos.
Para ello tendrás que utilizar RTTI.

Como han dicho, esta segunda solución no es la más elegante, pero haciendolo así no sólo tendrás que añadir una línea a tus formualrios para que funcione.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 08-01-2015
Delphitest Delphitest is offline
Miembro
 
Registrado: sep 2006
Ubicación: Salamanca-España
Posts: 249
Poder: 12
Delphitest Va por buen camino
Muchas gracias a los dos por vuestra ayuda.

Creo que voy a optar por la vía simple, la de asignar al evento OnEnter y OnExit lo correspondiente. Lo demás suena bien pero creo que no está a mi alcance

Estoy haciendo pruebas para ver qué color encajaría mejor y me da la sensación que estoy pasando algo básico por alto, no soy capaz de hacer que el fondo cambie de color nunca.

Este es el código que estoy probando:

Código Delphi [-]
procedure TFOperaciones.DBNum1SolicitudEnter(Sender: TObject);
begin
  DBNum1Solicitud.Color := clInfoBk;
end;

procedure TFOperaciones.DBNum1SolicitudExit(Sender: TObject);
begin
   DBNum1Solicitud.Color := clWindow;
end;

Pero cuando entro en modo Edit en ese DBEdit ni se inmuta, el color sigue siendo el que viene por defecto.

¿Debo activar alguna propiedad o hacer algo especial a parte de insertar el código?
__________________
Mi proyecto paso a paso (Parte I)
Responder Con Cita
  #5  
Antiguo 09-01-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.870
Poder: 27
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 behold
Hola Delphitest.

Otra opción para detectar el cambio de foco, es usar el evento OnActiveControlChange :
Código Delphi [-]
...
type
  TForm1 = class(TForm)
    ...
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    procedure ActiveCtrlChange(Sender: TObject);
  ...
  end;

...
implementation

uses TypInfo;

const
  FOCUSEDCOLOR   = clMoneyGreen;
  UNFOCUSEDCOLOR = clWindow;

var
  PrevFocusedCtrl: TWinControl = nil;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Screen.OnActiveControlChange:= ActiveCtrlChange;
end;

procedure TForm1.ActiveCtrlChange(Sender: TObject);
begin
  if not Assigned(PrevFocusedCtrl) then
    PrevFocusedCtrl:= ActiveControl;

  if Assigned(GetPropInfo(PrevFocusedCtrl.ClassInfo, 'Color')) then
    SetOrdProp(PrevFocusedCtrl, 'Color', UNFOCUSEDCOLOR);

  if Assigned(GetPropInfo(ActiveControl.ClassInfo, 'Color')) then
  begin
    SetOrdProp(ActiveControl,'Color', FOCUSEDCOLOR);
    PrevFocusedCtrl:= ActiveControl;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Screen.OnActiveControlChange:= nil;
end;
...
De este modo cambiará el color del control focalizado (siempre que poseea la propiedad Color)

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 09-01-2015 a las 01:16:03.
Responder Con Cita
  #6  
Antiguo 11-01-2015
Delphitest Delphitest is offline
Miembro
 
Registrado: sep 2006
Ubicación: Salamanca-España
Posts: 249
Poder: 12
Delphitest Va por buen camino
Disculparme por no haber vuelto a decir nada de este tema pero estoy probando con el código que proporciona ecfisa y no salgo de ahí, me da un error de "Access Violation..." y por muchas vueltas que le estoy dando no hay manera...

Lo que me preocupa es que ni siquiera soy capaz de cambiar el color en un DBEdit, no hace caso ni al cambio de propiedad directamente desde el objeto ni si lo meto en el código en el evento OnEnter, algo debo estar pasando por alto
__________________
Mi proyecto paso a paso (Parte I)
Responder Con Cita
  #7  
Antiguo 03-02-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.870
Poder: 27
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 behold
Hola Delphitest.

Lamento la demora en la respuesta, pero he estado afuera unos días.

No sé que pueda estar sucediendo ya que no puedo ver tu código, pero te adjunto los fuentes de uno funcional para que lo revises con tranquilidad.

Realizado en Delphi 7, S.O. Windows 7 (32bit)

Saludos
Archivos Adjuntos
Tipo de Archivo: zip Delphitest.zip (4,1 KB, 18 visitas)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 07-02-2015
Delphitest Delphitest is offline
Miembro
 
Registrado: sep 2006
Ubicación: Salamanca-España
Posts: 249
Poder: 12
Delphitest Va por buen camino
Muchas gracias ecfisa,

con tu ejemplo he conseguido adaptarlo a mi código y funciona como quería

Buen fin de semana y gracias de nuevo
__________________
Mi proyecto paso a paso (Parte I)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Cambio color en dBEdit jafera OOP 1 21-01-2011 12:28:44
Cambiar color de letras de acuerdo al color de fondo Adrian Murua OOP 2 15-11-2008 19:36:21
Mantener color verde olivo de las ventanas, al cambiar el color en windows mancurnino Varios 6 11-03-2008 16:39:47
Cambiar el color de fondo de un Edit o DBEdit FGarcia Varios 7 15-05-2007 21:20:19
Mostrar hint al entrar en DBEDIT fjolivares Varios 5 06-04-2004 18:47:30


La franja horaria es GMT +2. Ahora son las 05:42:50.


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