Afleveringen 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: 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). Lazarus heeft nu een labeltje op het form gezet. De naam van het Label is Label1 en het opschrift (Caption) is ook Label1. 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. – Zorg ervoor dat het Label in de form geselecteerd is. 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. We gaan nu eerst het project en de form opslaan. – Sluit het runnende project (rode kruis rechts boven frmKlokje). 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. Laten we eens kijken naar de broncode. Deze ziet er als volgt uit: unit Unit1; {$mode objfpc}{$H+} interface uses type { TfrmKlokje } TfrmKlokje = class(TForm) var implementation {$R *.lfm} end. Alle gereserveerde woorden (dat zijn de eigen commando’s van Lazarus/Delphi) zijn vet gedrukt. Een unit heeft altijd een vaste opbouw: Een interface-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. 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); end; De tekstcursor staat tussen begin en end te knipperen. 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. 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. Een Timer is een niet-visueel component. Dit betekent dat u de timer tijdens het runnen niet ziet. – Dubbelklik op de timer in het form (de event-handler tmrTijdTimer is aangemaakt). 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.“Alle begin is makkelijk…”
– Klik vervolgens met de muis ergens in het form.Properties
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‘.
– 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
Sluit altijd eerst het runnende project alvorens u verder gaat ontwikkelen!Bewaren
– Klik in het Hoofdscherm op de knop Alles opslaan (5e knop van links op de bovenste rij).
– 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
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
lblHallo: TLabel;
private
{ private declarations }
public
{ public declarations }
end;
frmKlokje: TfrmKlokje;
Commentaar is blauw van kleur en staat (meestal) tussen accolades.
Rode tekst geeft aan dat er zogenaamde resources moeten worden meegenomen.
Een implementation-sectie,
Eventueel een initialization-sectie en
Eventueel een finalization-sectie.
– Geef de property Caption de waarde OK en de property Name de waarde btnOK.
beginEvents/gebeurtenissen
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.
– 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.
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.
– Voeg de volgende regel code toe:
– lblTijd.Caption := FormatDateTime(‘hh:mm:ss’, Now); (wederom: Vergeet de punt-komma ; niet!)