Howdy World (Hello World on steroids)
Template:newpage This Wiki chapter is a tutorial for Lazarus. It explains the first steps to get a working piece of software and explains some of the best practices along the way. The end result is twofold (hopefully): the reader understands the basic concepts to build software with Lazarus and she has an actual piece of working software that can be embedded in other programs: a calculator. A calculator is fairly easy to implement and everyone understands it’s concepts. So no need to describe a lengthy business case beforehand. The calculator is limited to integer calculations, but can easily be extended. This tutorial does not describe the installation process of Lazarus. It is assumed that Lazarus is installed and ready for use (preferably the latest, stable version which at the moment of writing is Lazarus 0.9.30 with Freepascal v2.4.2). This tutorial is more or less platform independent (but targeted at thick clients). All screenshots were made on a Windows XP PC; hence the blue/red/grayish color scheme.
Let’s get started
It’s best to create a separate directory for every new project. So before getting our feet wet, let’s create a directory to save our Calculator project in (do this with your OS application of choice). This directory will be the root for all files created for the project.
- Create a new directory for the demo project (let’s call it $HOME/CalculatorDemo).
(Text that describes actions that must be executed is bulleted like the previous line.)
With this out of the way it’s time to start a new Lazarus project.
- Start Lazarus.
- From the menu choose Project/New Project…
- In the dialog that is presented select Application and press OK (if the IDE complains about unsaved changes, press No).
To make sure that all files of our new project end up in the right directory the project must be saved first.
- From the menu choose File/Save All.
- Select the directory that was created previously ($HOME/CalculatorDemo).
- Enter a new project name: CalculatorDemo
- Press Save (or whatever is the Save button in your own language)
- The IDE wants to save the main form as well: enter ’’ufrmMain’’ as the forms unit name.
- The IDE asks if the filename should be changed to a lowercase name. Confirm this by pressing the button ‘Rename to lowercase’.
In theory the program that is thus created is a piece of valid software that can be executed. Before compiling it for the first time, two changes are recommended: assigning new locations (directories) for the compiled units and target filename.
- From the menu choose Project/Project Options…
- Select Compiler Options/Paths (click on the node in the treeview)
- Put the text ‘‘bin\’‘ before the target filename (or ‘‘bin/’‘ for a *nix environment)
- Also note the ‘‘lib’‘ prefix for the ‘unit output directory’ (don’t change it).
- Press OK
By doing this the project folder will not be cluttered with output that is generated by the compiler. The files in the project folder are required to (re-) build the program. Everything in the ’’lib’’ and ’’bin’’ directories can be deleted when archiving the project.
Now as a first test the project can be compiled and run.
- Press F9 (the shortcut for compile, build and run the program)
If all went well a blank window is displayed. Now we know that a solid basis is created on which we can start building the program.
- End the running program by clicking on the Close icon (this depends on the OS).
The first component
Lazarus has a so called ‘component palette’:
All components that are available to build a user interface are logically grouped on the component tabs. The actual number of tabs depends on the installed packages. But the basic palette looks something like the above image. The first tab is Standard, followed by Additional, Common Controls etc. To retrieve the type name of a component, hover with the mouse pointer above the component icon and a hint is displayed that gives the type name (to be more precise: the class type of the component is displayed). For an explanation of all controls look at this Lazarus introduction
The first thing that needs to be done for the Calculator program is to create a display area where the entered numbers are, well, displayed. For this a TEdit control is used.
# Note: the visual components are referred to as Controls. For now the difference between a 'component' and a 'control' is not that relevant.
To place a control on the form, the form must have the focus. Pressing F12 on the keyboard changes the focus from the form editor to the source code editor and vice versa.
- Press F12 once or twice to get the form window on top (see image below).
- Select the Standard tab on the component palette. This is the tab that is selected by default.
- Click on the TEdit component (hover above the component icons to get the class type names).
- Click somewhere in the middle of the form. This places a TEdit control on the form that has a name that is the same as the control’s type without the capital 'T' and with a number at the end (e.g. Edit1). When a second TEdit control were to be placed on the form it would be named Edit2. And so forth. This applies to all components.
Now that the control is placed on the form it can be customized to our needs. This customization takes place in the Object Inspector. That is the window at the left side of the screen with the list of properties for the TEdit control that are customizable.
Properties determine the look and feel and behavior of a control. It’s easy to change a property: just click on one of them, enter a new value and press Enter. The effects on the control are instantly visible. The properties in the Object Inspector are all the properties for one control. In particular the control that has the focus/is selected. The control that is selected can be recognized by the small black squares that surround the control. So the way to change properties of a control is by first selecting it and then make the changes in the Object Inspector. If no control is selected, the form properties are displayed.
Make the following changes to the properties of Edit1.
- change Name to edDisplay (@@: Hungarian).
- change Align to alTop (change Align, not Alignment!).
- change Alignment to alRightJustify (change Alignment, not Align).
- change BorderSpacing.Around to 6.
- change Text to 0 (the number zero, not the letter oh).
These properties are pretty self-explanatory. Especially when the above changes are made and the effect is monitored on the form.
As a finishing touch the Font that is used to display texts on all controls will be changed. The font can be changed in two places: the font property of edDisplay or the form’s font property. Changing the font for the form itself has the benefit that all newly placed controls on the form will 'inherit' the new font. So that is where we are going to make the change.
- Click somewhere in the middle of the form. This deselects the edDisplay control and selects the form itself. The form’s properties are now displayed in the Object Inspector.
- In the Object Inspector click on the Font property. The Font line is now highlighted and a button with three dots is displayed.
- Click on the button with the three dots. This opens the Font dialog.
- Select Verdana, Bold, Size 10.
- Press OK.
The Form’s title is not very meaningful. The default text 'Form1' is displayed.
- In the Object Inspector click on the Caption property.
- Change the caption text to Calculator Demo.
Now is a good time to save the form.
- Select from the menu File/Save or press the key combination Ctrl-S.
Remember to save and save often!
What use is a calculator if numbers cannot be entered? So the next step is adding buttons for the digits 0..9. Before placing the buttons for the digits, a so called container is placed on the form. A container defines an area on a form where controls can be grouped together. The form is a container. A TPanel is another container that can be placed on a form. Containers can be placed inside other containers, but that’s for another tutorial.
- On the component palette, select the TPanel control.
- Click on the form to place the panel.
A new panel is now visible on the form with a default width, height and caption. Note that the font for the panel caption is inherited from the form. This panel will be used to group all buttons, so a number of properties must be changed.
- Remove the text ‘Panel1’ from the caption property.
- Change Align to ‘‘alClient’‘.
- change Borderspacing.Around to ‘‘6 ‘‘.
- increase the form’s Width to ‘‘300 ‘‘ (first click on Form1 in the Object Inspector treeview).
- increase the form’s Height to ‘‘350 ‘‘.
(Increasing the size of the form gives us some space to move controls around.)