Class 有没有办法减少Delphi代码/以某种方式将其他对象放入变量中?

Class 有没有办法减少Delphi代码/以某种方式将其他对象放入变量中?,class,variables,delphi,tobject,Class,Variables,Delphi,Tobject,我有 如果我将代码中的更改为TDateEdit: var objeto:TDateEdit; ... 并使用以下命令: if UpperCase(CAMPOSnoBANCO[ii]) = UpperCase((FORMULARIO.Components[i] as TDateEdit).name ) 代码工作。。。。但我需要改变 if UpperCase(CAMPOSnoBANCO[ii]) = UpperCase((FORMULARIO.Components[i] as objeto).n

我有

如果我将代码中的
更改为TDateEdit

var objeto:TDateEdit; ...
并使用以下命令:

if UpperCase(CAMPOSnoBANCO[ii]) = UpperCase((FORMULARIO.Components[i] as TDateEdit).name )
代码工作。。。。但我需要改变

if UpperCase(CAMPOSnoBANCO[ii]) = UpperCase((FORMULARIO.Components[i] as objeto).name)
我需要一种方法来更改此变量类型以减少代码 我会用

objeto := TDBEdit;
但变量是

If (FORMULARIO.Components[i] is TDateEdit) then objeto := TDateEdit

If (FORMULARIO.Components[i] is TDBLookupComboBox) then objeto := TDBLookupComboBox
如何在不重复每个对象类型的代码的情况下执行此操作

var objeto: TDateEdit;
函数validacampoobrigatio():布尔值;
变量i、PrimeiroCampo、ii、indexOfItem:整数;
变量MSGaglutinada,TIPO:string;
诺梅坎波变种;
var objeto:TDateEdit;
var VALIDOU:布尔值;
开始
CorERRO:=RGB(255218185);
CorCertO:=12582911//$FF000005;
结果:=假;
MSGaglutinada:='';
PrimeiroCampo:=-1;
tipo:='';
诺梅坎波:='';
对于i:=0到FORMULARIO.ComponentCount-1 do
开始
如果(FORMULARIO.Components[i]为TDateEdit),则
开始
指数fitem:=-1;
ii:=0;
对于ii:=低(CAMPOSnoBANCO)到高(CAMPOSnoBANCO)do
//德特罗·达马特里兹酒店
如果大写(CAMPOSnoBANCO[ii])=大写((FORMULARIO.Components[i]作为TDateEdit.name),那么
开始
打破
结束;
VALIDOU:=真;
如果EhRequerido[ansiindexstr((FORMULARIO.Components[i]as TDateEdit).name,CAMPOSnoBANCO)]=true,则
开始
如果((FORMULARIO.Components[i]作为TDateEdit).text='')那么
开始

如果PrimeiroCampo,则可以在运行时将类类型存储在变量中。但是,不能使用该变量执行类型转换。强制转换在编译时进行计算,并且必须使用具体类型进行强制转换

此外,在这种情况下,您根本不需要这些类型转换。对于初学者来说,大多数
as
强制转换都在执行冗余类型检查,而您已经使用
is
执行了这些检查。但更重要的是,
Name
TComponent
的公共属性,因此您根本不需要类型转换来访问它,例如:

如果SameText(CAMPOSnoBANCO[ii],FORMULARIO.Components[i].Name)那么
对于未公开/已发布但在基类中受保护的其他属性,如
Text
Color
are,可以使用访问器类访问它们,也可以使用RTTI

显示的代码是不必要的重复和冗长,其中有许多内容可以简化

尝试类似以下内容:

类型
TControlAccess=class(TControl)
结束;
函数validacampoobrigatio():布尔值;
变量
i、 ii:整数;
MSGaglutinada:字符串;
VALIDOU:布尔;
组件:t组件;
Ctrl,PrimeiroCampo:TWinControl;
函数GetControlText(ACtrl:TControl):字符串;
开始
结果:=TControlAccess(ACtrl).Text;
//或者:
//结果:=TypInfo.GetStrProp(ACtrl,'Text');
结束;
程序SetControlColor(ACtrl:T控制;AValue:T颜色);
开始
TControlAccess(ACtrl).颜色:=AValue;
//或者:
//TypeInfo.SetOrdProp(ACtrl,“颜色”,AValue);
结束;
开始
CorERRO:=RGB(255、218、185);
CorCertO:=12582911//$FF000005;
结果:=假;
MSGaglutinada:='';
PrimeiroCampo:=零;
对于i:=0到FORMULARIO.ComponentCount-1 do
开始
成分:=公式化成分[i];
如果不是(Comp为TWinControl),则继续;
Ctrl:=TWinControl(Comp);
//德特罗·达马特里兹酒店
ii:=AnsiIndexText(Ctrl.Name,CAMPOSnoBANCO);
VALIDOU:=真;
如果Ehrequeriedo[ii]那么
开始
如果(GetControlText(Ctrl)='',则
开始
MSGaglutinada:=大写字母(Ctrl.Name)+'não pode ser NULO'+#13#10+Trim(MSGaglutinada);
VALIDOU:=假;
结束;
结束;
如果电子邮箱[ii]那么
开始
如果没有有效的电子邮件(GetControlText(Ctrl)),则
开始
MSGaglutinada:=大写(Ctrl.Name)+“deveser válido”+#13#10+Trim(MSGaglutinada);
VALIDOU:=假;
结束;
结束;
如果EhData[ii]那么
开始
如果不是DataValida(GetControlText(Ctrl)),则
开始
MSGaglutinada:=大写(Ctrl.Name)+“DEVE-uma-data-Válida”+#13#10+Trim(MSGaglutinada);
VALIDOU:=假;
结束
其他的
开始
如果(或[ii]“”),则
开始
如果StrToDate(OperadorDatamenor[ii])=StrToDate(GetControlText(Ctrl)),则
开始
MSGaglutinada:=大写字母(Ctrl.Name)+'não pode menor ou igualá'+OperadorDatamenor[ii]+#13#10+Trim(MSGaglutinada);
VALIDOU:=假;
结束;
结束;
结束;
结束;
如果不是VALIDOU那么
开始
如果PrimeiroCampo=nil,则PrimeiroCampo:=Ctrl;
SetControlColor(Ctrl、CorError);
结束
其他的
设置控件颜色(Ctrl、CorCertO);
结束;
///////////////////////////////////////////////////////////
如果MSGaglutinada“”则
开始
MSGaglutinada:=ReplaceAll(MSGaglutinada,CAMPOSnoBANCO,CAMPOSexibirCOMO,True);
MessageDlg('O(s)campo(s):'+#13#10+MSGaglutinada,mtWarning,[mbok],0);
PrimeiroCampo.SetFocus;
中止
结束;
结果:=真;
结束;

欢迎来到StackOverflow!你能用一个最小的可重复的例子重新表述你的问题吗?这样我们才能正确理解你想做什么?尝试用简单的代码解释你的问题,使用基于英语的变量和函数标识符,这样我们都能理解;过程GetControlText(ACtrl:TControl):字符串;开始结果:=TControlAccess(ACtrl).Text;//或者://Result:=TypInfo.GetStrProp(ACtrl,'Text');结束;程序SetControlColor(ACtrl:T控制;AValue:T颜色);开始TControlAccess(ACtrl)。颜色:=AValue;//或者://TypInfo.SetOrdProp(ACtrl,'C
Function ValidaCampoObrigatorio(): boolean;
    var i,PrimeiroCampo,ii,indexOfItem:Integer;
    var MSGaglutinada,TIPO:string;
    var NOMEcampo : variant ;
       var objeto:TDateEdit ;
    var VALIDOU:boolean;
    
    
    
    begin
         CorERRO:=RGB(255,218,185);
         CorCertO:= 12582911;//$FF000005;
    
              
    
    Result := false;
    MSGaglutinada:='';
    PrimeiroCampo:=-1;
    tipo:='';
    NOMEcampo:='';
    
     for i := 0 to FORMULARIO.ComponentCount -1 do
      begin
    
    
      if (FORMULARIO.Components[i] is TDateEdit) then
       begin
    
          indexOfItem := -1;
          ii:=0;
          for ii := Low(CAMPOSnoBANCO) to High(CAMPOSnoBANCO) do
          //LOCALIZANDO DENTRO da matriz
           if UpperCase(CAMPOSnoBANCO[ii]) = UpperCase((FORMULARIO.Components[i] as TDateEdit).name ) then
             begin
             BREAK;
             end;
             VALIDOU:=True;
           if EhRequerido[ansiindexstr((FORMULARIO.Components[i] as TDateEdit).name , CAMPOSnoBANCO)]=true then
             begin
                 if((FORMULARIO.Components[i] as TDateEdit).text = '')then
                 begin
                    if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDateEdit' end;
                     MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TDateEdit).Name)+' não pode ser NULO'+ #13#10+Trim(MSGaglutinada)   ;
                     (FORMULARIO.Components[i] as TDateEdit).Color:=corERRO; VALIDOU:=false ;
                 end;
    
             end;
           if EhEMAIL[ansiindexstr((FORMULARIO.Components[i] as TDateEdit).name , CAMPOSnoBANCO)]=true  then
            begin
              if ValidEmail((FORMULARIO.Components[i] as TDateEdit).text) = False  then
               begin
                     if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBEdit' end;
                     MSGaglutinada :=   UpperCase((FORMULARIO.Components[i] as TDateEdit).Name)+' DEVE ser válido'+ #13#10+Trim(MSGaglutinada)  ;
                     (FORMULARIO.Components[i] as TDateEdit).Color:=corERRO; VALIDOU:=false ;
               end;
            end ;
           if EhData[ansiindexstr((FORMULARIO.Components[i] as TDateEdit).name , CAMPOSnoBANCO)]=true  then
            begin
              if DataValida((FORMULARIO.Components[i] as TDateEdit).text)=false  then
               begin
                     if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDateEdit' end;
                     MSGaglutinada :=   UpperCase((FORMULARIO.Components[i] as TDateEdit).Name)+' DEVE uma data Válida'+ #13#10+Trim(MSGaglutinada)  ;
                     (FORMULARIO.Components[i] as TDateEdit).Color:=corERRO; VALIDOU:=false ;
               end
               else
              begin
              if (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDateEdit).name , CAMPOSnoBANCO)] <> '') then
              begin
                  if StrToDate(OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDateEdit).name , CAMPOSnoBANCO)])<=StrToDate((FORMULARIO.Components[i] as TDateEdit).text)then
                   begin
    
                         if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDateEdit' end;
                          MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TDateEdit).Name)+' não pode maior ou igual à '+ (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDateEdit).name , CAMPOSnoBANCO)])+#13#10+Trim(MSGaglutinada)   ;
                          (FORMULARIO.Components[i] as TDateEdit).Color:=corERRO; VALIDOU:=false ;
    
                   end;
              end;
              if (OperadorDataMaior[ansiindexstr((FORMULARIO.Components[i] as TDateEdit).name , CAMPOSnoBANCO)] <> '') then
              begin
                  if StrToDate(OperadorDatamaior[ansiindexstr((FORMULARIO.Components[i] as TDateEdit).name , CAMPOSnoBANCO)])>=StrToDate((FORMULARIO.Components[i] as TDateEdit).text)then
                   begin
    
                           if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDateEdit' end;
                            MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TDateEdit).Name)+' não pode menor ou igual à '+ (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDateEdit).name , CAMPOSnoBANCO)])+#13#10+Trim(MSGaglutinada)   ;
                            (FORMULARIO.Components[i] as TDateEdit).Color:=corERRO; VALIDOU:=false ;
    
                   end;
               end;
    
    
               end;
    
    
    
    
            end ;
    
    
    
    
           if VALIDOU=true then
            begin
                      (FORMULARIO.Components[i] as TDateEdit).Color:= CorCertO;
            end;
           end;
    
    
    
    
    
    
      if (FORMULARIO.Components[i] is TDBEdit) then
       begin
    
          indexOfItem := -1;
          ii:=0;
          for ii := Low(CAMPOSnoBANCO) to High(CAMPOSnoBANCO) do
          //LOCALIZANDO DENTRO da matriz
           if UpperCase(CAMPOSnoBANCO[ii]) = UpperCase((FORMULARIO.Components[i] as TDBEdit).name ) then
             begin
             BREAK;
             end;
             VALIDOU:=True;
           if EhRequerido[ansiindexstr((FORMULARIO.Components[i] as TDBEdit).name , CAMPOSnoBANCO)]=true then
             begin
                 if((FORMULARIO.Components[i] as TDBEdit).field.AsString = '')then
                 begin
                    if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBEdit' end;
                     MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TDBEdit).Name)+' não pode ser NULO'+ #13#10+Trim(MSGaglutinada)   ;
                     (FORMULARIO.Components[i] as TDBEdit).Color:=corERRO; VALIDOU:=false ;
                 end;
    
             end;
           if EhEMAIL[ansiindexstr((FORMULARIO.Components[i] as TDBEdit).name , CAMPOSnoBANCO)]=true  then
            begin
              if ValidEmail((FORMULARIO.Components[i] as TDBEdit).text) = False  then
               begin
                     if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBEdit' end;
                     MSGaglutinada :=   UpperCase((FORMULARIO.Components[i] as TDBEdit).Name)+' DEVE ser válido'+ #13#10+Trim(MSGaglutinada)  ;
                     (FORMULARIO.Components[i] as TDBEdit).Color:=corERRO; VALIDOU:=false ;
               end;
            end ;
           if EhData[ansiindexstr((FORMULARIO.Components[i] as TDBEdit).name , CAMPOSnoBANCO)]=true  then
            begin
             if DataValida((FORMULARIO.Components[i] as TDBEdit).text)=false  then
               begin
                     if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBEdit' end;
                     MSGaglutinada :=   UpperCase((FORMULARIO.Components[i] as TDBEdit).Name)+' DEVE uma data Válida'+ #13#10+Trim(MSGaglutinada)  ;
                     (FORMULARIO.Components[i] as TDBEdit).Color:=corERRO; VALIDOU:=false ;
               end
               else
              begin
              if (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDBEdit).name , CAMPOSnoBANCO)] <> '') then
              begin
                  if StrToDate(OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDBEdit).name , CAMPOSnoBANCO)])<=StrToDate((FORMULARIO.Components[i] as TDBEdit).text)then
                   begin
    
                         if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBEdit' end;
                          MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TDBEdit).Name)+' não pode maior ou igual à '+ (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDBEdit).name , CAMPOSnoBANCO)])+#13#10+Trim(MSGaglutinada)   ;
                          (FORMULARIO.Components[i] as TDBEdit).Color:=corERRO; VALIDOU:=false ;
    
                   end;
              end;
              if (OperadorDataMaior[ansiindexstr((FORMULARIO.Components[i] as TDBEdit).name , CAMPOSnoBANCO)] <> '') then
              begin
                  if StrToDate(OperadorDatamaior[ansiindexstr((FORMULARIO.Components[i] as TDBEdit).name , CAMPOSnoBANCO)])>=StrToDate((FORMULARIO.Components[i] as TDBEdit).text)then
                   begin
    
                           if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBEdit' end;
                            MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TDBEdit).Name)+' não pode menor ou igual à '+ (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDBEdit).name , CAMPOSnoBANCO)])+#13#10+Trim(MSGaglutinada)   ;
                            (FORMULARIO.Components[i] as TDBEdit).Color:=corERRO; VALIDOU:=false ;
    
                   end;
               end;
    
    
               end;
    
            end ;
    
    
    
    
           if VALIDOU=true then
            begin
                      (FORMULARIO.Components[i] as TDBEdit).Color:= CorCertO;
            end;
           end;
    
    
    
    
           if (FORMULARIO.Components[i] is TDBLookupComboBox) then
       begin
    
          indexOfItem := -1;
          ii:=0;
          for ii := Low(CAMPOSnoBANCO) to High(CAMPOSnoBANCO) do
          //LOCALIZANDO DENTRO da matriz
           if UpperCase(CAMPOSnoBANCO[ii]) = UpperCase((FORMULARIO.Components[i] as TDBLookupComboBox).name ) then
             begin
             BREAK;
             end;
             VALIDOU:=True;
           if EhRequerido[ansiindexstr((FORMULARIO.Components[i] as TDBLookupComboBox).name , CAMPOSnoBANCO)]=true then
             begin
                 if((FORMULARIO.Components[i] as TDBLookupComboBox).field.AsString = '')then
                 begin
                    if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBLookupComboBox' end;
                     MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TDBLookupComboBox).Name)+' não pode ser NULO'+ #13#10+Trim(MSGaglutinada)   ;
                     (FORMULARIO.Components[i] as TDBLookupComboBox).Color:=corERRO; VALIDOU:=false ;
                 end;
    
             end;
           if EhEMAIL[ansiindexstr((FORMULARIO.Components[i] as TDBLookupComboBox).name , CAMPOSnoBANCO)]=true  then
            begin
              if ValidEmail((FORMULARIO.Components[i] as TDBLookupComboBox).text) = False  then
               begin
                     if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBLookupComboBox' end;
                     MSGaglutinada :=   UpperCase((FORMULARIO.Components[i] as TDBLookupComboBox).Name)+' DEVE ser válido'+ #13#10+Trim(MSGaglutinada)  ;
                     (FORMULARIO.Components[i] as TDBLookupComboBox).Color:=corERRO; VALIDOU:=false ;
               end;
            end ;
    
           if EhData[ansiindexstr((FORMULARIO.Components[i] as TDBLookupComboBox).name , CAMPOSnoBANCO)]=true  then
            begin
              if DataValida((FORMULARIO.Components[i] as TDBLookupComboBox).text)=false  then
               begin
                     if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBLookupComboBox' end;
                     MSGaglutinada :=   UpperCase((FORMULARIO.Components[i] as TDBLookupComboBox).Name)+' DEVE uma data Válida'+ #13#10+Trim(MSGaglutinada)  ;
                     (FORMULARIO.Components[i] as TDBLookupComboBox).Color:=corERRO; VALIDOU:=false ;
               end
               else
              begin
              if (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDBLookupComboBox).name , CAMPOSnoBANCO)] <> '') then
              begin
                  if StrToDate(OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDBLookupComboBox).name , CAMPOSnoBANCO)])<=StrToDate((FORMULARIO.Components[i] as TDBLookupComboBox).text)then
                   begin
    
                         if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBLookupComboBox' end;
                          MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TDBLookupComboBox).Name)+' não pode maior ou igual à '+ (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDBLookupComboBox).name , CAMPOSnoBANCO)])+#13#10+Trim(MSGaglutinada)   ;
                          (FORMULARIO.Components[i] as TDBLookupComboBox).Color:=corERRO; VALIDOU:=false ;
    
                   end;
              end;
              if (OperadorDataMaior[ansiindexstr((FORMULARIO.Components[i] as TDBLookupComboBox).name , CAMPOSnoBANCO)] <> '') then
              begin
                  if StrToDate(OperadorDatamaior[ansiindexstr((FORMULARIO.Components[i] as TDBLookupComboBox).name , CAMPOSnoBANCO)])>=StrToDate((FORMULARIO.Components[i] as TDBLookupComboBox).text)then
                   begin
    
                           if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBLookupComboBox' end;
                            MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TDBLookupComboBox).Name)+' não pode menor ou igual à '+ (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDBLookupComboBox).name , CAMPOSnoBANCO)])+#13#10+Trim(MSGaglutinada)   ;
                            (FORMULARIO.Components[i] as TDBLookupComboBox).Color:=corERRO; VALIDOU:=false ;
    
                   end;
               end;
    
    
               end;
    
            end ;
    
    
    
    
           if VALIDOU=true then
            begin
                      (FORMULARIO.Components[i] as TDBLookupComboBox).Color:= CorCertO;
            end;
           end;
    
    
    
    
           if (FORMULARIO.Components[i] is TDBDateEdit) then
       begin
    
          indexOfItem := -1;
          ii:=0;
          for ii := Low(CAMPOSnoBANCO) to High(CAMPOSnoBANCO) do
          //LOCALIZANDO DENTRO da matriz
           if UpperCase(CAMPOSnoBANCO[ii]) = UpperCase((FORMULARIO.Components[i] as TDBDateEdit).name ) then
             begin
             BREAK;
             end;
             VALIDOU:=True;
           if EhRequerido[ansiindexstr((FORMULARIO.Components[i] as TDBDateEdit).name , CAMPOSnoBANCO)]=true then
             begin
                 if((FORMULARIO.Components[i] as TDBDateEdit).text = '')then
                 begin
                    if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBDateEdit' end;
                     MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TDBDateEdit).Name)+' não pode ser NULO'+ #13#10+Trim(MSGaglutinada)   ;
                     (FORMULARIO.Components[i] as TDBDateEdit).Color:=corERRO; VALIDOU:=false ;
                 end;
    
             end;
           if EhEMAIL[ansiindexstr((FORMULARIO.Components[i] as TDBDateEdit).name , CAMPOSnoBANCO)]=true  then
            begin
              if ValidEmail((FORMULARIO.Components[i] as TDBDateEdit).text) = False  then
               begin
                     if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBDateEdit' end;
                     MSGaglutinada :=   UpperCase((FORMULARIO.Components[i] as TDBDateEdit).Name)+' DEVE ser válido'+ #13#10+Trim(MSGaglutinada)  ;
                     (FORMULARIO.Components[i] as TDBDateEdit).Color:=corERRO; VALIDOU:=false ;
               end;
            end ;
    
           if EhData[ansiindexstr((FORMULARIO.Components[i] as TDBDateEdit).name , CAMPOSnoBANCO)]=true  then
            begin
              if DataValida((FORMULARIO.Components[i] as TDBDateEdit).text)=false  then
               begin
                     if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBDateEdit' end;
                     MSGaglutinada :=   UpperCase((FORMULARIO.Components[i] as TDBDateEdit).Name)+' DEVE uma data Válida'+ #13#10+Trim(MSGaglutinada)  ;
                     (FORMULARIO.Components[i] as TDBDateEdit).Color:=corERRO; VALIDOU:=false ;
               end
               else
              begin
              if (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDBDateEdit).name , CAMPOSnoBANCO)] <> '') then
              begin
                  if StrToDate(OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDBDateEdit).name , CAMPOSnoBANCO)])<=StrToDate((FORMULARIO.Components[i] as TDBDateEdit).text)then
                   begin
    
                         if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBDateEdit' end;
                          MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TDBDateEdit).Name)+' não pode maior ou igual à '+ (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDBDateEdit).name , CAMPOSnoBANCO)])+#13#10+Trim(MSGaglutinada)   ;
                          (FORMULARIO.Components[i] as TDBDateEdit).Color:=corERRO; VALIDOU:=false ;
    
                   end;
              end;
              if (OperadorDataMaior[ansiindexstr((FORMULARIO.Components[i] as TDBDateEdit).name , CAMPOSnoBANCO)] <> '') then
              begin
                  if StrToDate(OperadorDatamaior[ansiindexstr((FORMULARIO.Components[i] as TDBDateEdit).name , CAMPOSnoBANCO)])>=StrToDate((FORMULARIO.Components[i] as TDBDateEdit).text)then
                   begin
    
                           if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBDateEdit' end;
                            MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TDBDateEdit).Name)+' não pode menor ou igual à '+ (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TDBDateEdit).name , CAMPOSnoBANCO)])+#13#10+Trim(MSGaglutinada)   ;
                            (FORMULARIO.Components[i] as TDBDateEdit).Color:=corERRO; VALIDOU:=false ;
    
                   end;
               end;
    
    
               end;
    
            end ;
    
    
    
    
           if VALIDOU=true then
            begin
                      (FORMULARIO.Components[i] as TDBDateEdit).Color:= CorCertO;
            end;
           end;
    
    
    
    
       //////////////////////////////////////////////////////////////
    //TMaskEdit
    
    
    
           if (FORMULARIO.Components[i] is TMaskEdit) then
       begin
    
          indexOfItem := -1;
          ii:=0;
          for ii := Low(CAMPOSnoBANCO) to High(CAMPOSnoBANCO) do
          //LOCALIZANDO DENTRO da matriz
           if UpperCase(CAMPOSnoBANCO[ii]) = UpperCase((FORMULARIO.Components[i] as TMaskEdit).name ) then
             begin
             BREAK;
             end;
             VALIDOU:=True;
           if EhRequerido[ansiindexstr((FORMULARIO.Components[i] as TMaskEdit).name , CAMPOSnoBANCO)]=true then
             begin
                 if((FORMULARIO.Components[i] as TMaskEdit).text = '')then
                 begin
                    if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TDBDateEdit' end;
                     MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TMaskEdit).Name)+' não pode ser NULO'+ #13#10+Trim(MSGaglutinada)   ;
                     (FORMULARIO.Components[i] as TMaskEdit).Color:=corERRO; VALIDOU:=false ;
                 end;
    
             end;
           if EhEMAIL[ansiindexstr((FORMULARIO.Components[i] as TMaskEdit).name , CAMPOSnoBANCO)]=true  then
            begin
              if ValidEmail((FORMULARIO.Components[i] as TMaskEdit).text) = False  then
               begin
                     if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TMaskEdit' end;
                     MSGaglutinada :=   UpperCase((FORMULARIO.Components[i] as TMaskEdit).Name)+' DEVE ser válido'+ #13#10+Trim(MSGaglutinada)  ;
                     (FORMULARIO.Components[i] as TMaskEdit).Color:=corERRO; VALIDOU:=false ;
               end;
            end ;
    
           if EhData[ansiindexstr((FORMULARIO.Components[i] as TMaskEdit).name , CAMPOSnoBANCO)]=true  then
            begin
              if DataValida((FORMULARIO.Components[i] as TMaskEdit).text)=false  then
               begin
                     if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TMaskEdit' end;
                     MSGaglutinada :=   UpperCase((FORMULARIO.Components[i] as TMaskEdit).Name)+' DEVE uma data Válida'+ #13#10+Trim(MSGaglutinada)  ;
                     (FORMULARIO.Components[i] as TMaskEdit).Color:=corERRO; VALIDOU:=false ;
               end
               else
              begin
              if (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TMaskEdit).name , CAMPOSnoBANCO)] <> '') then
              begin
                  if StrToDate(OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TMaskEdit).name , CAMPOSnoBANCO)])<=StrToDate((FORMULARIO.Components[i] as TMaskEdit).text)then
                   begin
    
                         if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TMaskEdit' end;
                          MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TMaskEdit).Name)+' não pode maior ou igual à '+ (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TMaskEdit).name , CAMPOSnoBANCO)])+#13#10+Trim(MSGaglutinada)   ;
                          (FORMULARIO.Components[i] as TMaskEdit).Color:=corERRO; VALIDOU:=false ;
    
                   end;
              end;
              if (OperadorDataMaior[ansiindexstr((FORMULARIO.Components[i] as TMaskEdit).name , CAMPOSnoBANCO)] <> '') then
              begin
                  if StrToDate(OperadorDatamaior[ansiindexstr((FORMULARIO.Components[i] as TMaskEdit).name , CAMPOSnoBANCO)])>=StrToDate((FORMULARIO.Components[i] as TMaskEdit).text)then
                   begin
    
                           if PrimeiroCampo<0 then begin PrimeiroCampo:=i;TIPO:='TMaskEdit' end;
                            MSGaglutinada :=  UpperCase((FORMULARIO.Components[i] as TMaskEdit).Name)+' não pode menor ou igual à '+ (OperadorDatamenor[ansiindexstr((FORMULARIO.Components[i] as TMaskEdit).name , CAMPOSnoBANCO)])+#13#10+Trim(MSGaglutinada)   ;
                            (FORMULARIO.Components[i] as TMaskEdit).Color:=corERRO; VALIDOU:=false ;
    
                   end;
               end;
    
    
               end;
    
            end ;
    
    
    
    
           if VALIDOU=true then
            begin
                      (FORMULARIO.Components[i] as TMaskEdit).Color:= CorCertO;
            end;
           end;
    
    
        end;
    
    
    
    ///////////////////////////////////////////////////////////
    
    if MSGaglutinada <>'' then
            begin
            MSGaglutinada:=ReplaceAll(MSGaglutinada,CAMPOSnoBANCO,CAMPOSexibirCOMO,True) ;
            MessageDlg('O(s) campo(s): '+#13#10+MSGaglutinada , mtWarning, [mbok],0 )   ;
            if TIPO='TDBEdit' then
             begin
                (FORMULARIO.Components[PrimeiroCampo] as TDBEdit).SetFocus;
             end
             else if TIPO='TDBLookupComboBox' then
             begin
                (FORMULARIO.Components[PrimeiroCampo] as TDBLookupComboBox).SetFocus
             end
               else if TIPO='TMaskEdit' then begin
                  (FORMULARIO.Components[PrimeiroCampo] as TMaskEdit).SetFocus
             end
             else if TIPO='TDBDateEdit' then begin
                  (FORMULARIO.Components[PrimeiroCampo] as TDBDateEdit).SetFocus
             end
             else if TIPO='TDateEdit' then begin
                  (FORMULARIO.Components[PrimeiroCampo] as TDateEdit).SetFocus
             end;
    
    
    
             Abort;
            end;
    
    
    
     result := true;
    
    end;
    
    
    
    function ReplaceAll(const Subject: String;
      const OldPatterns, NewPatterns: array of String;
      IgnoreCase: Boolean): String;
    var
      ReplaceFlags: TReplaceFlags;
      NewPattern: String;
      I: Integer;
    begin
      ReplaceFlags := [rfReplaceAll];
      if IgnoreCase then
        Include(ReplaceFlags, rfIgnoreCase);
      Result := Subject;
      for I := Low(OldPatterns) to High(OldPatterns) do
      begin
        if I <= High(NewPatterns) then
          NewPattern := NewPatterns[I]
        else
          NewPattern := '';
        Result := StringReplace(Result, OldPatterns[I], NewPattern, ReplaceFlags);
      end;
    end;
    
    
    
      function ValidEmail(email: string): boolean;
    
    
     var
      RegEx: TRegEx;
    begin
      RegEx := TRegex.Create('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]*[a-zA-Z0-9]+$');
      Result := RegEx.Match(email).Success;
     end;
    
    
    function DataValida(StrD: string): Boolean;
    var
    DataDigitadaNoEdit:TDateTime;
    
    
    
      {Testa se uma data é valida}
      begin
        Result := true;
        try
        //ShowMessage((StrD));
        if (StrD<>'  /  /  ') and (StrD <> '  /  /    ') and (StrD <> null)  and (StrD<>'')then
         begin
             TryStrToDate(StrD,DataDigitadaNoEdit)  ;
    
         end
         else
         Begin
              Result:=False;
             // Abort;
         end;
    
    
        except
          on EConvertError do Result:=False;
        end;
      end;
       function NumeroValido(StrD: string): Boolean;
      {Testa se uma data é valida}
      begin
        Result := true;
        try
        StrToDate(StrD);
        except
          on EConvertError do Result:=False;
        end;
      end;