New Features in ModelMaker UML Explorer 1.15
Delphi 2005 support
- Delphi 2005 IDE integration
- Most Delphi for .NET and Delphi for win32 syntax supported.
- Delphi support on the Properties|Pascal|Parsing tab can now be set to
- Delphi 7 Win32
- Delphi 9 Win32 (new)
- Delphi .NET
Delphi IDE Integration
- Keyboard shortcuts for most UML Explorer commands can be defined / adjusted using the Key bindings tab on the "Environment Options..." dialog.
New features
- Event properties are recognized and displayed and filtered independently from normal properties. Whether a property is an event or not is based on the type name. Events are properties with a delegate (method pointer) type. A delegate type definition is for exampleTNotifyEvent = procedure (Sender: TObject) of object;ModelMaker Code Explorer uses these rules to check whether a property type name refers to a delegate type and therefore makes the property an event:
- A delegate type defined in the same module and preceeding the property is recognized.
- A file "global_delegates.txt" in the ModelMaker Tools shared directory allows defining globally known delegate types. By default this file contains the VCL TNotifyEvent definition, you may add your own commonly used types. This file is auto created after running once. The Properties|Pascal|Parsing tab has a button to edit this file. A restart is required for changes to take effect.
- Optionally, properties named 'OnXyz' are assumed to be events, this can be disabled in the Properties|Pascal|Parsing tab.
- Annotations auto size height can be disabled.
C# Support
- C# is supported as you'd expect it. Additionally namespaces and enums can be visualized using package or classifier symbols.
- Multiple selected classes, namespaces, enums etc can be dragged at once from the ModelMaker Code Explorer members view (requires MMX 3.06 or later)
Remarks on C# visualization
- A class without ancestor specification interprets the first supported interface as ancestor. This is due to the fact that a single pass parser is used rather than actually compiling the all code. As a work around for this problem, interfaces defined before the class in the same module, are recognized. Also, if the supposed ancestor starts with 'I' and the next character is an upper case letter, the ancestor is assumed to be an interface. Interpreting ancestors starting with an "I" as interfaces can be disabled with option "Fix Ancestor, Interface support" on the Environment Options General tab.
- All type names are reduced to unqualified names. Both "System.List" and "MyContainers.List" are treated as "List". As a result, when visualizing this code public class TestList: MyContainers.List {three uses relations and an inheritance relation are displayed with any class named List on the diagram. Whether that class is a System.List, MyContainers.List or simply List does not matter.
List a;
System.List b;
MyContainers.List c;
}
Solved problems
- The IDE integrated version would prompt to save the diagram suite when invoking the IDE Save All command. This is now skipped if the file does not exist yet and no diagrams are created.

