I shall summarise the problem and solution. (I would suggest the moderator deletes all the intermediate comments).
I had a problem with creation of forms failing. The TMyForm.Create(Owner) would crash, with no traceable info or other clues as to why. The create failed on only some forms in my app, and not at all in another similar app.
My apps use a table of data structures, with each data structure having an associated form that can be created/hidden/deleted by the user, together with a TTreeView having a node for each data structure, and showing a hierarchical relationship between the data structures. Selecting a node in the TTreeView will automatically create the corresponding form if not already in existence and show it. So I wasted a lot of time checking for problems such as referencing data structures or tree nodes that did not actually exist, but found no such bugs. Also spent time re-definng forms to ensure the LFM files were ok.
Eventually I realised that all forms that failed to create contained a TAChart, though some forms with a TAChart did create ok. (I am sure most of you will empathise with the huge relief on finally finding a solid and consistent lead on a bug!). Further systematic trial-and-error showed that failing forms had an OnMarkToText method, successful forms did not. I tried deleting the OnMarkToText method reference in the form designer, then adding it by code in the FormCreate method for the form. This revealed the true source of the problem.
I had been "tidying up" my code, and that included removing all $mode and $H compiler commands, my thinking being just to go with Lazarus defaults. It is important to note that the TAGraph modules are themselves Pascal code compiled with Lazarus, and subject to $mode and $H commands. TAGraph uses {$H+}, and also specifies a parameter (for returning the text to be displayed) to OnMarkToText as "string". With H+ this means the parameter is treated as ansistring. My form code, without $mode or $H+ seems to treat "string" as shortstring, despite the global compiler option being to default to H+. The compiler does not detect a type erro in these circumstances, presumably because both specifications are "string".
On making sure all my form units (and all the others too for consistency) have {$mode objfpc}($H+} the problem goes away.
TATools was mentioned, and adding that to the form units did seem to allow the creation to get further, such that the form was displayed, and the graph partly displayed, before getting an access error. So I am leaving TATools in the uses statements, though I do not understand why that makes a difference.
I would tentatively suggest that it could be better for the TAGraph code to explicitly designate parameters as "ansistring" rather than the ambiguous "string", though there may be good reasons for specifying string which I do not realise.
My conclusions:
Do not mess with the Lazarus defaults of {$mode objfpc}($H+} without good reason and serious thought.
Do not trust the global compiler H+ setting.
Br grateful for the forum support when in the depths of an intractable and obscure bug.