Sign in Join
Wiki copytemporary

Lazarus 0.9.30 release notes: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Lazarus 0.9.30 release notes

OldNewLine
1+Statistics:
2+
3+1. commits: 7500+
4+2. log: svn log -r 21920:29689
5+3. resolved bug tracker issues: 354
6+
7+## LCL Interfaces major changes
8+
9+- Windows CE: Implemented menu support for KeyPad devices (previously worked only in PDA devices) and in general much improved menu support.
10+- Windows CE: Implemented Clipboard support and implemented TScrollBox.
11+- 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.
12+- Gtk2: Application.OnActivate() / Application.OnDeactivate() now fires only once per event, not on each form activation/deactivation.
13+- Gtk2: Application.Minimize, Application.Restore implemented.
14+- Gtk2: Fixed unpleasant form moving when hidden and then shown again.
15+- GTK2 was separated from GTK1. The unit gtkint, gtkproc, gtkdef are no longer part of the gtk2 interface. Use unit gtk2int, gtk2proc, gtk2def instead.
16+- Qt: Application.Minimize, Application.Restore implemented.
17+- Qt: added Haiku support.
18+- TGetDesignerFormEvent parameter uses TPersistent instead of TComponent. Reason: support for TCollection and TCollectionItem. Effects only designers.
19+- fpGUI: All components on the Standard tab of the component palette are now working.
20+
21+## LCL Changes
22+
23+- Unit chart and its component TBarChart are deprecated, because there is now a much better component in the package TAChartLazarusPkg.
24+- OpenURL and OpenDocument, new functions in the LCLIntf unit.
25+- 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.
26+- 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.
27+- DisableAutoSizing/EnableAutoSizing now work for the whole form, greatly reducing overhead and flicker.
28+- ReAlign and AdjustSize now do the same - invalidating the bounds and triggering a new computation of the sizes.
29+- Nested controls now update properly. No need anymore to call ReAlign or Parent.AdjustSize.
30+- DisableAutoSizing/EnableAutoSizing now work even when changing the Parent of a control, reducing overhead and flicker when docking.
31+- TControl.DoAutoSize now resizes to preferred size. No need to do that in descendants. It also checks for dependencies.
32+- TControl.Align ordering of controls is now stable (resizing no longer reorders). There is one incompatibility. See [[Autosize / Layout|Order of Align]]
33+- TControl.AutoSizeCanStart is now deprecated and always true.
34+- 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.
35+- Added Gif reading support
36+- TLazIntfImage - New function AlphaBlend, which can alpha blend an intfimage into another, using a separate intfimage as the alpha channel.
37+- TTrackBar - New property Reversed which inverts appereance of TTrackBar.There's a lot of complains from developers about behaviour of TTrackBar when Orientation is vertical.In that case Min is at top and Max is at bottom of trackbar and that's not comfortable because we have to write additional code to invert trackbar appereance.Default value is FALSE which is Delphi compatibile (this property does not exist in Delphi), TRUE should revert appereance so Min is at bottom and Max is at top in case of vertical scrollbar and Min = Right, Max = Left in case of horizontal scrollbar.
38+
39+## IDE Changes
40+
41+- Support for FPC resources: You can now use {\$R *.lfm} instead of {\$i unit1.lrs}.
42+- Delphi converter has improved a lot. See [[Delphi Converter in Lazarus]]
43+- [[IDE Window: Compiler Options|Build modes]], [[IDE Window: Compiler Options|build macros]] and [[Macros and Conditionals|conditionals]] now allows different sets of compiler options for projects and packages.
44+- The option for the project target file name was moved to the [[IDE Window: Compiler Options|paths]] page under compiler options.
45+- 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.
46+- When opening a project the option to 'automatically open designer forms' now opens only the forms that were opened last time. The information is stored in the session.
47+- Various designer usability improvements:
48+ - arrow and tab keys switching between components
49+ - resize/move cancellation using ESC key
50+ - save/restore of the form window state (minimized/normal/maximized) in the project session
51+ - extended hints: show component TabStop,TabOrder in case of TWinControl, show new size/new position during components resize/reposition
52+ - skip snapping when Alt key is pressed
53+- Quick fix for **can't find unit**: search unit in packages and add requirement
54+- Object inspector improvements:
55+ - Draw *read only* properties using another color (gray by default)
56+ - New ImageIndex property editor
57+- Editor
58+ - Highlighting for diffs
59+ - Highlighting for bat and ini (thanks to vrode for porting from original SynEdit)
60+ - Folding for HTML, XML, LFM, Diff
61+ - Hiding (Folding) of comments in Pascal source.
62+ - Allow Multiple Source-Editor Windows
63+ - Allow several Views of the same Source
64+ - User-defined color-schemes. (Color-schemes can be exported, and made available in the list of existing schemes)
65+ - Identifier-completion pop-up is now resizeable
66+ - Optionally save tab history so that closing or moving a tab to another window results in the last used tab to be selected.
67+- Debugger / Editor
68+ - 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).
69+- 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.
70+- IDE now checks if lpi file changed on disk and asks if it should reopen the project.
71+- The IDE no longer saves the lpi/lps file on every build, but only if something changed.
72+- Project compiler options can now be saved as default for new projects (see [[IDE Window: Compiler Options|here]])
73+- 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 [[Lazarus Packages|here]]
74+- 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*.
75+- 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 [[IDE Window: Environment Options|here]].
76+- 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.
77+- IDEIntf:
78+ - Incompatibility: **PropEditUtils** unit is extracted from PropEdits. The function GetLookupRootForComponent was moved there.
79+ - Incompatibility: **TIComponentInterface** was removed. It only added another layer without any extra functionality. See here for remedies: [[Extending the IDE]].
80+- IDEIntf: TAbstractFormEditor.CreateComponent added boolean DisableAutoSize. If you pass true the form will flicker far less, but you have to call EnableAutoSizing afterwards.
81+- SrcEditorIntf:
82+ - Introduced TSourceEditorManagerInterface
83+ - Deprecated SourceEditorWindow, replaced by SourceEditorManagerIntf
84+ - Deprecated some methods on TSourceEditorWindowInterface, now available through TSourceEditorManagerInterface
85+- 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.
86+- You can now quickly switch between several versions / branches of packages by defining the preferred package file name for each dependency (see [[Lazarus Packages|here]])
87+- You can now use the IDE directive %H- to hide individual hints, notes and warnings. See [Hide hint via directive](http://wiki.lazarus.freepascal.org/IDE_directives#Hide_one_hint.2C_note_or_warning)
88+- The IDE can be made dockable. This is still experimental. Install either the package [[Anchor Docking|AnchorDockingDsgn]] or EasyDockMgrDsgn.
89+- Translations
90+ - Czech translation added
91+- New macros: MakeLib, Make, IDEBuildOptions. See here [[IDE Macros in paths and filenames|IDE Macros]]
92+- The ToDo list was moved to a separate package: components/todolist/todolistlaz.lpk. It is installed by default in the released binary packages.
93+
94+## Codetools
95+
96+- 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.
97+- Support for objcclass syntax. FPC has changed again the syntax. The support for this is in Lazarus 0.9.31. See [[FPC PasCocoa]].
98+- support for **strict private**, **strict protected**, **class sealed**, **class abstract**
99+- Block completion was improved to better know when it should not complete code and some more cases to complete blocks.
100+- Class completion: New option to disable adding a comment in front of the first method body. See [[IDE Window: Codetools Options|here]]
101+- Smarter auto indentation that mimics the indentation of surrounding code and/or an example file. See [[IDE Window: Codetools Options|here]].
102+- 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).
103+- Simple source macros are now parsed (macro on directive of fpc).
104+- Code completion: Read-Only properties are marked with a lock-icon.
105+
106+## Components
107+
108+- 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](http://aggpas.org/index.html). Package file: *components/aggpas/lazarus/aggpaslcl.lpk*. See the examples in *components/aggpas/lazarus/examples*.
109+- AnchorDocking - New packages to make your applications dockable. There is also a package named 'AnchorDockingDsgn' to make the IDE dockable. See [[Anchor Docking]]
110+- EducationLaz - New package to make the IDE easier to use for beginners, pupils and students. See [[Lazarus for education]].
111+
112+### TAChart
113+
114+- TAxisTransformations component allowing arbitrary axis transformations, in particular linear, logarithmic and auto-scaling
115+- Rotated (aka horizontal) line/bar/area series
116+- TChartAxis.Marks and .Source properties to control the style and placement of axis marks
117+- TChartToolset component with various tools for interactive usage:
118+ - drag-drop and automatic panning,
119+ - drag-drop, click and animated zooming,
120+ - generalized reticule,
121+ - drag-drop series editing
122+- Marks.OverlapPolicy property to allow hiding overlapping labels
123+- Stepped line series
124+- ChartSource.Sorted property
125+- Optimized drawing of line series without pointers and labels. Drawing speed is now comparable to "fast line series" of some other charting libraries
126+- Support for arbitrary label orientation (LabelFont.Orientation property)
127+- Axis.Group and Marks.AtDataOnly properties to support "segmented" axises (aka chart panes)
128+- TDateTimeIntervalChartSource component supporting date/time axis values
129+- TAreaSeries.AreaContourPen, .ZeroLevel and .UseZeroLevel properties
130+- TBarSeries.ZeroLevel and .BarWidthStyle properties
131+- TPieSeries.RotateLabels property
132+- TChart.Proportional property to enforce proportional zooming
133+- Multi-values variants for all chart source components
134+- Bubble series
135+- Box-and-whisker (aka box plot) series
136+- Stacked line, bar and area series
137+- Initial implementation of TCalculatedChartSource component, allowing percentage stacked series and sliding-window statistic calculation
138+- Initial implementation of TChartStyles component, allowing to draw stacked series with varying colors/styles
139+- Legend symbols for points and pie chart slices
140+- Multiple legend items for a single series
141+- User-drawn legend items
142+- TChartLegendPanel component to display legend separately from the chart
143+- Color map series
144+- TChartAxis.ZPosition property
145+- Automated unit testing
146+- 6 new demo projects
147+- Backwards-incompatible changes:
148+ - Built-in reticule is deprecated and will be removed in future versions. Use TReticuleTool instead.
149+ - TChartAxis.Offset and .Scale properties are removed. Use TAxisTransformation instead.
150+ - TLine series is now named TConstantLine
151+ - TChartTitle.Font property is now named LabelFont
152+ - TAreaSeries.Stairs and .InvertedStairs properties are removed. Use ConnectType property instead.
153+ - TChartLegend.Margin property is removed. Use MarginX and MarginY properties instead.
154+ - Series.ShowInLegend property is now named Legend.Visible
155+
156+## Debugging
157+
158+- Step out command implementation (by Flavio)
159+- Show execution point command
160+- Single Instruction step (over/into)
161+- UI Improvements: Toolbars for Watches, Breakpoints, Disassembler
162+- Watches: Enabled display formats (mem-dump, Hex, Default, ..)
163+- Disassembler added navigation: jump to address / return to execution point
164+- Improved reaction speed: It is possible to continue stepping without having to wait for all watches, locals, ... to be evaluated
165+
166+## Changes affecting compatibility
167+
168+### overriding TControl.SetBounds
169+
170+Any control overriding SetBounds and checking there if the bounds have changed since the last call will not notify all bounds changes. SetBounds is no longer called before a control is resized by the LCL layouter. SetBounds is called after the bounds were changed by the LCL autosize algorithm.
171+
172+- **Reason:**: It created an endless loops for valid code. SetBounds changes the BaseBounds needed by anchoring (e.g. akRight). Formerly the LCL disabled updating the basebounds before calling SetBounds. But if some user code reacts to the change and resizes the control the BaseBounds were not set too, triggering a further LCL anchoring calling SetBounds again with the same bounds and so on. There was a heuristic to spot some of those endless loops and stop them, but this never worked for all cases.
173+- **Remedy**: Override ChangeBounds, DoSetBounds or WMSize instead. This works for Lazarus 0.9.28 too.
174+
175+### TControl.Align order
176+
177+TControl.Align order of controls is now stable (resizing no longer reorders). There is one incompatibility. See [[Autosize / Layout|Order of Align]]
178+
179+### SourceEditorIntf
180+
181+SourceEditorIntf is for extensions to the IDE.
182+
183+SrcEditorIntf.SourceEditorWindow
184+This has been deprecated. (it will be entirely removed)
185+
186+- 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.
187+- 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.
188+
189+SrcEditorIntf.SourceEditorManagerIntf
190+This has been introduced as replacement.
191+
192+- It's lifespan covers the full IDE uptime.
193+- Some methods have simply be moved
194+- For other methods access to all of the SourceEditor-Window is given. Including a notification system, for creation/destruction of them
195+
196+### CGI
197+
198+The CGI package which was installed by default was now removed from the Lazarus source base. The package was obsolete and users are recommended to install and use the package fpWeb located at lazarus/components/fpweb/ instead.
199+
200+Upon upgrading the IDE may complain about the missing package. This can be corrected by going to the menu "Package"-\>"Install/Uninstall Packages". In the next dialog, select and remove the CGI packages. There should be no need to rebuild the IDE.
201+
202+(Note, to build CGI/FCGI/Apache module web server applications using fpweb(fcl-web), install the "weblaz" package. For additional fpweb extensions like ExtJS support, install the "lazwebextra" package too)
203+
204+### TNotebook and TPage
205+
206+The components TNotebook and TPage as currently implemented are deprecated and no longer installed in the IDE. The release 0.9.30 will offer some time for users to remove these components from their projects. We recommend that users use TPageControl instead. In 0.9.31 these components will be completely removed and a new implementation for them will be activated, which implements TNotebook as it should be: A custom-drawn untabbed container with multiple pages.
207+
208+### SynEdit.BeginUpdate / EndUpdate
209+
210+SynEdit does no longer attempt to paint while in a Begin/EndUpdate block. Older versions did attempt this, but would have occasionally crashed.
211+
212+The purpose of BeginUpdate is to speed-up applying changes, by telling SynEdit not to calculate internal structures in between those changes. Without those structures SynEdit can not paint reliable.
213+
214+Code like
215+
216+` SynEdit.BeginUpdate`\
217+` SynEdit.Text := s;`\
218+` Application.ProcessMessages; // attempt to repaint SynEdit`\
219+` ...`
220+
221+does no longer work.
222+
223+Remedy: remove the Begin/EndUpdate statements / or put the EndUpdate before the ProcessMessages
224+
225+## Other release notes
226+
227+---
228+*From the Free Pascal wiki, page "Lazarus 0.9.30 release notes", as it stood on 2015-07-20 after a change by FTurtle, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
229+Category: Lazarus
230+Category: Release Notes

Back to history