The properties in their object inspector are better organized by categories.
Qt Designer has it too. It C++ world it may be done thanks to multiple inheritance (probably).
Personally I never liked this. I have a habit of memorizing location easiest, so changing layout constantly or multiple views messes with that. At the very least one should be able to disable such behaviour.
E.g. in Delphi 7 I didn't recognize any icon except the most standard ones, but still could blindly drop most used component on the form. Simply because I automatically memorized most components place in the component tabs.
For me the D2006 (and Lazarus' equvalent ctrl-alt-p) was a god's end, eliminating iconic hell in selecting components.
So for me a way to select property by entering its first few letters would be most important, and how it looks visually would be irrelevant, except for when I have no idea at all, and then an alphabetical list would be easiest.
I'm not sure how to implement it in Lazarus. Maybe hardcode it to OI (category Geometry: Width, Left, Anchors, etc.) or use IDE directives {%xxx}
Never hardcode that is asking for trouble, and keep in mind that the OI mostly reflects data that can be found using RTTI.
Putting it in RTTI however, would make its overhead also felt runtime, while the property is only needed designtime (and require to carve up reasonably clean source to set the items via some custom property scheme).
Therefore, I lean towards solving it by a registration mechanism in the designtime package, which has several advantages:
- no overhead in generated applications, any overhead is in the IDE only.
- no change needed for existing tcomponents, so it can be started immediately, and not wait for
such property to appear in RTTI.
- Since design packages depend on Lazarus, it is wholly determinined within lazarus, so a change in category won't only be visible for some classes (like e.g. the DB ones that are defined in FPC) with the next FPC iteration.
- You could autogenerate a base template for registration and preassign properties from which the name is known. (like name and the position ones) to mitigate the extra work for the design package engineer.