Есть ли способ уменьшить код Delphi/как-то поместить другой объект в переменную?
У меня есть
var objeto:TDateEdit; ...
Если я изменюсь
as 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;
Как мне это сделать, не повторяя код для каждого типа объекта?
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;
1 ответ
Тип класса можно сохранить в переменной во время выполнения. Однако вы не можете выполнять приведение типов, используя эту переменную. Приведения оцениваются во время компиляции и должны использовать конкретный тип для приведения.
Кроме того, вам вообще не нужны такие приведения типов в этой ситуации. Для начала, большинство ваших
as
приведения выполняют избыточные проверки типов, которые вы уже выполняли с
is
. Но что более важно,
Name
является общественным достоянием
TComponent
поэтому вам вообще не нужен тип для доступа к нему, например:
if SameText(CAMPOSnoBANCO[ii], FORMULARIO.Components[i].Name) then
Для других свойств, которые не являются общедоступными / опубликованными , но защищены в базовом классе, например
Text
а также
Color
вы можете использовать класс доступа для доступа к ним или вместо этого вы можете использовать RTTI.
Показанный код излишне повторяющийся и многословный, в нем много чего можно упростить.
Попробуйте еще что-нибудь вроде этого:
type
TControlAccess = class(TControl)
end;
function ValidaCampoObrigatorio(): Boolean;
var
i, ii: Integer;
MSGaglutinada: String;
VALIDOU: Boolean;
Comp: TComponent;
Ctrl, PrimeiroCampo: TWinControl;
function GetControlText(ACtrl: TControl): String;
begin
Result := TControlAccess(ACtrl).Text;
// alternatively:
// Result := TypInfo.GetStrProp(ACtrl, 'Text');
end;
procedure SetControlColor(ACtrl: TControl; AValue: TColor);
begin
TControlAccess(ACtrl).Color := AValue;
// alternatively:
// TypInfo.SetOrdProp(ACtrl, 'Color', AValue);
end;
begin
CorERRO := RGB(255, 218, 185);
CorCertO := 12582911;//$FF000005;
Result := False;
MSGaglutinada := '';
PrimeiroCampo := nil;
for i := 0 to FORMULARIO.ComponentCount - 1 do
begin
Comp := FORMULARIO.Components[i];
if not (Comp is TWinControl) then Continue;
Ctrl := TWinControl(Comp);
//LOCALIZANDO DENTRO da matriz
ii := AnsiIndexText(Ctrl.Name, CAMPOSnoBANCO);
VALIDOU := True;
if EhRequerido[ii] then
begin
if (GetControlText(Ctrl) = '') then
begin
MSGaglutinada := UpperCase(Ctrl.Name) + ' não pode ser NULO' + #13#10 + Trim(MSGaglutinada);
VALIDOU := False;
end;
end;
if EhEMAIL[ii] then
begin
if not ValidEmail(GetControlText(Ctrl)) then
begin
MSGaglutinada := UpperCase(Ctrl.Name) + ' DEVE ser válido' + #13#10 + Trim(MSGaglutinada);
VALIDOU := False;
end;
end;
if EhData[ii] then
begin
if not DataValida(GetControlText(Ctrl)) then
begin
MSGaglutinada := UpperCase(Ctrl.Name) + ' DEVE uma data Válida' + #13#10 + Trim(MSGaglutinada);
VALIDOU := False;
end
else
begin
if (OperadorDatamenor[ii] <> '') then
begin
if StrToDate(OperadorDatamenor[ii]) <= StrToDate(GetControlText(Ctrl)) then
begin
MSGaglutinada := UpperCase(Ctrl.Name) + ' não pode maior ou igual à ' + OperadorDatamenor[ii] + #13#10 + Trim(MSGaglutinada);
VALIDOU := False;
end;
end;
if (OperadorDataMaior[ii] <> '') then
begin
if StrToDate(OperadorDatamaior[ii]) >= StrToDate(GetControlText(Ctrl)) then
begin
MSGaglutinada := UpperCase(Ctrl.Name) + ' não pode menor ou igual à ' + OperadorDatamenor[ii] + #13#10 + Trim(MSGaglutinada);
VALIDOU := False;
end;
end;
end;
end;
if not VALIDOU then
begin
if PrimeiroCampo = nil then PrimeiroCampo := Ctrl;
SetControlColor(Ctrl, corERRO);
end
else
SetControlColor(Ctrl, CorCertO);
end;
///////////////////////////////////////////////////////////
if MSGaglutinada <> '' then
begin
MSGaglutinada := ReplaceAll(MSGaglutinada, CAMPOSnoBANCO, CAMPOSexibirCOMO, True);
MessageDlg('O(s) campo(s): ' + #13#10 + MSGaglutinada, mtWarning, [mbok], 0);
PrimeiroCampo.SetFocus;
Abort;
end;
Result := True;
end;