Hola cmfab, rrf.
Si no te entiendo mál, lo que deseas es el comportamiento que te expuso rrf sólo cuando avanzas al próximo Edit.
Pero que no aparezca el mensaje de error cuando retrocedas al Edit ya ingresado sin errores.
Si es así, una forma puede ser:
Código Delphi
[-]
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
procedure EditExit(Sender: TObject);
procedure EditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
private
FProx: Boolean;
public
end;
var
Form1: TForm1;
implementation {$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FProx:= True;
end;
procedure TForm1.EditExit(Sender: TObject);
begin
with Sender as TEdit do
begin
if (Text = '') and FProx then begin
ShowMessage('Error en ingreso');
SetFocus;
end;
end;
end;
procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Msg: TMsg;
begin
if Key = VK_RETURN then begin
FProx:= True;
Perform(WM_NEXTDLGCTL,0,0); PeekMessage(Msg, 0, WM_CHAR, WM_CHAR, PM_REMOVE); end;
if (Shift = [ssCtrl])and (Lo(Key) = 8) then begin
FProx:= False;
Perform(WM_NEXTDLGCTL,1,0); PeekMessage(Msg, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
end;
end;
Saludos.