unit ksFmxUtils;

interface

uses
  FMX.Types;

procedure FreeFmxObject(AFmxObject: TFmxObject);
procedure FreeAndNilFmxObject(var AFmxObject);

implementation

uses
  ksObjUtils;

procedure FreeFmxObject(AFmxObject: TFmxObject);
begin
  if not Assigned(AFmxObject) then
    Exit;
  if Assigned(AFmxObject.Owner) then
    AFmxObject.Owner.RemoveComponent(AFmxObject);
  if Assigned(AFmxObject.Parent) then
    AFmxObject.Parent := nil;
  FreeObject(AFmxObject);
end;

procedure FreeAndNilFmxObject(var AFmxObject);
var
  ATemp: TFmxObject;
begin
  if Pointer(AFmxObject) = nil then
    Exit;
  ATemp := TFmxObject(AFmxObject);
  Pointer(AFmxObject) := nil;
  FreeFmxObject(ATemp);
end;

end.