Cor do TLabel em tempo de excução

Delphi

12/02/2015

Pessoa para saber qual componente foi selecionado uso: ActiveControl, é consigo acesso a propriedades como o Hint, más preciso saber a cor do label selecionado
como posso obter esse valor.
Marcos Silva

Marcos Silva

Curtidas 0

Respostas

Wanderson Cortes

Wanderson Cortes

12/02/2015

label.Color
GOSTEI 0
Marcos Silva

Marcos Silva

12/02/2015

Não é bem isso, tenho vários label com um popupmemu associado a eles quando clico em um dele com o ActiveControl sei qual o hint por exemplo daquele label, más o ActiveControl não tem Tcolor, qual função eu poderia ter acesso a cor.
GOSTEI 0
Wanderson Cortes

Wanderson Cortes

12/02/2015

Mostra seu código aí
GOSTEI 0
Marcos Silva

Marcos Silva

12/02/2015

É esse:

procedure TfrmPrincipal.O3Click(Sender: TObject);
var
  Numero: Integer;
  Nome  : String;
  Cor   : TColor;
begin
  Numero:= ActiveControl.Tag;
  Nome   := Pchar(ActiveControl.Hint);
  Cor    := ????
end;
GOSTEI 0
Douglas

Douglas

12/02/2015

É esse:

procedure TfrmPrincipal.O3Click(Sender: TObject);
var
  Numero: Integer;
  Nome  : String;
  Cor   : TColor;
begin
  Numero:= ActiveControl.Tag;
  Nome   := Pchar(ActiveControl.Hint);
  Cor    := ????
end;


Olá Mssilva, tudo bem?
Utilize o Sender, assim saberá o objeto que requisitou a ação. O código fica da seguinte forma abaixo:

procedure TfrmPrincipal.O3Click(Sender: TObject);
var
  Numero: Integer;
  Nome  : String;
  Cor   : TColor;
begin
  Numero:= ActiveControl.Tag;
  Nome   := Pchar(ActiveControl.Hint);
  Cor       := Tlabel(sender).font.color;
end;
GOSTEI 0
Marcos Silva

Marcos Silva

12/02/2015

Boa dica más não funciona, assim retorna a cor do popupmenu não do Tlabel ou TEdit, tem outra maneira?

procedure TfrmPrincipal.Opcao3Click(Sender: TObject);
var
  Numero: Integer;
  Nome  : String;
  Cor   : TColor;
begin
  Numero:= ActiveControl.Tag;
  Nome   := Pchar(ActiveControl.Hint);
  Cor       := Tlabel(sender).font.color;
end;


Opcao3 é um item de um popupmenu, acho que não ficou claro o meu primeiro exemplo.
Na realidade o que quero é se o Tlabel ou Tedit estiver com a cor azul o código acima não seja executado por exemplo.
O usuário vai clicar no TLabel é se cor X faça se não....
GOSTEI 0
Douglas

Douglas

12/02/2015

Postei errado. Veja a reposta abaixo.
GOSTEI 0
Douglas

Douglas

12/02/2015

Boa dica más não funciona, assim retorna a cor do popupmenu não do Tlabel ou TEdit, tem outra maneira?

procedure TfrmPrincipal.Opcao3Click(Sender: TObject);
var
  Numero: Integer;
  Nome  : String;
  Cor   : TColor;
begin
  Numero:= ActiveControl.Tag;
  Nome   := Pchar(ActiveControl.Hint);
  Cor       := Tlabel(sender).font.color;
end;


Opcao3 é um item de um popupmenu, acho que não ficou claro o meu primeiro exemplo.
Na realidade o que quero é se o Tlabel ou Tedit estiver com a cor azul o código acima não seja executado por exemplo.
O usuário vai clicar no TLabel é se cor X faça se não....



Mssilva, então o código que te passei lhe atende. Você teria que pegar a cor de referência e montar a situação.

Exemplo:


procedure TfrmPrincipal.Opcao3Click(Sender: TObject);
var
  Numero: Integer;
  Nome  : String;
  Cor   : TColor;
begin
  Numero:= ActiveControl.Tag;
  Nome   := Pchar(ActiveControl.Hint);
  Cor       := Tlabel(sender).font.color;
  
  if cor = clHighlight then
  begin
    // Faz o que você quer!
  end;
 
end;

GOSTEI 0
Marcos Silva

Marcos Silva

12/02/2015

Não estou em casa agora assim que chegar testo o código, obrigado pela atenção.
GOSTEI 0
Marcos Silva

Marcos Silva

12/02/2015

Bom dia, como disse antes o código acima não retorna um valor ou Tcolor, sempre traz Zero '0'.
Tem uma outra ideia?
GOSTEI 0
Douglas

Douglas

12/02/2015

Bom dia, como disse antes o código acima não retorna um valor ou Tcolor, sempre traz Zero '0'.
Tem uma outra ideia?


Sim, entender o que você quer fazer, pois você disse anteriormente que a rotina teria que funcionar quando: "Opcao3 é um item de um popupmenu, acho que não ficou claro o meu primeiro exemplo. Na realidade o que quero é se o Tlabel ou Tedit estiver com a cor azul o código acima não seja executado por exemplo."

Vejamos se eu entendi, você quer varrer o seu formulário a partir do momento que você clicar na terceira opção do popmenu atrás dos labels ou edits de cor azul para decidir o que fazer, correto?

Se for isso, o código fica da seguinte maneira abaixo:

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to ComponentCount - 1 do
  begin
    if TLabel(Components[i]) is TLabel then
    begin
      if TLabel(Components[i]).Font.Color = clRed then
      begin
        //Faz o que você quer!
      end;
    end;
  end;
end;
GOSTEI 0
Marcos Silva

Marcos Silva

12/02/2015

Desculpe a demora, esses dias estou na correria além do normal.
Já tinha resolvido com um código parecido, más vou verificar se esse é melhor para a minha necessidade é posto o resultado assim que possível.
Grato pela a sua ajuda.
GOSTEI 0
POSTAR