ksFmxUtils.pas 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. {*******************************************************}
  2. { }
  3. { Methods of FmxObject }
  4. { }
  5. { CopyRight (C) 2018-2020 KngStr }
  6. { }
  7. {*******************************************************}
  8. unit ksFmxUtils;
  9. interface
  10. uses
  11. FMX.Types;
  12. procedure FreeFmxObject(AFmxObject: TFmxObject);
  13. procedure FreeAndNilFmxObject(var AFmxObject);
  14. implementation
  15. uses
  16. ksObjUtils;
  17. procedure FreeFmxObject(AFmxObject: TFmxObject);
  18. begin
  19. if not Assigned(AFmxObject) then
  20. Exit;
  21. if Assigned(AFmxObject.Owner) then
  22. AFmxObject.Owner.RemoveComponent(AFmxObject);
  23. if Assigned(AFmxObject.Parent) then begin
  24. // fix release error in 10.4, eg: TMemo on TFrame, Windows.
  25. AFmxObject.SetRoot(nil);
  26. AFmxObject.Parent := nil;
  27. end;
  28. FreeObject(AFmxObject);
  29. end;
  30. procedure FreeAndNilFmxObject(var AFmxObject);
  31. var
  32. ATemp: TFmxObject;
  33. begin
  34. if Pointer(AFmxObject) = nil then
  35. Exit;
  36. ATemp := TFmxObject(AFmxObject);
  37. Pointer(AFmxObject) := nil;
  38. FreeFmxObject(ATemp);
  39. end;
  40. end.