Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 11 de Julho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
220 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Dicas]  Mudando a cor do componente focado
Publicado por RodrigoMiller : Quinta, Fevereiro 07, 2008 - 12:03 GMT-3 (2715 leituras)
Comentários 12 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Olá galera, quem nunca precisou alterar a cor de um componente focado? Eis ai uma dica para fazer isso sem ter que programar nos eventos onEnter e onExit de todos os componentes.
Acrescente ao Uses a unit Typinfo;

Declare as Variáveis na seção Private:

  Componente: Tcomponent;
  CorComp: TColor;

Faça a seguinte procedure:

//Procedure que Muda a cor dos componentes focados
procedure TForm1.MudaCor(Sender: TObject);
begin
  if Assigned(Componente) then
    TEdit(Componente).Color := CorComp; //cor original do componente

  if (ActiveControl <> nil) and (IsPublishedProp(ActiveControl, 'Color')) then
  begin

    CorComp := TEdit(ActiveControl).Color;
    TEdit(ActiveControl).Color := $00C2F9FC; // cor com foco
    Componente := ActiveControl;
  end;
end;

No Evento onActivate do form:

  Screen.OnActiveControlChange := MudaCor;

E no Evento onDestroy:

  Screen.OnActiveControlChange := nil;

É isso aí, galera, espero ter contribuído com esta dica!

Rodrigo Miller Contato: rodrigomiller@ig.com.br



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: lucianoruz (lucianoruz@hotmail.com) : Fev 07, 2008 - 10:41
(Informações sobre o membro | Enviar uma mensagem)
Ótima dica...valeu!


por: sandrosoad (sandroramos@live.com) : Fev 07, 2008 - 10:48
(Informações sobre o membro | Enviar uma mensagem)
Rodrigo isso vai ajuda muito mesmo, mas está dando a mensagem
Undeclared identifier: 'ActiveControl';
oq eu faço? obrigado...


por: JLD (sigecom@brturbo.com) : Fev 10, 2008 - 10:12
(Informações sobre o membro | Enviar uma mensagem)
Gostaria de saber se tem usar para todos os forms do projeto, definindo uma única vez a procedure, como de proceder para isso?


por: miltinhoms (miltinho@miltinho.com.br) : Fev 12, 2008 - 12:55
(Informações sobre o membro | Enviar uma mensagem) http://
Olá, Rodrigo, sensacional a dica! Eu sempre faço esse trabalho braçal manualmente, agora minha vida mudou! Meus "pobremas se acabaram-se" !!! hehehe :)))

Deixa em também deixar aqui a minha contribuição baseada na solução que você apresentou. Imagine que o programador queira que os componentes do form mudem de cor ao receber o foco, mas com exceção do componente "Edit2" e do "ComboBox1" (transcrevo aqui a sua dica toda com as minhas dicas comentadas, com *** para facilitar ver onde foi que eu incluí alguma coisa, ok?):

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Typinfo,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
ListBox1: TListBox;
ComboBox1: TComboBox;
procedure MudaCor(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
Componente: Tcomponent;
CorComp: TColor;
public
{ Public declarations }
end;

var
Form1: TForm1;
excecoes: array[1..10] of string; // *** Array de exceções de componentes ***

implementation
{$R *.dfm}

//Procedure que Muda a cor dos componentes focados
procedure TForm1.FormActivate(Sender: TObject);
begin
// *** Aqui devem-se descrever quais componentes não devem mudar de cor ao receber foco ***
excecoes[1] := 'Edit2';
excecoes[2] := 'ComboBox1';

Screen.OnActiveControlChange := MudaCor;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Screen.OnActiveControlChange := nil;
end;

procedure TForm1.MudaCor(Sender: TObject);
var i: integer;
achou: boolean; // *** variável auxiliar ***
begin
achou := False; // *** Inicialização da flag "achou" ***
if Assigned(Componente) then
TEdit(Componente).Color := CorComp; //cor original do componente

// *** Varre o array para ver se o componente focado não está na lista dos que não devem mudar de cor ***
for i := 0 to 10 do
begin
if ActiveControl.Name = excecoes[i] then
achou := True;
end;

if (ActiveControl <> nil) and (IsPublishedProp(ActiveControl, 'Color')) and (not achou) {*** se achou um componente no array, este não deve mudar de cor ***} then
begin
CorComp := TEdit(ActiveControl).Color;
TEdit(ActiveControl).Color := $00C2F9FC; // cor com foco
Componente := ActiveControl;
end;
end;
end.


--
Grande abraço e mais uma vez, OBRIGADO!!!!


por: gilsonnrodrigues (gilsonnr@hotmail.com) : Fev 16, 2008 - 03:00
(Informações sobre o membro | Enviar uma mensagem)
parabens!
é o tipo de dica q acho válida!!

porem vc deve amadurecer só tratamento no q diz respeito à possibilidade de o controle q tá em "Componente" já ter sido destruido.
pra não correr o risco de fica dando mensagem de violação de endereço de memória.
entendeu?


por: Zaskar (celiozaskar@yahoo.com.br) : Mar 10, 2008 - 10:11
(Informações sobre o membro | Enviar uma mensagem)
Tenho uma dúvida, a mudança da cor é só para componentes de textos? Pois o código se referi-se ao TEdit.


por: ws_junior (ws_junior@hotmail.com) : Abr 15, 2008 - 04:59
(Informações sobre o membro | Enviar uma mensagem)
Gostaria de implementar meu projeto utilizando essa dica, porem como sao muitos forms gostaria de saber se posso criar uma DLL com a procedure acima citada.
Como posso fazer isso, pois tentei cria-la e me dava erro ao nao reconhecer Tedit, Componente, etc.
Podia citar um exemplo de como cria-la?!

Valeu.


por: 19william84 (theendmgs@yahoo.com.br) : Out 17, 2008 - 03:41
(Informações sobre o membro | Enviar uma mensagem) http://
Da hora este efeito chama a atençao para o edit
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados