Lazarus-Klokje-Start

Afleveringen

“Alle begin is makkelijk…”

We beginnen eenvoudig. Een digitaal klokje laten lopen. En dit is niet het moeilijkste maar uiteindelijk wel het belangrijkste, want we willen de tijd zien.

– Start Lazarus met een nieuw project met als type Applicatie.

Lazarus bestaat uit meerdere losse vensters:

  1. Hoofdscherm van Lazarus met het menu, snelknoppen en de tabs met componenten;
  2. De Object Inspector;
  3. Het (te ontwikkelen) venster met de naam Form1;
  4. Het scherm met de broncode van het schermen (straks de schermen);
  5. Het Berichten-scherm, waar Lazarus meldingen laat zien.

Als eerste gaan we een Label op het form Form1 zetten.

– Klik met de muis in de Standard tab op het component TLabel (4e component van links).
– Klik vervolgens met de muis ergens in het form.

Lazarus heeft nu een labeltje op het form gezet. De naam van het Label is Label1 en het opschrift (Caption) is ook Label1.

Properties

Ieder component heeft eigenschappen die in het Engels properties worden genoemd. Deze properties vindt u terug in de Object Inspector.

Alle componenten hebben de property Name. Per form moeten alle Name’s uniek zijn. Deze Name’s ziet u straks ook terug in de broncode. Het is dus belangrijk dat ieder component een zinvolle benaming krijgt.
Ik zelf handteer hierbij de conventie dat iedere Name begint met een prefix van 3 kleine letters dat het soort component aangeeft. Voor een Label is dat ‘lbl‘.

– Zorg ervoor dat het Label in de form geselecteerd is.
– Ga naar de Object Inspector.
– Zoek de property Name op en verander deze van Label1 in lblHallo.
– Verander hierna de property Caption van lblHallo in Hallo Wereld!.
– Klik ergens op de form, maar niet op het Label.
– Verander de Name van de form in frmKlokje. (Merk op dat de Caption van de form nu ook frmKlokje is, maar dat geeft op dit moment niet.)

Runnen

We gaan wat leven in dit project brengen.

– Klik in het Hoofdscherm op de snelknop Run (groen driehoekje naar rechts wijzend).

Lazarus bewerkt nu het project tot een uitvoerbaar programma. En als er geen fouten zijn geconstateerd zal het project worden uitgevoerd:

U kunt alles met dit scherm doen wat u gewend bent met Windows-vensters te doen, dus verplaatsen, vergroten, verkleinen, minimaliseren, maximaliseren en afsluiten.
Sluit altijd eerst het runnende project alvorens u verder gaat ontwikkelen!

Bewaren

We gaan nu eerst het project en de form opslaan.

– Sluit het runnende project (rode kruis rechts boven frmKlokje).
– Klik in het Hoofdscherm op de knop Alles opslaan (5e knop van links op de bovenste rij).

Lazarus wil eerst de naam van het project weten. Dit wordt ook de naam van het (uitvoerbare) programma.

– Kies in het scherm de juiste map.
– Geef klokje.lpi als projectnaam en klik daarna op Opslaan.
– Sla vervolgens het form op in dezelfde map (een form wordt als unit opgeslagen en ik laat de naam altijd ongewijzigd).

Code

Laten we eens kijken naar de broncode. Deze ziet er als volgt uit:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

{ TfrmKlokje }

TfrmKlokje = class(TForm)
lblHallo: TLabel;
private
{ private declarations }
public
{ public declarations }
end;

var
frmKlokje: TfrmKlokje;

implementation

{$R *.lfm}

end.

Alle gereserveerde woorden (dat zijn de eigen commando’s van Lazarus/Delphi) zijn vet gedrukt.
Commentaar is blauw van kleur en staat (meestal) tussen accolades.
Rode tekst geeft aan dat er zogenaamde resources moeten worden meegenomen.

Een unit heeft altijd een vaste opbouw:

Een interface-sectie,
Een implementation-sectie,
Eventueel een initialization-sectie en
Eventueel een finalization-sectie.

Een unit eindigt altijd met een end. (dus het woord end met een punt daarachter).

In de interface-sectie staat alles wat gedeeld mag/kan worden met de buitenwereld, bijvoorbeeld een ander form.

In de implementation-sectie staat de implementatie van wat er in de interface staat en geïmplementeerd moet worden en alles wat niet met de buitenwereld gedeeld mag worden.

Met de uses-clausule worden andere units aangeroepen. Een unit is dus een soort van bibliotheek geschikt voor hergebruik.

Door met Lazarus te werken zorgt Lazarus ervoor dat de juiste units geladen worden. Alleen heeft Lazarus geen weet van uw eigen units, dus deze zult u zelf moeten beheren.

Terug naar de broncode.

Deze bevat nog niet zoveel. Het enige wat er eigenlijk gebeurd is, is dat er een class is aangemaakt dat afstamt van de class TForm. TForm is niets anders dan alle functionaliteiten van een gewoon Windows-venster. Hieraan heeft u zelf een Label lblHallo toegevoegd en dat ziet u daaronder dan ook staan. Daaronder is een variabele frmKlokje gedeclareerd waarnaar u in andere forms kunt verwijzen (tevens gebruikt Lazarus deze variabele om bij uitvoer het scherm te kunnen maken).

Laten we het project iets gaan uitbreiden.

– Plaats een knop (tab Standard: 3e knop van links) op het form.
– Geef de property Caption de waarde OK en de property Name de waarde btnOK.

Kijk weer naar de code. U ziet dat boven het label lblHallo de button btnOK is toegevoegd.

De knop zal nu nog niets doen. De bedoeling is dat wanneer u bij uitvoer op de knop klikt het project wordt afgesloten.

– Dubbelklik op de form op de knop OK.

Het code-venster wordt nu actief en er is een stukje code aangemaakt:

procedure TfrmKlokje.btnOKClick(Sender: TObject);
begin

end;

De tekstcursor staat tussen begin en end te knipperen.

Events/gebeurtenissen

In Windows wordt alles wat u doet als een zogenaamde Event (gebeurtenis) aangeduid. En programmeren in Windows is eigenlijk niets anders dan bepaalde events af te vangen en daar wat mee te doen. Dit gebeurt in de zogenaamde event-handlers. Het stukje code dat Lazarus nu heeft gemaakt is zo’n event-handler en wel voor het event OnClick van de knop.
Dit ziet u terug in de naam van de event-handler: btnOKClick. Wat er voor de naam staat (TfrmKlokje.) betekent dat deze event-handler onderdeel is van de class TfrmKlokje.
In de code van deze event-handler kan ik impliciet gebruik maken van alle onderdelen van de class.

Het enige dat wij willen is dat de applicatie wordt gesloten als er op de knop wordt geklikt.

– Tik tussen begin en end de opdracht close; (vergeet de punt-komma ; niet!) in.

– Run het project en kijk of de knop werkt.

Merk op dat wanneer u het project opnieuw runt Lazarus de veranderingen automatisch opslaat.

Kijk ook nog even naar de code. In de class-definitie is nu ook de procedure btnOKClick opgenomen en ook niet meer dan dat. De class staat immers in de interface-sectie van de unit. De implementatie (close;) staat in de implementation-sectie.

Tot slot van deze aflevering gaan we het begin van het klokje maken.

– Klik in de form op het label lblHallo.
– Verander in de Object Inspector de Name van lblHallo in lblTijd.
– Verander de Caption in 00:00:00.
– Plaats het label lblTijd in de linker bovenhoek van het form (property Left en Top zijn 0; zie in de Object Inspector).
– Zet vanuit de tab System een Timer op het form (1e knop van links).
– Verander de Name van de Timer in tmrTijd.

Een Timer is een niet-visueel component. Dit betekent dat u de timer tijdens het runnen niet ziet.
De timer heeft twee belangrijke properties: Enabled (staat de timer aan-True of Uit-False) en Interval (hoe vaak ’tikt’ de timer – standaard 1000 ms ofwel 1 seconde). Tijdens iedere tik van de timer zal er een OnTimer-event optreden. En dit event kunnen we afvangen d.m.v. een event-handler.
De timer tmrTijd zal iedere seconde de tijd in het label lblTijd moeten bijwerken.

– Dubbelklik op de timer in het form (de event-handler tmrTijdTimer is aangemaakt).
– Voeg de volgende regel code toe:
lblTijd.Caption := FormatDateTime(‘hh:mm:ss’, Now); (wederom: Vergeet de punt-komma ; niet!)

Bij de uitvoer zal nu iedere seconde het label lblTijd via de Caption de tijd in het formaat uu:mm:ss laten zien.

Run het project en kijk naar uw klokje en geniet ervan.

Naar de volgende aflevering…