Funções para retornar o Name do componente

16/07/2008

1

Boa tarde Pessoal,


Preciso simplificar uma operação, mas não estou conseguindo desenvolver a função.
Eu tenho 5 CheckBox e preciso que toda vez q o usuario marque este componente ele troque propriedade de fonte, e ao desmarcar a mesma coisa.

procedure TFrmConfirmacao.GRClick(Sender: TObject);
begin
if GR.Checked then
  begin
    GR.Font.Color:=clred;
    GR.Font.Style:=[fsbold];
  end
else
  begin
    GR.Font.Color:=clBlack;
    GR.Font.Style:=[];
  end;
end;


[b:eaeabcac24]porém agora terei um form com 40 CheckBox e não gostaria de montar em cada Evento do componente, gostaria de criar um função que faça isso.[/b:eaeabcac24]

Fico no aguardo de um auxilio

Abraço

Wagner


Responder

Posts

16/07/2008

Altingon

Aqui estou usando outro tipo de componente, mas a lógica é essa

 for  i := 0 to TCVendas.ComponentCount - 1 do
    begin
      if TCVendas.Components[i] is TCustomEdit then
       (TCVendas.Components[i] as TCustomEdit).Clear;
    end;


Você percorre os formulário e pergunta se o componente em questão é do tipo que vc quer, se for vc faz os procedimentos.


Responder

16/07/2008

Wagnermarrane

A ideia seria q a procedure abaixo execute a linha a partir da propriedade NAME do componente. Acho q estou tentando obrter alguma coisa e recebo outro na variavel.

procedure TFrmCadInscritosJE.MarcarClick(cNome: string);
begin
if cNome.Checked then
  begin
    cNome.Font.Color:=clred;
    cNome.Font.Style:=[fsbold];
  end
else
  begin
    cNome.Font.Color:=clBlack;
    cNome.Font.Style:=[];
  end;
end;


[b:dd3c832022]chamando a função acima da seguinte forma[/b:dd3c832022]


procedure TFrmConfirmacao.GRClick(Sender: TObject);
begin
MarcarClick(´gr´); // passando NAME do componente.
end;


Lembrando q deve ser excutado no evento ONCLICK do componente.


Responder

16/07/2008

Rodc

procedure TFrmConfirmacao.GRClick(Sender: TObject); 
begin 
  if (Sender is TCheckBox) then
    begin
      with Sender as TCheckBox do
        begin
          if Checked then 
            begin 
              Font.Color:=clred; 
              Font.Style:=[fsbold]; 
            end 
          else 
            begin 
              Font.Color:=clBlack; 
              Font.Style:=[]; 
            end; 
        end;
    end;
end;



Responder

16/07/2008

Wagnermarrane

procedure TFrmConfirmacao.GRClick(Sender: TObject); 
begin 
  if (Sender is TCheckBox) then
    begin
      with Sender as TCheckBox do
        begin
          if Checked then 
            begin 
              Font.Color:=clred; 
              Font.Style:=[fsbold]; 
            end 
          else 
            begin 
              Font.Color:=clBlack; 
              Font.Style:=[]; 
            end; 
        end;
    end;
end;


Vc esta executando dentro do evento OnClick eu preciso que execute dentro de uma função para ser chamada no evento onclick do componente, tenho 40 componentes deste e e como todos vão se comportar da mesma forma não gostaria de digitar tudo isso em cada componente.


Responder

16/07/2008

Rodc

Faça o evento OnClick de todos os componentes apontar para esta função.
Selecione todos os componentes que deseja alterar, e coloque ´GRClick´ no campo OnClique deles.


Responder

16/07/2008

Wagnermarrane

funcionou!!!!!!!


muito obrigado pessoal

procedure TFrmCadInscritosJE.MarcarClick(sender: TObject);
begin
  if (Sender is TFlatCheckBox) then
    begin
      with Sender as TFlatCheckBox do
        begin
          if Checked then
            begin
              Font.Color:=clred;
              Font.Style:=[fsbold];
            end
          else
            begin
              Font.Color:=clBlack;
              Font.Style:=[];
            end;
        end;
    end;
end;



Responder

16/07/2008

Altingon

Fiz rapidinho aqui para você... eu creio que seja isso:


procedure MarcarClick(checkbox: TCheckBox);  


procedure TForm1.MarcarClick(checkbox: TCheckBox);
begin
if checkbox.Checked then
  begin
    checkbox.Font.Color:=clred;
    checkbox.Font.Style:=[fsbold];
  end
else
  begin
    checkbox.Font.Color:=clBlack;
    checkbox.Font.Style:=[];
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
  for i:=0 to Form1.ComponentCount-1 do
  if Form1.Components[i] is TCheckBox then
    MarcarClick((Form1.Components[i] as Tcheckbox));
end;


Espero ter ajudado


Responder
De acordo com a mensagem dele, ele precisa atribuir também ao método OnClick de cada check box. Então faça:

procedure TFrmConfirmacao.GRClick(Sender: TObject);
begin
if (Sender is TCheckBox) then
begin
with Sender as TCheckBox do
begin
if Checked then
begin
Font.Color:=clred;
Font.Style:=[fsbold];
end
else
begin
Font.Color:=clBlack;
Font.Style:=[];
end;
end;
end;
end;

procedure TFrmConfirmacao.FormCreate(Sender: TObject);
var i: Integer;
begin
// Caso você queira aplicar em todos os checkboxes do form
for i := 0 to Pred(Self.ComponentCount) do
if (Self.Components[i] is TCheckBox) then
TCheckBox(Self.Components[i]).OnClick := GRClick;

{
// Caso você queira que somente alguns checkboxes tenham essa
// rotina, você pode utilizar a propriedade Tag de cada checkbox para
// distinguir. Ex. Quem tiver a propriedade Tag = 1, atribuir o método

for i := 0 to Pred(Self.ComponentCount) do
if (Self.Components[i] is TCheckBox) and (Self.Components[i].Tag = 1) then
TCheckBox(Self.Components[i]).OnClick := GRClick;

}

end;


Responder
Esse troço não ficou indentado...

Saco... :/


Responder

17/07/2008

Rodc

Robson, não precisa criar código para isto, em DesignTime você pode colocar, pelo ObjectInspector mesmo, a propriedade OnClick de todos os componentes apontando para a mesma função.


Responder
Robson, não precisa criar código para isto, em DesignTime você pode colocar, pelo ObjectInspector mesmo, a propriedade OnClick de todos os componentes apontando para a mesma função.


Eu sei !

Mas ele pode usar dessa maneira, caso ele queira criar, p. ex., checkboxes em run time.

Certo ??!!


Responder