Funções para retornar o Name do componente

16/07/2008

2

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar