 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 14 Jun, 2004 10:48 pm Asunto: Cambiar el Color de un Edit |
|
|
bueno la pregunta es como Cambiar el Color del Edit, que actualmente, se encuentra con el foco.. es decir, que funcion del API, me permite cambiar el Color de Edicion..
cuando NO esta en edicion.. fondo blanco/letras negras. (default)
cuando SI esta en edicion... fondo gris / letras rojas, (por decirlo asi..)
gracias.. espero sus respuestas..
esto es para que el usuario, sepa en que Edit se encuentra, al momento de navegar entre varios de ellos.. _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 14 Jun, 2004 11:50 pm Asunto: |
|
|
Viendo bien.. esto, es mas como un monitoreo.. del Edit.. ahora, empieza otro problema.. casi no he utilizado BEGIN_MAP, y algo por el estilo. para enviar un tMSG, al edit.. ya que eso puede ser otra solucion..
Estimado _LEO. se que manejas, la parte del BEGIN_MAP, me podrias orientar, para darme una idea..
De lo poco, que puedo decir, esperando no equivocarme, asumó, que el BEGIN_MAP , Realiza un Monitoreo (como los viejos residentes de MS-DOS), pero esclusivamente para mi apliacion... espero que sea, asi me podrias indicar como monitorear los EDITS de la apliacion, y cuando estan "Focused", para poderle cambiar el Color?
Gracias.. desde Antes.... _________________
 |
|
| Volver arriba |
|
 |
Cerúleo Master


Registrado: 04 Ago 2003Mensajes: 332Ubicación: Santander, España
|
Publicado: Mar 15 Jun, 2004 8:06 am Asunto: |
|
|
Hola César. ¿No te sirve el evento OnEnter del TEdit? Cuando está activo simplemente cambias el color del edit y de la fuente.
En el evento OnExit reestableces las propiedades iniciales.
Un saludo y ya me dirás. _________________ Nunca digas "Es imposible" sin intentarlo antes. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 15 Jun, 2004 8:25 pm Asunto: |
|
|
Realmente, ha pasao por mi cabeza realizar estas operaciones.. pero que pasa si es para todos los edits que tienes dentro de tu aplicacion.. es decir tienes como 15 ventanas, donde manejas varios edits.. redundar el codigo.. puede ser una solucion. . pero no la mas clara..
para los que vaya, por lo mismo encontre el siguiente mensaje de windows.. para el manejo de los edits.. WM_CTLCOLOREDIT, donde tiene 2 parametros. LParam y WParam..
el primero, viene del HWND y el otro es el HDC
bueno a travez de ellos y haciendo esto logre ponerle colores. a los edits. pero no he podido cambiarlo cuando entro en el..
Esto es la forma de entrar utilizando el BEGIN_MESSAGE_MAP
DENTRO DEL unit1.hpp
| Código: |
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TEdit *Edit1;
TButton *Button1;
TEdit *Edit2;
TEdit *Edit3;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
CambiaColorEdits(TMessage & Msg);
protected:
//segun yo asi debe ser.. je je
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_CTLCOLOREDIT, TMessage, CambiaColorEdits)
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
|
CambiaColorEdits <-es la funcion que abajo describo para hacerlo.
Esto esta dentro del .cpp, que es el cuerpo de la funcion.. de arriba
| Código: |
TForm1::CambiaColorEdits(TMessage & Msg)
{
SetTextColor( (HDC)Msg.WParam,0x00fafAf);
SetBkMode ( (HDC)Msg.WParam,TRANSPARENT);
// HASTA AQUI CAMBIA LO QUE NO PUEDO ES HACER QUE AL ENTRAR
// AL EDIT. CAMBIE DE COLOR CUANDO ES LA EDICION..
} |
Espero que alguien me oriente. _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 16 Jun, 2004 8:18 am Asunto: |
|
|
Asi mismo, mientras me contestan por otro lado, he visto, que existe el mensaje WM_COMMAND. que igual que el anterior mensaje, trae sus dichosos, LParam, y WParam..
de paso encontre tambien, otra Manera de hacerlo..., ahora detecto, que se encuentra dentro del Edit, sin importar cual es, pero no puedo cambiar el color, je je , voy de mal en peor..
Esto es la funcion, 1 mil veces modificada, j ej e
| Código: |
TForm1::CambiaColorEdits(TMessage & Msg)
{
if(Msg.WParamHi==256){
HDC hDc=reinterpret_cast<HDC>(Msg.WParamLo);
//SetTextColor( hDc,RGB(200,0,255));
if( Msg.WParamHi == EN_SETFOCUS ){
SetTextColor( hDc,RGB(0,0,255));
SetBkColor(hDc,TRANSPARENT);
this->Caption = Msg.WParamHi ;
}
if( Msg.WParamHi == EN_KILLFOCUS){
SetTextColor(hDc,RGB(0,100,255));
SetBkColor(hDc, TRANSPARENT);
this->Caption = Msg.WParamHi;
}
}
/* HDC hDc=reinterpret_cast<HDC>(Msg.WParam);
SetTextColor(hDc, RGB(255,100,0));
if( Msg.WParamHi ==EN_KILLFOCUS){
SetTextColor(hDc,RGB(0,255,0));
SetBkColor(hDc,TRANSPARENT);
this->Caption = "Fuera";
}*/
return (LRESULT)CreateSolidBrush(RGB(0,0,0));
}
|
ahora bien. dentro del Unit.hpp he cambiado el BEGIN_MESSAGE_MAP. pero sigue igual, una mano por favor..
| Código: |
class TForm1 : public TForm
{
__published: // IDE-managed Components
TEdit *Edit1;
TEdit *Edit2;
TEdit *Edit3;
TButton *Button1;
TButton *Button2;
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
CambiaColorEdits(TMessage & Msg);
protected:
BEGIN_MESSAGE_MAP
// VCL_MESSAGE_HANDLER(WM_CTLCOLOREDIT, TMessage, CambiaColorEdits)
VCL_MESSAGE_HANDLER(WM_COMMAND, TMessage, CambiaColorEdits)
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
|
aguien se le ocurre alguna otra idea.. amigos Masters.. please... _________________
 |
|
| Volver arriba |
|
 |
Cerúleo Master


Registrado: 04 Ago 2003Mensajes: 332Ubicación: Santander, España
|
Publicado: Mie 16 Jun, 2004 12:52 pm Asunto: |
|
|
Hola César.
Selecciona todos los TEDit de la ventana y asignales la misma función en el evento OnEnter() y OnExit().
Dentro de la función, a través del parámetro Sender, detectas qué edit es el que ha lanzado el evento. Y dentro pones el código para cambiar el color del edit, o del texto,...
Sería algo así:
| Código: |
__fastcall TForm1::TEditTODOSOnEnter(TObject *Sender){
try{
TEdit *Edit=(TEdit *)Sender;
Edit->Color=clLime;
···
}
catch(...){
}
}
|
No sé si te servirá, está escrito sin probarlo y sin tener el C++Builder a mano, pero te puede orientar.
Suerte y un saludo. _________________ Nunca digas "Es imposible" sin intentarlo antes. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 16 Jun, 2004 2:44 pm Asunto: |
|
|
Gracias, te comento, que esa es la manera en que lo tenia.. pero dado el numero de ventanas.. que tengo.. es demasiado tedioso, realizarlo en cada ventana(son 17 espesificamente), y he esta intentando realizaro de manera Dinamica, es decir dejar a windows que lo haga por mi.. aun no se si afectará a las demas apliaciones.. pero creo que no..
gracias, esperaremos mas respuestas _________________
 |
|
| Volver arriba |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Mie 16 Jun, 2004 5:43 pm Asunto: |
|
|
MI estimado amigo Cesar, eso lo solucione creando un OBJETO tEdit que cambia de color si el tiene el foco y reacciona al ENTER , pasando el foco al siguiente
Con eso te evitar todo el rollo
EDITAR.CPP
| Código: |
/---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Editar.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TEditar *)
{
new TEditar(NULL);
}
//---------------------------------------------------------------------------
__fastcall TEditar::TEditar(TComponent* Owner)
: TEdit(Owner)
{
}
//---------------------------------------------------------------------------
namespace Editar
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TEditar)};
RegisterComponents("TouchSoftware", classes, 0);
}
}
//---------------------------------------------------------------------------
|
EDITAR.H
| Código: |
/---------------------------------------------------------------------------
#ifndef EditarH
#define EditarH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <StdCtrls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TEditar : public TEdit
{
private:
protected:
public:
DYNAMIC void __fastcall DoEnter(void)
{
TEditar::Color=clYellow;
TEdit::DoEnter();
}
DYNAMIC void __fastcall DoExit(void)
{
TEditar::Color=clWindow;
TEdit::DoExit();
}
__fastcall TEditar(TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------
#endif
|
_________________ Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc
http://www.touchsoftwares.com |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 16 Jun, 2004 6:31 pm Asunto: |
|
|
Gracias, Gabriel. este es una de las formas sencillas de solucionarlo...
de Antemano. gracias..
(pero voy intentar tambien haber si sale con el otro, je je, ok)
si sale, tengan por seguro que en este post aparecerá. _________________
 |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 16 Jun, 2004 11:04 pm Asunto: |
|
|
| Código: | void __fastcall WmCommand(TWMCommand& msg)
{
inherited::Dispatch(&msg);
if (msg.NotifyCode == EN_SETFOCUS)
{
TEdit* edt = dynamic_cast<TEdit*>(FindControl(msg.Ctl));
if (edt)
{
edt->Color = clYellow;
edt->Font->Color = clRed;
}
}
else if (msg.NotifyCode == EN_KILLFOCUS)
{
TEdit* edt = dynamic_cast<TEdit*>(FindControl(msg.Ctl));
if (edt)
{
edt->Color = clWindow;
edt->Font->Color = clWindowText;
}
}
}
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_COMMAND, TWMCommand, WmCommand)
END_MESSAGE_MAP(inherited) |
|
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 17 Jun, 2004 4:32 am Asunto: |
|
|
Simplemente, Genial!!!,
gracias, por mostrarme el camino amarillo del Mago de Oz..
gracias..(100 reverencias) y una botella de Vino con Jamon. _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 17 Jun, 2004 5:51 am Asunto: |
|
|
Una duda que me asalta, como identifico, cuando existen una combinacion de Edits y DBEdits, dentro del mismo form , por decir 2 y 2 alternados..
se que ellos derivan de la clase, TCustomEdit, pero no puedo acceder a las propiedades color y font->Color,
ya que no existen dentro de TCustomEdit.. de que manera puedo acceder y saber que es una caja de edicion.. sea Edit, DBEdit, MaskEdit, para identificar el Componente de edicion. que se encuentra actualmente seleccionado... y asi ponerle el Famoso color...
De antemano... Gracias.. _LEO _________________
 |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 17 Jun, 2004 11:51 am Asunto: |
|
|
Siempre que desciendan de TCustomEdit y sean propiedades comunes podemos forzarlos a trabajar como TEdit, por ejemplo:
| Código: | void __fastcall WmCommand(TWMCommand& msg)
{
inherited::Dispatch(&msg);
if (msg.NotifyCode==EN_SETFOCUS)
{
TCustomEdit* edt = dynamic_cast<TCustomEdit*>(FindControl(msg.Ctl));
if (edt)
{
Caption = edt->ClassName();
reinterpret_cast<TEdit*>(edt)->Color = clYellow;
reinterpret_cast<TEdit*>(edt)->Font->Color = clRed;
}
}
else if (msg.NotifyCode == EN_KILLFOCUS)
{
TCustomEdit* edt = dynamic_cast<TCustomEdit*>(FindControl(msg.Ctl));
if (edt)
{
reinterpret_cast<TEdit*>(edt)->Color = clWindow;
reinterpret_cast<TEdit*>(edt)->Font->Color = clWindowText;
}
}
}
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_COMMAND, TWMCommand, WmCommand)
END_MESSAGE_MAP(inherited) |
Esto hace que afecte a todos los descendientes de TCustomEdit.
La línea que va poniendo en la barra de titulo del Form la clase a la que pertenece el control de edición donde estamos, es para que veamos que podemos diferenciar los controles, y así usarla para descartar los que no nos interesen por ejemplo. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 17 Jun, 2004 3:04 pm Asunto: |
|
|
Gracias.. ahora si identifica los detalles. bueno como dicen, estaba medio desorientado al principio ahora, ya voy entendiendo los Mensajes de Windows..
Gracias (100 caravanas y otra botella de Vino...)
Necesitos Leer mas sobre window y su estructura.. es lo recomendable... _________________
 |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Vie 25 Jun, 2004 12:39 pm Asunto: |
|
|
| Perdon por mi ignorancia pero la función de Leo donde se declararía/llamaría? Me pierdo bastante en estos temas. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|