|
Usuários |
|
220 Usuários Online
|
|
[Dicas]
Mudando a cor do componente focado |
Publicado por RodrigoMiller : Quinta, Fevereiro 07, 2008 - 12:03 GMT-3 (2715 leituras)
12 Comentários Enviar para um amigo Versão para impressão
|
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 pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos. |
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: RodrigoMiller (rodrigomiller@ig.com.br) : Fev 21, 2008 - 08:07 (Informações sobre o membro | Enviar uma mensagem) http:// | É isso aí Milton, é só aproveitar o que foi apresentado e fazer as alterações necessárias para que se tenha o melhor resultado possível....
Só uma opnião, vc poderia tb utlizar a propriedade TAG do componente, por exemplo, vc define que o valor 9999 não terá a cor alterado ao invés de se criar um vetor....
... and (ActiveControl.Tag <> 9999) then
Valeu!!! | [ Comentários não permitidos para usuários anônimos. Por gentileza, registre-se ou conecte-se ao sistema
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: 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.
|
|
|
Edição 112 |
|
|
50 Programas Fontes |
|
|
Produtos |
|
|