{"id":1123,"date":"2022-05-24T12:14:33","date_gmt":"2022-05-24T11:14:33","guid":{"rendered":"https:\/\/wiskunst.nl\/?page_id=1123"},"modified":"2022-10-17T14:29:15","modified_gmt":"2022-10-17T13:29:15","slug":"lazarus-klokje-alarm","status":"publish","type":"page","link":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-alarm\/","title":{"rendered":"Lazarus-Klokje-Alarm"},"content":{"rendered":"<p><strong><span class=\"collapseomatic \" id=\"id69dec2ee7c4dd\"  tabindex=\"0\" title=\"Afleveringen\"    >Afleveringen<\/span><div id=\"target-id69dec2ee7c4dd\" class=\"collapseomatic_content \"><\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-start\/\">Start<\/a><\/li>\n<li><a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-zonder-form\/\">Zonder form<\/a><\/li>\n<li><a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-zichtbaarheid-en-pop\/\">Zichtbaarheid en pop<\/a><\/li>\n<li><a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-opmaak\/\">Opmaak<\/a><\/li>\n<li><a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-instellingen-bewaren\/\">Instellingen bewaren<\/a><\/li>\n<li><a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-analoog\/\">Analoog<\/a><\/li>\n<li><a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-analoog-opmaak\/\">Analoog opmaak<\/a><\/li>\n<li><a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-nieuwe-vensters\/\">Nieuwe vensters<\/a><\/li>\n<li>Alarm<\/li>\n<li><a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-finale\/\">Finale<\/a> <\/div><\/li>\n<\/ul>\n<h2>We moeten nog een alarm mogelijkheid inbouwen.<\/h2>\n<p>En dat gaan we in deze aflevering doen.<\/p>\n<h4>Alarm instellingen<\/h4>\n<p>We gaan een alarm-settings-venster maken dat, met de kennis die u nu heeft, niet zo moeilijk zal zijn.<br \/>\nOm het alarm af te laten gaan moeten we ook weer een nieuw venster maken.<br \/>\nHet alarm zal afgaan op een bepaalde tijd en moet dan een geluid geven en en tekst op het scherm tonen.<br \/>\nWe zullen een aantal geluidjes gaan inbouwen. En daar zit de uitdaging!<\/p>\n<h4>Resources<\/h4>\n<p>In een (Windows) executable zit natuurlijk de code die uitgevoerd moet worden. Maar er zit ook data in, zoals de vensters. Deze worden tijdens het compilatie proces in de executable gelinkt. Nu is het ook mogelijk om andere soorten data mee te linken, zoals afbeeldingen, teksten en ook geluiden. Deze &#8220;dingen&#8221; worden <em>resources<\/em> genoemd.<br \/>\nEn u heeft al (2x) resources meegelinkt! In een <em>ImageList<\/em> zitten immers afbeeldingen en die worden als <em>resources<\/em> meegelinkt in de executable.<br \/>\nHelaas is er geen control om geluiden te linken, dus moeten we dit zelf gaan doen. En ook helaas, is hier geen standaard voor. In iedere programmeer-omgeving werkt dit weer anders.<\/p>\n<p>Kijk voor meer informatie over resources op <a href=\"http:\/\/www.wiskunst.nl\" target=\"_blank\" rel=\"noopener\">www.wiskunst.nl<\/a>: Wiskunst&#8211;&gt;Delphi&#8211;&gt;Resources.<\/p>\n<p>Wanneer u afbeeldingen, zonder gebruik te maken van een <em>ImageList<\/em>, wilt meelinken, dan kan dat via het menu <em>Project&#8211;&gt;Project Opties&#8230;&#8211;&gt;Resources<\/em>. Maar helaas kan dat dus niet voor geluiden. Dit moeten we buiten de ontwikkelomgeving om doen. Gelukkig biedt Lazarus wel een tooltje waarmee we het tocht voor elkaar kunnen krijgen.<\/p>\n<h4>Lazres<\/h4>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Maak even een aparte map <strong><em>sounds<\/em> <\/strong>aan waarin u een 10-tal sounds van het type <em>WAV<\/em> neerzet (deze kunt u bv. halen uit <em>c:\\Windows\\Media<\/em>). Zorg ervoor dat de namen niet te lang zijn; hernoem ze eventueel.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Zet in de map ook <em>lazres.exe<\/em>, die u kunt vinden in de map waar Lazarus zelf is ge\u00efnstalleerd, onder de map <em>tools<\/em>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Maak, bv. in het kladblok, de batch <em>maak_lrs.bat<\/em> aan met de volgende regel:<\/span><br \/>\n<span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\"> &#8211; lazres sounds.lrs alarm01.wav alarm02.wav alarm03.wav alarm04.wav alarm05.wav alarm06.wav alarm07.wav alarm08.wav alarm09.wav alarm10.wav<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; (<strong>DENK ERAAN DAT HET <span style=\"text-decoration: underline;\">\u00c9\u00c9N<\/span> REGEL MOET ZIJN, DUS ZONDER HARDE REGELEINDES!!!<\/strong>)<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; (<em>alarm01.wav<\/em> t\/m <em>alarm10.wav<\/em> zijn de namen van de soundjes die ik uit <em>Windows\\Media<\/em> heb gekopieerd)<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Bewaar het bestand en voer het daarna uit.<\/span><\/p>\n<p>In de map sounds staat nu ook het bestand <em>sounds.lrs<\/em>. Dit is het resource-bestand dat we straks gaan gebruiken.<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Kopieer dit bestand naar de map waar u al uw <em>units*.pas<\/em> heeft staan.<\/span><\/p>\n<p>We gaan nu het volgende <em>Form<\/em> toevoegen:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1640 size-full\" src=\"https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_32.jpg\" alt=\"\" width=\"280\" height=\"256\" \/><\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Voeg een nieuwe <em>Form<\/em> toe aan het klokje en zet de volgende properties:<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"><em> &#8211; Name<\/em> = <strong><em>frmAlarmSettings<\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; BorderStyle = bsDialog<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"><em> &#8211; Position<\/em> = <em><strong>poScreenCenter<\/strong><\/em><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Plaats een <em>Label<\/em> met <em>Caption<\/em> = <strong><em>Choose alarm<\/em><\/strong>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Plaats een <em>Listbox<\/em> met <em>Name<\/em> = <strong><em>lstAlarm<\/em><\/strong>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Plaats een <em>Button<\/em> met <em>Name<\/em> = <strong><em>btnOtherAlarm<\/em> <\/strong>en <em>Caption<\/em> = <strong><em>Other alarm<\/em><\/strong>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Plaat een <em>Label<\/em> met <em>Name<\/em> = <strong><em>lblAlarm<\/em><\/strong>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Plaat een <em>Label<\/em> met <em>Caption<\/em> = <strong><em>Set alarm time<\/em><\/strong>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Plaats een <em>DateTimePicker<\/em> (laatste knopje op tab <em>Common Controls<\/em>) en zet de volgende properties:<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"><em> &#8211; Name<\/em> =\u00a0<strong><em>dtpAlarmTijd<\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"><em> &#8211; Kind<\/em> = <strong><em>dtkTime<\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Plaats een <em>Checkbox<\/em> met <em>Name<\/em> = <em>chkFixedTime<\/em> en <em>Caption<\/em> = <strong><em>Fixed<\/em><\/strong>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Plaats een <em>Label<\/em> met <em>Caption<\/em> = <strong><em>Enter alarm text<\/em><\/strong>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Plaats een <em>Editbox<\/em> met <em>Name<\/em> = <strong><em>edtAlarm<\/em> <\/strong>en <em>Text<\/em> = <strong><em>Wake up!!!<\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Plaats een <em>Button<\/em> met <em>Name<\/em> = <strong><em>btnOK<\/em><\/strong>, <em>Caption<\/em> = <strong><em>OK<\/em> <\/strong>en <em>Width<\/em> = <strong><em>60<\/em><\/strong>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Plaats een <em>Button<\/em> met <em>Name<\/em> = <strong><em>btnCancel<\/em><\/strong>, <em>Caption<\/em> = <strong><em>Cancel<\/em> <\/strong>en <em>Width<\/em> = <strong><em>60<\/em><\/strong>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Implementeer <em>btnCancelClick<\/em> met de code:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 close;<\/span><\/em><\/strong><\/span><\/p>\n<p>Even een menuoptie toevoegen zodat we bij ons <em>Form<\/em> kunnen komen.<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Ga naar <em>frmKlokje<\/em>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg in <em>popMenu<\/em> na het item <em>Font<\/em> het item <strong><em>Open alarm settings<\/em><\/strong> met <em>Name<\/em> = <strong><em>popAlarmSetting<\/em><\/strong>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg in de <em>Uses<\/em>-clausule in het interface-gedeelte de unit <strong><em>Unit4<\/em> <\/strong>toe.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Activeer het <em>popAlarmSettingsClick<\/em>-event en voeg de volgende regel code toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 frmAlarmSettings.ShowModal;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Run het klokje (Bewaar <em>Unit4<\/em>&#8230;) en kijk of het nieuwe venster (te sluiten met <em>Cancel<\/em>) er een beetje uitziet.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Sluit het klokje.<\/span><\/p>\n<p>Als eerste gaan we onze <em>lstAlarm<\/em> vullen. Dat doen we in het <em>FormActivate<\/em>-event. Hierna maken we een begin met het <em>Click<\/em>-event van <em>lstAlarm<\/em>.<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Activeer het <em>FormActivate<\/em>-event.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg de volgende variabele toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 var<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 i: integer;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg na <em>begin<\/em> de volgende regels code toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 lblAlarm.Caption := &#8216;Alarm01&#8217;;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 lstAlarm.Clear;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 for i := 1 to 10 do<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 if i &lt; 10 then<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 lstAlarm.Items.Add(&#8216;Alarm0&#8217; + IntToStr(i))<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 else<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 lstAlarm.Items.Add(&#8216;Alarm10&#8217;);<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 lstAlarm.ItemIndex := 0;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Activeer het <em>lstAlarmClick<\/em>-event.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg de volgende regel code toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 lblAlarm.Caption := lstAlarm.Items[lstAlarm.ItemIndex];<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Run het klokje en kijk of e.e.a. werkt.<\/span><\/p>\n<p>Wanneer de gebruiker geen gebruik wenst te maken van de ingebouwde geluidjes, dan moet hij\/zij de mogelijkheid hebben om een eigen geluidje te laden. Dat doen we middels de knop <em>Other alarm<\/em>.<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Zet op het <em>Form<\/em> een <em>OpenDialog<\/em>-control neer met <em>Name<\/em> = <strong><em>dlgOpenFile<\/em><\/strong>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Activeer het event <em>btnOtherAlarmClick<\/em>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg de volgende code toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 dlgOpenFile.Filter := &#8216;WAV|*.WAV&#8217;;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 if dlgOpenFile.Execute then<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 begin<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 lstAlarm.ItemIndex := -1;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 lblAlarm.Caption := dlgOpenFile.FileName;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 end;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Run het klokje en kies dan een ander geluidje.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Sluit de klok weer.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1641 size-full\" src=\"https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_33.jpg\" alt=\"\" width=\"280\" height=\"256\" \/><\/p>\n<p>Nu komen we bij echte nieuwe zaken.<br \/>\nWe gaan de knop <em>Play alarm<\/em> implementeren. Hiervoor is het nodig dat we de resources met de geluidjes gaan <em>meelinken<\/em> en dat we een mogelijkheid krijgen om de meegelinkte geluidjes te kunnen afspelen.<\/p>\n<h4>Resources linken en geluidjes spelen<\/h4>\n<p>Om de resource-file mee te linken moet deze via een zogenaamde <em>compiler-optie<\/em> worden meegenomen. Dit gebeurt in de <em>initialization<\/em>-sectie van de <em>unit<\/em>.<br \/>\nVervolgens moeten we kunnen verwijzen naar zo&#8217;n gelinkt geluidje. Daarvoor hebben we de method <em>LazarusResources.Find<\/em> nodig die in de unit <em>LResources<\/em> zit.<br \/>\nTen slotte gebeurt het afspelen met de method <em>PlaySound<\/em> die in de unit <em>MMSystem<\/em> zit.<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Ga in de code (van <em>Unit4<\/em>) op de regel voor <em>end.<\/em> staan.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Tik de volgende regels in:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 initialization<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 {$I sounds.lrs}<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg in het <em>implementation<\/em> onder <span style=\"color: #ff0000;\"><em>{$R *.lfm}<\/em><\/span> de volgende regels toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 Uses<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 Unit1, LResources, MMSystem;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Activeer het <em>btnPlayClick<\/em>-event.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg de volgende variabele toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 var<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 s: AnsiString;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg de volgende regels code toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 s := LazarusResources.Find(lstAlarm.Items[lstAlarm.ItemIndex]).Value;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 if s &lt;&gt; &#8221; then<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 PlaySound(@s[1], 0, SND_ASYNC or SND_MEMORY);<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Run het klokje, selecteer een paar keer een sound en klik op <em>Play sound<\/em>.<\/span><\/p>\n<p>Het werk! Maar we zijn er nog lang niet. Uiteindelijk moet ook tijdens het afgaan van het alarm het geluid klinken. Daarom moeten we de code van <em>btnPlayClick<\/em> generiek gaan maken in een aparte <em>function<\/em>. Tevens moet het alarm blijven klinken totdat de gebruiker het alarm afzet. Voor dit afzetten moeten we ook een aparte <em>function<\/em> maken. Dit gaan we allemaal in <em>Unit4<\/em> doen.<\/p>\n<p>Nog even wat uitleg over de code.<br \/>\nMet <em>LazarusResources.Find<\/em> wordt er gekeken in de gelinkte resources of de opgegeven resource-naam bestaat. Zo ja dan wordt er een <em>pointer<\/em> naar gezet. De <em>.Value<\/em> zorgt ervoor dat alleen de naam van de resource wordt teruggegeven.<br \/>\nDeze naam komt in een variabele van het type <em>AnsiString<\/em> te staan. Dit is een type string met &#8220;oneindige&#8221; lengte (voor de kenners: zit in het <em>heap<\/em>-geheugen). De variabele levert een <em>pointer<\/em>, een geheugenadres, op. In <em>PlaySound<\/em> wordt er d.m.v. de <em>@<\/em> naar dat adres verwezen. De derde parameter van <em>PlaySound<\/em> geeft aan wat voor soort geluid het is en hoe het moet worden gespeeld. <em>SND_ASYNC<\/em> betekent dat tijdens het afspelen het programma gewoon verder moet werken. <em>SND_MEMORY<\/em> betekent dat het geluid in het geheugen staat.<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Zet in het <em>interface<\/em>-gedeelte na de <em>class<\/em>-definitie en voor de <em>var<\/em> de volgende regels neer:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 function PlayAlarm(AlarmNaam: String): Boolean;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 function StopAlarm: Boolean;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Implementeer beide functies in het <em>implementation<\/em> gedeelte na de <em>Uses<\/em>-clausule als volgt:<\/span><\/p>\n<p><span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">&#8211; \u00a0 function PlayAlarm(AlarmNaam: String): Boolean;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 var<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 s: AnsiString;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 begin<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 Result := True;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 if AlarmNaam = &#8221; then<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 Result := False;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 try<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 s := LazarusResources.Find(AlarmNaam).Value;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 if s &lt;&gt; &#8221; then<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 PlaySound(@s[1], 0, Snd_Async or Snd_Memory or Snd_Loop)<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 else<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Result := False;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 except<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 Result := False;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 end;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 end;<\/span><\/em><\/strong><\/span><\/p>\n<p><span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">&#8211; \u00a0 function StopAlarm: Boolean;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 begin<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 Result := True;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 try<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 PlaySound(nil, 0 ,0);<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 except<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 Result := False;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 end;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 end;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Haal de variabele (inclusief <em>var<\/em>) weg bij <em>btnPlayClick<\/em>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Vervang de code van <em>btnPlayClick<\/em> als volgt:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 if btnPlay.Caption = &#8216;Play alarm&#8217; then<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 begin<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 btnPlay.Caption := &#8216;Stop alarm&#8217;;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 lstAlarm.Enabled := False;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 if not PlayAlarm(lstAlarm.Items[lstAlarm.ItemIndex]) then\u00a0<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 begin<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ShowMessage(&#8216;Alarm niet gevonden&#8217;);<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 btnPlay.Caption := &#8216;Play alarm&#8217;;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 lstAlarm.Enabled := True;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 end;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 end<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 else<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 begin<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 btnPlay.Caption := &#8216;Play alarm&#8217;;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 lstAlarm.Enabled := True;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 StopAlarm;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 end;<\/span><\/em><\/strong><\/span><\/p>\n<p><strong><span style=\"font-family: helvetica, arial, sans-serif;\"><span style=\"text-decoration: underline;\">Opmerking<\/span>: Wanneer u in Lazarus <em>try<\/em> klikt en naar de volgende regel entert, dan er komt automatisch <em>finally-end;<\/em> te staan. Vervang dus <em>finally<\/em> door <em>except<\/em>.<\/span><\/strong><\/p>\n<p>Omdat ook een extern geluid moet kunnen worden afgespeeld en omdat <em>PlaySound<\/em> ook vanuit <em>frmKlokje<\/em> moet werken hebben we een globale variabele nodig binnen <em>Unit4<\/em> en later ook nog een globale variabele in <em>frmKlokje<\/em>.<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Declareer in het <em>implementation<\/em>-gedeelte (van <em>Unit4<\/em>) na de <em>Uses<\/em>-clausule de volgende variabele:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 var<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 SoundNameTmp: String;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg, als laatste regel, de volgende code toe aan <em>lstAlarmClick<\/em>:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 SoundNameTmp := lblAlarm.Caption;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg als laatste regel in het <em>begin-end;<\/em>-blok van <em>btnOtherAlarmClick<\/em> de volgende code toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 SoundNameTmp := &#8216;FILE:&#8217; + lblAlarm.Caption;<\/span><\/em><\/strong><\/span><\/p>\n<p>Met de toevoeging &#8216;<em>FILE:<\/em>&#8216; geven we aan dat de <em>SoundName<\/em> een extern bestand is. Bij <em>PlaySound<\/em> moeten we hier dan op gaan testen.<\/p>\n<p><span style=\"font-size: 12pt;\"><span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Vervang (pas aan\/voeg toe) de code in <em>PlayAlarm<\/em> tussen <em>try<\/em> en <em>except<\/em> door onderstaande code:<\/span><\/span><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 if LeftStr(UpperCase(AlarmNaam),5) = &#8216;FILE:&#8217; then<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 begin<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 PlaySound(PChar(Copy(AlarmNaam,6,Length(AlarmNaam))), 0,Snd_Async or Snd_FileName or Snd_NoDefault or Snd_Loop)<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 end<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 else<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 begin<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 s := LazarusResources.Find(AlarmNaam).Value;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 if s &lt;&gt; &#8221; then<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 PlaySound(@s[1], 0, Snd_Async or Snd_Memory or Snd_Loop)<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 else<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 Result := False;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 end;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-size: 12pt; font-family: terminal, monaco, monospace;\"> &#8211; Vervang in <em>btnPlayClick<\/em> de regel<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 if not PlayAlarm(lstAlarm.Items[lstAlarm.ItemIndex]) then<\/span><\/em><\/span><br \/>\n<span style=\"font-size: 12pt; font-family: terminal, monaco, monospace;\"> &#8211; door:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 if not PlayAlarm(SoundNameTmp) then<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-size: 12pt; font-family: terminal, monaco, monospace;\"> &#8211; Voeg in <em>FormActivate<\/em> de volgende regel toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 SoundNameTmp := &#8216;Alarm01&#8217;;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-size: 12pt; font-family: terminal, monaco, monospace;\"> &#8211; Run het klokje en experimenteer met de geluidjes (ook extern!).<\/span><\/p>\n<p>De geluidjes werken. We gaan verder met het alarm.<\/p>\n<h4>Het alarm gaat af<\/h4>\n<p>Het alarm moet afgaan op de tijd die gezet wordt in <em>dtpAlarmTijd<\/em>. Dan moet het geluid klinken en de alarm tekst getoond worden. We hebben dus een aantal globale variabelen nodig die dit gaan regelen. In <em>frmKlokje<\/em> moeten we in het <em>Timer<\/em>-event nu ook gaan kijken of er een alarm moet afgaan. Laten we maar eens beginnen.<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Maak de code van <em>frmKlokje<\/em> (<em>Unit1<\/em>) actief.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg de volgende globale variabelen toe in het <em>interface<\/em>-gedeelte (na <em>FaceIndex: integer;<\/em>):<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 SoundName: String;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 AlarmAan: Boolean;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 AlarmTijd: TDateTime;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 AlarmTekst: String;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 AlarmFixed: Boolean;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg op het eind aan <em>tmrTijdTimer<\/em> de volgende code toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 if AlarmAan then<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 if Time &gt; AlarmTijd then<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 begin<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 AlarmAan := False;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 ShowMessage(AlarmTekst);<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 end;<\/span><\/em><\/strong><\/span><\/p>\n<p>Nu moeten de globale variabelen in <em>frmAlarmSettings<\/em> nog de juiste waardes krijgen. Dit gebeurt in het <em>btnOK<\/em>-event.<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Activeer <em>btnOkClick<\/em> en voeg de volgende regels code toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 SoundName := SoundNameTmp;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 AlarmAan := chkAlarmOn.Checked;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 AlarmTijd := dtpAlarmTijd.Time;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 AlarmTekst := edtAlarmText.Text;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 AlarmFixed := chkFixedTime.Checked;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 close;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Run de klok, zet de alarmtijd op een half minuutje later dan nu en klik <em>Alarm on<\/em> aan.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Klik hierna op de knop <em>OK<\/em> en wacht tot de tijd verstreken is.<\/span><\/p>\n<p>Als het goed is krijgt u op de ingestelde tijd de tekst te zien:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1643 size-full\" src=\"https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_34.jpg\" alt=\"\" width=\"376\" height=\"125\" srcset=\"https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_34.jpg 376w, https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_34-300x100.jpg 300w\" sizes=\"auto, (max-width: 376px) 100vw, 376px\" \/><\/p>\n<p>We moeten nog een paar zaken regelen.<br \/>\nDe <em>MessageBox<\/em> moet worden vervangen door een eigen venster dat ook het geluid afspeelt.<br \/>\nBij het openen van de settings is het handig dat de tijd alvast in de nabije toekomst staat, bijvoorbeeld een (afgerond) half uur later dan dat het nu is.<br \/>\nAlle nieuwe globale variabelen moeten nog in het cfg-bestand worden opgenomen.<br \/>\nDe checkbox <em>Fixed<\/em> moet nog worden ge\u00efmplementeerd.<\/p>\n<h4>Alarm-box<\/h4>\n<p>We beginnen met een eigen <em>Form<\/em> voor het alarm en we maken er iets &#8220;aparts&#8221; van:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1644 size-full\" src=\"https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_35.jpg\" alt=\"\" width=\"324\" height=\"249\" srcset=\"https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_35.jpg 324w, https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_35-300x231.jpg 300w\" sizes=\"auto, (max-width: 324px) 100vw, 324px\" \/><\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Maak een nieuw <em>Form<\/em>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Zet de volgende properties:<\/span><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; BorderStyle = <strong>bsDialog<\/strong><\/span><\/em><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Color = <strong>clYellow<\/strong><\/span><\/em><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; FormStyle = <strong>fsSystemStayOnTop<\/strong><\/span><\/em><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Name = <strong>frmAlarm<\/strong><\/span><\/em><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Position = <strong>poScreenCenter<\/strong><\/span><\/em><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Plaats een <em>Label<\/em> op het <em>Form<\/em>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Zet de volgende properties:<\/span><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Alignment = <strong>taCenter<\/strong><\/span><\/em><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; AutoSize = <strong>False<\/strong><\/span><\/em><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Font.Color = <strong>clBlue<\/strong><\/span><\/em><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Font.Style = <strong>[fsBold]<\/strong><\/span><\/em><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Layout = <strong>tlCenter<\/strong><\/span><\/em><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Zet twee <em>Labels<\/em> op het <em>Form<\/em>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Zet de volgende properties:<\/span><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Alignment = <strong>taCenter<\/strong><\/span><\/em><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; AutoSize = <strong>False<\/strong><\/span><\/em><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Caption = <strong>Snooze<\/strong> <\/span><\/em><span style=\"font-family: terminal, monaco, monospace;\">(en)<\/span><strong><em><span style=\"font-family: terminal, monaco, monospace;\"> OK<\/span><\/em><\/strong><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Font.Style = <strong>[fsBold]<\/strong><\/span><\/em><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Layout = <strong>tlCenter<\/strong><\/span><\/em><br \/>\n<em><span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Name = <strong>lblSnooze <\/strong><\/span><\/em><span style=\"font-family: terminal, monaco, monospace;\">(en)<\/span><strong><em><span style=\"font-family: terminal, monaco, monospace;\"> lblOK<\/span><\/em><\/strong><\/p>\n<p>Bij het starten van dit <em>Form<\/em> moet de tekst worden getoond en het geluid worden gespeeld. Als er op <em>OK<\/em> wordt geklikt moet het scherm weer weg en moet het geluid stoppen.<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Zet in het <em>implementation<\/em>-gedeelte onder <em><span style=\"color: #ff0000;\">{$R *.lfm}<\/span><\/em> de volgende code neer:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 Uses<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 Unit4, Unit1;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Activeer het <em>FromActivate<\/em>-event.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg de volgende regels code toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 lblAlarmText.Caption := AlarmTekst;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 PlayAlarm(SoundName);<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Activeer het <em>FromClose<\/em>-event.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg de volgende regel code toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 StopAlarm;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Activeer het <em>lblOKClick<\/em>-event.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg de volgende regel code toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 close;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Ga naar de code van <em>frmKlokje<\/em> (<em>Unit1<\/em>).<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg <em>Unit5<\/em> toe aan de <em>Uses<\/em>-clausule in het <em>interface<\/em>-gedeelte.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Ga naar <em>tmrTijdTimer<\/em>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Vervang <span style=\"font-size: 10pt;\"><em><span style=\"font-family: 'courier new', courier, monospace;\">ShowMessage(AlarmTekst)<\/span><\/em><\/span> door:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 frmAlarm.ShowModel;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Run de klok (bewaar <em>Unit5<\/em>), zet het alarm en wacht af.<\/span><\/p>\n<p>Als het goed is, is het alarm afgegaan:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1645 size-full\" src=\"https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_36.jpg\" alt=\"\" width=\"324\" height=\"249\" srcset=\"https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_36.jpg 324w, https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_36-300x231.jpg 300w\" sizes=\"auto, (max-width: 324px) 100vw, 324px\" \/><\/p>\n<p>De knop <em>Snooze<\/em> gaan we in de laatste aflevering implementeren.<\/p>\n<h4>Afronden van de tijd<\/h4>\n<p>We gaan de <em>dtpAlarmTijd<\/em> bij het openen van de settings op een tijd zetten in de buurt van de huidige tijd. Dit mag alleen als het alarm niet geactiveerd is.<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Ga naar de code van <em>frmAlarmSettings<\/em> (<em>Unit4<\/em>).<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Ga naar <em>FormActivate<\/em>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg de volgende variabelen toe:<\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 u,m,s,ms: Word;<\/span><\/em><\/strong><\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Voeg de volgende code toe aan het eind, dus voor <em>end;<\/em><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 if not AlarmAan then<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 begin<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 DecodeTime(Now,u,m,s,ms);<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 ms := 0;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 s := 0;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 if m &gt;= 30 then<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 begin<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 u := u + 1;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 m := 0;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 end<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 else<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 \u00a0 m := 30;<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 \u00a0 dtpAlarmTijd.Time := EncodeTime(u,m,s,ms);<\/span><\/em><\/strong><\/span><br \/>\n&#8211; <span style=\"font-size: 10pt;\"><strong><em><span style=\"font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 end;<\/span><\/em><\/strong><\/span><\/p>\n<p>Als nu de settings actief worden en het alarm is niet gezet dan wordt <em>dtpAlarmTijd<\/em> gezet op het eerste halve uur na nu.<\/p>\n<p>Voor de netheid:<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Zet in de <em>Object Inspector<\/em> de <em>property<\/em> <em>Time<\/em> van <em>dtpAlarmTijd<\/em> op <strong><em>12:00:00<\/em><\/strong>.<\/span><br \/>\n<span style=\"font-family: terminal, monaco, monospace;\"> &#8211; Run de klok en open de settings.<\/span><\/p>\n<p>De checkbox <em>chkFixedTime<\/em> moet nog worden ge\u00efmplementeerd. Wanneer deze aangevinkt is dan mag de tijd in <em>dtpAlarmTijd<\/em> niet worden veranderd. Dit gebruikt u als u elke dag op dezelfde tijd het alarm wilt laten afgaan.<\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Pas in de <em>FormActivate<\/em> van <em>frmAlarmSettings<\/em> de regel <span style=\"font-size: 10pt;\"><em><span style=\"font-family: 'courier new', courier, monospace;\">if not AlarmAan then<\/span><\/em><\/span> als volgt aan:<\/span><br \/>\n&#8211; <span style=\"font-family: 'courier new', courier, monospace; font-size: 10pt;\"><strong><em>\u00a0 if not AlarmAan <span style=\"text-decoration: underline;\">and not AlarmFixed<\/span> then<\/em><\/strong><\/span><\/p>\n<p>Ten slotte moet u er nog voor zorgen dat alle nieuwe globale variabelen worden verwerkt in\/uit het cfg-bestand. Maak daartoe de sectie <strong><em>[ALARM]<\/em><\/strong> als volgt:<\/p>\n<p><em>[ALARM]<\/em><br \/>\n<em> Sound=Alarm01.wav<\/em><br \/>\n<em> Text=Wake up!<\/em><br \/>\n<em> Time=12:00:00<\/em><br \/>\n<em> Fixed=0<\/em><br \/>\n<em> On=0<\/em><\/p>\n<p><span style=\"font-family: terminal, monaco, monospace;\">&#8211; Breid <em>SchrijfIni<\/em> en <em>LeesIni<\/em> uit.<\/span><\/p>\n<p>Zo, dit was heel wat werk, maar we zijn nu bijna klaar. In de laatste aflevering gaan we de puntjes op de i zetten en zal de volledige code van alle Forms worden gegeven.<\/p>\n<p><a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-finale\/\">Naar de volgende aflevering&#8230;<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>We moeten nog een alarm mogelijkheid inbouwen. En dat gaan we in deze aflevering doen. Alarm instellingen We gaan een alarm-settings-venster maken dat, met de kennis die u nu heeft, niet zo moeilijk zal zijn. Om het alarm af te laten gaan moeten we ook weer een nieuw venster maken. Het alarm zal afgaan op [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1121,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/template-full-width.php","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"class_list":["post-1123","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Lazarus-Klokje-Alarm - Wiskunst<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-alarm\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lazarus-Klokje-Alarm - Wiskunst\" \/>\n<meta property=\"og:description\" content=\"We moeten nog een alarm mogelijkheid inbouwen. En dat gaan we in deze aflevering doen. Alarm instellingen We gaan een alarm-settings-venster maken dat, met de kennis die u nu heeft, niet zo moeilijk zal zijn. Om het alarm af te laten gaan moeten we ook weer een nieuw venster maken. Het alarm zal afgaan op [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-alarm\/\" \/>\n<meta property=\"og:site_name\" content=\"Wiskunst\" \/>\n<meta property=\"article:modified_time\" content=\"2022-10-17T13:29:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_32.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"13 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/delphi-lazarus\\\/lazarus-klokje-intro\\\/lazarus-klokje-alarm\\\/\",\"url\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/delphi-lazarus\\\/lazarus-klokje-intro\\\/lazarus-klokje-alarm\\\/\",\"name\":\"Lazarus-Klokje-Alarm - Wiskunst\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/delphi-lazarus\\\/lazarus-klokje-intro\\\/lazarus-klokje-alarm\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/delphi-lazarus\\\/lazarus-klokje-intro\\\/lazarus-klokje-alarm\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wiskunst.nl\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/Lazarus-Klokje_32.jpg\",\"datePublished\":\"2022-05-24T11:14:33+00:00\",\"dateModified\":\"2022-10-17T13:29:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/delphi-lazarus\\\/lazarus-klokje-intro\\\/lazarus-klokje-alarm\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/delphi-lazarus\\\/lazarus-klokje-intro\\\/lazarus-klokje-alarm\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/delphi-lazarus\\\/lazarus-klokje-intro\\\/lazarus-klokje-alarm\\\/#primaryimage\",\"url\":\"https:\\\/\\\/wiskunst.nl\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/Lazarus-Klokje_32.jpg\",\"contentUrl\":\"https:\\\/\\\/wiskunst.nl\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/Lazarus-Klokje_32.jpg\",\"width\":280,\"height\":256},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/delphi-lazarus\\\/lazarus-klokje-intro\\\/lazarus-klokje-alarm\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wiskunst.nl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programmeren\",\"item\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Delphi\\\/Lazarus\",\"item\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/delphi-lazarus\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Lazarus-Klokje-Intro\",\"item\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/delphi-lazarus\\\/lazarus-klokje-intro\\\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"Lazarus-Klokje-Alarm\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/#website\",\"url\":\"https:\\\/\\\/wiskunst.nl\\\/\",\"name\":\"Wiskunst\",\"description\":\"2\u221e\u2227&gt;\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wiskunst.nl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Lazarus-Klokje-Alarm - Wiskunst","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-alarm\/","og_locale":"nl_NL","og_type":"article","og_title":"Lazarus-Klokje-Alarm - Wiskunst","og_description":"We moeten nog een alarm mogelijkheid inbouwen. En dat gaan we in deze aflevering doen. Alarm instellingen We gaan een alarm-settings-venster maken dat, met de kennis die u nu heeft, niet zo moeilijk zal zijn. Om het alarm af te laten gaan moeten we ook weer een nieuw venster maken. Het alarm zal afgaan op [&hellip;]","og_url":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-alarm\/","og_site_name":"Wiskunst","article_modified_time":"2022-10-17T13:29:15+00:00","og_image":[{"url":"https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_32.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Geschatte leestijd":"13 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-alarm\/","url":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-alarm\/","name":"Lazarus-Klokje-Alarm - Wiskunst","isPartOf":{"@id":"https:\/\/wiskunst.nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-alarm\/#primaryimage"},"image":{"@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-alarm\/#primaryimage"},"thumbnailUrl":"https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_32.jpg","datePublished":"2022-05-24T11:14:33+00:00","dateModified":"2022-10-17T13:29:15+00:00","breadcrumb":{"@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-alarm\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-alarm\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-alarm\/#primaryimage","url":"https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_32.jpg","contentUrl":"https:\/\/wiskunst.nl\/wp-content\/uploads\/2022\/10\/Lazarus-Klokje_32.jpg","width":280,"height":256},{"@type":"BreadcrumbList","@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/lazarus-klokje-alarm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wiskunst.nl\/"},{"@type":"ListItem","position":2,"name":"Programmeren","item":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/"},{"@type":"ListItem","position":3,"name":"Delphi\/Lazarus","item":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/"},{"@type":"ListItem","position":4,"name":"Lazarus-Klokje-Intro","item":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/delphi-lazarus\/lazarus-klokje-intro\/"},{"@type":"ListItem","position":5,"name":"Lazarus-Klokje-Alarm"}]},{"@type":"WebSite","@id":"https:\/\/wiskunst.nl\/#website","url":"https:\/\/wiskunst.nl\/","name":"Wiskunst","description":"2\u221e\u2227&gt;","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wiskunst.nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"}]}},"_links":{"self":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/1123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/comments?post=1123"}],"version-history":[{"count":8,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/1123\/revisions"}],"predecessor-version":[{"id":1647,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/1123\/revisions\/1647"}],"up":[{"embeddable":true,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/1121"}],"wp:attachment":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/media?parent=1123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}