Lazarus 0.9.30 release notes

From Lazarus wiki
Revision as of 21:45, 14 July 2010 by Msmat (talk | contribs) (IDE Changes)

Template:Lazarus 0.9.30 release notes

Lazarus 0.9.30 is not yet released. This page is under construction!


  1. commits: xxx
  2. log: svn log -r xxxx:xxxx
  3. resolved bug tracker issues: xxx

LCL Interfaces major changes

  • Windows CE: Implemented menu support for KeyPad devices (previously worked only in PDA devices), implemented Clipboard support.
  • Windows CE: Top position of TPageControl tabs is now supported. Note that because tpTop is the default value of the TabPosition property, the default position will change from bottom to top.
  • Gtk2: Application.OnActivate() / Application.OnDeactivate() now fires only once per event, not on each form activation/deactivation.
  • Gtk2: Application.Minimize, Application.Restore implemented.
  • Gtk2: Fixed unpleasant form moving when hidden and then shown again.
  • GTK2 was separated from GTK1. The unit gtkint, gtkproc, gtkdef are no longer part of the gtk2 interface. Use unit gtk2int, gtk2proc, gtk2def instead.
  • Qt: Application.Minimize, Application.Restore implemented.
  • Qt: added Haiku support.
  • TGetDesignerFormEvent parameter uses TPersistent instead of TComponent. Reason: support for TCollection and TCollectionItem. Effects only designers.
  • fpGUI: All components on the Standard tab of the component palette are now working.

LCL Changes

  • Unit chart and its component TBarChart are deprecated, because there is now a much better component in the package TAChartLazarusPkg.
  • OpenURL and OpenDocument, new functions in the LCLIntf unit.
  • TApplication.ApplicationType: atSmartphone was renamed to atKeyPadDevice to have a more consistent name. Smartphone devices with touch screen should be of atPDA type instead. atKeyPadDevice should be used for very simple phones and other simple devices (GPS, bar code scanner, etc) without touchscreen. atHandheld was removed. The supported types now are atKeyPadDevice, atPDA, atDesktop and atDefault. The correct type is calculated in Application.Initialize if one isn't forced. This property can be used to verify if automatic modifications are in place to adapt the application to the device.
  • TButton, TCustomButton are no longer defined in the Buttons.pas unit, but in unit StdCtrls only (previously buttons.pas had own TCustomButton, TButton type declarations). Initial class code move was made before the Lazarus 0.9.22 release because of Delphi compatibility.
  • DisableAutoSizing/EnableAutoSizing now work for the whole form, greatly reducing overhead and flicker.
  • ReAlign and AdjustSize now do the same - invalidating the bounds and triggering a new computation of the sizes.
  • Nested controls now update properly. No need anymore to call ReAlign or Parent.AdjustSize.
  • DisableAutoSizing/EnableAutoSizing now work even when changing the Parent of a control, reducing overhead and flicker when docking.
  • TControl.DoAutoSize now resizes to preferred size. No need to do that in descendants. It also checks for dependencies.
  • TControl.Align ordering of controls is now stable (resizing no longer reorders). There is one incompatibility. See Order of Align
  • TControl.AutoSizeCanStart is now deprecated and always true.
  • TCustomForm.FormStyle added fsSystemStayOnTop.Meaning is same as with fsStayOnTop except that fsStayOnTop is form on app top, so when application deactivates fsStayOnTop is not on top of other application(s), fsSystemStayOnTop is always on top.

IDE Changes

  • The ToDo list was moved to a separate package: components/todolist/todolistlaz.lpk. It is installed by default in the released binary packages.
  • Various designer usability improvements:
    • arrow and tab keys switching between components
    • resize/move cancellation using ESC key
    • save/restore of the form window state (minimized/normal/maximized) in the project session
    • extended hints: show component TabStop,TabOrder in case of TWinControl, show new size/new position during components resize/reposition
  • When creating a new project the default unit output directory is now lib/$(TargetCPU)-$(TargetOS). Target file name is project1. This has no impact on old projects.
  • Quick fix for can't find unit: search unit in packages and add requirement
  • Object inspector improvements:
    • Draw read only properties using another color (gray by default)
    • New ImageIndex property editor
  • Editor
    • Highlighting for diffs
    • Folding for HTML, XML, LFM, Diff
    • Allow Multiple Source-Editor Windows
    • Allow several Views of the same Source
    • User-defined color-schemes. (Color-schemes can be exported, and made available in the list of existing schemes)
  • Debugger / Editor
    • Inserted/Deleted lines during a debug session are now tracked. Breakpoints and Execution-line are adjusted. (Since the debugger only knows the line numbers from before the change).
  • Support for FPC resources: You can now use {$R *.lfm} instead of {$i unit1.lrs}.
  • Package file names in packagefiles.xml are now saved without Lazarus source directory. Switching to another Lazarus source directory automatically reloads packages from the new Lazarus source directory.
  • IDE now checks if lpi file changed on disk and asks if it should reopen the project.
  • Project compiler options can now be saved as default for new projects (see here)
  • Packages can now have a normal unit with the same name as the package. For example the package SynEdit has the unit synedit.pp. See here
  • Add to package dialog: removed pages Add unit and Add file. You can use Add files page or in the main menu Package / Add active unit to package.
  • If you start multiple instances of the IDE to debug different projects (e.g. client, server) you can now show the project name on the taskbar. See here.
  • IDE now preserves the file endings of source files (it uses the line ending of the first line, so it does not preserve mixed line endings). You can change the line ending of a source file via Source Editor / popup menu / File settings / Line ending.
  • IDEIntf:
    • Incompatibility: PropEditUtils unit is extracted from PropEdits. The function GetLookupRootForComponent was moved there.
    • Incompatibility: TIComponentInterface was removed. It only added another layer without any extra functionality. See here for remedies: Extending the IDE.
  • IDEIntf: TAbstractFormEditor.CreateComponent added boolean DisableAutoSize. If you pass true the form will flicker far less, but you have to call EnableAutoSizing afterwards.
  • SrcEditorIntf:
    • Introduced TSourceEditorManagerInterface
    • Deprecated SourceEditorWindow, replaced by SourceEditorManagerIntf
    • Deprecated some methods on TSourceEditorWindowInterface, now available through TSourceEditorManagerInterface
  • The ImageList Editor can split images that contains sub images in both dimensions (Width X Height), e.g., loading a image of size 48 X 32 in a image list with width and height equal to 16 will split into 6 sub images of size 16 x 16. Previously it was only possible to split files where the file width was a factor of the image list width and image height matched image list height. This allows to export/import image lists between different projects and matches a Delphi feature.
  • You can now quickly switch between several versions / branches of packages by defining the preferred package file name for each dependency (see here)
  • You can now use the IDE directive %H- to hide individual hints, notes and warnings. See Hide hint via directive
  • The IDE can be made dockable. Install either the package AnchorDockingDsgn or EasyDockMgrDsgn.
  • Translations
    • Czech translation added


  • Codetools is now a normal package and stored in components/codetools/codetools.lpk. You can not uninstall it, but the IDE will now automatically recompile it, for example when cross compiling.
  • Support for objcclass syntax. See FPC PasCocoa.
  • support for strict private, strict protected, class sealed, class abstract
  • Block completion was improved to better know when it should not complete code and some more cases to complete blocks.
  • Class completion: New option to disable adding a comment in front of the first method body. See here
  • Smarter auto indentation that mimics the indentation of surrounding code and/or an example file. See here.
  • identifier completion now completes compiler predefined types like String, AnsiString, Byte, Boolean, etc and completes some keywords depending on context (e.g. property modifiers like read and write).
  • Simple source macros are now parsed (macro on directive of fpc).
  • Code completion: Read-Only properties are marked with a lock-icon.


  • AggPas - Anti Grain Geometry for Object Pascal - now supporting FPImage and LCL. AggPas highlights: Subpixel rendering, 8-bit alpha channel, paths, platform independent rendering using pure pascal. Official site: Aggpas. Package file: components/aggpas/lazarus/aggpaslcl.lpk. See the examples in components/aggpas/lazarus/examples.
  • AnchorDocking - New packages to make your applications dockable. There is also a package named 'AnchorDockingDsgn' to make the IDE dockable. See Anchor Docking


  • Step out command implementation (by Flavio)
  • Show execution point command

Changes affecting compatibility


SourceEditorIntf is for extensions to the IDE.

This has been deprecated. (it will be entirely removed)
  • The old version returned the TSourceNotebook object representing the SourceEditor-Window. The lifespan of the SourceEditor-Window was the same as the IDE's lifespan.
  • The new (temporary/compatibility) version returns one of the (multiply) existing SourceEditor-Window, if one is available. Otherwise it returns nil. The SourceEditor-Window can now be destroyed (and recreated) while the IDE runs.
This has been introduced as replacement.
  • It's lifespan covers the full IDE uptime.
  • Some methods have simply be moved
  • For other methods access to all of the SourceEditor-Window is given. Including a notification system, for creation/destruction of them