Alterar cor da fonte
Boa tarde de DelphianoEstou com uma dúvida de principiante.Tenho em um form com 4 labels e 1 Panel e neste panel tem 5 Labels, como fazer para que o Delphi entenda que quando passar um comando qualquer, somente os Labels que estão no Panel, mude de cor a fonte de todos eles ao mesmo tempo, sem ter que referenciar cada um.Obs: Somente os labels que estão no Panel!
José Silva.
Curtidas 0
Respostas
Wilson Junior
10/05/2010
Olhe o código abaixo, veja se lhe ajuda.
Espero ter colaborado.
procedure AlterarCorFonteLabel(ComponentePai: TWinControl; Cor: TColor); var x: integer; begin for x := 0 to ComponentePai.ComponentCount - 1 do begin if ComponentePai.Components[x] is TLabel then TLabel(ComponentePai.Components[x]).Font.Color := Cor ; end; end;
Espero ter colaborado.
GOSTEI 0
José Silva.
10/05/2010
wilson
lehapan, obrigado pela resposta, mas faltou explicar no meu
post anterior que nos diversos labels dispostos no form, alguns labels estão no
proprio form e outros no panel.
como
fazer o delphi entender que os labels dispostos no form e tambem os labels
dispostos no panel, mude de cor, todos de um só vez, sem tem que referenciar,
que estão no form e tambem refenciar que estão no panel.
não
sei se fui bem claro na minha explicação, se deu pra entender que o componente
tem que saber onde esta localizado, seja panel, form, group ou outro componente
que aceita inserir componente dentro dele
lehapan, obrigado pela resposta, mas faltou explicar no meu
post anterior que nos diversos labels dispostos no form, alguns labels estão no
proprio form e outros no panel.
como
fazer o delphi entender que os labels dispostos no form e tambem os labels
dispostos no panel, mude de cor, todos de um só vez, sem tem que referenciar,
que estão no form e tambem refenciar que estão no panel.
não
sei se fui bem claro na minha explicação, se deu pra entender que o componente
tem que saber onde esta localizado, seja panel, form, group ou outro componente
que aceita inserir componente dentro dele
GOSTEI 0
Wilson Junior
10/05/2010
Altere para isto
Espero ter colaborado.
AlterarCorFonteLabel( SeuForm, clBlue ); procedure AlterarCorFonteLabel(ComponentePai: TWinControl; Cor: TColor); var x: integer; begin for x := 0 to ComponentePai.ComponentCount - 1 do begin if ComponentePai.Components[x] is TLabel then TLabel(ComponentePai.Components[x]).Font.Color := Cor else if ComponentePai.Components[x] is TWinControl then AlterarCorFonteLabel( TWinControl(ComponentePai.Components[x]), Cor ) ; ; end; end;
Espero ter colaborado.
GOSTEI 0
José Silva.
10/05/2010
Wilson, mais uma vez obrigado pela atenção, mas ainda não é isso que estou precisando. Pensei que fosse comando fácil para principiante, mas vejo que é mais complicado do que pensava, e somente os mais experientes fazem. Vou tentar ser mais claro.
Suponhamos que tenho uma aplicação, e nessa aplicação e composta de 1 Form, dois panels e seis buttons. No form (azul) eu tenho 2 buttons No panel1 (verde)eu tenho 2 buttons No panel2 (amarelo) eu tenho 2 buttons Com um só comando eu pudesse colocar as cores dos Buttons, conforme o objeto em que estão colocados, sem referenciar o mesmo, ou seja 2 Buttons azuis, 2 Buttons verdes e 2 Buttons amarelos. Como faço para que os Buttons reconheçam onde estão colocados.
Já vi que tem comando FOR, WHILE, SELF, AOWNER e outros, como combinar tais comando para conseguir o resultado esperado (Talvez no Delphi não é possível fazer).
Conto com a boa vontade e interesse em vocês mais experientes possam passar para nos principiantes
Suponhamos que tenho uma aplicação, e nessa aplicação e composta de 1 Form, dois panels e seis buttons. No form (azul) eu tenho 2 buttons No panel1 (verde)eu tenho 2 buttons No panel2 (amarelo) eu tenho 2 buttons Com um só comando eu pudesse colocar as cores dos Buttons, conforme o objeto em que estão colocados, sem referenciar o mesmo, ou seja 2 Buttons azuis, 2 Buttons verdes e 2 Buttons amarelos. Como faço para que os Buttons reconheçam onde estão colocados.
Já vi que tem comando FOR, WHILE, SELF, AOWNER e outros, como combinar tais comando para conseguir o resultado esperado (Talvez no Delphi não é possível fazer).
Conto com a boa vontade e interesse em vocês mais experientes possam passar para nos principiantes
GOSTEI 0
Wilson Junior
10/05/2010
Seu form tem a cor azul? Assim como o seu panel1 é verde e o panel2 é amarelo?
GOSTEI 0
José Silva.
10/05/2010
Isso Mesmo.É possível fazer isto em um só comando??
GOSTEI 0
José Silva.
10/05/2010
UpÉ estou vendo que é mais difícil do que estava pensando
GOSTEI 0
Alan Souza
10/05/2010
se vc quer a mesma cor do container no label, é só modificar um pouco a procedure do Wilson:
não testei, mas acho que por ai já dá pra ter uma base
procedure AlterarCorFonteLabel(ComponentePai: TWinControl);var x: integer;begin for x := 0 to ComponentePai.ComponentCount - 1 do begin if ComponentePai.Components[x] is TLabel then TLabel(ComponentePai.Components[x]).Font.Color := TWinControl(ComponentePai).Color else if ComponentePai.Components[x] is TWinControl then AlterarCorFonteLabel( TWinControl(ComponentePai.Components[x])) ; ; end;end;
não testei, mas acho que por ai já dá pra ter uma base
GOSTEI 0
Carlos Mazzi
10/05/2010
deu certo amigo?
GOSTEI 0
José Silva.
10/05/2010
Desculpe pela demora, mas somente hoje terei tempo para testar e tentar responder.Desde já agradeço pelas respostas
GOSTEI 0
José Silva.
10/05/2010
alanps,
obrigado pela resposta, mas no codigo abaixo ele não reconhe .Color em destaque
begin
if
ComponentePai.Components[x] is TLabel then
TLabel(ComponentePai.Components[x]).Font.Color
:= TWinControl(ComponentePai).Color
Else
Acho que falta mais alguma coisa
obrigado pela resposta, mas no codigo abaixo ele não reconhe .Color em destaque
begin
if
ComponentePai.Components[x] is TLabel then
TLabel(ComponentePai.Components[x]).Font.Color
:= TWinControl(ComponentePai).Color
Else
Acho que falta mais alguma coisa
GOSTEI 0
Alan Souza
10/05/2010
tente usar o ComponentePai como TControl, que é ancestor de TWinControl, acho que TControl tem a propriedade Color.
TControl(ComponentePai).Color;
TControl(ComponentePai).Color;
GOSTEI 0
José Silva.
10/05/2010
alanps, ainda não reconheceu.
GOSTEI 0
José Silva.
10/05/2010
Acho que devo converter o valor da cor do panel para
integer, pois a cor está em hexadecimal e a cor das fontes dos componentes
estão em integer, isso que eu ainda não achei o caminho para fazer.
Exemplo :
Font.Color = 4259584
Panel.Color=$0040FF00
Sera que não é isso???
integer, pois a cor está em hexadecimal e a cor das fontes dos componentes
estão em integer, isso que eu ainda não achei o caminho para fazer.
Exemplo :
Font.Color = 4259584
Panel.Color=$0040FF00
Sera que não é isso???
GOSTEI 0
Emerson Nascimento
10/05/2010
crie uma classe herdada de TWinControl, para publicar a propridade Color, pois ela é "ocultada" pelo TWinControl:
TColorControl = class(TWinControl)
public
property Color;
end;
(você pode colocar imediatamente antes da declaração da classe do seu form.)
daí sua rotina pode ser assim:
procedure TForm12.AlteraCorFonteLabel(ComponentePai: TWinControl);
var
x: integer;
begin
for x := 0 to ComponentePai.ControlCount - 1 do
if ComponentePai.Controls[x] is TLabel then
TLabel(ComponentePai.Controls[x]).Font.Color := TColorControl(ComponentePai).Color
else
if ComponentePai.Controls[x] is TWinControl then
AlteraCorFonteLabel(TWinControl(ComponentePai.Controls[x]));
end;
e, para executar:
procedure TForm12.Button1Click(Sender: TObject);
begin
AlteraCorFonteLabel(Panel1);
end;
lembrando que a função de troca de cores é recursiva, e se houver outros contâiners dentro do painel, eles também serão varridos e terão seus labels trocados (para a mesma cor do contâiner).
TColorControl = class(TWinControl)
public
property Color;
end;
(você pode colocar imediatamente antes da declaração da classe do seu form.)
daí sua rotina pode ser assim:
procedure TForm12.AlteraCorFonteLabel(ComponentePai: TWinControl);
var
x: integer;
begin
for x := 0 to ComponentePai.ControlCount - 1 do
if ComponentePai.Controls[x] is TLabel then
TLabel(ComponentePai.Controls[x]).Font.Color := TColorControl(ComponentePai).Color
else
if ComponentePai.Controls[x] is TWinControl then
AlteraCorFonteLabel(TWinControl(ComponentePai.Controls[x]));
end;
e, para executar:
procedure TForm12.Button1Click(Sender: TObject);
begin
AlteraCorFonteLabel(Panel1);
end;
lembrando que a função de troca de cores é recursiva, e se houver outros contâiners dentro do painel, eles também serão varridos e terão seus labels trocados (para a mesma cor do contâiner).
GOSTEI 0
José Silva.
10/05/2010
Emerson M A R A V I L H A !!!
GOSTEI 0
José Silva.
10/05/2010
Emerson M A R A V I L H A !!!Como coloco como concluído
GOSTEI 0
Wilson Junior
10/05/2010
Desculpe não ter continuado a lhe ajudar, pois estive doente, mas o mais importante é que foi resolvido a questão.
GOSTEI 0
José Silva.
10/05/2010
Wilson Lehapan sua ajuda também foi de grande valia para tanto para mim como para os usuários deste forum, para que possamos cada vez mais ampliar nossos conhecimentosGrato mais uma vez.OBS: como coloco a resposta como concluida?????
GOSTEI 0
Wilson Junior
10/05/2010
Não sei se mudou, mas depois de um período ele te pergutna se o tópico está Concluído.
GOSTEI 0
José Silva.
10/05/2010
Wilson Lehapan sua ajuda também foi de grande valia para tanto para mim como para os usuários deste forum, para que possamos cada vez mais ampliar nossos conhecimentosGrato mais uma vez.OBS: como coloco a resposta como concluida?????
Como tem acima um botão para abrir e outro para responder, deveria ter um também para mudar o status para concluido.É só uma ideia para melhorar mais ainda, vocês não acham???
GOSTEI 0