Lazarus 1.0 release notes

From Lazarus wiki
Revision as of 19:14, 9 October 2011 by Martin (talk | contribs) (IDE Changes)

Template:Lazarus 0.99.0 release notes

Lazarus 0.99.0 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

LCL Changes

  • The LCL is now a normal package. It is now automatically recompiled if needed. For example when switching the target platform and you have not yet compiled for this platform. This has no impact on existing projects.
  • The platform independent parts of the LCL are now in the package LCLBase. This has no impact on existing projects.
  • The linker options needed by the LCL are now only added to projects that use the package LCL. Formerly all projects got them. See here.
  • TCustomForm.Create raises an exception if form resource is not found.
  • TNotebook and TPage: The new implementations of these classes have been added.
  • Gtk2: Implemented LCLIntf.CreateEllipticRgn and CreateRoundRectRgn and implemented SetWindowRgn for TForm (previously it worked only for child controls)
  • TDBNavigator: It is now possible to have focusable buttons by setting Options = [navFocusableButtons] and TabStop = True. This is useful for accessibility and for devices without a mouse nor touch screen.
  • TControlBorderSpacing.GetSideSpace and GetSpace were swapped and are now consistent. GetSideSpace = Around + GetSpace.

IDE Changes

  • The old warnings at IDE start for Lazarus directory, compiler and FPC sources were replaced with one dialog. The dialog can be forced to show with the command line parameter --setup.
  • Compiler options: You can now use the project build macros in the search paths, linker and custom options of the project and all packages of the project. See the examples.
  • The package editor and project inspector were improved to better support big packages/projects with hundreds of files: You can now sort, filter and show the directory structure.
  • Packages compiled via Makefile created by the IDE are now recognized by the IDE and only recompiled if something changed.
  • Package general and package compiler options are now using generic IDE options interface.
  • New dialog to clean up build files, including all packages of the project
  • Editor:
    • Codefolding: Folded code remains folded, even if it temporarily becomes part of a comment (due to an open "(*" or "{"). Note: Such folds are not saved in the session, they are once they returned to there normal state, after the closing "*)"/"}" was typed.
    • Codefolding: Ability to hide (fold) the currently selected text. These folds are not saved to the session
  • Debugger
    • Added display format for CPU-Register
    • Added Pascal Source to Disassembler
    • Added Thread dialog
    • Added Watchpoints (data breakpoints)
    • History of Watches and Locals [see blog]
    • Added logging of most of events (Event Log)
    • Added ability for a breakpoints (breaking or none-breaking) to enable/disable other breakpoints
  • Main menu structure got revamped. Source menu and its Refactor sub-menu are new.
  • Parameter Hints now have a button to paste the missing parameter names.
  • Code Explorer: Filter now deletes nodes, instead of marking.
  • Code Explorer: New category "Surrounding" allows to quickly jump to interface, implementation and nested procedures.
  • Help for keywords: The chmhelp package can now show help for keywords.
  • startlazarus now supports the --pcp parameter allowing multiple installations of Lazarus.
  • lazbuild can now create/update the Makefile of a package with the new option --create-makefile.
  • lazbuild --build-ide= now builds under Windows lazarus.exe, not
  • Design time only packages are no longer compiled into projects, unless enabled. See here.
  • When creating a new package the option to Add to the uses section of the project is now disabled by default.
  • New macros: PrimaryConfigPath, SecondaryConfigPath, FallbackOutputRoot, PkgName. See IDE Macros
  • The IDE interface unit projectintf was split into projectintf and compoptsintf. The unit compoptsintf contains the access to the various compiler options of the IDE. The unit packageintf now grants access to the compiler options of packages.



  • Parsing, searching and code completion of class operators and advanced records.
  • Parsing objcclass external syntax.
  • Parsing and class completion of nested classes. Searching is not yet fully implemented.
  • Parsing of class sections type, const, var, class var. Searching is not yet fully implemented.
  • Parsing delphi style generics. Searching in spezialized types is not yet fully implemented.
  • ctnClassType, ctnClassConst, ctnClassVar were removed and replaced with ctnTypeSection, ctnConstSection, ctnVarSection.
  • The class sub sections ctnTypeSection, ctnConstSection, ctnVarSection are now children of the visibility sections.
  • New IDE package for advanced Codetools: Cody.
  • Find declaration: "inherited;"
  • Identifier completion: compiler directives start keywords


  • Wiki documentation
  • On{Before|After}Draw{BackWall|Background}, OnExtentChanged events for TChart
  • Antialiasing
  • TChartAxis:
    • MarkPositions to implement labels-inside bars and pies
    • Minor axis ticks and grid
    • AxisPen and Range properties
    • Intervals property to control interval size
  • TChartAxisMarks:
    • Stripes property to create "striped" chart background
    • YIndex property to implement labels for stacked series
    • Range property
  • TFuncSeries now correctly work with rotation and axis transformation
  • 4 new series:
    • Open-High-Low-Close, B-spline, Cubic spline, Polar
  • Multi-line mark labels, title and footer rotation
  • 5 new tools:
    • TDataPointClickTool, TDataPointHintTool, TDataPointCrosshairTool, TZoomMouseWheelTool, TUserDefinedTool
    • TBasicPanTool.LimitToExtent property
  • Drag-zoom and crosshair (former reticule) now should work on Qt and MacOS
  • KeyDown/KeyUp/MouseWheel events for chart tools
  • TUserDefinedAxisTransform
  • New data source: TIntervalChartSource
  • TCalculatedChartSource: derivative and smooth derivative, AccumulationDirection
  • Series can now skip NaN values
  • New IChartDrawer API with various drawing back-ends:
    • AggPas (separate package)
    • Printer, for printing charts with appropriate scaling (separate package)
    • OpenGL
    • FPCanvas/NoGUI, for using in web servers
    • SVG
    • BGRABitmap (separate package)
    • Windows Metafile (separate package)
    • FPVectorial (separate package)
  • Navigation components: TChartNavScrollBar, TChartNavPanel
  • Legend:
    • Multiple columns
    • Ordering and grouping
    • SymbolFrame property
    • OnCreate event
  • New components: TChartListbox, TChartExtentLink
  • Enumerators
  • Arrow property for TConstantLine and TChartAxis
  • TChart.MarginsExternal property
  • Design-time editor for TListChartSource.DataPoints
  • 14 new demo projects, many updates to existing demos
  • Backwards-incompatible changes:
    • Adding Pie series does not automatically hide axises any longer
    • TZoomDragTool.Proportional property is replaced by RatioLimit, allowing single-axis zooming
    • TReticuleTool, TChart.ReticuleMode, TChart.ReticulePos and TChart.OnDrawReticule are deprecated and will be removed, use TDataPointCrosshairTool instead

Changes affecting compatibility

TCustomForm.Create raises an exception if resource is not found

  • Reason: Each form created by the IDE should have a resource, so if resource is not found there is something wrong with either a resource or the unit which contains the faulty form. Therefore the application should inform the developer that the form can't function correctly without the resource. This change is also Delphi compatible and compatible with TFrame and TDataModule components.
  • Remedy: If you need a resourceless form you have 3 options:
    • Create a TForm class (not a descendant)
    • Construct your form using the CreateNew() constructor.
    • It is also possible to disable the exception by setting the global variable RequireDerivedFormResource to False.

TCompileReason or TLazCompilerOptions not found

  • Reason: The unit projectintf was split. The declarations for the IDE compiler options are now in the unit compoptsintf. The unit packageintf needed access to the compiler options.
  • Remedy: Add unit compoptsintf to the uses section.


removed, see 0.9.30 release notes, use SrcEditorIntf.SourceEditorManagerIntf

SynEdit: Several deprecated methods were removed

removed, use SynEdit.SelectWord
removed, the property was a dummy property for some time with no value. Information can be retrieved via TSynEditMarkupCtrlMouseLink(SynEdit.MarkupByClass[TSynEditMarkupCtrlMouseLink]).IsMouseOverLink
removed, use SynEdit.Gutter.Width
removed, only worked with SynPasSyn. See TSynPasSyn for configuration
removed, use FileLineEndType and FileWriteLineEndType
TSynEditMarkList (Bookmarks)
First / Last / Place / Insert have been removed, use Items[] / Add. Insert has no replacements, as bookmarks are now always sorted, and inserts at arbitrary positions no longer possible
TSynEditMarkList (Bookmarks)
GetMarksForLine, removed, use Line[n] property

TCustomNotebook was moved from ExtCtrls to ComCtrls

  • Effects: TCustomNoteBook was moved
  • Reason: TCustomNotebook implements TPageControl, which is located in the ComCtrls unit. Logically the implementation of TPageControl should be in the ComCtrls unit, and this is also Delphi compatible. This change will also diminish the confusion that people make between TNotebook and TCustomNotebook, because both will be in different units now.
  • Remedy: The vast majority of projects should simply use TPageControl, so no change is required. For those that use TCustomNotebook, please change them to use TPageControl instead.

TCustomNotebook was renamed to TCustomTabControl

  • Effects: TCustomNoteBook was renamed
  • Reason: The previous name implied an unexisting relation to TNotebook, which caused a lot of confusion. On top of that, it was also Delphi-incompatible. The new name is Delphi compatible and fixes the previous problems.
  • Remedy: Rename any occurance of TCustomNotebook to TCustomTabControl.

TCustomPageControl/TPageControl.OnPageChanged were removed

  • Effects: TPageControl.OnPageChanged was removed
  • Reason: This event should never have existed because it is just a duplicate of OnChange which is the correct Delphi-compatible event. The way it was implemented, this event caused OnChange to be called twice, as per bug
  • Remedy: Rename any occurance of TPageControl.OnPageChanged to TPageControl.OnChange. If you are using an old IDE but a new LCL you might error messages. To fix this, just rebuild your IDE to have it on the same version as your LCL.