<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <channel>
    
    <title>Devia News</title>
    <link>http://www.devia.be/news</link>
    <description>Devia news</description>
    <dc:language>en</dc:language>
    <dc:creator>Stefaan.Lesage@pandora.be</dc:creator>
    <dc:rights>Copyright 2011</dc:rights>
    <dc:date>2011-11-18T11:40:19+00:00</dc:date>
    <admin:generatorAgent rdf:resource="http://www.expressionengine.com/" />
    

    <item>
      <title>Introduction to LiveBindings in Delphi XE2</title>
      <link>http://www.devia.be/news/article/introduction-to-livebindings-in-delphi-xe2/</link>
      <guid>http://www.devia.be/news/article/introduction-to-livebindings-in-delphi-xe2/#When:10:40:19Z</guid>
      <description>Yesterday at Be&#45;Delphi I gave a session on using the new LiveBindings in Delphi XE2 ..</description>
      <dc:subject>Software DevelopmentWindowsDelphi</dc:subject>
      <content:encoded><![CDATA[Yesterday at Be-Delphi I gave a session on using the new LiveBindings in Delphi XE2 ..<h3>Be-Delphi</h3>

<p>Yesterday was <a href="http://www.bedelphi.com" title="BEDelphi">Be-Delph</a>, and I was invited to give a talk on the new LiveBindings in Delphi XE2. Me and <a href="http://alphaware.be/" title="a colleague of mine">a colleague of mine</a> decided to drive up there together, which should have given me some time to relax. Sadly it didn't and I was kinda nervous.</p>

<p>Once we got welcomed by Pascal Lagrou and Bruno Fierens from <a href="http://www.tmssoftware.com/" title="TMS Software">TMS Software</a>, had a coffee or two and we were ready for the sessions. My session on LiveBindings in Delphi XE2 was only in the afternoon, so I still had some time to build up additional stress. In the end everything went quite well. I was nervous in the beginning, but once I could dive into familiar territory (the Delphi XE2 IDE) everything went a lot smoother.</p>

<p>I would personally want to thank everyone who made this even possible, including Filip Lagrou, Bruno Fierens, Thierry Laborde, Brian Long, Jason Vokes and Bob Swart, and everyone who helped behind the scenes. Also a big thank you for the Be-Delph sponsors <a href="http://www.tmssoftware.com/" title="TMS Software">TMS Software</a>, <a href="http://www.embarcadero.com/" title="Embarcadero">Embarcadero</a>, <a href="http://www.ebob42.com" title="Dr Bob">Dr Bob</a>,  <a href="http://www.remobjects.com/" title="RemObjects">RemObjects</a>, <a href="http://www.fast-report.com/" title="Fast Report">Fast Report</a>, <a href="http://www.experteam.be/" title="Expert Team">Expert Team</a>, <a href="http://www.cquel.be/" title="C-Quel Software Solutions">C-Quel Software Solutions</a>, <a href="http://www.raize.com/" title="Raize Software">Raize Software</a>, <a href="http://www.devart.com/" title="Devart">Devart</a>, <a href="http://www.blaisepascal.eu/" title="Blaise Pascal">Blaise Pascal</a>, and all sponsors who supplied us with prizes. In case I forgot some, you can find the full list of sponsors <a href="http://be-delphi.com/sponsors.php" title="right here">right here</a>.</p>

<p>I hope everyone enjoyed Be-Delphi and hope we will all meet up at the next Be-Delphi. For those of you who missed Be-Delphi, I have uploaded my presentation and the corresponding White Paper document :</p>

<h3>Presentation</h3>

<p><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/StefaanLesage/bedelphi-livebindings-in-delphi-xe2-devia" title="BEDelphi - LiveBindings in Delphi XE2 - Devia" target="_blank">BEDelphi - LiveBindings in Delphi XE2 - Devia</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/10215907" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe><p>View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/StefaanLesage" target="_blank">Stefaan Lesage</a></p></p>

<h3>The White Paper</h3>

<p><a title="View Be Delphi Live Bindings on Scribd" href="http://www.scribd.com/doc/73106743/Be-Delphi-Live-Bindings">Be Delphi Live Bindings</a><iframe class="scribd_iframe_embed" src="http://www.scribd.com/embeds/73106743/content?start_page=1&view_mode=list&access_key=key-21uji1b5n1kf5di06yqu" data-auto-height="true" data-aspect-ratio="0.707514450867052" scrolling="no" id="doc_40508" width="100%" height="600" frameborder="0"></iframe><script type="text/javascript">(function() { var scribd = document.createElement("script"); scribd.type = "text/javascript"; scribd.async = true; scribd.src = "http://www.scribd.com/javascripts/embed_code/inject.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(scribd, s); })();</script></p>]]></content:encoded>
      <dc:date>2011-11-18T10:40:19+00:00</dc:date>
    </item>

    <item>
      <title>Configuring Delphi XE2 and your mac to develop, test and deploy iOS apps</title>
      <link>http://www.devia.be/news/article/configuring-delphi-xe2-and-your-mac-to-develop-test-and-deploy-ios-apps/</link>
      <guid>http://www.devia.be/news/article/configuring-delphi-xe2-and-your-mac-to-develop-test-and-deploy-ios-apps/#When:12:41:30Z</guid>
      <description>Today we are back with another Delhi XE2 Video Tutorial ... this time I will be showing how to get ready to develop iOS applications using Delphi XE2 and FireMonkey.</description>
      <dc:subject>Software DevelopmentiOSMacWindowsDelphiNew MediaScreencasting</dc:subject>
      <content:encoded><![CDATA[Today we are back with another Delhi XE2 Video Tutorial ... this time I will be showing how to get ready to develop iOS applications using Delphi XE2 and FireMonkey.<h3>Prerequisites</h3>

<p>Unlike building a Mac version of your Delphi XE2 FireMonkey application, creating an iOS application using Delphi XE2 and FireMonkey has some prerequisites. </p>

<h4>XCode</h4>

<p>First of all you will need to install XCode on your Mac. This can easily be done by downloading XCode from the Mac AppStore, or through the developer portal website. For the iOS versions of your Delphi XE 2 FireMonkey apps you will have to compile them using XCode. From within XCode you will be able to debug those applications and deploy them on a physical device.</p>

<h4>FreePascal and FireMonkey</h4>

<p>In order to build your Delphi XE2 FireMonkey applications for iOS devices you will need the FreePascal compiler and the necessary FireMonkey files. Luckily this can be found in your Delphi XE2 installation folder. Simply copy the Disk Image File (dmg) over to your mac and run the installation.</p>

<h4>Apple Developer Program</h4>

<p>If you want to deploy your applications to a physical iOS device, you will need to register for the <a href="http://developer.apple.com/programs/ios/">iOS Developer Program</a> which will cost you about $99 or 79 € per year. You will also have to be part of that iOS Developer program if you ever want to publish you Delphi XE2 FireMonkey apps to the iOS AppStore.</p>

<h3>Creating a test iOS application using Delphi XE2 and FireMonkey</h3>

<h4>Creating a new FireMonkey iOS application</h4>

<p>Unlink Delphi XE2 FireMonkey applications for the Mac, FireMonkey iOS applications are a special type of Delphi XE2 project. So you will have to create a new application using the corresponding menu. In our example we will create a very simple application ... noting special ... just to show you everything works nicely.</p>

<h4>Exporting the Delphi XE2 FireMonkey Application to XCode</h4>

<p>As mentioned before ... you currently still need XCode and the FreePascal compiler to Build your iOS application. Due to some limitations in FreePascal your Delphi XE2 FireMonkey code will need to be modified slightly so it can be compiled (one example is the Dotted namespaces which doesn't seem to be working under FreePascal). In order to do this a little utility can be used called dprtoxcode.exe</p>

<p>The Tutorial shows you how you can add this little utility to your Delphi XE2 tools menu so it is easier to use.</p>

<h4>Building & Testing your application using XCode</h4>

<p>Once everything is ready, you can open the XCode version of your Delphi XE2 FireMonkey project, build it and run it in the Simulator to test it if necessary. From here you could also deploy it to a physical iOS device or the iOS AppStore, but for that you will need to enroll in the <a href="http://developer.apple.com/programs/ios/">iOS Developer Program</a>.</p>

<p>In our Video Tutorial we will be building a small sample application to show you how the process is supposed to be done. It isn't a full blown iOS application though, but just a little example.</p>

<h3>Final Words</h3>

<p>Well ... this tutorial should have shown you the basics of setting everything up and even showed you how to create your first iOS application. If you have any comments or suggestions ... feel free to post them here as a comment or contact us.</p>

<p>Meanwhile ... have fun with Delphi XE2 and FireMonkey ... and if you want to learn more about Delphi XE2, make sure you also check the <a href="http://embarcadero.com/products/delphi">Delphi XE2 page</a> or <a href="http://embarcadero.com/products/rad-studio">RAD Studio XE2 page</a> on the Embarcadero Website.</p>

<p>If you want, you can also have a look at the video on YouTube. You should be able to find <a href="http://bit.ly/qkt4u1">an HD version right here</a></p>


<div class="big-photo"><iframe width="853" height="510" src="http://www.youtube.com/embed/h93CZV9bRaQ?rel=0&amp;fmt=22&amp;hd=1" frameborder="0" allowfullscreen></iframe><p>Configuring Delphi XE2 and your mac to develop, test and deploy iOS apps with FireMonkey</p></div>]]></content:encoded>
      <dc:date>2011-09-29T12:41:30+00:00</dc:date>
    </item>

    <item>
      <title>Setting up Delphi XE2 and your Mac to run and debug cross&#45;platform applications using Delphi</title>
      <link>http://www.devia.be/news/article/setting-up-delphi-xe2-and-your-mac-to-run-and-debug-cross-platform-applicat/</link>
      <guid>http://www.devia.be/news/article/setting-up-delphi-xe2-and-your-mac-to-run-and-debug-cross-platform-applicat/#When:17:24:23Z</guid>
      <description>Today Embarcadero and Barnsten showed Delphi XE2 in action at the Delphi XE2 world tour in Brussels. Pawel Glowacki showed us that we can create Mac apps from using FireMonkey in Delphi.</description>
      <dc:subject>Software DevelopmentWindowsDelphi</dc:subject>
      <content:encoded><![CDATA[Today Embarcadero and Barnsten showed Delphi XE2 in action at the Delphi XE2 world tour in Brussels. Pawel Glowacki showed us that we can create Mac apps from using FireMonkey in Delphi.<h3>Delphi XE2 allows you to create Mac / iOS apps ?</h3>

<p>Well ... now that Delphi XE2 is finally available, the testers are no longer under NDA and I can safely say you can create Mac and even iOS applications using Delphi XE2 and FireMonkey. If you want to know more about FireMonkey, feel free to have a look at the information available on the Embarcadero website, or even have a look at this <a href="http://www.andreanolanusse.com/en/a-little-bit-about-firemonkey-and-delphi-xe2/" title="A little bit about FireMonkey and Delphi XE2">very interesting post about FireMonkey by Andrano Lanusse</a> (Embarcadero Technical Lead Evangelist for Latin America & Caribeean). Today I won't be going into a lot of detail about FireMonkey or what you can do with FireMonkey though ...</p>

<h3>Setting it up</h3>

<p>If you were at the World Tour in Brussels, you might have seen and heard Pawel Glowacki talk about using PAServer to deploy and debug Delphi XE2 FireMonkey applications on the Mac. If you have a Mac and already have Delphi XE2 you might be wondering what he was talking about and how you can set up  your machines to actually run Delphi XE2 FireMonkey applications on your Mac and still develop and debug them on your Windows Machine. Well ... it actually is a lot easier than you would think.</p>

<h3>A Screencast</h3>

<p>For those of you who want to get started right away, but are wondering how you should configure everything, I prepared a little Screencast. This Screencast guides you through the setup and configuration and even shows you how to develop / deploy and Debug a simple 'Hello World' application on your Mac which was developed using Delphi XE2 and FireMonkey on Windows. The Video is Hosted on YouTube and I have embedded it on this page. It might be interesting to look at the HD version in FullScreen Mode on YouTube thought ...</p>

<div class="big-photo"><iframe width="853" height="510" src="http://www.youtube.com/embed/lEB38jlrbYY?rel=0&amp;fmt=22&amp;hd=1" frameborder="0" allowfullscreen></iframe><p>Setting up Delphi XE2 and your Mac to run and debug cross-platform applications using Delphi</p></div>]]></content:encoded>
      <dc:date>2011-09-08T17:24:23+00:00</dc:date>
    </item>

    <item>
      <title>Een Video DVD voor Vaderdag</title>
      <link>http://www.devia.be/news/article/een-video-dvd-voor-vaderdag/</link>
      <guid>http://www.devia.be/news/article/een-video-dvd-voor-vaderdag/#When:08:30:09Z</guid>
      <description>Een tijdje geleden werkten we samen met een lokale lagere school om een kleine video film te maken in klasverband. Het duurde niet lang of het filmpje werd ook getoond op de school van onze zoon, en ook daar kreeg ik de vraag of we eens samen iets konden maken.</description>
      <dc:subject>New MediaVideo Editing</dc:subject>
      <content:encoded><![CDATA[Een tijdje geleden werkten we samen met een lokale lagere school om een kleine video film te maken in klasverband. Het duurde niet lang of het filmpje werd ook getoond op de school van onze zoon, en ook daar kreeg ik de vraag of we eens samen iets konden maken.<h3>Het Geheim</h3>

<p>Alles moest een groot geheim blijven ... tenslotte zouden we samen iets maken voor Vaderdag en niemand mocht weten wat we zouden doen. Vandaar ook dat het nieuws pas nu 'gelekt' mag worden.</p>

<h3>Het Idee</h3>

<p>De juffen van het 5 de leerjaar uit de <a href="http://www.vbsertvelde.be/" title="Vrije Basisschool Ertvelde">Vrije Basisschool Ertvelde</a> hadden de Trailer gezien die we voor de Basisschool De Regenboog hadden gemaakt. Het filmpje werd goed bevonden, maar natuurlijk speelden ze zelf met een ander idee ... De kinderen van beide klassen uit het 5 de leerjaar hadden een tekst voor Vaderdag verzonnen op een bepaalde melodie. De twee klassen hadden zo hun eigen Vaderdaglied, en hadden de tekst reeds geperfectioneerd en ingeoefend.</p>

<p>Ondertussen werd reeds een afspraak vastgelegde met de mensen van <a href="http://uptide.be/" title="Uptide Studio">Uptide Studio</a> in Ertvelde om samen met de kinderen daar een bezoekje te brengen, en ondertussen hun liedjes in te zingen in de opnamestudio.</p>

<p>3 weken voor Vaderdag kregen wij dan de vraag of we het geheel niet wilden filmen en er ook een video van maken. Er was echter 1 probleem ... onze Jens zit in het 5 de leerjaar op die school, en ik zou dus al weten wat ik zou krijgen voor Vaderdag.</p> 

<p>Ikzelf had daar geen probleem mee, integendeel ... het motiveerde mij nog meer om er iets moois van te maken ...</p>

<h3>Filmen op School</h3>

<p>2 weken voor Vaderdag sprong ik dus op school even binnen om al wat ‘B-Roll’ materiaal te filmen. B-Roll materiaal is eigenlijk extra beeldmateriaal dat geschoten wordt zonder onmiddellijk een idee te hebben van het gebruik ervan. </p>

<p><a href="http://www.flickr.com/photos/lesagestefaan/5838362175/" title="Untitled by Lesage Stefaan, on Flickr"><img src="http://farm6.static.flickr.com/5022/5838362175_833bb9787a.jpg" width="500" height="333" alt=""></a>Filmen in de klas</p>

<p>Ik had al het idee om beeldmateriaal uit de opname studio te mengen met beeldmateriaal van eventuele repetities in de klas. Ik filmde echter hier en daar ook wat beeldmateriaal van tijdens de lessen in de klas, de spelende kinderen op de speelplaats, ... Dat materiaal had niet onmiddellijk een plaats in de Video Clip, maar ik zou het zeker en vast kunnen gebruiken.</p>

<h3>Naar de Uptide Studio</h3>

<p>Een week later was het dan zo ver. De kinderen vertrokken richting <a href="http://uptide.be/" title="Uptide Studio">Uptide Studio</a> in Ertvelde om daar hun liedje in te zingen. De <a href="http://uptide.be/" title="Uptide Studio">Uptide Studio</a> is een professionele opname studio waar we warm werden onthaald door Theo en Sarah. Na een woordje uitleg mochten de effectieve audio opnames starten, en kon ik alles vastleggen op video.</p>

<p><a href="http://www.flickr.com/photos/lesagestefaan/5838370713/" title="De Uptide Studio by Lesage Stefaan, on Flickr"><img src="http://farm6.static.flickr.com/5266/5838370713_b092dbba1e.jpg" width="500" height="333" alt="De Uptide Studio"></a>De Uptide Studio</p>

<p>Nu moet je weten dat liedjes niet in dezelfde volgorde ingezongen worden zoals je hoort in het eindresultaat. In ons geval werden alle strofes eerst ingezongen en het refrein pas helemaal op het einde. Iets lastiger om achteraf de puzzel terug in elkaar te stoppen tijdens het bewerken van de video fragmenten.</p>

<h3>De Video Bewerking</h3>

<p>Ondertussen was het al bijna Vaderdag ... en het zou mooi zijn mochten de kinderen het resultaat ook op Vaderdag kunnen afgeven. Er zat dus wat druk op de ketel, en ik had maar een paar dagen tijd meer om al het beeldmateriaal op de computer te krijgen, te bewerken en een montage klaar te hebben.</p>

<p><a href="http://www.flickr.com/photos/lesagestefaan/5838402593/" title="Het Vaderdag filmpje in Final Cut Pro by Lesage Stefaan, on Flickr"><img src="http://farm3.static.flickr.com/2727/5838402593_2496873bca.jpg" width="500" height="313" alt="Het Vaderdag filmpje in Final Cut Pro"></a>Het Vaderdag filmpje in Final Cut Pro</p>

<p>Zoals ik eerder reeds aangaf, bleek het toch wat puzzelwerk te zijn om alle fragmenten mooi achter elkaar te krijgen en synchroon te laten verlopen met de audio opname die ik van de mensen van<a href="http://uptide.be/" title="Uptide Studio">Uptide Studio</a> had gekregen, maar 2 dagen later zag het er toch al goed uit.</p>

<h3>En wat met het B-Roll materiaal ?</h3>

<p>Wel ... het B-Roll materiaal werd hier en daar ook gebruikt in de video montages van het liedje, maar ik wou nog een stapje verder gaan. Ik had immers genoeg beeldmateriaal om voor beide klassen ook een ‘Making Of’ video te maken van ongeveer 10 minuten.</p>

<p>Ook hier was het concept eenvoudig ... een 10 minuten durende video over de aanloop naar de opnames. Beeldmateriaal uit de klas, de repetities, de zangles, de speelplaats, ... Het B-Roll materiaal kwam dus hier goed van pas !</p>

<h3>Het Eindresultaat</h3>

<p>Om alles mooi af te werken, werd al snel besloten om er een echte Video DVD van te maken, compleet met alles er op en er aan. Het zou ook mooi zijn mochten er 2 versies van de DVD komen, een versie voor 5A en een versie voor 5B. </p>

<p>Bij de versie van 5A begint automatisch hun video clip starten bij het invoeren van de DVD in DVD Speler (of PS3, XBox, Computer, ...). Daarna komen ze op een menu terecht waar ze de videoclip opnieuw kunnen staten, de ‘Making of ...’ kunnen bekijken, een scene kunnen selecteren of hun foto’s kunnen bekijken. Daarnaast is er ook een Extra’s menu voorzien met dezelfde layout maar dan voor de video’s, scenes en foto’s van 5B. De DVD versie voor 5B is dan net omgekeerd.</p>

<p><a href="http://www.flickr.com/photos/lesagestefaan/5838373509/" title="De Varderdag Video DVD by Lesage Stefaan, on Flickr"><img src="http://farm4.static.flickr.com/3643/5838373509_ddcbc84d8e.jpg" width="500" height="333" alt="De Varderdag Video DVD"></a>De Vaderdag Video DVD</p>

<p>De tijd begon te dringen ... het was ondertussen al donderdag en de montage van de DVD moest nog gemaakt worden en van beide versies moesten 25 stuks gebrand worden. Dat was echter niet alles ... op de DVD’s moest nog iets gedrukt worden en ook de bijhorende DVD hoesjes moesten geprint worden en in de doosjes gestopt worden. Mits hier en daar wat late uurtjes was ales op vrijdag middag toch klaar en kon ik het resultaat afgeven in de klas.</p>

<h3>De Feedback</h3>

<p>Ik had de kinderen beloofd om de DVD te laten zien op school wanneer hij af was ... Met de zogenaamde ‘Golden Master’ trok ik dus naar de klas en liet ik het eindresultaat zien. Niet alleen de Video Clip bleek in de smaak te vallen, maar ook de ‘Making of ...’ de layout van de menu’s, het feit dat ze ook het beeldmateriaal van de andere klas hadden, en de volledige afwerking van het eindresultaat werd positief ontvangen.</p>

<p>Van de Juffen kreeg ik niets dan positieve reacties, en blijkbaar zijn ook de ouders onder de indruk. Ja ... ik hoorde zelfs <em>“het origineelste en mooiste vaderdag cadeau ooit”</em> vallen ... dus ... allemaal tevreden ‘klanten’ en daar doe je het voor :-)</p>]]></content:encoded>
      <dc:date>2011-06-16T08:30:09+00:00</dc:date>
    </item>

    <item>
      <title>2BShow beeldmateriaal verwerken</title>
      <link>http://www.devia.be/news/article/2bshow-beeldmateriaal-verwerken/</link>
      <guid>http://www.devia.be/news/article/2bshow-beeldmateriaal-verwerken/#When:09:17:29Z</guid>
      <description>De 2B Show iMovie trailer viel in de smaak, maar daarmee ligt ook onmiddellijk de lat hoog voor de eindmontage ...</description>
      <dc:subject>New MediaVideo Editing</dc:subject>
      <content:encoded><![CDATA[De 2B Show iMovie trailer viel in de smaak, maar daarmee ligt ook onmiddellijk de lat hoog voor de eindmontage ...<p>Nadat ik de <a href="http://bit.ly/efynnS">2B Show trailer</a> in elkaar had geknutseld met iMovie heb ik die beschikbaar gezet op YouTube. En voor de leerlingen van klas 2B was dat een grote hit ! Ze zijn fan ... meer nog ... ze vinden het super ... of om met hun eigen woorden te zeggen 'Vet' en 'Cool'.</p>

<p>De lat ligt dus al redelijk hoog. De eindmontage zou dus bijna even goed moeten zijn als de iMovie trailer ... werk aan de winkel dus.</p>

<h3>Nog meer Pers</h3>

<p>In mijn vorige post liet ik al even weten dat we tijdens de opnames het bezoek kregen van de pers, en dat we uiteindelijk ook verschenen in <a href="http://www.nieuwsblad.be/article/detail.aspx?articleid=BI36636L&postcode=9940">Het Nieuwsblad</a>. Ondertussen verscheen er ook een artikel met als titel <a href="http://www.g-o.be/sites/portaal_nieuw/OverGO/Klikkrant/Pages/Artikel.aspx?guid={ED712F3E-7C5D-4E56-8F3F-426D932A8384}">"GO! Basisschool De Regenboog in Ertvelde lonkt naar Hollywood"</a>.</p>

<p>Of we ooit in Hollywood geraken weet ik niet, maar de YouTube trailer werd toch al bekeken door iemand uit de Verenigde Staten. Wie weet ... misschien light Spielberg stiekem mee te kijken.</p>

<h3>Werk aan de winkel dus</h3>

<p>Na drie opname dagen had ik een hoop beeldmateriaal te verwerken. Ik denk zelfs dat we bijna 3 uur aan video materiaal hebben. Dat alles moet nu in detail bekeken worden, zodat we de beste 'Takes' er uit kunnen halen en die gebruiken in de montage. Niet dat de leerlingen slecht acteerden of zo, maar de cameraman ... die deed soms rare dingen ...</p>

<p>Tijdens het bekijken van het beeldmateriaal moest ik af en toe ook wel eens serieus lachen. Ik heb zo de gewoonte om een aantal seconden voor de effectieve act de camera reeds te laten opnemen. De bedoeling hiervan is om een aantal seconden speling te hebben en zo een minder abrupte overgang te krijgen. Maar hier leverde het af en toe ook wel grappige situaties op ... kinderen die oefenen, tekst repeteren en hier en daar ook een gekke bek ... en niet alleen van de leerlingen !!! </p>

<p>Die stukjes vormen misschien nog een mooie Bloopers reeks of zo ...</p>

<h3>De eerste ruwe Montage</h3>

<p>Na het selecteren van de beste stukjes was ik al in staat om snel een montage in elkaar te knutselen. Niets spectaculairs ... gewoon alle stukjes achter elkaar plaatsen. Best wel ruw en niet echt aangenaam om naar te kijken, maar het geeft al een idee van hoe de show er uiteindelijk uit ziet.</p>

<p>Van al het beeldmateriaal heb ik nu dus een ruwe montage van om en bij de 15 minuten ...</p>

<h3>En wat nu ???</h3>

<p>De ruwe montage is natuurlijk maar een begin. Ik heb beeldmateriaal dat we opnamen op een grijze dag, en ander beeldmateriaal waarbij er veel licht binnenviel in het klasje waar we de opnames uitvoerden. Er zal dus wat kleur correctie aan te pas komen zodat alles wat beter op elkaar afgestemd is.</p>

<p>Daarna moeten er natuurlijk nog titels toegevoegd worden. De namen van de actuers, dansers, acrobaten, presentatrices moeten mooi in beeld verschijnen, en er moeten nog Rolling Credits gemaakt worden. Je weet wel ... die lijst met namen die verschijnt op het einde van een film of serie.</p>

<p>Deze week hoop ik dus nog wat verder te kunnen werken ... maar er is nog een hoop te doen. Ik hou jullie zeker en vast verder op de hoogte.</p>
]]></content:encoded>
      <dc:date>2011-03-10T09:17:29+00:00</dc:date>
    </item>

    <item>
      <title>De 2BShow Trailer</title>
      <link>http://www.devia.be/news/article/de-2bshow-trailer/</link>
      <guid>http://www.devia.be/news/article/de-2bshow-trailer/#When:09:14:09Z</guid>
      <description>Een dikke maand geleden schreef ik nog een post over een project rond Media met de Basisschool De Regenboog uit Ervelde. Ondertussen zijn de opnames gedaan en heb ik een kleine Trailer klaar gemaakt ...</description>
      <dc:subject>New MediaVideo Editing</dc:subject>
      <content:encoded><![CDATA[Een dikke maand geleden schreef ik nog een post over een project rond Media met de Basisschool De Regenboog uit Ervelde. Ondertussen zijn de opnames gedaan en heb ik een kleine Trailer klaar gemaakt ...<p>In de vorige post liet ik jullie nog weten dat we samen met de klas 2B uit de Basisschool De Regenboog uit Ertvelde een klein projectje rond het thema Media aan het uitwerken waren. Na de Brainstorm sessie kwamen we samen met de kinderen al snel bij het idee van een kleine Show waarin we een aantal voorstellen kunnen verwerken.
</p>
<p>Het idee was er dus al ... nu hadden de kinderen de nodige tijd om een en ander voor te bereiden ... wat kostuums mee te brengen en ook wat te repeteren. Ik had beloofd om voor de opnames te zorgen en daar dan iets mee te maken.</p>

<h3>De Opnames</h3>

<p>Nadat de jongens en meisjes van 2B hun sketches en ideeën verder uitgewerkt hadden, was het dus tijd om de opnames te verzorgen. Al snel kwam het idee om Het Slaapkasteel om te toveren tot de opname studio. De ruimte is er natuurlijk wat beperkt, maar samen met de Kids schoven we alles wat opzij zodat er toch gedanst kon worden.</p>

<p>Twee weken na elkaar hadden we op woensdag voormiddag dus een afspraak ... en werd er opgetreden ... gefilmed ... opnieuw geprobeerd ... Soms was een tweede take nodig, maar meestal was dat omdat de cameraman niet klaar was natuurlijk, want de artiesten hadden alles tot in de puntjes voorbereid.</p>

<h3>De Pers</h3>

<p>Tijdens de laatste opname dag kregen we zelfs bezoek van de lokale pers.  Er kwam een reporter van Het Laaste Nieuws en ook nog iemand van Het Nieuwsblad.  Nog geen dag later <a href="http://www.nieuwsblad.be/article/detail.aspx?articleid=BI36636L&postcode=9940">verschenen we in de Krant</a> !</p>

<h3>Onmiddellijk een wereldwijd publiek met YouTube</h3>

<p>Samen met de klas in de krant komen is natuurlijk altijd mooi meegenomen, maar we namen ook even de tijd om samen met de klas andere mogelijkheden te bekijken. Waarom zouden we immers niet YouTube en andere kanalen gebruiken zodat zelfs wereldwijd mensen ons filmpje konden bekijken.</p>

<p>Er heerste natuurlijk wat ongeloof bij de kinderen, maar toen ik hen had uitgelegd dat overal ter wereld mensen met een internet verbinding via YouTube ons filmpje konden bekijken ... dan voelden de meesten zich al heuse sterren. Als snel kreeg ik de vraag of ook mensen in China, India, Amerika, Canada, Afrika, Rusland en alle andere landen van de wereld echt het filmpje konden zien. En toen ik daar heel snel altijd 'Ja' op kon antwoorden waren ze enorm Trots.</p>

<h3>Een voorproefje</h3>

<p>Er is natuurlijk nog een hoop werk aan de winkel voor er van alle opnames een mooie montage kan gemaakt worden, maar ondertussen heb ik toch al een kleine trailer gemaakt, zodat kinderen, ouders en ons wereldwijk publiek toch al van een klein voorproefje kan genieten terwijl ze ongeduldig wachten op het eindresultaat :-)</p>

<p><iframe title="YouTube video player" width="560" height="349" src="http://www.youtube.com/embed/G1XjeAgbSPk?hd=1" frameborder="0" allowfullscreen></iframe>De 2B Show Trailer</p>

<p>Natuurlijk is feedback altijd welkom ... zowel hier als op de <a href="http://bit.ly/2BShowTrailer">YouTube pagina van het filmpje</a> zelf.  Geniet er van ... en aarzel niet om het met anderen te delen !</p>
]]></content:encoded>
      <dc:date>2011-02-19T09:14:09+00:00</dc:date>
    </item>

    <item>
      <title>Project rond Media in samenwerking met Basisschool De Regenboog (Ertvelde)</title>
      <link>http://www.devia.be/news/article/project-rond-media-in-samenwerking-met-basisschool-de-regenboog-ertvelde/</link>
      <guid>http://www.devia.be/news/article/project-rond-media-in-samenwerking-met-basisschool-de-regenboog-ertvelde/#When:09:09:48Z</guid>
      <description>Een tijdje terug kreeg ik via een kennis een filmpje te zien van de leerlingen uit de klas 2B van de Basisschool De Regenboog in Ertvelde. Ik vond het best een leuk initiatief van een school uit onze, en nam dan ook contact met hen op. Ik gaf hen een aantal suggesties en stelde voor om eventueel wat te helpen bij een volgend filmpje.</description>
      <dc:subject>New MediaVideo Editing</dc:subject>
      <content:encoded><![CDATA[Een tijdje terug kreeg ik via een kennis een filmpje te zien van de leerlingen uit de klas 2B van de <a href="http://www.basisschool-de-regenboog.be/">Basisschool De Regenboog in Ertvelde</a>. Ik vond het best een leuk initiatief van een school uit onze, en nam dan ook contact met hen op. Ik gaf hen een aantal suggesties en stelde voor om eventueel wat te helpen bij een volgend filmpje.<H3>Wat vooraf ging</H3>

<p>Een tijdje terug kreeg ik via een kennis een filmpje te zien van de leerlingen uit de klas 2B van de <a href="http://www.basisschool-de-regenboog.be/">Basisschool De Regenboog in Ertvelde</a>. Misschien zijn er nog een aantal bezoekers die het vorige filmpje niet gezien hebben, dus snel nog even de YouTube toevoegen in deze post !</p>

<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/gTjGSBCqwfA?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/gTjGSBCqwfA?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>Het vorige filmpje<</p>

<p>Ikzelf vond het een leuk initiatief van een school uit de buurt, en nam even contact met hen op. Na het geven van een aantal suggesties stelde ik voor om eventueel wat te helpen bij een volgend filmpje. </p>

<H3>Van het ene kwam het andere</H3>

<p>Na wat over-en-weer gemail werd duidelijk dat men graag nog een filmpje zou maken met de kinderen, en dat allemaal in het kader van een project rond het thema Media. Ik herhaalde mijn aanbod om wat te helpen, en gaf ook een aantal ideetjes. De bedoeling was in eerste instantie om een beeld te vormen van het soort filmpje dat de kinderen konden maken.</p>

<p>Op zich kan je natuurlijk alle kanten uit, maar Juf Marie-Rose wou de kindjes zelf wat voorstellen laten maken en op basis daarvan beslissen wat het zou worden. </p>

<H3>Brainstormen in het klaslokaal</H3>

<p>Vorige week was het dan zover. Ik uitgenodigd in het klasje om samen met de Juf Marie-Rose en de leerlingen van klas 2B wat van gedachten te wisselen. Met 20 kindjes in de klas hoopten we toch een aantal voorstellen te krijgen.</p> 
<p>De leerlingen werden verdeeld in 4 groepjes, en elk groepje kon een aantal voorstellen noteren. Achteraf werden de voorstellen van de 4 groepjes werzameld zodat erover gestemd kon worden.</p>

<p>Het werd al snel duidelijk dat er een aantal verschillende pistes waren. Een aantal voorstellen waren best verrassend, en tijdens de stemming hielden we nog een 5-tal voorstellen over. Wat het uiteindelijk zal worden laat ik nog even in het midden ... maar ik ben er zeker van dat het voor iedereen een leuke en leerzame ervaring wordt !</p>]]></content:encoded>
      <dc:date>2011-01-19T09:09:48+00:00</dc:date>
    </item>

    <item>
      <title>Making you code easier to maintain using Objective&#45;C Categories</title>
      <link>http://www.devia.be/news/article/making-you-code-easier-to-maintain-using-objective-c-categories/</link>
      <guid>http://www.devia.be/news/article/making-you-code-easier-to-maintain-using-objective-c-categories/#When:11:59:29Z</guid>
      <description>Well, as you all might know by now, I&#39;m trying to take my first steps in iOS development. And if you read my previous post, you have already noticed that I was playing with some color schemes. After a while though I ended up settting my colors in all different kinds of places. When I wanted to change one color, I noticed I had to modify my code in 10 or more places. Sure, there must be an easier way to write more maintainalbe code, and Categories seem to be helping quite a bit.</description>
      <dc:subject>Software DevelopmentiOSMacObjective&#45;C</dc:subject>
      <content:encoded><![CDATA[Well, as you all might know by now, I'm trying to take my first steps in iOS development. And if you read my previous post, you have already noticed that I was playing with some color schemes. After a while though I ended up settting my colors in all different kinds of places. When I wanted to change one color, I noticed I had to modify my code in 10 or more places. Sure, there must be an easier way to write more maintainalbe code, and Categories seem to be helping quite a bit.<h3>Colors Everywhere</h3>

<p>Well, after my previous post I continued doing some more work on my UI and trying to create my own Style for UITableViews and UITableViewCells. I ended up using the same colors over and over again in all different places in my application.  In the end I had code in my UITTableViewController which set the Color for the Background and the navigation bar :</p>

<pre><code>- (void)viewDidLoad 
{
    [super viewDidLoad];

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
    [[self navigationController] navigationBar].tintColor = [UIColor brownColor];
    UIImage *img = [UIImage imageNamed:@"BG_Pink"];
    [[self tableView] setBackgroundColor:[UIColor colorWithPatternImage:img]];
}
</code></pre>

<p>This was all working out quite nicely ...</p>

<h3>Using the same color scheme in other Views</h3>

<div class="small-photo-left"><img src="http://devia.ehclients.com/images/uploads/news/Input_ColorScheme.png" alt="image" width="240" height="320" /><p>Data entry Screen</p></div><p>Of course, my application consits of a few different UITableViews and I even added a data entry View and a detail view. As you can see, the data entry view is using the same background color for the UITableView and the UITableViewCells are using the same color as my other UITableView as well.</p>

<p>At some point, I wanted to change the color scheme I was using (it was more pinkish at the start), and use something more Orange or brown like.  Sadly this required me to change the color in every spot where I was using it. When I tested it on my phone, it looked horrible, since I forgot to change a few colors.</p>

<p>Since I'm still developing some basic ideas for the app, and the color scheme might change a few times during the Development cycle, I started thinking. There surely must be an easier way to handle this, which wouldn't require me to change the colors in 10 different places.</p>

<p>Of course, I could subclass UIColor and add my own colors to it, but I wanted to try a different approach</p>

<h3>The Categories Approach</h3>

<p>During the iOS bootcamp I took at Big Nerd Ranch Europe a while back, we touched on the subject of Categories. Categories allow you to extend a class without the need to Subclass it. Using Categories I could quickly add a few methods to UIColor whithout the need to create a new Subclass.</p>

<h3>Creating a Category in UIColor</h3>

<p>Creating a new category is actually quite easy.  In my case, I wanted a category on UIColor so I could extend it.  I created a new Header and Implementation file and called it <em>UIColor+MyApp.h</em> and <em>UIColor+MyApp.c</em></p>

<h4>The Header File</h4>

<p>In the Header file <em>UIColor+MyApp.h</em> I added the following code :

<pre><code>//
//  UIColor+MyApp.h
//
//  Created by Stefaan Lesage on 11/11/10.
//  Copyright 2010 Devia. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface UIColor (MyApp) 

+ (UIColor *)myTableViewBackgroundColor;
+ (UIColor *)myTableCellBackgroundColor;

@end
</code></pre>

<p>This simply declares a category MyApp on UIColor, and defines 2 new methods on it. <em>myTableViewBackgroundColor</em> which will return the Default color which should be used as the background for my UITableViews, and <em>myTableCellBackgroundColor</em> which defines the default color which should be used as the background for my UITableViewCells (and in some other places in my app).</p>

<h4>The Implementation</h4>

<p>In the Implementation file <em>UIColor+MyApp.m</em> I added the following code :

<pre><code>//
//  UIColor+MyApp.m
//  Phocation
//
//  Created by Stefaan Lesage on 11/11/10.
//  Copyright 2010 Devia. All rights reserved.
//

#import "UIColor+MyApp.h"

@implementation UIColor (MyApp)

+ (UIColor *)myTableViewBackgroundColor
{
    UIImage *img = [UIImage imageNamed:@"BG_Pink"];
    return [UIColor colorWithPatternImage:img];	
}

+ (UIColor *)myTableCellBackgroundColor
{
    return [UIColor colorWithRed:255/255.0 green:240/255.0 blue:255/255.0 alpha:100];
}

@end
</code></pre>

<p>Well the implementation is pretty straightforward. For the <em>myTableViewBackgroundColor</em>, I simply return a UIColor based on the pattern in my previous post. The <em>myTableCellBackgroundColor</em> then returns the light pink / purple color which gets used as the background for my UITableViewCells.</p>

<h3>Using the Category</h3>

<p>Using the Category is now pretty Straight Forward. In my Detail View for example, I have a reference to a UITextField called nameTextField and to the tableView beneath it. So in my viewDidLoad I have the following code :</p>

<pre><code>- (void)viewDidLoad 
{
    [super viewDidLoad];

    /* Load our HeaderView if Necessary */
    [[self view] setBackgroundColor:[UIColor myTableViewBackgroundColor]];
    [[self tableView] setBackgroundColor:[UIColor myTableViewBackgroundColor]];
    [nameTextField setBackgroundColor:[UIColor myTableCellBackgroundColor]];
}
</code></pre>

<p>Quite simple, isn't it ?</p>

<h3>But what are the advantages ?</h3>

<p>For me, it makes my code a little more readable (that is of course a more personal opinion), but what's even better is that my code is a lot easier to maintain. If for some reason I want to change my color scheme to use another pattern or another color for the UITableViewCells, I only need to update the code in one sport. Simply modify the Implementation found in UIColor+MyApp.c, build and it's done !</p>

<p>Once I found the advantages of this approach, I even added more methods to my UIColor+MyApp category. It now also contains methods which return the color I will be using for the UINavigationBar tine, colors I will be using for different texts in my application, ...</p>

<h3>Feedback</h3>

<p>As with my previous post, there might be better ways to achieve the same thing. If you have a more appropriate approach or solution, feel free to let me know ... I'm eager to learn :-)</p>]]></content:encoded>
      <dc:date>2010-12-08T11:59:29+00:00</dc:date>
    </item>

    <item>
      <title>How to use a custom background image in your grouped UITableView</title>
      <link>http://www.devia.be/news/article/how-to-use-a-custom-background-image-in-your-grouped-UITableView/</link>
      <guid>http://www.devia.be/news/article/how-to-use-a-custom-background-image-in-your-grouped-UITableView/#When:12:48:46Z</guid>
      <description>For those of you who didn&#39;t know it ... a few weeks ago I went to the iOS Bootcamp organized by the folks at Big Nerd Ranch Europe. The course was exactly what I needed to get me started on my own app. Some pieces of the Puzzle came together quite nicely during the course, but ... I wanted more.</description>
      <dc:subject>Software DevelopmentiOSMacCocoaObjective&#45;C</dc:subject>
      <content:encoded><![CDATA[For those of you who didn't know it ... a few weeks ago I went to the iOS Bootcamp organized by the folks at Big Nerd Ranch Europe. The course was exactly what I needed to get me started on my own app. Some pieces of the Puzzle came together quite nicely during the course, but ... I wanted more.<div class="small-photo-left"><img src="http://devia.ehclients.com/images/uploads/news/Default_Grouped_TableView.png" alt="image" width="240" height="320" /><p>Default grouped UITableView</p></div>

<h3>The default Grouped UITableView looks nice but ...</h3>

<p>Well, you can use the UITableView in it's Plain mode, but also in a Grouped mode.  The Grouped mode uses some kind of pattern as the background for the UITableView.  It looks quite nice and is made up of alternating light and darker blue-grayish lines.</p>

<h3>I wanted someting a little more 'Special' ...</h3>

<p>Although the default look isn't all that bad ... I wanted to have something 'special' for my application.  So I was wondering if there was some way to change the color used in that pattern.  Since I didn't know the answer myself, I sent out a tweet. I was hoping someone would pick it up and maybe let me know where I could find some more information on this topic.</p>

<h3>The feedback I got</h3>

<p>I did receive some feedback to my tweet: '<a href="https://twitter.com/StefaanLesage/status/2335617765613568" title="Is there an easy way to create your own UIColor which looks like the 'Group Table View Color' but with another color scheme ? #iphonedev">Is there an easy way to create your own UIColor which looks like the 'Group Table View Color' but with another color scheme ? #iphonedev</a>. One of the answers was from <a href="http://blog.amarkulo.com" title="Amar Kulo">Amar Kulo</a> who suggested to supply me with some Photoshop files I could modify.</p>

<p>A few moments later, Amar Kulo even provided me with a complete answer and <a href="http://blog.amarkulo.com/custom-colored-grouped-uitableview-background-image-in-photoshop" title="wrote a blog post about it">wrote a blog post about it</a> to help me out. It is actually pretty easy, so I thought i would share it with the world as well.</p>

<h3>The Trick</h3>

<p>It is actually quite easy to get your own custom background.  You simply have to use a custom background image.  Amar provides a few samples in his blogpost.  The only thing you need to do is open up your favorite Image Editor (in my case Pixelmator), change the colors to you liking and create the necessary versions for your application.  </p>

<h3>The Code</h3>

<div class="small-photo-left"><img src="http://devia.ehclients.com/images/uploads/news/Result.png" alt="image" width="240" height="324" /><p>The result actually looks pretty descent</p></div>
<p>Once you added the resources to your project, you can simply start using them as the background for your Grouped UITableView.  In my case, it was simple a matter of setting the background color in the ViewDidLoad of my UITableViewController :</p>

<pre><code>
- (void)viewDidLoad 
{
    [super viewDidLoad];

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
	UIImage *img = [UIImage imageNamed:@"BG_Pink"];
	[[self tableView] setBackgroundColor:[UIColor colorWithPatternImage:img]];
}
</code></pre>

<h3>Feedback</h3>

<p>Well ... This might not be the best way to do it, so if you have any suggestions, feel free to let me know.  Next time I'll be delving a little deeper into some more things I did with my UITableView and UITableViewCell ... but for now ... feel free to post a comment and have a look at the result :</p>]]></content:encoded>
      <dc:date>2010-11-30T12:48:46+00:00</dc:date>
    </item>

    <item>
      <title>Simplify your Delphi Code using some basic rules, OO techniques and some refactoring (Part 4)</title>
      <link>http://www.devia.be/news/article/delphi-code-using-some-basic-rules-oo-techniques-refactoring-part-4/</link>
      <guid>http://www.devia.be/news/article/delphi-code-using-some-basic-rules-oo-techniques-refactoring-part-4/#When:12:55:53Z</guid>
      <description>Part 4 in the series.  Actually it&#39;s the rest of Part 3, since for some strange reason I couldn&#39;t get it into a single post.</description>
      <dc:subject>Software DevelopmentWindowsDelphi</dc:subject>
      <content:encoded><![CDATA[Part 4 in the series.  Actually it's the rest of Part 3, since for some strange reason I couldn't get it into a single post.<h3>Continued</h3>

<p>Since for some strange reason I couldn't fit everything in a single post, I had to split it up, so this is the rest of it</p>

<h4>The TdvStringSetting class</h4>

<h5>The explanation</h5>

<p>Basically the TdvSetting provides us with a skeleton we can use for our new Setting descendants.  I ended up with a TdvStringSetting, TdvIntegerSetting, TdvBooleanSetting and quite a few others, but lets start with the TdvStringSetting first.</p>

<h5>The Code</h5>

<pre>
<code><span style="font: 10pt Courier New;"><span class="pas1-space">  TdvStringSetting </span><span class="pas1-symbol">=</span><span class="pas1-space"> </span><span class="pas1-reservedword">class</span><span class="pas1-symbol">(</span><span class="pas1-space"> TdvSetting </span><span class="pas1-symbol">)
</span><span class="pas1-space">  </span><span class="pas1-reservedword">private
</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> GetDefaultValueAsString</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">String</span><span class="pas1-symbol">;
</span><span class="pas1-space">  </span><span class="pas1-reservedword">protected
</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> GetAsBoolean</span><span class="pas1-symbol">:</span><span class="pas1-space"> Boolean</span><span class="pas1-symbol">;</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> GetAsDateTime</span><span class="pas1-symbol">:</span><span class="pas1-space"> TDateTime</span><span class="pas1-symbol">;</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> GetAsFloat</span><span class="pas1-symbol">:</span><span class="pas1-space"> Double</span><span class="pas1-symbol">;</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> GetAsInteger</span><span class="pas1-symbol">:</span><span class="pas1-space"> Longint</span><span class="pas1-symbol">;</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> GetAsString</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">string</span><span class="pas1-symbol">;</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> GetAsVariant</span><span class="pas1-symbol">:</span><span class="pas1-space"> Variant</span><span class="pas1-symbol">;</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;

</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> GetValue</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">var</span><span class="pas1-space"> Value</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">string</span><span class="pas1-symbol">):</span><span class="pas1-space"> Boolean</span><span class="pas1-symbol">;

</span><span class="pas1-space">    </span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> SetAsBoolean</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">const</span><span class="pas1-space"> Value</span><span class="pas1-symbol">:</span><span class="pas1-space"> Boolean</span><span class="pas1-symbol">);</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> SetAsDateTime</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">const</span><span class="pas1-space"> Value</span><span class="pas1-symbol">:</span><span class="pas1-space"> TDateTime</span><span class="pas1-symbol">);</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> SetAsFloat</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">const</span><span class="pas1-space"> Value</span><span class="pas1-symbol">:</span><span class="pas1-space"> Double</span><span class="pas1-symbol">);</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> SetAsInteger</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">const</span><span class="pas1-space"> Value</span><span class="pas1-symbol">:</span><span class="pas1-space"> Longint</span><span class="pas1-symbol">);</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> SetAsString</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">const</span><span class="pas1-space"> aValue</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">string</span><span class="pas1-symbol">);</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> SetVarValue</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">const</span><span class="pas1-space"> aValue</span><span class="pas1-symbol">:</span><span class="pas1-space"> Variant</span><span class="pas1-symbol">);</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;
</span><span class="pas1-space">  </span><span class="pas1-reservedword">public
</span><span class="pas1-space">    </span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> SaveToRegIni  </span><span class="pas1-symbol">(</span><span class="pas1-space"> aRegIni </span><span class="pas1-symbol">:</span><span class="pas1-space"> TRegistryIniFile</span><span class="pas1-symbol">;</span><span class="pas1-space"> </span><span class="pas1-reservedword">const</span><span class="pas1-space"> aSection </span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">String</span><span class="pas1-space"> </span><span class="pas1-symbol">);</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> LoadFromRegIni</span><span class="pas1-symbol">(</span><span class="pas1-space"> aRegIni </span><span class="pas1-symbol">:</span><span class="pas1-space"> TRegistryIniFile</span><span class="pas1-symbol">;</span><span class="pas1-space"> </span><span class="pas1-reservedword">const</span><span class="pas1-space"> aSection </span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">String</span><span class="pas1-space"> </span><span class="pas1-symbol">);</span><span class="pas1-space"> </span><span class="pas1-reservedword">override</span><span class="pas1-symbol">;

</span><span class="pas1-space">    </span><span class="pas1-reservedword">property</span><span class="pas1-space"> DefaultValue  </span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">String</span><span class="pas1-space">       </span><span class="pas1-reservedword">read</span><span class="pas1-space">  GetDefaultValueAsString</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">property</span><span class="pas1-space"> Value         </span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">string</span><span class="pas1-space">       </span><span class="pas1-reservedword">read</span><span class="pas1-space">  GetAsString
                                          </span><span class="pas1-reservedword">write</span><span class="pas1-space"> SetAsString</span><span class="pas1-symbol">;
</span><span class="pas1-space">  </span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

...

</span><span class="pas1-comment">{ TdvStringSetting }

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">GetAsBoolean</span><span class="pas1-symbol">:</span><span class="pas1-space"> Boolean</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">var
</span><span class="pas1-space">  S</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">string</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  S </span><span class="pas1-symbol">:=</span><span class="pas1-space"> GetAsString</span><span class="pas1-symbol">;
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> </span><span class="pas1-symbol">(</span><span class="pas1-identifier">Length</span><span class="pas1-symbol">(</span><span class="pas1-identifier">S</span><span class="pas1-symbol">)</span><span class="pas1-space"> </span><span class="pas1-symbol">&gt;</span><span class="pas1-space"> </span><span class="pas1-number">0</span><span class="pas1-symbol">)</span><span class="pas1-space"> </span><span class="pas1-reservedword">and</span><span class="pas1-space"> </span><span class="pas1-symbol">(</span><span class="pas1-identifier">S</span><span class="pas1-symbol">[</span><span class="pas1-number">1</span><span class="pas1-symbol">]</span><span class="pas1-space"> </span><span class="pas1-reservedword">in</span><span class="pas1-space"> </span><span class="pas1-symbol">[</span><span class="pas1-string">'T'</span><span class="pas1-symbol">,</span><span class="pas1-space"> </span><span class="pas1-string">'t'</span><span class="pas1-symbol">,</span><span class="pas1-space"> </span><span class="pas1-string">'Y'</span><span class="pas1-symbol">,</span><span class="pas1-space"> </span><span class="pas1-string">'y'</span><span class="pas1-symbol">]);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">GetAsDateTime</span><span class="pas1-symbol">:</span><span class="pas1-space"> TDateTime</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> StrToDateTime</span><span class="pas1-symbol">(</span><span class="pas1-identifier">GetAsString</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">GetAsFloat</span><span class="pas1-symbol">:</span><span class="pas1-space"> Double</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> StrToFloat</span><span class="pas1-symbol">(</span><span class="pas1-identifier">GetAsString</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">GetAsInteger</span><span class="pas1-symbol">:</span><span class="pas1-space"> Longint</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> StrToInt</span><span class="pas1-symbol">(</span><span class="pas1-identifier">GetAsString</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">GetAsString</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">string</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  </span><span class="pas1-reservedword">if</span><span class="pas1-space"> </span><span class="pas1-reservedword">not</span><span class="pas1-space"> GetValue</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Result</span><span class="pas1-symbol">)</span><span class="pas1-space"> </span><span class="pas1-reservedword">then</span><span class="pas1-space"> Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> </span><span class="pas1-string">''</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">GetAsVariant</span><span class="pas1-symbol">:</span><span class="pas1-space"> Variant</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">var
</span><span class="pas1-space">  S</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">string</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  </span><span class="pas1-reservedword">if</span><span class="pas1-space"> GetValue</span><span class="pas1-symbol">(</span><span class="pas1-identifier">S</span><span class="pas1-symbol">)</span><span class="pas1-space"> </span><span class="pas1-reservedword">then</span><span class="pas1-space"> Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> S </span><span class="pas1-reservedword">else</span><span class="pas1-space"> Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> Null</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">GetDefaultValueAsString</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">String</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> FDefaultValue</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">GetValue</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">var</span><span class="pas1-space"> Value</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">string</span><span class="pas1-symbol">):</span><span class="pas1-space"> Boolean</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  Value  </span><span class="pas1-symbol">:=</span><span class="pas1-space"> FValue</span><span class="pas1-symbol">;
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> True</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">LoadFromRegIni</span><span class="pas1-symbol">(</span><span class="pas1-identifier">aRegIni</span><span class="pas1-symbol">:</span><span class="pas1-space"> TRegistryIniFile</span><span class="pas1-symbol">;
</span><span class="pas1-space">  </span><span class="pas1-reservedword">const</span><span class="pas1-space"> aSection</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">String</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  </span><span class="pas1-reservedword">inherited</span><span class="pas1-space"> LoadFromRegIni</span><span class="pas1-symbol">(</span><span class="pas1-space"> aRegIni</span><span class="pas1-symbol">,</span><span class="pas1-space"> aSection </span><span class="pas1-symbol">);

</span><span class="pas1-space">  Value </span><span class="pas1-symbol">:=</span><span class="pas1-space"> aRegIni</span><span class="pas1-symbol">.</span><span class="pas1-identifier">ReadString</span><span class="pas1-symbol">(</span><span class="pas1-space"> aSection</span><span class="pas1-symbol">,</span><span class="pas1-space"> Identifier</span><span class="pas1-symbol">,</span><span class="pas1-space"> DefaultValue </span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">SaveToRegIni</span><span class="pas1-symbol">(</span><span class="pas1-identifier">aRegIni</span><span class="pas1-symbol">:</span><span class="pas1-space"> TRegistryIniFile</span><span class="pas1-symbol">;
</span><span class="pas1-space">  </span><span class="pas1-reservedword">const</span><span class="pas1-space"> aSection</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">String</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  </span><span class="pas1-reservedword">inherited</span><span class="pas1-space"> SaveToRegIni</span><span class="pas1-symbol">(</span><span class="pas1-space"> aRegIni</span><span class="pas1-symbol">,</span><span class="pas1-space"> aSection </span><span class="pas1-symbol">);

</span><span class="pas1-space">  aRegIni</span><span class="pas1-symbol">.</span><span class="pas1-identifier">WriteString</span><span class="pas1-symbol">(</span><span class="pas1-space"> aSection</span><span class="pas1-symbol">,</span><span class="pas1-space"> Identifier</span><span class="pas1-symbol">,</span><span class="pas1-space"> Value </span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">SetAsBoolean</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">const</span><span class="pas1-space"> Value</span><span class="pas1-symbol">:</span><span class="pas1-space"> Boolean</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">const
</span><span class="pas1-space">  Values</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">array</span><span class="pas1-symbol">[</span><span class="pas1-identifier">Boolean</span><span class="pas1-symbol">]</span><span class="pas1-space"> </span><span class="pas1-reservedword">of</span><span class="pas1-space"> </span><span class="pas1-reservedword">string</span><span class="pas1-symbol">[</span><span class="pas1-number">1</span><span class="pas1-symbol">]</span><span class="pas1-space"> </span><span class="pas1-symbol">=</span><span class="pas1-space"> </span><span class="pas1-symbol">(</span><span class="pas1-string">'F'</span><span class="pas1-symbol">,</span><span class="pas1-space"> </span><span class="pas1-string">'T'</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  SetAsString</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Values</span><span class="pas1-symbol">[</span><span class="pas1-identifier">Value</span><span class="pas1-symbol">]);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">SetAsDateTime</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">const</span><span class="pas1-space"> Value</span><span class="pas1-symbol">:</span><span class="pas1-space"> TDateTime</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  SetAsString</span><span class="pas1-symbol">(</span><span class="pas1-identifier">DateTimeToStr</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Value</span><span class="pas1-symbol">));
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">SetAsFloat</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">const</span><span class="pas1-space"> Value</span><span class="pas1-symbol">:</span><span class="pas1-space"> Double</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  SetAsString</span><span class="pas1-symbol">(</span><span class="pas1-identifier">FloatToStr</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Value</span><span class="pas1-symbol">));
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">SetAsInteger</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">const</span><span class="pas1-space"> Value</span><span class="pas1-symbol">:</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  SetAsString</span><span class="pas1-symbol">(</span><span class="pas1-identifier">IntToStr</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Value</span><span class="pas1-symbol">));
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">SetAsString</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">const</span><span class="pas1-space"> aValue</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">string</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  FValue </span><span class="pas1-symbol">:=</span><span class="pas1-space"> aValue</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> TdvStringSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">SetVarValue</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">const</span><span class="pas1-space"> aValue</span><span class="pas1-symbol">:</span><span class="pas1-space"> Variant</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  SetAsString</span><span class="pas1-symbol">(</span><span class="pas1-identifier">aValue</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;


</span></span>
</code></pre>

<h5>What does it do ?</h5>

<p>Since we had the skeleton of the TdvSetting in place, the only thing we needed to do was to override the necessary methods and implement our own features.  As you can see, we added approximately the same code as can be found in the TStringField in the VCL.</p>

<p>The only additional code is the implementation of the SaveToRegIni and LoadFromRegIni methods.  These methods will actually load and save the value of the Setting to the Registry.  Additionally when loading the value we will be using the Default value if the setting can't be found in the regsitry.  The Section where we will read / write the value can be supplied to the method and we will be using the identifier (name) of the setting as the key</p>

<h4>Creating the TdvSettings class</h4>

<h5>The explanation</h5>

<p>Well, now that we can make different type of Setting objects, we also need some kind of container to hold them.  For example our application might have quite a few settings : PrintInColor, CheckForUpdates, AutoConnect, ... but we will need some way to access them.  As mentioned before I created the TdvSettings class as a simple TObjectList.  It will hold a reference to the individual TdvSetting objects and we will be able to access them</p>

<h5>The Code</h5>

<pre>
<code><span style="font: 10pt Courier New;"><span class="pas1-space">  TdvSettings </span><span class="pas1-symbol">=</span><span class="pas1-space"> </span><span class="pas1-reservedword">class</span><span class="pas1-symbol">(</span><span class="pas1-space"> TObjectList </span><span class="pas1-symbol">)
</span><span class="pas1-space">  </span><span class="pas1-reservedword">private
</span><span class="pas1-space">    FRootKey</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">String</span><span class="pas1-symbol">;
</span><span class="pas1-space">  </span><span class="pas1-reservedword">protected
</span><span class="pas1-space">    </span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> CreateSettings</span><span class="pas1-symbol">;</span><span class="pas1-space"> </span><span class="pas1-reservedword">virtual</span><span class="pas1-symbol">;

</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> GetItems</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Index</span><span class="pas1-symbol">:</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">):</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> SetItems</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Index</span><span class="pas1-symbol">:</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">;</span><span class="pas1-space"> ASetting</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">);
</span><span class="pas1-space">  </span><span class="pas1-reservedword">public
</span><span class="pas1-space">    </span><span class="pas1-reservedword">constructor</span><span class="pas1-space"> Create</span><span class="pas1-symbol">(</span><span class="pas1-space"> </span><span class="pas1-reservedword">const</span><span class="pas1-space"> aRootKey </span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">String</span><span class="pas1-space"> </span><span class="pas1-symbol">);

</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> Add</span><span class="pas1-symbol">(</span><span class="pas1-identifier">ASetting</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">):</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> Extract</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Item</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">):</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> Remove</span><span class="pas1-symbol">(</span><span class="pas1-identifier">ASetting</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">):</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> IndexOf</span><span class="pas1-symbol">(</span><span class="pas1-identifier">ASetting</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">):</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> First</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> Last</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">function</span><span class="pas1-space"> SettingByIdentifier</span><span class="pas1-symbol">(</span><span class="pas1-space"> </span><span class="pas1-reservedword">const</span><span class="pas1-space"> aIdentifier </span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">String</span><span class="pas1-space"> </span><span class="pas1-symbol">)</span><span class="pas1-space"> </span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">;

</span><span class="pas1-space">    </span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> LoadFromRegistry</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> SaveToRegistry</span><span class="pas1-symbol">;

</span><span class="pas1-space">    </span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> Insert</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Index</span><span class="pas1-symbol">:</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">;</span><span class="pas1-space"> ASetting</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">);
</span><span class="pas1-space">    </span><span class="pas1-reservedword">property</span><span class="pas1-space"> Items</span><span class="pas1-symbol">[</span><span class="pas1-reservedword">Index</span><span class="pas1-symbol">:</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">]:</span><span class="pas1-space"> TdvSetting </span><span class="pas1-reservedword">read</span><span class="pas1-space"> GetItems </span><span class="pas1-reservedword">write</span><span class="pas1-space"> SetItems</span><span class="pas1-symbol">;</span><span class="pas1-space"> </span><span class="pas1-reservedword">default</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">property</span><span class="pas1-space"> RootKey </span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">String</span><span class="pas1-space"> </span><span class="pas1-reservedword">read</span><span class="pas1-space"> FRootKey </span><span class="pas1-reservedword">write</span><span class="pas1-space"> FRootKey</span><span class="pas1-symbol">;
</span><span class="pas1-space">  </span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-space">  </span><span class="pas1-symbol">...

</span><span class="pas1-comment">{ TdvSettings }

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">Add</span><span class="pas1-symbol">(</span><span class="pas1-identifier">ASetting</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">):</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> </span><span class="pas1-reservedword">inherited</span><span class="pas1-space"> Add</span><span class="pas1-symbol">(</span><span class="pas1-identifier">ASetting</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">constructor</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">Create</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">const</span><span class="pas1-space"> aRootKey</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">String</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  </span><span class="pas1-reservedword">inherited</span><span class="pas1-space"> Create</span><span class="pas1-symbol">(</span><span class="pas1-space"> True </span><span class="pas1-symbol">);
</span><span class="pas1-space">  FRootKey </span><span class="pas1-symbol">:=</span><span class="pas1-space"> aRootKey</span><span class="pas1-symbol">;
</span><span class="pas1-space">  CreateSettings</span><span class="pas1-symbol">;
</span><span class="pas1-space">  </span><span class="pas1-comment">// Read the settings from the Registry once the Settings object list has
</span><span class="pas1-space">  </span><span class="pas1-comment">// been initialised.
</span><span class="pas1-space">  LoadFromRegistry</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">CreateSettings</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin

end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">Extract</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Item</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">):</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">inherited</span><span class="pas1-space"> Extract</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Item</span><span class="pas1-symbol">));
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">First</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">inherited</span><span class="pas1-space"> First</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">GetItems</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Index</span><span class="pas1-symbol">:</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">):</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">inherited</span><span class="pas1-space"> Items</span><span class="pas1-symbol">[</span><span class="pas1-identifier">Index</span><span class="pas1-symbol">]);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">IndexOf</span><span class="pas1-symbol">(</span><span class="pas1-identifier">ASetting</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">):</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> </span><span class="pas1-reservedword">inherited</span><span class="pas1-space"> IndexOf</span><span class="pas1-symbol">(</span><span class="pas1-identifier">aSetting</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">Insert</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Index</span><span class="pas1-symbol">:</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">;</span><span class="pas1-space"> ASetting</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  </span><span class="pas1-reservedword">inherited</span><span class="pas1-space"> Insert</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Index</span><span class="pas1-symbol">,</span><span class="pas1-space"> aSetting</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">Last</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">(</span><span class="pas1-reservedword">inherited</span><span class="pas1-space"> Last</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">LoadFromRegistry</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">var
</span><span class="pas1-space">  lIndex   </span><span class="pas1-symbol">:</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">;
</span><span class="pas1-space">  lSetting </span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">;
</span><span class="pas1-space">  lRegIni  </span><span class="pas1-symbol">:</span><span class="pas1-space"> TRegistryIniFile</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  lRegIni </span><span class="pas1-symbol">:=</span><span class="pas1-space"> TRegistryIniFile</span><span class="pas1-symbol">.</span><span class="pas1-identifier">Create</span><span class="pas1-symbol">(</span><span class="pas1-string">''</span><span class="pas1-symbol">);
</span><span class="pas1-space">  </span><span class="pas1-reservedword">try
</span><span class="pas1-space">    </span><span class="pas1-reservedword">for</span><span class="pas1-space"> lIndex </span><span class="pas1-symbol">:=</span><span class="pas1-space"> </span><span class="pas1-number">0</span><span class="pas1-space"> </span><span class="pas1-reservedword">to</span><span class="pas1-space"> Pred</span><span class="pas1-symbol">(</span><span class="pas1-space"> Count </span><span class="pas1-symbol">)</span><span class="pas1-space"> </span><span class="pas1-reservedword">do
</span><span class="pas1-space">    </span><span class="pas1-reservedword">begin
</span><span class="pas1-space">      lSetting </span><span class="pas1-symbol">:=</span><span class="pas1-space"> Items</span><span class="pas1-symbol">[</span><span class="pas1-space"> lIndex </span><span class="pas1-symbol">];
</span><span class="pas1-space">      lSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">LoadFromRegIni</span><span class="pas1-symbol">(</span><span class="pas1-space"> lRegIni</span><span class="pas1-symbol">,</span><span class="pas1-space"> RootKey </span><span class="pas1-symbol">);
</span><span class="pas1-space">    </span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;
</span><span class="pas1-space">  </span><span class="pas1-reservedword">finally
</span><span class="pas1-space">    FreeAndNil</span><span class="pas1-symbol">(</span><span class="pas1-space"> lRegIni </span><span class="pas1-symbol">);
</span><span class="pas1-space">  </span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">Remove</span><span class="pas1-symbol">(</span><span class="pas1-identifier">ASetting</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">):</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> </span><span class="pas1-reservedword">inherited</span><span class="pas1-space"> Remove</span><span class="pas1-symbol">(</span><span class="pas1-identifier">aSetting</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">SaveToRegistry</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">var
</span><span class="pas1-space">  lIndex   </span><span class="pas1-symbol">:</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">;
</span><span class="pas1-space">  lSetting </span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">;
</span><span class="pas1-space">  lRegIni  </span><span class="pas1-symbol">:</span><span class="pas1-space"> TRegistryIniFile</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  lRegIni </span><span class="pas1-symbol">:=</span><span class="pas1-space"> TRegistryIniFile</span><span class="pas1-symbol">.</span><span class="pas1-identifier">Create</span><span class="pas1-symbol">(</span><span class="pas1-string">''</span><span class="pas1-symbol">);
</span><span class="pas1-space">  </span><span class="pas1-reservedword">try
</span><span class="pas1-space">    </span><span class="pas1-reservedword">for</span><span class="pas1-space"> lIndex </span><span class="pas1-symbol">:=</span><span class="pas1-space"> </span><span class="pas1-number">0</span><span class="pas1-space"> </span><span class="pas1-reservedword">to</span><span class="pas1-space"> Pred</span><span class="pas1-symbol">(</span><span class="pas1-space"> Count </span><span class="pas1-symbol">)</span><span class="pas1-space"> </span><span class="pas1-reservedword">do
</span><span class="pas1-space">    </span><span class="pas1-reservedword">begin
</span><span class="pas1-space">      lSetting </span><span class="pas1-symbol">:=</span><span class="pas1-space"> Items</span><span class="pas1-symbol">[</span><span class="pas1-space"> lIndex </span><span class="pas1-symbol">];
</span><span class="pas1-space">      lSetting</span><span class="pas1-symbol">.</span><span class="pas1-identifier">SaveToRegIni</span><span class="pas1-symbol">(</span><span class="pas1-space"> lRegIni</span><span class="pas1-symbol">,</span><span class="pas1-space"> RootKey </span><span class="pas1-symbol">);
</span><span class="pas1-space">    </span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;
</span><span class="pas1-space">  </span><span class="pas1-reservedword">finally
</span><span class="pas1-space">    FreeAndNil</span><span class="pas1-symbol">(</span><span class="pas1-space"> lRegIni </span><span class="pas1-symbol">);
</span><span class="pas1-space">  </span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">procedure</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">SetItems</span><span class="pas1-symbol">(</span><span class="pas1-identifier">Index</span><span class="pas1-symbol">:</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">;</span><span class="pas1-space"> ASetting</span><span class="pas1-symbol">:</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">);
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  </span><span class="pas1-reservedword">inherited</span><span class="pas1-space"> Items</span><span class="pas1-symbol">[</span><span class="pas1-identifier">Index</span><span class="pas1-symbol">]</span><span class="pas1-space"> </span><span class="pas1-symbol">:=</span><span class="pas1-space"> aSetting</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span><span class="pas1-reservedword">function</span><span class="pas1-space"> TdvSettings</span><span class="pas1-symbol">.</span><span class="pas1-identifier">SettingByIdentifier</span><span class="pas1-symbol">(
</span><span class="pas1-space">  </span><span class="pas1-reservedword">const</span><span class="pas1-space"> aIdentifier</span><span class="pas1-symbol">:</span><span class="pas1-space"> </span><span class="pas1-reservedword">String</span><span class="pas1-symbol">):</span><span class="pas1-space"> TdvSetting</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">var
</span><span class="pas1-space">  lcv </span><span class="pas1-symbol">:</span><span class="pas1-space"> Integer</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">begin
</span><span class="pas1-space">  Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> </span><span class="pas1-reservedword">Nil</span><span class="pas1-symbol">;

</span><span class="pas1-space">  </span><span class="pas1-reservedword">for</span><span class="pas1-space"> lcv </span><span class="pas1-symbol">:=</span><span class="pas1-space"> </span><span class="pas1-number">0</span><span class="pas1-space"> </span><span class="pas1-reservedword">to</span><span class="pas1-space"> Pred</span><span class="pas1-symbol">(</span><span class="pas1-space"> Count </span><span class="pas1-symbol">)</span><span class="pas1-space"> </span><span class="pas1-reservedword">do
</span><span class="pas1-space">  </span><span class="pas1-reservedword">begin
</span><span class="pas1-space">    </span><span class="pas1-reservedword">if</span><span class="pas1-space"> </span><span class="pas1-symbol">(</span><span class="pas1-space"> Items</span><span class="pas1-symbol">[</span><span class="pas1-space"> lcv </span><span class="pas1-symbol">].</span><span class="pas1-identifier">Identifier </span><span class="pas1-symbol">=</span><span class="pas1-space"> aIdentifier </span><span class="pas1-symbol">)</span><span class="pas1-space"> </span><span class="pas1-reservedword">then
</span><span class="pas1-space">    </span><span class="pas1-reservedword">begin
</span><span class="pas1-space">      Result </span><span class="pas1-symbol">:=</span><span class="pas1-space"> Items</span><span class="pas1-symbol">[</span><span class="pas1-space"> lcv </span><span class="pas1-symbol">];
</span><span class="pas1-space">      Break</span><span class="pas1-symbol">;
</span><span class="pas1-space">    </span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;
</span><span class="pas1-space">  </span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;
</span><span class="pas1-reservedword">end</span><span class="pas1-symbol">;

</span></span>
</code></pre>

<h5>What does it do ?</h5>

<p>Well, it is simply a container for a number of TdvSetting objects.  It has some basic code which will allow us to access the individual TdvSetting objects using their index or their Identifier (name).  We will be able to set the RootKey of the TdvSettings object and that is the base key which will be used when loading / storing the individual TdvSetting objects.</p>

<p>You willl notice that I added a CreateSettings method which is currently empty.  The goal is to implement this in descendant classes.  At the TdvSettings level we don't yet know which individual settings we will need, how they are called and what type they are ... Yet, I wanted to be able to create those settings from within the base class and once that is done read the settings if necessary.</p>

<p>In my TdvMyApplicationSettings I will override this method and add the necessary code to set up the individual TdvSetting objects I need for my applicaiton.</p>

<h3>What's next ?</h3>

<p>Currently we have a basic skeleton in place and we are able to continue from here.  If you're up for a challenge, you might want to create your own TdvSetting descendants.  I noticed I needed one for Integer values, DataTime values and Boolean values, so you could try to implement those.</p>

<p>As I mentioned at the end of the previous article, this isn't the only way, nor THE way to solve this problem, and I actually did try a few other approaches as well.  It did take me a few iterations to get to this stage.  For example, initial versions had the actual code for creating the TRegistryIniFile class inside the individual TdvSetting objects.</p>

<p>Quickly I noticed though that I had the exact same code in all my TdvSetting descendants LoadFromRegIni and SaveToRegIni methods so I started thinking again.  I thought that constructing & destroying the TRegistryIniFile might be something I don't want to execute for the 20 individual application settings so I ended up refactoring the code to it's current status</p>

<h3>Feedback</h3>

<p>I'm quite sure the code could be simplified and maybe improved, and I do welcome all suggestions and feedback.  So feel free to post all comments on this blog and I'll try to respond ASAP.  Maybe your feedback will shape the next article in this series ...</p>]]></content:encoded>
      <dc:date>2010-03-30T12:55:53+00:00</dc:date>
    </item>

    
    </channel>
</rss>
