Alterar cor da fonte

Delphi

10/05/2010

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.

José Silva.

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

10/05/2010

Olhe o código abaixo, veja se lhe ajuda.
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.

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
 
GOSTEI 0
Wilson Junior

Wilson Junior

10/05/2010

Altere para isto
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.

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
GOSTEI 0
Wilson Junior

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.

José Silva.

10/05/2010


Isso Mesmo.É possível fazer isto em um só comando??
GOSTEI 0
José Silva.

José Silva.

10/05/2010


UpÉ estou vendo que é mais difícil do que estava pensando
GOSTEI 0
Alan Souza

Alan Souza

10/05/2010

se vc quer a mesma cor do container no label, é só modificar um pouco a procedure do Wilson:

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

Carlos Mazzi

10/05/2010

deu certo amigo?
GOSTEI 0
José Silva.

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.

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
 
GOSTEI 0
Alan Souza

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;
GOSTEI 0
José Silva.

José Silva.

10/05/2010


alanps, ainda não reconheceu.
GOSTEI 0
José Silva.

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???
GOSTEI 0
Emerson Nascimento

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).


GOSTEI 0
José Silva.

José Silva.

10/05/2010

Emerson M A R A V I L H A !!!
GOSTEI 0
José Silva.

José Silva.

10/05/2010

Emerson M A R A V I L H A !!!Como coloco como concluído
GOSTEI 0
Wilson Junior

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.

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

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.

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
POSTAR