ADSENSE

ADSENSE

quarta-feira, 9 de janeiro de 2013

Função pra limpar os campos de um Object

Boa Noite pessoal.

Na rotina de programar sempre encontramos campos que precisam ser limpados antes de qualquer outro processo, mas sempre é uma função chata de fazer e sempre da um monte de programação.

Abaixo seque uma função que achei,não me lembro o autor da mesma que faz este serviços pra vocês.
Esta procedure usa informações em RunTime com auxilio da unit TypeInfo verificando uma propriedade em comum em todos os componentes que a TAG;

Por favor declarar as seguintes units: TypeInfo, StrUtils, WideStrings;


procedure LimparCampos(Controle: TWincontrol; const cTag: Integer);
  //procedure interna ao metodo
   procedure SetPropStr(Instance: TObject; const PropName:string; const Value: Variant);
   var P:Pointer;
       E:String;
   begin
      E:=VarToWideStr(GetPropValue(Instance,PropName));
      p:=Pointer(strtoint(E));
      TStringList(TObject(P)).Text:=Value;
    end;
   //fim de procedure Interna
const
   Propriedade:Array[0..4] of String =('Text','ItemIndex','Checked','Lines','Items');
var index,i:Integer;
    prop:PPropInfo;
begin
   for index:=0 to Controle.ControlCount -1 do begin
      if Controle.Controls[index].tag = cTag then begin
         for i := 0 to High( Propriedade)  do begin
            if isPublishedProp(controle.Controls[index],Propriedade[i]) then begin
               case i of
                  0:SetPropValue(Controle.Controls[index],Propriedade[0],'');
                  1:SetPropValue(Controle.Controls[index],Propriedade[1],-1);
                  2:SetPropValue(Controle.Controls[index],Propriedade[2],false);
                  3:SetPropStr(Controle.Controls[index],Propriedade[3],'');
                  4:SetPropStr(Controle.Controls[index],Propriedade[4],'');
               end;
               Break;
            end;
         end;
      end;
   end;
 end;


Como Usar:
    LimparCampos(Form1, 0);
    LimparCampos(Panel1, 0);

 Se tiver um campo que vocês não querem limpar e so informar a TAG com valor diferente a usada na procedure.