New features in ModelMaker 9.18

Customizable Desktop Layouts

Several new features are available for the customizable desktop layouts that let you rearrange and save the ModelMaker views.

  • Docking style - docking style feedback is similar to VS 2005, using docking zone selectors to specify where the dragged view will be docked if you release it.
  • Auto Hide views: Auto-hiding means a view can be minimized along one of the sides of the docking site, so only the view's caption remains visible
  • Additional visual styles on Env Options | General | Layouts. Default is now "Themed".
  • Additional Show Visible Containers options on Env Options | General | Layouts.
  • Desktops saved with this version cannot be used by previous versions of ModelMaker.


  • Diagram editor alignment tool bar buttons show state for symbol attributes "auto size width", "auto size height", "word break" and "text alignment". Clicking these buttons toggles the attribute value. If the selected symbols have different values for an attribute, a gray rectangle is displayed around the button's icon.

Interface Wizard

  • Optionally interface member documentation and one-liner are assigned to implementing member if the implementing member is undocumented.
  • Pascal: Interface Wizard picks up method resolution clauses and checks the signature of the implementing method. The implementing method signature can be updated if signature errors are found.
  • C#: Interface Wizard allows defining default implicit or explicit mapping mode. Existing methods can be changed (renamed) to explicit or implicit (drop down menu).

Method Implementation view

  • Go to inherited method: selects the inherited method - if any.
  • Navigate Next and Previous: selects the next "associated" method. Use to toggle between property access methods, constructors and destructor and overloaded methods. Shortcuts: Ctrl+Alt+Left/Right. Check Members view for details on the similar function.
  • Super hints added to all relevant commands.

Code Editors in Module Code and Implementation view

  • Select Token and Copy: if there's no selection in the editor, selects the token at cursor position and copies it to the clipboard. Shortcut Ctrl+C - replacing default Copy. Similar are Select Token and Cut (Ctrl+X) and Select Token and Paste (Ctrl+Shift+V).
  • When used on a selection, Rename in Scope (rename local) allows picking an identifier from the selected text in the Replace input combo box.
  • Pascal: Result is no longer suggested as member name for add local var, add field etc.
  • Find next / previous occurrence of an identifier: scrolls the editor to the next occurrence of the word at cursor position. Searches full text including comments and strings. If the cursor is not on or immediately after an identifier the previously searched identifier is used. Keybindings: Shift+Alt+Right/Left.
  • Toggle Comment Selection comments out the selected text with a //-style comment, or uncomments selected //-style comments. When commenting text, optionally a text is inserted before the first commented line. Text is defined in Environment Options | Editors. Uncommenting use Toggle Comment removes the comment text again if this is unchanged. Toggle comment replaces the previous commenting commands.
  • Duplicate lines: duplicates the selected lines - or current, single line when selection is empty.
  • Move Selection Up / Down. Moves the Editor selection up / down by one line. If nothing is selected, the current line is moved up / down.
  • Module Code Editor: Move Entity Up/Down. Moves procedures and MM Tag lines. Default keyboard shortcut Shift+Ctrl+Alt+Up/Down.
  • Pascal Module Code Editor: Move a unit from the interface uses clause to implementation uses clause and vice versa. Invoked with Move Up / Move Down commands in the IDE editor, both commands move the unit name at cursor position to "the other" uses clause.


  • Create Delegate from Method. Creates delegates (event types) based on the selected methods. Optionally the new delegates are added to the same module as the original method - if any.
  • Parameter wizard operates on multiple selected methods. Includes IntelliReplacing renamed parameters in all selected methods. The Parameter wizard has been copied to the Wizards drop down and sub menu menus.
  • Creational wizard invoked from members view, pre-selects the members selected in the members view.
  • Pascal: Add operators lets you select multiple operators to add at once. Available from Members view Add sub menu and IDE Add sub menu.
  • Pascal: Operator Preset in Method Editor dialog. Lets you pick an operator name from the drop down list and adjusts parameter lists and return type.
  • Convert Field to Property either creates a read-only or read-write property. Dialog is displayed each time you invoke the command rather than taking the setting as defined in Refactoring Options.
  • Pascal: Convert Field to Property optionally uses access methods to access field instead of accessing the field directly.
  • Navigate Next and Previous: selects the next "associated" member. Replaces Go to property, go to read method and go to write method. Shortcuts: Ctrl+Alt+Left/Right. The Method Implementation view uses the same shortcuts for the similar command.
    • property navigation: cycles through property, state field and access methods.
    • Event navigation: includes the event dispatch method - if any - to the list of cycled members.
    • constructor / destructor navigation: cycles through constructors and destructors.
    • overloaded method navigation: cycles through all overloaded methods with the same name.
  • Member Search Bar: sub string filters members on name. Pressing Enter or Escape in search edit or list leave the search mode.
  • Super hints added to all relevant commands.

C# version 3 support

  • Auto implemented properties supported.
  • Partial methods supported. The partial method modifier is supported. Optionally either a partial method declaration or implementation is emitted.
  • Extension method support. The this parameter modifier is supported.

Changed IDE addins

  • Both MM9.18 and MMC# 9.18 and higher use a different way of communicating with the IDE integration addins. This requires new versions of the Delphi IDE integration experts (included in the setup) and the Visual Studio IDE integration pack (v1.50 or higher) Check the download page for details. Note: these new IDE addins are incompatible with older versions of ModelMaker.

Solved problems - build 3411 (original release)

  • Several - mainly association related - commands were disabled on package diagrams. Fixed.
  • Pascal: Interface Wizard would not recognize method resolution clauses. Fixed.
  • Pascal: Interface Wizard would create a property to implement an interface event. Fixed.
  • Class structured constant declarations (like const Origin: TPoint = (X:0; Y:0); would cause parsing errors. Solved
  • Opening / closing the references view could cause long delays. Solved.
  • The Visual Studio menu would appear empty under certain conditions - bug introduced in MM9.16. Solved.
  • Printing diagrams would in most cases not include icons for visibility, hotlinks etc. Solved.
  • Running the demo version under Vista could cause Access Violations. Solved.

Solved problems - build 3417

  • Pascal: The Interface wizard would display inherited interfaces implemented by delegation as not-implemented. Solved.
  • In some cases a new model could contain some class associations from previously loaded models. Solved.
  • Add local var, field, method, property etc. in the method implementation view would in some cases fail, silently or with an error message - due to uncaught exceptions when trying to detect type and or name for the new entity. Solved.
  • The type name wizard in Type selectors did not suggest a type name at all. Solved.
  • The method override wizard could make existing property access methods inheritance restricted. This could then cause error when refresh importing the source later. Solved. After loading a model, methods in this invalid state are auto-repaired.
  • When updating the auto-maintained inherited / base call, the final semi-colon was omitted, resulting in incompilbale code. Solved
  • Several minor memory leaks solved.
  • Pascal: operations like add local var could cause an access violation when invoked on deep nested (module) procedures. Solved
  • Pascal: Rename in Scope for nested procedures would fail without a message if the scope was different than the original procedure. Solved: command now works as expected when selecting containing procedures.
  • Pascal: The Delphi parser could enter an endless loop under some rare conditions. Solved.
  • Pascal: The Delphi parser would not accept reserved words in qualified names in type aliases such as A = System.Object; Solved.
  • C#: constant string arrays in attributes would cause parsing errors. Solved.