RE:Obtener Nombre del Control que pierde el foco
Una opción es modificar la VCL, para guardar el valor de ActiveControl antes de modificarlo en una propiedad que podría llamarse LastActiveControl.
Otra opción es que todos los controles compartan un evento OnExit en el que se asigne LastActiveControl:
procedure TForm1.LostFocus(Sender: TObject);
begin
LastActiveControl := TWinControl(Sender);
end;
La forma "menos intrusiva" sería sobrescribir el método virtual SetFocusedControl:
TForm1 = class(TForm)
....
....
protected
FLastActiveControl: TWinControl;
FNextLastActiveControl: TWinControl;
function GetLastActiveControl: TWinControl;
public
function SetFocusedControl(Control: TWinControl): Boolean; override;
published
property LastActiveControl: TWinControl read GetLastActiveControl;
end;
implementation
function TForm1.SetFocusedControl(Control: TWinControl): Boolean;
begin
inherited ActiveChanged;
FLastActiveControl := FNextLastActiveControl;
FNextLastActiveControl := Control;
end;
function TForm1.GetLastActiveControl: TWinControl;
begin
Result := FLastActiveControl;
if Result = nil then
Result := FNextLastActiveControl;
if (Result = nil) or not ContainsControl(Result) then
Result := ActiveControl;
end;
Espero que te sirva.
Ernesto D'Spirito
http://www.latiumsoftware.com/es/index.php