Devart Blog

Delphi XE2 FireMonkey HD Applications Raise Runtime Error 231 on Mac OS X

Posted by on October 5th, 2011

Many users have encountered the problem when running FireMonkey HD Applications on Mac OS X without 3D hardware HAL. When this application is run, it either freezes or produces the following error:

Runtime error 231 at 000169AD

We have researched this problem and found a solution from Embarcadero. If a Mac OS X computer has no 3D hardware HAL, you need to set the global variable FMX.Types.GlobalUseHWEffects to False. Example:

begin
  FMX.Types.GlobalUseHWEffects := False;

  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run; 
end;

However, this solution is not a panacea. Sometimes HD Applications continue to freeze or raise the error even with FMX.Types.GlobalUseHWEffects set to False. In this case, you need to modify the FMX.Filter.pas unit. Do the following:

  1. Copy the FMX.Filter.pas and FMX.Defines.inc files from the $(BDS)sourcefmx folder to your project folder.
  2. In the files copied to your project folder replace the code of the FilterByName and FilterClassByName functions with the following code:
    function FilterByName(const AName: string): TFilter; 
    var
      i: Integer;
    begin
      Result := nil;
      if not GlobalUseHWEffects or (Filters = nil) then // <-- change this line
        Exit;
      for i := 0 to Filters.Count - 1 do
        if CompareText(TFilterClass(Filters.Objects[i]).FilterAttr.Name, AName) = 0
      then
      begin
        Result := TFilterClass(Filters.Objects[i]).Create;
        Exit;
      end;
    end;
    
    function FilterClassByName(const AName: string): TFilterClass; 
    var
      i: Integer;
    begin
      Result := nil;
      if not GlobalUseHWEffects or (Filters = nil) then // <-- change this line
        Exit;
      for i := 0 to Filters.Count - 1 do
        if CompareText(TFilterClass(Filters.Objects[i]).FilterAttr.Name, AName) = 0
        then
        begin
          Result := TFilterClass(Filters.Objects[i]);
          Exit;
        end;
    end;
  3. Add the FMX.Filter unit to the USES section of your project:
    program Project1;
    
    uses
      FMX.Forms,
      FMX.Types,
      FMX.Filter, // <-- add unit
      Unit1 in 'Unit1.pas' {Form1};

After such modifications your applications will run successfully on Mac OS X without 3D hardware HAL; however, 3D effects will not be available for it.

Updated:
This trick is not required for Rad Studio XE2 with Update 3 and higher.

4 Responses to “Delphi XE2 FireMonkey HD Applications Raise Runtime Error 231 on Mac OS X”

  1. The Best Photo Software Says:

    You’re in point of fact a just right webmaster. The website loading pace is amazing. It kind of feels that you are doing any distinctive trick. Also, The contents are masterpiece. you’ve done a great task on this subject!

  2. Nefful products Taiwan Says:

    I enjoy, cause I found just what I was looking for. You have ended my 4 day long hunt! God Bless you man. Have a great day. Bye

  3. AndreyP Says:

    Thanks for your praising comment! Glad to be helpful.

  4. AndreyP Says:

    Thanks for your kind words. We are trying our best.

Leave a Reply