GARANTIR DESCONTO

Fórum Alterar cor da fonte #377357

10/05/2010

0

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.

Responder

Posts

11/05/2010

Wilson Junior

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

Gostei + 0

11/05/2010

José Silva.

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
 
Responder

Gostei + 0

11/05/2010

Wilson Junior

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

Gostei + 0

11/05/2010

José Silva.

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
Responder

Gostei + 0

11/05/2010

Wilson Junior

Seu form tem a cor azul? Assim como o seu panel1 é verde e o panel2 é amarelo?
Responder

Gostei + 0

11/05/2010

José Silva.


Isso Mesmo.É possível fazer isto em um só comando??
Responder

Gostei + 0

12/05/2010

José Silva.


UpÉ estou vendo que é mais difícil do que estava pensando
Responder

Gostei + 0

12/05/2010

Alan Souza

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
Responder

Gostei + 0

12/05/2010

Carlos Mazzi

deu certo amigo?
Responder

Gostei + 0

13/05/2010

José Silva.

Desculpe pela demora, mas somente hoje terei tempo para testar e tentar responder.Desde já agradeço pelas respostas
Responder

Gostei + 0

13/05/2010

José Silva.

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
 
Responder

Gostei + 0

13/05/2010

Alan Souza

tente usar o ComponentePai como TControl, que é ancestor de TWinControl, acho que TControl tem a propriedade Color.

TControl(ComponentePai).Color;
Responder

Gostei + 0

14/05/2010

José Silva.


alanps, ainda não reconheceu.
Responder

Gostei + 0

14/05/2010

José Silva.

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???
Responder

Gostei + 0

14/05/2010

Emerson Nascimento

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar