<map version="0.7.1">
<node TEXT="GKO, luennot 21.-22.5.2004">
<node TEXT="Tiedostot" FOLDED="true" POSITION="left">
<node TEXT="Delphi Help: programming with Delphi, files, working with"/>
<node TEXT="L&#xe4;hestymistapoja tiedostonk&#xe4;sittelyyn">
<node TEXT="vanha tapa: Object (turbo) Pascalin standardifunktiot" FOLDED="true">
<node TEXT="teksti: readln, writeln"/>
<node TEXT="bin&#xe4;&#xe4;ritiedostot: blockread, blockwrite"/>
<node TEXT="voidaan tehd&#xe4; my&#xf6;s &apos;rakenteisia&apos; tiedostoja, jotka koostuvat tietueista"/>
</node>
<node TEXT="uusi tapa: tiedosto- ja muut tietovirrat (vrt. c++ ja java)" FOLDED="true">
<node TEXT="TStream ja sen aliluokat">
<node TEXT="tiedon lukeminen palloittain, virta toimii puskurina"/>
</node>
<node TEXT="Tavallisten tiedostojen lis&#xe4;ksi my&#xf6;s komponentit ja TPersistent-oliot (komponenttien propertyina) voivat ladata ja tallentaa itsens&#xe4; virtaan">
<node TEXT="TStream-luokka sis&#xe4;lt&#xe4;&#xe4; metodit ReadComponent ja WriteComponent"/>
</node>
<node TEXT="Tietokantasovelluksissa BLOB-tyylisten kenttien sis&#xe4;lt&#xf6;&#xe4; k&#xe4;sitell&#xe4;&#xe4;n tietovirroilla"/>
</node>
<node TEXT="winAPI:n tiedostofunktiot (sysutils-unitissa)">
<node TEXT="filecreate, fileopen..."/>
<node TEXT="tiedostoihin viitataan kahvojen (handle) avulla"/>
</node>
<node TEXT="monet komponentit (esim. TStringList) tarjoavat tiedostonk&#xe4;sittelymetodit"/>
<node TEXT="Lyhyet asetus/k&#xe4;ytt&#xe4;j&#xe4;tiedot kannattaa tallettaa INI-tiedostoihin tai rekisteriin"/>
<node TEXT="Raskain (ja koodaajan kannalta helpoin) tapa tiedostonk&#xe4;sittelyyn: tietokannan k&#xe4;ytt&#xf6;"/>
</node>
<node TEXT="Esimerkki: lue"/>
<node TEXT="Esimerkki: komponentin lataus/tallennus"/>
</node>
<node TEXT="Sovelluksen ja k&#xe4;ytt&#xe4;j&#xe4;tietojen tallennus" FOLDED="true" POSITION="left">
<node TEXT="INI-tiedostot" FOLDED="true">
<node TEXT="TIniFile-luokka"/>
<node TEXT="Vanha (win16:sta alkaen), mutta edelleen toimiva tapa konfigurointitietojen tallennukseen"/>
<node TEXT="Sis&#xe4;lt&#xe4;&#xe4; osioita, jotka edellen sis&#xe4;lt&#xe4;v&#xe4;t avain/arvo-pareja"/>
<node TEXT="Huom. INI-tiedostoja etsit&#xe4;&#xe4;n oletuksena windows-hakemistosta"/>
<node TEXT="K&#xe4;sitelt&#xe4;ess&#xe4; INI-tiedostoa samassa hakemistossa kuin k&#xe4;ynnistett&#xe4;v&#xe4; tiedosto, polku on merkitt&#xe4;v&#xe4; erikseen tiedoston nimeen" FOLDED="true">
<node TEXT=".\ alkuun (windows), tai"/>
<node TEXT="ParamStr(0) alkuun (windows), tai"/>
<node TEXT="Application.ExeName"/>
<node TEXT="getCurrentDir-funktiosta saattaa my&#xf6;s olla apua..."/>
<node TEXT="ParamStr:ssa ja ExeNamessa EXE-tiedoston nimi voidaan poistaa ExtractFileDir-funktiolla"/>
</node>
</node>
<node TEXT="Windowsin rekisteri" FOLDED="true">
<node TEXT="TRegistry"/>
<node TEXT="TRegistryIniFile">
<node TEXT="INI-tiedostojen &apos;n&#xe4;k&#xf6;inen&apos; rajapinta rekisteriin"/>
</node>
<node TEXT="Rekisteriin kannattaa tallettaa tietoja, jos sovelluksella on useita k&#xe4;ytt&#xe4;ji&#xe4; ja heill&#xe4; omat asetustiedostonsa"/>
<node TEXT="Rekisteriin kannattaa tallettaa mahdollisimman v&#xe4;h&#xe4;n tietoja (jos vain mahdollista, k&#xe4;yt&#xe4; ennemmin INI-tiedostoja)">
<node TEXT="Windowsin rekisteri kasvaa kasvamistaan turhista rekisterimerkinn&#xf6;ist&#xe4;"/>
<node TEXT="Erityisesti ohjelmat, jotka on jo uninstalloitu, saattavat j&#xe4;tt&#xe4;&#xe4; rekisteriin omia tietojaan"/>
</node>
</node>
</node>
<node TEXT="Virheiden k&#xe4;sittely" FOLDED="true" POSITION="right">
<node TEXT="Poikkeukset" FOLDED="true">
<node TEXT="Luokkia, jotka perit&#xe4;&#xe4;n Exception-luokasta"/>
<node TEXT="Delphi Help: programming with Delphi, exception handling, overview"/>
<node TEXT="Jaetaan kahteen p&#xe4;&#xe4;ryhm&#xe4;&#xe4;n j&#xe4;rjestelm&#xe4;n poikkeukset ja Delphi-poikkeukset"/>
<node TEXT="Windowsin p&#xe4;&#xe4;ohjelmasilmukka tarjoaa perusk&#xe4;sittelyn kaikille poikkeuksille" FOLDED="true">
<node TEXT="ohjelma ei &apos;kaadu&apos;, vaikka sit&#xe4; k&#xe4;ytett&#xe4;ess&#xe4; ilmenisi k&#xe4;sittelem&#xe4;t&#xf6;n poikkeus"/>
<node TEXT="yleens&#xe4; virheet t&#xe4;ytyy kuitenkin k&#xe4;sitell&#xe4; &apos;omassa koodissa&apos; l&#xe4;hell&#xe4; poikkeuksen aiheuttajaa"/>
</node>
<node TEXT="syntaksi: try/except/finally"/>
</node>
<node TEXT="Loogiset tarkastukset l. v&#xe4;itt&#xe4;m&#xe4;t (assert)" FOLDED="true">
<node TEXT="k&#xe4;ytet&#xe4;&#xe4;n kehitysaikana varmistamaan, ettei ohjelmaan ole p&#xe4;&#xe4;ssyt loogisia virheit&#xe4;"/>
<node TEXT="k&#xe4;&#xe4;nt&#xe4;j&#xe4;n optioilla assertit voidaan j&#xe4;tt&#xe4;&#xe4; k&#xe4;&#xe4;nt&#xe4;m&#xe4;tt&#xe4;, joten julkaistavan ohjelman suorituskyky ei k&#xe4;rsi v&#xe4;itt&#xe4;mist&#xe4;"/>
<node TEXT="n&#xe4;it&#xe4; pit&#xe4;isi olla ohjelmissa huomattavasti nykyist&#xe4; enemm&#xe4;n!" FOLDED="true">
<node TEXT="ensimm&#xe4;inen askel kohti ohjelmien formaalia m&#xe4;&#xe4;rityst&#xe4;"/>
<node TEXT="funktion alussa v&#xe4;itt&#xe4;mill&#xe4; voidaan tarkistaa esiehdot, joiden on oltava voimassa funktioon tultaessa" FOLDED="true">
<node TEXT="esim. tyhj&#xe4;lle pinolle ei voida tehd&#xe4; POP-operaatiota"/>
</node>
<node TEXT="funktion lopussa voidaan tarkistaa j&#xe4;lkiehdot, joiden on oltava voimassa funktion j&#xe4;lkeen (&apos;mit&#xe4; funktio lupaa toteuttaa&apos;)" FOLDED="true">
<node TEXT="esim. POP-operaation j&#xe4;lkeen pinon alkioiden lukum&#xe4;&#xe4;r&#xe4; v&#xe4;henee yhdell&#xe4;"/>
</node>
<node TEXT="lis&#xe4;&#xe4; formaalit menetelm&#xe4;t -kurssilla..."/>
</node>
<node TEXT="eiv&#xe4;t korvaa poikkeusk&#xe4;sittely&#xe4;, vaan ovat testauksen apuv&#xe4;line" FOLDED="true">
<node TEXT="esim. tiedoston olemassaolon tarkistusta ei voi laittaa v&#xe4;itt&#xe4;m&#xe4;ksi, koska tiedosto on sovelluksesta riippumaton resurssi"/>
</node>
</node>
<node TEXT="OutputDebugString" FOLDED="true">
<node TEXT="WinAPI:n funktio, sovellus l&#xe4;hett&#xe4;&#xe4; viestin debuggerille"/>
<node TEXT="Korvaa DOS (ja valitettavan monista WWW)-ohjelmista tutun tavan kirjoittaa ruutuun &apos;debug-merkkijonoja&apos;, kuten muuttujien arvoja"/>
<node TEXT="N&#xe4;kyv&#xe4;t Delphissa Events-debugikkunassa"/>
<node TEXT="Huom. hidastavat ohjelman suoritusta hieman, joten ei kannata k&#xe4;ytt&#xe4;&#xe4; jatkuvasti (ifdef-vakiolla funktion k&#xe4;&#xe4;nt&#xe4;misen voi toki asettaa ehdolliseksi)"/>
<node TEXT="Esimerkki: errorlib"/>
</node>
<node TEXT="Lokitiedostot"/>
</node>
<node TEXT="C-kieli ja tapahtumapohjainen ohjelmointi" POSITION="left">
<node TEXT="Graafinen k&#xe4;ytt&#xf6;liittym&#xe4; == suorak&#xe4;ytt&#xf6;liittym&#xe4; (vs. per&#xe4;kk&#xe4;inen) - vrt. johdantoluennon materiaali"/>
<node TEXT="esim. komentorivin EDIT-ohjelma graafisena k&#xe4;ytt&#xf6;liittym&#xe4;n&#xe4;"/>
<node TEXT="Materiaali: Windows-ohjelmointi C-kielell&#xe4;, luvut 1-2"/>
<node TEXT="esimerkki: dos-autolaskuri">
<node TEXT="1. switch/case-p&#xe4;&#xe4;ohjelmasilmukka (laskuri.c)"/>
<node TEXT="2. viestinv&#xe4;litys ascii-koodeina (laskuri2.c)"/>
<node TEXT="3. k&#xe4;ytt&#xf6;liittym&#xe4; ja komennot taulukoihin (laskuri3.c)"/>
<node TEXT="4. n&#xe4;pp&#xe4;imist&#xf6;n ja hiiren samanaikainen k&#xe4;sittely (laskurh.c, ei toimi c++ -builderissa!)"/>
<node TEXT="5. piirtotapahtuma mukaan (laskurh2.c)"/>
</node>
</node>
<node TEXT="Toimintojen k&#xe4;sittely" POSITION="right">
<node TEXT="Delphi help: Programming with delphi, organizing actions for toolbars and menus (hae: actions)"/>
<node TEXT="Toiminto: yhteen tai useampaan (yleens&#xe4; visuaaliseen) komponenttiin liittyv&#xe4; yhteinen tapahtumak&#xe4;sittelij&#xe4;">
<node TEXT="Toiminto on kapseloitu TAction-luokasta perittyyn olioon, jonka onExecute-tapahtumaa kutsutaan toiminnon lauetessa"/>
<node TEXT="Toiminto laukeaa esim. menua tai painiketta painettaessa (sis&#xe4;lt&#xe4;v&#xe4;t action-propertyt) tai tietokantaa k&#xe4;sitelt&#xe4;ess&#xe4;" FOLDED="true">
<node TEXT="T&#xe4;ll&#xf6;in esim. p&#xe4;&#xe4;valikko, ty&#xf6;kalupalkin nappulat ja ponnahdusvalikot voidaan tehd&#xe4; samoilla toiminnoilla ilman erillisi&#xe4; tapahtumak&#xe4;sittelij&#xf6;it&#xe4;"/>
</node>
<node TEXT="onUpdate-tapahtumaa kutsutaan jatkuvasti sovellusta ajettaessa, jolloin k&#xe4;ytt&#xe4;j&#xe4; voi esim. s&#xe4;&#xe4;t&#xe4;&#xe4; k&#xe4;ytt&#xf6;liittym&#xe4;komponenttien n&#xe4;kyvyytt&#xe4; ja enabled-ominaisuutta sovelluksen tilan mukaan" FOLDED="true">
<node TEXT="yhten&#xe4;inen ratkaisu k&#xe4;ytt&#xf6;liittym&#xe4;komponenttien tilan seuraamiseen"/>
<node TEXT="esim. windowsin notepadissa cut/copy/paste-menuitemit ovat p&#xe4;&#xe4;ll&#xe4; vain, kun lomakkeella on valittua teksti&#xe4;"/>
</node>
<node TEXT="Delphi sis&#xe4;lt&#xe4;&#xe4; joukon esim&#xe4;&#xe4;riteltyj&#xe4; toimintoluokkia, esim. cut/copy/paste ja tietokannan vakiotapahtumat" FOLDED="true">
<node TEXT="toimintaluokkiin on kirjoitettu valmiiksi toimintoon kuuluva koodi (esim. copy-toiminto kopioi lauetessaan valitun alueen leiketauluun)"/>
<node TEXT="omia toimintoluokkia voi m&#xe4;&#xe4;ritell&#xe4; itse TAction-luokasta perim&#xe4;ll&#xe4;"/>
</node>
</node>
<node TEXT="Actionlistit ja ActionBandit">
<node TEXT="Actionlist: k&#xe4;ytt&#xf6;liittym&#xe4;n tai sovelluksen tapahtumien (tai toimintojen, Action) keskitetty hallinta yhdess&#xe4; listassa niin, ett&#xe4; monella kontrollilla voi olla sama toiminto"/>
<node TEXT="Action-sekvenssi (ks. Programming with delphi)"/>
<node TEXT="ActionBand: &quot;kustomoitava&quot; actionlist" FOLDED="true">
<node TEXT="ei CLX:ss&#xe4;"/>
<node TEXT="mahdollistaa harvoin k&#xe4;ytettyjen menuitemien automaattisen piilotuksen, win xp-tyyliset menut ja valmiin k&#xe4;ytt&#xf6;liittym&#xe4;n menujen kustomointiin"/>
<node TEXT=" (subjektiivinen mielipide: automaattinen piilotus on ehk&#xe4; win2k:n ja my&#xf6;hempien TURHIN ja rasittavin ominaisuus, jonka tosin onneksi saa pois p&#xe4;&#xe4;lt&#xe4;....)"/>
</node>
</node>
</node>
</node>
</map>
