LMD VCL 2010 - What's New?

From LMD
Jump to: navigation, search

<< Back to Getting started page



Support for IDEs and operating systems

  • Compatible with Delphi 2010 and C++ Builder 2010!
  • Supported IDEs
    • Delphi 6, 7, Delphi 2005 - 2010
    • C++ Builder 6, 2006 - 2010
    • Delphi 2005.NET - Delphi 2007.NET
    • Turbo (2006) Professional versions for Delphi, C++ and Delphi.NET
    • All corresponding Studio Products (BDS 2006, CRS 2007, CRS 2009, ERS 2010 etc.)
  • Supported operating systems
    • Win98 and WinNT4 or better (including Windows 7).

For recent Delphi releases same platforms as the IDE are supported (e.g. Delphi 2009 officially supports Win2k or better only).

Common new features

  • Improved shared Unicode support, including additional rework for native Unicode in Delphi 2009 and higher.
  • Many minor improvements in the shared packages based on customer requests, examples are:
    • BTS# 733, adapting behaviour of TLMDWideStringList.IndexOf functionality
    • LMDStrings: LMDCheckWildCardMask method added.
    • LMDGraphUtils: LMDExtTextOut method added.

New Packages

  • LMD DockingPack - Add docking features with floating panels and hot zones as known e.g. from Visual studio! This package is included by default in LMD-Tools and LMD ElPack.

Standalone Packs with major updates

  • LMD ScriptPack - in connection with IDE-Tools: Heavily improved Debugger Support for both ActiveScripting Engine based languages and the native PascalScript variant.
  • LMD ThemePack
    • Improved support for built-in themes (runtime customization) including saving/restoring theme data to/from XML files.
    • DrawThemeEdge and GetThemeColor methods implemented.
    • Batch edit methods added (ReplaceColor, SetNewColor, ChangeBrightness).
    • LMD Office2003ThemeRenderer demo improved and can be now used for generating custom color schemes:


Shared Runtime

  • Windows 7 support.
  • Correct PNG support e.g. in FillObject propertes (as available in ElPack)
  • Improved rendering of the integrated internal HTML engine

Main Controls

  • New Control: TLMDBiProgressBar. Support 2 progress indicators in one control and additional marquee and infinite modes.
  • New Control: TLMDBiTrackBar. Allow 2 thumb controls to specify two values or ranges.
  • New Control: TLMDHeader (including full theme support)
  • New Control: TLMDGrid with advanced features like
    • Full support of LMD ThemePack
    • Customizable inplace editors
    • Insert/delete/move colums at runtime
    • Column sorting and much more

A lot of work is in progress here, the R2 release will add many more predefined place editors along with the DBGrid variant.

  • TLMDCustomEdit (and descendants):
    • CueBanner property added. This property has effect for those descendants of TLMDCustomEdit that can contain empty text. Unlike the Delphi implementation (available from Delphi 2009 on) this feature works on any supported OS.
  • TLMDMaskEdit
    • Value getters are now setters, too. The existing functions AsInteger, AsCardinal, AsInt64, AsFloat, AsDate, AsTime, AsCurrency, AsString have been transformed to read/write properties.
  • TLMDStyleManager
    • Improved designtime editor (e.g. property filters with wildcard support)
  • ListBox Controls: Default items can now be set at designtime

LMD BarPack


  • MouseDown and MouseUp within sections now are translated to ExplorerBar events.

LMD ShellPack


  • LMDShellInvokeContextMenu: aSuppressCmd param added (false by default to keep compatibility)
  • Overloaded version of LMDShellInvokeContextMenu for given full file/directory name added.


  • LMDShList: selection by first character on key press added

LMD StoragePack

  • LMDStorBase: IsLoading read-only property added;
  • LMDStorINIVault, LMDStorXMLVault: OnUpdateBeforeClose event added.


  • HTTP Resume support for LMDWebHTTPGet object (and LMDDownload object) added
    • Property Resume
    • property RangeStart + property RangeEnd;

LMD ElPack

  • DockingPack included
  • TElBtnEdit
    • PngGlyph support to ElButtonEdit
  • TElHTMLLabel, TElTree, TElXTree: TLMDHTMLImageNeededEvent support added
  • TElHTMLLabel: Vertical Spacing added (LineGap property)
  • TElListBox
    • Advanced/Extended OnChange/OnClick events (which can be used as item selection notifier)
  • TElStyleManager
    • Improved designtime editor (e.g. property filters with wildcard support)
    • Apply Button which allows to review changes before closing the dialog
  • TElExpressionEval: Improved error handling
  • TElXTree
    • GetNextChecked and GetCheckedCount methods added. These methods are based on LookForItemEx2 method and can be used with such flags as IterateBackward, CheckStartItem, SubItemsOnly, VisibleOnly, CountCollapsed.
    • Drag&Drop header with scrolling


  • New PascalScript Language support added. Unlike the previously MS ActiveScripting based languages this is a 100% native VCL implementation without need of external dlls. The PascalScript engine includes an optimizing byte code compiler and very fast interpreter.
    The PascalScript language is a dynamic Variant based script language that supports most of the Delphi Pascal expressions and statements like
    • procedure/function declarations
    • const/var/out parameters
    • global/local variables and constants.
    • Extended support of exception handling, e.g. raise, try-except and try-finally statements; real Delphi exceptions are raised internally that allow to test an exception class in handler, e.g. on E: EZeroDivide do.
    • The PascalScript CodeObject engine implements a secret interface (in addition to IDispatch) that allows very fast interoperations between connected script controls. Besides that execption processing can be made transparent between connected script controls.
    • Native script operators such as 'is', 'in', '@' and set constructors, e.g. [akLeft,akTop] allow to work with imported Delphi objects, instead of provided to ActiveX scripts special functions (e.g. SetMake, SetEmpty, ClassIs, EventMake, ect.). Like for the ActiveScripting based languages import units of your Pascal units can be created. Import units for the VCL are shipped with each copy of ScriptPack.
  • Pascal script debugger: Native debugging of the PascalScript, including single-threading debugging. The single threading debugging allows to handle OnBreak event in the same thread; using Application.ProcessMessages inside the OnBreak event handler allows to organize single threading debugging of the event based (e.g. designed) UI applications.
  • New AddOrSetValue and TryReadValue script control methods to add/modify/read the external variables of simple types, e.g. numeric, strings. E.g. to prevent creating and importing model in simple cases.
  • New ReadVar/WriteVar script controls methods provide access to the script-code global variables.
  • New DebugName script control property to represent the script control to the end user in the IDE-Tools debug-related UI controls, such as call-stack or breakpoint-list.
  • Superior enhancement of the debugger breakpoints: Delphi like breakpoints actions - LogMessage/LogStackFrames/EvalExpression/EnableGroup/DisableGroup; Delphi like breakpoint properties - Enabled/Condition/PassCount/Group. These advanced concepts has been emulated for the ActiveX based scripting languages, and supported natively by the PascalScript debugger.
  • The debug variables tree, e.g. TLMDVariables is now lazy initialized to prevent dead loop while working with complex circular referenced objects. This also allows optimizing resources when showing complex objects graphs or long arrays.
  • Generated wrappers have been changed to provide types of properties (e.g. var-types) to the debugger.
  • The bug with representing nil objects as a variant Null has been fixed. Now nil objects are represented in wrappers as a nil IDispatch, e.g. with varDispatch variant type.
  • The importer parser has been enhanced: new incremental preprocessor are now able to interpret some of the $IF directives; the parser itself are now able to parse most of the new Delphi language constructs, like nested types/consts/vars, class properties, methods and properties in records, class helpers, ect. All these constructs, except nested types and class helpers, are fully supported by the generated wrappers.
  • New debugger related visual controls: TLMDCallStackView, TLMDCallStackComboBox, TLMDVariablesView, TLMDWatchView, TLMDEventLogView, TLMDBreakpointsView. All these controls are connectable to the debugger through easy to use TLMDDebuggerSource component.
  • The bug with improper showing of non-visual components when ShowNonvisualComponents are set to False has been fixed.

Changes/Enhancements since initial LMD VCL 2009 release


  • 2 new controls: TLMDWSwitch and TLMDDBWSwitch which handle focus and space-checking behaviour
  • LMDButton: Unicode hint added
  • LMDCalendarEdit: ForceTodayAsDefault property added
  • LMDCaptionPanel: ThemeMode, ThemeGlobalMode properties added, themed drawing added.
  • LMDCaptionPanelGroup: AutoExpand property added; when set to true, it causes corresponfing events (OnExpanding, OnExpanded etc.) to be triggered if changing orientation makes impossible to keep panel collapsed
  • LMDColorEdit: "Custom color..." item added for executing custom color dialog; SelectedColor is restored now correctly after custom color
  • LMDCustomExtSpinEdit: OnValueChanging, OnValueChanged events added; AutoDisableButtons property added.
  • LMDCustomMemo: IgnoreLastEmptyLine compatibility property added
  • LMDFormDisplay
    • Merging main menu functionality added
    • AutoFocus property added
  • LMDMaskEdit: ProcessBlankChar property introduced
  • LMDPageControl: TabAlignment property added
  • LMDPNGImageList support added for LMDMMButton
  • LMDProcs unit: LMDIsHTMLText helper function added;
  • LMDSpinButton: CM_ENABLEDCHANGED method enhanced to support disabling one button.

LMD Standalone Packs

  • LMD RichPack
    • Themed border added to TLMDCustomRichEdit
  • LMD SysPack
    • LMDSysNetworkObject unit, TLMDTCPIP: Added CSIPAddress, CSIPSubnetMask, CSDefaultGateWay properties, containing comma

LMD ElPack

  • ElAdvancedPanel. New OnCheckBoxClick event
  • ElBtnEdit: ButtonPngGlyph and AltButtonPngGlyph added
  • ElComboBox.
    • Placing drop down differently (RightAlignView - Drop down button position)
    • ElComboBox: OnBeforeSelectValue event added. Raised before Drop down list CloseUp.
    • ElComboBox: OnCanSelect event added
  • ElDBComboBox(style=csdropdownlist) update the dataset immediately when the user selects a different item in the drop-down
  • ElDTPick: New property CalendarLiveClock
  • ElExplorerBarGroup: OnCheckBoxClick event added. TNotifyEvent - fired when user clicks CheckBox.
  • ElHTMLLabel. New property ShowAccelChar
  • ElMenuBar: MDI support for TElMenuBar added
  • ElMenuItem - Added OnSubMenuPopup event
  • ElMenus: TElPopupMenu.EndMenu method to cancel programmatically added
  • ElSpinEdit: New events OnCheckRangeError: TLMDCheckIntRangeEvent, OnCheckRangeError: TLMDCheckFloatRangeEvent
  • ElToolBar
    • MoreMenuDrawStyle: TDrawStyle property added to define the style of MoreMenu.
    • MoreMenu collects menu items from ToolButton in case it has an assigned PullDownMenu.


LMD ScriptPack

  • New three step initialization of ScriptPack Control. New Prepare, Open and Close methods and a State property was added. In addition the new 'Prepared' intermediate state was introduced. In this state all source code is already parsed, but no global code is executed yet (CodeObject is already acessible in this state). This new feature allows circular dependencies between script controls even in case when global code is used (hence handling several scripts at the same time is simplified enormously). In simple cases a call to Prepare method can be ommitted. Finally the ACloseOnRuntimeError parameter was added to the Open method to allow leaving script control opened in the case that runtime errors occured during global code execution.
  • New exception handling replaces Last ScriptError concept. Script control includes now the encoded source (reference to script control), error line and position information in exception messages (e.g. in string form). The LMDDecodeErrorMessageInfo procedure allows to decode this information for advanced applications.
  • New optimized Delphi memory manager proxy allows to detect finalized object destructions. E.g. all subsequent access to IDispatch object wrapper will report 'Object has been destroyed' exceptions instead of unsafe Access Violations. This feauture is especially used by working with exceptions in PascalScript, because exception objects are automatically destroyed by the interpreter.
  • New prepared expressions/statements feature was added to optimize Eval and ExecuteStatement methods. If the same expression/statement need to be executed many times then it is more efficient to Prepare it first and then use Eval and ExecuteStatement overloadeds methods that take prepared objects as parameters. Note: Most speed gain will be seen in native PascalScript implementation, because all other ActiveX script implementations do not support this feature internally.
  • New Create constructor and Copy method are implicitly generated in wrappers for Delphi record types to allow creating and copying records more naturally.

LMD SyntaxEdit

  • Auto-completion API added. Completion supported: based on document text, or custom completion, based on events. See TLMDEditView.CompletionSettings, OnFillCompletionList, OnCompletionReplace, OnCompletionCustomDraw, OnCompletionMeasureItem properties/events.
  • Incremental search feature. See sedIncrementalSearchStart command in the help. Shortcut: Ctrl+E
  • Simple text highlighting API added: HighlightSettings, Add/Remove Highlight. Useful to highlight some errors or some search results. See TLMDEditView.HighlightSettings property, and TLMDEditView.AddHighlight, RemoveHighlight, ClearHighlight methods.
  • vsPreciseScrollBar option added to ViewSettings. This option is introduced for WrapMode = wmWrapToWindow or wmWrapToRuler. With this option, vertical scrollbar is more precise on wrapped text, but, editor a bit slower.
  • ReadOnly property for TLMDEditView added.
  • closeInnerSchemes attribute implemented for RegexBlock node in syntax scheme. Useful for better handling <script> subschemes in HTML. See HTML scheme in Megademo for example.
  • Line select with click on line numbers bar
  • UTF8 text auto-detect improved: now it can detect UTF8 without BOM
  • Function for search/replace arguments synchronization between 2 and more Views added: TLMDEditView.AssignSearchReplaceArgs.
  • Variable width fonts supported
  • Significant performance improvements for big files, with long lines
  • Property MaxLineLengthToParse added to TLMDEditDocument. It helps to prevent parsing too long lines.
  • MaxHorizScroll property added to TLMDCustomEditView