Difference between revisions of "FPSpreadsheet tutorial: Writing a mini spreadsheet application/fi"
Line 91: | Line 91: | ||
Koska Office-sovellukset on valikko ja työkalurivi, lisää '''TMainMenu''' ja '''TToolbar''' komponentti lomakkeelle (form). (Voit jopa tehdä samantapaisen ribbon käyttöliittymän uusien Microsoft-sovellusten tapaan lisäämällä '''TSpkToolbar''' lomakkeelle, joka löytyy [http://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/spktoolbar/ Lazarus Code and Components Repository], mutta ole tietoinen siitä, että tämä ei vielä tarjoa kaikkia vakiotyökalurivin ominaisuuksia). | Koska Office-sovellukset on valikko ja työkalurivi, lisää '''TMainMenu''' ja '''TToolbar''' komponentti lomakkeelle (form). (Voit jopa tehdä samantapaisen ribbon käyttöliittymän uusien Microsoft-sovellusten tapaan lisäämällä '''TSpkToolbar''' lomakkeelle, joka löytyy [http://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/spktoolbar/ Lazarus Code and Components Repository], mutta ole tietoinen siitä, että tämä ei vielä tarjoa kaikkia vakiotyökalurivin ominaisuuksia). | ||
− | + | ||
+ | Itse asiassa tarvitaan toinen työkalupalkki kaavojen muokkaamiseen. Kuten näette myöhemmin, sen koko on muutettavissa; Lisätään '''TSplitter''' lomakkeelle ja laita top-align niin, että siihen sijoittuu alle kaksi työkaluriviä. Pitääkseen työkalupalkin minimikoon siihen pitäisi laittaa rajoitukset: Katso työkalupalkin nykyinen korkeus ja kirjoita se luku <code>MinHeight</code> kenttään, työkalupalkin <code>Constraints</code> ominaisuudessa. Erottaaksesi kaavatyökalurivin muusta lomakkeella, aktivoi vaihtoehto <code>ebBottom</code> ominaisuudessa <code>EdgeBorders</code> toisella työkalurivillä. | ||
Koska valikko ja työkalurivit on käsittelevät samoja käyttäjän toimintoja on hyödyllistä lisätä '''TActionList''' komponentti yhdistämään kaikki toiminnot. Liittämällä siihen valikon kohteet ja toolbuttons niin molemmat reagoivat käyttäjän vuorovaikutusta samalla tavalla ilman ylimääräisiä koodausta. | Koska valikko ja työkalurivit on käsittelevät samoja käyttäjän toimintoja on hyödyllistä lisätä '''TActionList''' komponentti yhdistämään kaikki toiminnot. Liittämällä siihen valikon kohteet ja toolbuttons niin molemmat reagoivat käyttäjän vuorovaikutusta samalla tavalla ilman ylimääräisiä koodausta. | ||
Line 224: | Line 225: | ||
Tässä kaikki mikä muuttaa fontteja. Käännä ja aja. Kirjoita testitekstiä ja kokeile näitä ohjelman ominaisuuksia. | Tässä kaikki mikä muuttaa fontteja. Käännä ja aja. Kirjoita testitekstiä ja kokeile näitä ohjelman ominaisuuksia. | ||
− | ==== | + | ==== Vakiotoimintojen käyttäminen ==== |
[[file:sFontStyleAction_selected.png|right|300px]] | [[file:sFontStyleAction_selected.png|right|300px]] | ||
− | FPSpreadsheet | + | FPSpreadsheet tukee useita muotoiluja, joita voidaan soveltaa soluihin, kuten tekstin tasausta, tekstin kierto, tekstin fontti, erilaiset solureunat tai taustan värit. Tyypilliset graafiset sovellusohjelmat sisältävät valikkokomentojen ja / tai työkalurivin painikkeita, jotka on liitetty jollekin näistä ominaisuuksista ja voidaan ottaa käyttöön yksinkertaisesti hiiren klikkauksella. Lisäksi näiden tila usein heijastuu aktiivisen solun ominaisuutena. Esimerkiksi, jos painike on lihavoiti niin tätä painiketta painettaessa aktiivinen solu lihavoituu, mutta jos sitä ei valita niin lihavointi poistetaan. Koodauksen yksinkertaistamiseksi näitä vakiotehtäviä on lisätty kirjastoon. |
+ | |||
+ | * '''TsWorksheetAddAction''': lisää tyhjän laskentataulukon työkirjaan. Määritä sen nimi <code>NameMask</code> omaisuudessa. <code>NameMask</code> on sisältävä muotoilumäärittelyn <code>%d</code>, joka korvataan ajonaikana numerolla siten, että laskentataulukon nimi on ainutkertainen. | ||
− | * ''' | + | * '''TsWorksheetDeleteAction''': Poistaa aktiivisen laskentataulukon jos käyttäjä vahvistaa sen valintaikkunassa. Viimeistä laskentataulukkoa ei voi poistaa. |
− | * ''' | + | * '''TsWorksheetRenameAction''': Uudelleen nimeää aktiivisen laskentataulukon. |
− | * ''' | + | * '''TsCopyAction''': Kopioi valittujen solujen sisällön luetteloon ("CellClipboard"), josta ne voidaan liittää takaisin taulukkolaskentaan toiseen paikkaan. Prosessi voi tapahtua leikepöydälle-tavalla ("kopio" / "leikkaa", sitten "liitä") tai tavalla "kopio muotoilut" kuten muissa Office-sovelluksissa. Ominaisuus <code>CopyItem</code> määrittää mitä siirretään: koko solu tai vain solujen arvot, solujen kaavoja tai solumuotoiluja. |
− | * ''' | + | * '''TsFontStyleAction''': Muuttaa valittujen solujen fontin tyylin. Ominaisuus <code>FontStyle</code> määrittelee, onko toiminta fontin lihavoiti, kursivoiti, alleviivaus tai yliviivaus. Normaalisti kukin fontti tyyli tekee oman toiminnan. Katso alla oleva esimerkki. |
− | * ''' | + | * '''TsHorAlignmentAction''': Käytetään muuttamaan valituissa soluissa tekstin keskitystä vaakasuorassa. Valinnalla <code>HorAlignment</code> määritelläään, minkälaista keskitystä käytetään (vasenta, keskitetään keskelle, oikealle). |
− | * ''' | + | * '''TsVertAlignmentAction''': Muuttaa valituissa soluissa tekstin keskitystä pystysuorassa. Määrittely on <code>VertAlignment</code> ominaisuudessa. |
− | * ''' | + | * '''TsTextRotationAction''': Määrittää tekstin suunnan valituissa soluissa. Määrittely on <code>TextRotation</code> ominaisuudessa. |
− | * ''' | + | * '''TsWordWrapAction''': Mahdollistaa monirivisen tekstin valituissa soluissa. Jos teksti on pidempi kuin solun leveyden (tai korkeus, jos teksti käännetty), niin se jakautuu useille riveille. |
− | * ''' | + | * '''TsNumberFormatAction''': Määrittää mitä numeromuotoa käytetään valituissa soluissa. Käytettävä muoto määritellään ominaisuudessa <code>NumberFormat</code> (se voi olla esim. <code>nfFixed</code>) jo valmiissa muodoissa ja <code>NumberFormatStr</code> erikoismuotoilussa. |
− | * ''' | + | * '''TsDecimalsAction''': Lisää tai vähentää lukuarvoa valituissa soluissa. Ominaisuudessa <code>Delta</code> on haluttu lisäys (+1) tai vähennys (-1). |
− | * ''' | + | * '''TsCellBorderAction''': Määrittää millainen kehys piirretään valittujen solujen ympärille. Aliominaisuudet <code>East</code>, <code>West</code>, <code>North</code>, <code>South</code>, <code>InnerHor</code> ja <code>InnerVert</code> määrittelee <code>Borders</code>:ssa miltä rajat näyttää solualue kummallakin puolella. Huomaa, että jokainen suorakaiteen solualue on yhtätuumainen; ominaisuudet <code>East</code>, <code>West</code>, <code>North</code> ja <code>South</code> vastaavat koko solualueen ulkorajoja. Sisemmät rajat määritellään <code>InnerHor</code> ja <code>InnerVert</code>. Käyttämällä näitä ominaisuuksia, rajoja voidaan kytkeä päälle ja pois päältä (<code>Visible</code>). Lisäksi viivan tyyliä ja linjan väriä voidaan muuttaa. |
− | * ''' | + | * '''TsMergeAction''': Jos valittu niin valitun suorakulmaisen alueen solut on sulautuvat yhteen. Jos poistat sen niin toiminta erottaa lohkon yksittäisiä soluja. Huomaa, että lohkon sisältö ja muotoilu on määritelty ylhäältä vasemmalla olevan solun mukaan lohkoon. Muiden solujen sisältö ja muoto menetetään. |
− | |||
==== Adding buttons for "Bold", "Italic", and "Underline" ==== | ==== Adding buttons for "Bold", "Italic", and "Underline" ==== |
Revision as of 13:52, 17 March 2015
FPSpreadsheet harjoitus: Tee oma pieni taulukkolaskentasovellus
Johdanto
FPSpreadsheet on tehokas paketti eri taulukkolaskentatiedostojen lukemista ja kirjoittamista varten. Päätarkoitus on tarjota rajapinta, joka pystyy natiiviisti tuomaan ja viemään tärkeimpiä taulukkolaskentaohjelmien tiedostomuotoja ilman että näitä taulukkolaskentasovelluksia on asennettu.
Pian kuitenkin heräsi toive käyttää tätä pakettia myös tiedostojen sisällön muokkaamiseen ja muotoiluun. Tätä varten kirjasto sisältää erityisen taulukon ohjauksen, FPSpreadsheetGrid, joka muistuttaa läheisesti taulukkolaskentaohjelman taulukkoa. FPSpreadsheet:n mukana tuleva esimerkkiohjelma "Spready" näyttää mitä piirteitä on tarjolla. Tosin siinä joukko muotoiluasetuksia,joten tässä demossa on edelleen jopa yli 1400 riviä koodia pääkäännösyksikössä. Tarjolla on joukko visuaalisia komponentteja jotka yksinkertaistavat taulukkolaskentasovelluksen tekemisen.
Tämän ohjeen tarkoituksena olla oppaana miten tehdä yksinkertaisesti taulukkolaskentaohjelma käyttäen näitä komponentteja.
Vaikka suurin osa FPSpreadsheet kirjaston sisäisestä rakenteesta kuuluu visuaalisiin komponentteihin niin on suositeltavaa, että sinulla on jonkin verran tietoa myös koko FPSpreadsheet kirjastosta. Tietenkin pitäisi olla perustiedot Lazaruksesta ja Free Pascal:sta sekä taidot miten työskennellä Lazaruksen komponenttimuokkaimen parissa.
Visuaaliset FPSpreadsheet komponentit
FPSpreadsheet sisältää paljon ei-visuaalisia luokkia, kuten TsWorkbook, TsWorksheet jne. Nämä pitää kirjaston yleiskäyttöisenä kaikenlaisia Pascal ohjelmia varten.
TsWorkbookSource
Visuaalisten FPSpreadsheet-komponenttien sydän on TsWorkbookSource-komponentti. Tämä tarjoaa yhteyden ei-visuaalisten laskentataulukkotietojen ja lomakkeella olevien visuaalisten komponenttien kanssa. Sen tarkoituksena on olla samanlainen kuin TDataSource komponentti tietokantasovelluksissa joka yhdistää tietokannan taulukoita tai kyselyitä.
Kaikilla visuaalisilla FPSpreadsheet komponenteilla on ominaisuus WorkbookSource joka yhdistää ne tietoketjuun TsWorkbookSource kautta. WorkbookSource ylläpitää luetteloa kaikista siihen liitetyistä komponenteista. Sisäisesti näitä kontrolleja nimitetään "kuuntelijoiksi", koska he kuuntelevat WorkbookSource:n jakaman tiedon.
Workbook ja worksheets käyttävät tapahtumia (events) ilmoittamaan WorkbookSource:lle kaikista merkittävistä muutoksista: muutokset solujen sisällöstä tai muotoilusta, muitten solujen valitseminen, laskentataulukon lisääminen tai poistaminen jne. Tieto näistä muutoksista on vyörytetty "kuuntelu" komponenteille, ja ne reagoivat omalla erikoistuneella tavalla näihin muutoksiin. Jos esimerkiksi uusi taulukko lisätään taulukkolaskentaan niin visuaalinen TsWorkbookTabControl luo uuteen välilehteen uuden laskentataulukon, ja TsWorksheetGrid lataa uuden taulukon.
TsWorkbookTabControl
Tämä on välilehtikomponentti joka tarjoaa välilehden jokaiselle laskentataulukolle taulukkolaskennassa. Välilehtien nimet ovat samat kuin laskentataulukoissa. Valitsemalla toisen välilehden se viestitetään muille visuaalisille taulukkolaskentakomponenteille WorkbookSource-komponentin kautta.
TsWorksheetGrid
TsWorksheetGrid on periytetty LCL:n DrawGrid-komponentista ja se näyttää valitut solut laskentataulukossa. Tekstit eivät tallennu kuten StringGrid tekee, mutta ne otetaan TsWorksheet tietorakenteeseen. Samoin worksheet tarjoaa tiedon siitä, miten kukin solu on muotoiltu. Kuten kaikki LCL grid:t se on joukko ominaisuuksia ja voidaan soveltaa moniin sovelluksiin muuttamalla Options kohtaa. Tärkeimmät niistä kerrotaan jäljempänä.
TsCellEdit
On tyypillistä että taulukkolaskentaohjelmat on varustettu tekstikentällä jossa voi muokata laskukaavaa ja solun sisältöä. Tähän tarkoitukseen on TsCellEdit. Se näyttää laskentataulukon aktiivisen solun sisällön , joka on sama kuin WorksheetGrid:n aktiivinen solu. Kun muokkaus on valmis (painamalla ↵ Enter,tai valitsemalla toinen solu WorksheetGrid:ssa) uuden solun arvo siirretään taulukkoon. Sisäisesti TsCellEdit on Memo-tyylinen , eli se pystyy käsittelemään monirivistä tekstiä oikein. Paina näppäimistöltä Ctrl+↵ Enter jos haluat lisätä pakollisen rivinsiirron.
TsCellIndicator
Tämä on TEdit tyylinen komponentti, joka näyttää valitun solun osoitteen Excel notaatiolla, esimerkiksi "A1", jos aktiivinen solu on ensimmäisessä rivissä ja ensimmäisessä sarakkeessa (rivi = 0, sarake = 0). Toisaalta, jos tähän annetaan voimassa oleva solun osoite niin vastaava solu aktivoituu.
TsCellCombobox
Tällä ComboBox-tyylisellä komponentilla muokataan solujen ominaisuuksia valitsemalla arvot pudotusvalikosta. Se millaisia piirteitä valitaan määräytyy CellFormatItem
ominaisuuden mukaan:
cfiFontName
: luettelo sisältää nykyiseen järjestelmään saatavilla olevien kirjaisimien (fonttien) nimet. Jos fontti valitaan niin vastaava fonttia käytetään valituissa soluissa.cfiFontSize
: luettelo sisältää tyypillisimmät kirjasinkoot joita käytetään taulukkolaskentaohjelmassa. Kohteen valitseminen muuttaa fontin koon valituissa soluissa vastaamaan fontin kokoa.cfiFontColor
: luettelo sisältää workbook:n paletin kaikki värit.
Valittu väri on tulee käyttöön kaikissa valituissa soluissa.
cfiBackgroundColor
: kutencfiFontColor
- valittua väriä käytetään taustavärinä valituissa soluissa.
TsSpreadsheetInspector
Periytetty TValueListEditor ja näyttää ominaisuuksien nimi-arvo-pareja workbook:ssa , valitun taulukon, ja sisältöä sekä aktiivisen solun muotoilua . Sen päätarkoitus on auttaa virheenkorjauksessa.
Tee taulukkolaskentaohjelma
Siinä oli tarpeeksi teoriaa joten voimme aloittaa. Tehdään pieni taulukkolaskentaohjelma. Ei se ole niin täydellinen taulukkolaskentaohjelma mitä toimisto-ohjelmissa kuten Excel tai Open/LibreOffice on, mutta siinä on tärkeimmät ominaisuudet mitä FPSpreadsheet-kirjastossa on. Ja se käyttää FPSpreadsheet komponentteja jolla saavutetaan vähäinen kirjoitettavan koodin määrä.
Esivalmistelut
Luo uusi projekti ja tallenna se mieleiseen kansioon.
Koska Office-sovellukset on valikko ja työkalurivi, lisää TMainMenu ja TToolbar komponentti lomakkeelle (form). (Voit jopa tehdä samantapaisen ribbon käyttöliittymän uusien Microsoft-sovellusten tapaan lisäämällä TSpkToolbar lomakkeelle, joka löytyy Lazarus Code and Components Repository, mutta ole tietoinen siitä, että tämä ei vielä tarjoa kaikkia vakiotyökalurivin ominaisuuksia).
Itse asiassa tarvitaan toinen työkalupalkki kaavojen muokkaamiseen. Kuten näette myöhemmin, sen koko on muutettavissa; Lisätään TSplitter lomakkeelle ja laita top-align niin, että siihen sijoittuu alle kaksi työkaluriviä. Pitääkseen työkalupalkin minimikoon siihen pitäisi laittaa rajoitukset: Katso työkalupalkin nykyinen korkeus ja kirjoita se luku MinHeight
kenttään, työkalupalkin Constraints
ominaisuudessa. Erottaaksesi kaavatyökalurivin muusta lomakkeella, aktivoi vaihtoehto ebBottom
ominaisuudessa EdgeBorders
toisella työkalurivillä.
Koska valikko ja työkalurivit on käsittelevät samoja käyttäjän toimintoja on hyödyllistä lisätä TActionList komponentti yhdistämään kaikki toiminnot. Liittämällä siihen valikon kohteet ja toolbuttons niin molemmat reagoivat käyttäjän vuorovaikutusta samalla tavalla ilman ylimääräisiä koodausta. Lisäksi: FPSpreadsheet:n visuaalinen komponenttipaketti sisältää koko joukon taulukkolaskennan vakiotoimintoja valmiina käytettäväksi.
Täydellinen sovellus sisältää paljon kuvakkeita Työkalurivillä. Siksi käytämme TImageList komponenttia,
johon on linkitetty Images
ominaisuus TMainMenu, TToolbars ja TActionList komponenteissa. Mistä kuvakkeet? Voit katsoa Lazaruksen asennuksen images
kansiota josta löytyy standardit kuvakkeet lataamiseen ja tallentamiseen jne.
Nämä ovat osajoukko famfamfam SILK kuvakekirjastosta. Toinen laaja kuvakekirjasto on Fugue kuvakekokoelma. Molemmat kokoelmat ovat lisensoidaan "Creative commons" lisenssillä ja ovat vapaasti jopa kaupalliseen käyttöön, edellyttäen että asianmukaiset viitteet laitetaan luotuun ohjelmaan. Kun valitset kuvakkeita ota mieluummin png kuvana, ja varmista, että käytät aina samankokoisia kuvakkeita, yleensä 16x16 pikseliä on sopiva koko.
Setting up the visual workbook
TsWorkbookSource
Kuten edellä mainittiin niin johdanto-osan TsWorkbookSource komponentti on rajapinta työkirjan ja valvonnan käyttöliittymä. Tämä komponentti lisätään lomakkeelle ja sille annetaan kunnon nimi (Tällä kertaa pidämme kuitenkin oletusnimen sWorkbookSource1
).Kuten pian huomaataan, tätä komponenttia osoitetaan kaikkien FPSpreadsheet_visual paketin komponenttien omaisuudessa WorkbookSource
.
WorkbookSource vastaa tietojen lataamisesta ja kirjoittamisesta tiedostoon sekä työkirjan kommunikaatiosta. Siksi sillä on joukko vaihtoehtoja, jotka välitetään työkirjaan ja ohjaa näitä prosesseja:
type
TsWorkbookOption = (boVirtualMode, boBufStream, boAutoCalc, boCalcBeforeSaving, boReadFormulas);
TsWorkbookOptions = set of TsWorkbookOption;
Tärkeimmät ovat:
boAutoCalc
: aktivoi automaattisen laskennan kaavoissa aina kun solun sisältö muuttuu.boCalcBeforeSaving
: laskee kaavat ennen kuin työkirja tallennetaan tiedostoonboReadFormulas
: jos on asetettu niin kaavat luetaan tiedoston, muuten vain kaavojen tulokset.boBufStream
jaboVirtualMode
: Muissa kuin visuaalisissa ohjelmissa, nämä vaihtoehdot voivat auttaa, jos muisti on loppumassa kun kyseessä on todella suuria työkirjoja.boVirtualMode
, ei ole käyttökelpoinen visuaalisissa sovelluksissa, koska vältytään pitämään tietoja laskentataulukon soluissa. Katso myös FPSpreadsheet#Virtual_mode.
Tässä opetusohjelmassa, oletetaan, että vaihtoehtot boAutoCalc
ja boReadFormulas
valitaan.
TsWorkbookTabControl
Ensimmäinen visuaalinen komponentti joka laitetaan lomakkeelle on TsWorkbookTabControl - klikkaa se lomakkeelle (sellaiseen tilaan joka ei ole työkalurivin käytössä). Aseta Align ominaisuuteen alClient joka täyttää sen tähän lomakkeen osaan, tämä näyttää TabControl:n vain suorakaiteena. Linkitä sen WorkbookSource
kohtaa se TsWorkbookSource komponentti, joka lisättiin juuri ennen sitä. Nyt TabControl näkyy välilehti nimeltään "Sheet1". Tämä johtuu siitä, että TsWorkbookSource on luonut tyhjän työkirjan joka sisältää yhden laskentataulukon "Sheet1". WorkbookSource synkronoi tämän sisäinen työkirjan TabControl (ja muut visuaaliset komponentit jotka tähän on tulossa) niin,
että se näyttää tämän laskentataulukon välilehtenä.
Excelissä laskentataulukon välilehdet ovat laskentataulukon alaosassa - tämä vaikutus voidaan saavuttaa asettamalla ominaisuus TabPosition
TabControl komponentissa , tilaan tpBottom
. LCL:ssä on joitakin näytön piirtämishasteita TabPosition ominaisuudessa, siksi oletusasetus on tpTop
.
Kuvakaappaus osoittaa, kuinka pitkälle on jo edetty.
TsWorksheetGrid
Seuraavaksi lisäämme TsWorksheetGrid komponentin. Napsauta se jonnekin TabControl viemään tilaan että siitä tulee TabControl:n "lapsi".
Näet vakio StringGrid komponentin kaltaisen komponentin.Linkitä sen WorkbookSource
kohtaan se TsWorkbookSource komponentti aluksi, ja se näyttää enemmän taulukkolaskentataulukolta:
sarakeotsikoita on merkitty kirjaimilla "A", "B", jne, ja riviotsikot merkitty luvuilla "1", "2", jne; aktiivisen solun, A1, reunaviivat on vahvennettu.
Voit halutessasi vaihtaa ruudukon TitleStyle
ominaisuuden tsNative
joka ottaa huomioon aktiivisen teeman rivin ja sarakkeen otsikon näyttämisessä. Voit aktivoida monia Options
ominaisuuksia laskentataulukkoon:
goEditing
on oltava aktiivinen, muuten sen sisältöä ei voi muuttaa.goAlwaysShowEditor
pitäisi olla pois päältä, koska se häiritsee muokkaamista taulukkolaskentasovelluksissa.goColSizing
mahdollistaa muuttaa sarakkeen leveyttä vetämällä vierekkäisten sarakeotsikoiden rajaa. Vetäminen tapahtuu hiiren vasemman painikkeen ollessa painettuna.goRowSizing
tekee saman rivin korkeuteen.goDblAutoResize
aktivoi ominaisuuden jolla optimaalinen sarakkeen leveys asettuu kaksoisnapsauttamalla otsikossa. "Optimaalinen" sarakkeen leveys on sellainen, ettei yksikään solu sisältö on katkaistu, ja mitään ylimääräistä tilaa ei ole esitetty sarakkeessagoHeaderHotTack
antaa visuaalista palautetta, jos hiiri on sen otsikkosolun päällä.goRangeSelect
(which is on by default) mahdollistaa suorakaiteen muotoisen solualueen valinnan vetämällä hiirellä vastakkaisten solujen kulmiin solujen välillä.
uusimmilla Lazarus:lla voit jopa valita useita suorakaiteita pitämällä CTRL-näppäintä alas ennen kuin seuraava suorakulmio vedetään - Lazaruksen versiolla 1.2.6 vain yksi alue voidaan valita.
goThumbTracking
aktivoi välittömästi laskentataulukon vierityksen jos jotain vierityspalkkia vedetään hiirellä. Office-sovellukset yleensä vierittää viivoilla; voit saavuttaa tämän kytkemällägoSmoothScroll
pois päältä.
Näiden lisäksi Options
perii TCustomGrid
:stä jossa on olemassa joitakin ominaisuuksia jotka onerikoistunut taulukkolaskenta toimintaan
ShowGridLines
, josfalse
, piilottaa rivin ja sarakkeen rivit.ShowHeaders
voidaan aasettaafalse
jos niin sarake ja rivi otsikot ovat piilossa.- LCL grids yleensä katkaisee tekstin solun rajalla, jos se on pitempi kuin solun leveys. Jos
TextOverflow
on asetettutrue
niin sitten tekstiä voi vuotaa viereisiin tyhjiin soluihin.
Ominaisuudet AutoCalc
ja ReadFormulas
on tarkoitettu WorksheetGrid itsenäiseen käyttöön (esim. ilman TsWorkbookSource komponenttia). Ole hyvä ja käytä vastaavia WorkbookSource:n vaihtoehtoja sen sijaan. (AutoCalc
mahdollistaa automaattisen kaavojen laskemisen aina kun solun sisältö muuttuu. ReadFormulas
aktivoi kaavojen lukemisen tiedostosta, muuten taulukossa näytettäisiin vain kaavojen tulokset).
Kun käännät ja ajat ohjelman niin voit syöttää tietoja taulukkoon. Valitse vain solu, jonka haluat muokata napsauttamalla tai nuolinäppäimillä- aktiivinen solu on korostettu reunaviivalla. Aloita kirjoittaminen. Kun olet valmis valitse toinen solu tai paina ↵ Enter-näppäintä. Painamalla ↵ Enter niin siirrytään automaattisesti seuraavaan soluun ruudukossa. Gridin omaisuus AutoAdvance määrittelee, mitä ymmärretään olevan "seuraavaan soluun": oletuksena, ↵ Enter siirtyy aktiivisen solun alaspäin (aaDown
), mutta voit myös siirtää sitä oikealle (aaRight
), tai poistaa tämän ominaisuuden käytöstä (aaNone
) - katso tyyppi TAutoAdvance
määritely käännösyksikön grids.pas
lähdekoodista lisävaihtoehdot.
Jos - kuten edellä on arvioitu - WorkbookSource vaihtoehto boAutoCalc
on käytössä niin laskentataulukko tukee automaattisesti kaavojen laskemista. Esimerkiksi siirry soluun A1 ja kirjoita numero 10
. Sitten mene soluun A2 ja syötä kaava =A1+10
. Kaavan automaattisesti laskettiin ja
sen seurauksena 20
, näkyy solussa A2.
Kun navigoida ruudukossa saatat huomata, että solu A2 näyttää vain kaavan tulos, näyttää siltä, että ei ole mitään keinoa muuttaa kaavaa kun se on kirjattu. Ei tarvitse huolehtia - paina F2 tai klikkaa solua toisen kerran niin tullaan enhanced edit mode tilaan, jossa kaavat ovat näkyvissä solussa.
Kaavojen muokkaamiseen Office-sovellukset tarjoavat oman kaavaeditoririvin. Tietenkin fpspreadsheet:ssa on tämä ominaisuus myös. Se on rakennettu TsCellEdit komponenttiin, joka aina näyttää koko solunsisällön. Muistatko toisen työkalurivin "Valmistelut" -osiossa? Tämä on TsCellEditlomponentin paikka. Mutta hetkinen - mietitään vähän enemmän: Koska kaavat joskus voivat olla melko pitkiä niin sen tulisi kyetä hallinnoimaan myöskin monia rivejä . Samoin voi olla monirivistä tekstiä. TsCellEdit voi tehdä tämän, koska se periytyy TCustomMemo joka on monirivinen komponentti. Voit myös muistaa, että lisäsimme splitter:n toiseen työkaluriviin? Tämä on korkeussäätöä varten siinä tapauksessa, että haluamme käyttää monirivistä piirrettä. TsCellEdit: vedä splitter alas näyttämään enemmän rivejä, tai vedä sitä ylöspäin .
TsCellEdit täyttää kaiken käytettävissä oleva tila toisessa työkalurivillä. Ennen kuin lisäämme TsCellEdit voimme tehdä elämästä helpompaa, jos ajattelemme mitä muuta tulee olemaan toisessa työkalurivissä. Excelissä on indikaattori, joka näyttää osoitteen aktiivisen solun. Tähän tarkoitukseen on TsCellIndicator. Koska sen korkeutta ei pitäisi muuttaa, kun työkalurivi on vedetty alas niin ensin lisätään TPanel toiseen työkalupalkkiin; vähennä Width
noin 100 pikseliin, poista sen Caption
teksti ja aseta sen BevelOuter
ominaisuus bvNone
:ksi.
Lisää TsCellIndicator tähän panel-komponenttiin ja laita sen align ominauus arvoon top eli se täyttää paneelin
yläosan. Liitä sen WorkbookSource
ominaisuuteen käytössä oleva TsWorkbookSource-komponentti,
ja heti näet tekstin "A1" eli nykyisen valitun solun osoitteen.
Joskus on toivottavaa muuttaa tämän "laatikon" leveyttä suorituksen aikana. Joten, miksi ei lisätä splitter toisen työkaluriviin? Aseta sen Align
ominaisuudeksi alLeft
. Tulos on vähän outo: jakaja on aivan työkalupalkin vasemmassa reunassa, mutta odotus oli että se olisi paneelin oikeassa reunassa.
Tämä johtuu paneelin oletusarvosta. Aseta Align
omaisuus paneelin alLeft
samoin, ja vedä splitter oikealle paneelissa. Nyt splitter on oikeassa paikassa.
Se on melkein valmis nyt ... Lopuksi lisätään TsCellEdit komponentti tyhjään tilaan työkalupalkkiin.
Client-tasaus niin, että se täyttää koko muun työkalupalkin. Kuten tavallista,
asettaa sen WorkbookSource
kohteeseen lomakkeella käytetty TsWorkbookSource komponentti.
Käännä ja aja. Käynnistä ohjelma:
- Anna joitakin kokeiludataa. Navigoi laskentataulukossa. Näet että CellIndicator aina osoittaa aktiiviseen soluun. Aktiivisen solun sisältö näkyy CellEdit ruudussa. CellIndicator ei vain näytä passiivisesti nykyistä solua, sitä voidaan myös muokata. Kirjoita halutun solun osoite, paina ↵ Enter, ja katso mitä tapahtuu ...
- Anna kaava. Siirry takaisin kaavasoluun - kaava näkyy CellEdit ja sitä voidaan muuttaa helposti.
- Anna monirivistä tekstiä - voit valvoa rivinloppuja CellEdit:ssä pitämällä Ctrl-näppäintä painettuna, kun painat ↵ Enter. Solussa näkyy vain yksi rivi tekstiä. Vedä vaakasuuntainen splitter toisella työkalurivillä alas - CellEdit näyttää kaikki rivit. Toinen tapa nähdä kaikki tekstin rivit, on säätää solun korkeus. Sinun on aktivoitava gridin
Option
goRowSizing
. Sitten voit vetää alempaa jakolinjan riviä monirivisessa solussa alaspäin jolloin sen korkeus kasvaa - puuttuvat rivit näkyvät nyt solussa!
Solujen muotoilu
Tietojen syöttämisessä käyttäjä yleensä haluaa lisäksi soveltaa jotakin muotoilua solujen parantamiseksi tai joitakin niitä. Laskentataulukon ruudukko on perustettu siten, että sen solut näyttää formaatit otettu työkirja. Lisäksi, visuaaliset FPSpreadsheet komponentit pystyvät varastoimaan muotoilumääritteet soluun. WorkbookSource:n ilmoitusmenettelyn kautta nämä muodot ovat palautetaan WorksheetGrid näytettäväksi.
Comboboxien fontin nimen, koon ja värin lisääminen
Tässä osiossa kerromme mahdollisuuden muuttaa solun tekstien fonttia valitsemalla sen nimi, koko ja / tai väri.
Visuaalinen FPSpreadsheet tarjoavat joustavan TsCellComboBox-komponentin tätä tarkoitusta varten.
Sen on ominaisuus CellFormatItem
määrittelee mikä määrite kulloinkin muutetaan:
cfiFontName
: Tämä vaihtoehto kertoo ComboBox:ssa kaikki fontit jotka löytyvät käytetystä järjestelmästä. Näyttää valitun fontin valituissa soluissa.cfiFontSize
täyttää ComboBoxin enimmäkseen käytetyillä fontin koo-oilla (pisteinä). Näyttää valittua fonttikokoa valituissa soluissa.cfiFontColor
lisää kaikki ennalta määritellyt värit ("palettiin") . Asettaa tekstin värin valituksi valituissa soluissa. ComboBoxin eri kohdat koostuvat väriruuduista joissa on mukana värin nimi. JosColorRectWidth
asetetaan-1
värin nimi jätetään pois.cfiBackgroundColor
, sama kuin edellinen mutta nyt taustaväri valituissa soluissa.cfiCellBorderColor
, sama kuin edellinen mutta nyt solun reunaväri valituissa soluissa - tämä ominaisuus ei ole tällä hetkellä vielä tuettuna.
Lisää nämä kolme TsCellComboboxia ensimmäiseen työkalupalkkiin ja aseta niiden CellFormatItem
ominaisuus vastaavasti cfiFontname
, cfiFontSize
ja cfiFontColor
.
Linkitä WorkbookSource
lomakkeen TsWorkbookSource komponenttiin.
Voit halutessasi lisätä leveyttä fontin nimi ComboBoxia niin, että pisimpiä fontin nimiä ei katkaista;
muut comboboxes saattavat kaventua. Saatat myös haluta poistaa värin nimet kolmannesta ComboBox:sta asettamalla sen ColorRechtWidth
arvoon -1
.
Tässä kaikki mikä muuttaa fontteja. Käännä ja aja. Kirjoita testitekstiä ja kokeile näitä ohjelman ominaisuuksia.
Vakiotoimintojen käyttäminen
FPSpreadsheet tukee useita muotoiluja, joita voidaan soveltaa soluihin, kuten tekstin tasausta, tekstin kierto, tekstin fontti, erilaiset solureunat tai taustan värit. Tyypilliset graafiset sovellusohjelmat sisältävät valikkokomentojen ja / tai työkalurivin painikkeita, jotka on liitetty jollekin näistä ominaisuuksista ja voidaan ottaa käyttöön yksinkertaisesti hiiren klikkauksella. Lisäksi näiden tila usein heijastuu aktiivisen solun ominaisuutena. Esimerkiksi, jos painike on lihavoiti niin tätä painiketta painettaessa aktiivinen solu lihavoituu, mutta jos sitä ei valita niin lihavointi poistetaan. Koodauksen yksinkertaistamiseksi näitä vakiotehtäviä on lisätty kirjastoon.
- TsWorksheetAddAction: lisää tyhjän laskentataulukon työkirjaan. Määritä sen nimi
NameMask
omaisuudessa.NameMask
on sisältävä muotoilumäärittelyn%d
, joka korvataan ajonaikana numerolla siten, että laskentataulukon nimi on ainutkertainen.
- TsWorksheetDeleteAction: Poistaa aktiivisen laskentataulukon jos käyttäjä vahvistaa sen valintaikkunassa. Viimeistä laskentataulukkoa ei voi poistaa.
- TsWorksheetRenameAction: Uudelleen nimeää aktiivisen laskentataulukon.
- TsCopyAction: Kopioi valittujen solujen sisällön luetteloon ("CellClipboard"), josta ne voidaan liittää takaisin taulukkolaskentaan toiseen paikkaan. Prosessi voi tapahtua leikepöydälle-tavalla ("kopio" / "leikkaa", sitten "liitä") tai tavalla "kopio muotoilut" kuten muissa Office-sovelluksissa. Ominaisuus
CopyItem
määrittää mitä siirretään: koko solu tai vain solujen arvot, solujen kaavoja tai solumuotoiluja.
- TsFontStyleAction: Muuttaa valittujen solujen fontin tyylin. Ominaisuus
FontStyle
määrittelee, onko toiminta fontin lihavoiti, kursivoiti, alleviivaus tai yliviivaus. Normaalisti kukin fontti tyyli tekee oman toiminnan. Katso alla oleva esimerkki.
- TsHorAlignmentAction: Käytetään muuttamaan valituissa soluissa tekstin keskitystä vaakasuorassa. Valinnalla
HorAlignment
määritelläään, minkälaista keskitystä käytetään (vasenta, keskitetään keskelle, oikealle).
- TsVertAlignmentAction: Muuttaa valituissa soluissa tekstin keskitystä pystysuorassa. Määrittely on
VertAlignment
ominaisuudessa.
- TsTextRotationAction: Määrittää tekstin suunnan valituissa soluissa. Määrittely on
TextRotation
ominaisuudessa.
- TsWordWrapAction: Mahdollistaa monirivisen tekstin valituissa soluissa. Jos teksti on pidempi kuin solun leveyden (tai korkeus, jos teksti käännetty), niin se jakautuu useille riveille.
- TsNumberFormatAction: Määrittää mitä numeromuotoa käytetään valituissa soluissa. Käytettävä muoto määritellään ominaisuudessa
NumberFormat
(se voi olla esim.nfFixed
) jo valmiissa muodoissa jaNumberFormatStr
erikoismuotoilussa.
- TsDecimalsAction: Lisää tai vähentää lukuarvoa valituissa soluissa. Ominaisuudessa
Delta
on haluttu lisäys (+1) tai vähennys (-1).
- TsCellBorderAction: Määrittää millainen kehys piirretään valittujen solujen ympärille. Aliominaisuudet
East
,West
,North
,South
,InnerHor
jaInnerVert
määritteleeBorders
:ssa miltä rajat näyttää solualue kummallakin puolella. Huomaa, että jokainen suorakaiteen solualue on yhtätuumainen; ominaisuudetEast
,West
,North
jaSouth
vastaavat koko solualueen ulkorajoja. Sisemmät rajat määritelläänInnerHor
jaInnerVert
. Käyttämällä näitä ominaisuuksia, rajoja voidaan kytkeä päälle ja pois päältä (Visible
). Lisäksi viivan tyyliä ja linjan väriä voidaan muuttaa.
- TsMergeAction: Jos valittu niin valitun suorakulmaisen alueen solut on sulautuvat yhteen. Jos poistat sen niin toiminta erottaa lohkon yksittäisiä soluja. Huomaa, että lohkon sisältö ja muotoilu on määritelty ylhäältä vasemmalla olevan solun mukaan lohkoon. Muiden solujen sisältö ja muoto menetetään.
Adding buttons for "Bold", "Italic", and "Underline"
If you have never worked with standard actions before here are some detailed step-by-step instructions. Let us stick to above example and provide the possibility to switch the font style of the selected cells to bold. The standard action which is responsible for this feature is the TsFontStyleAction
.
- At first, we add this action to the form: Double-click on the TActionList to open the "ActionList Editor".
- Click on the down-arrow next to the "+" button, and select the item "New standard action" from the drop-down menu.
- This opens a dialog with the list of registered "Standard Action Classes".
- Scroll down until you find a group named "FPSpreadsheet".
- In this group, select the item "TsFontStyleAction" by double-clicking.
- Now an item
sFontStyleAction1
appears in the ActionList Editor. - It should already be selected like in the screenshot at the right. If not, select
sFontStyleAction1
in the ActionList Editor to bring it up in the Object Inspector and to set up its properties:- Use the text "Bold" for the
Caption
- this is the text that will be assigned to the corresponding menu item. - Similarly, assign "Bold font" to the
Hint
property. - Set the
ImageIndex
to the index of the icon in the form's ImageList that you want to see in the toolbar. - Make sure that the item
fssBold
is highlighted in the dropdown list of the propertyFontStyle
. If not, select it. SinceTsFontStyleAction
can handle several font styles (bold, italic, underline, strikeout) we have to tell the action which font style it should be responsible of. - Like with the visual controls, don't forget to assign the TsWorkbookSource to the corresponding property
WorkbookSource
of the action. This activates the communication between the worksheet/workbook on the one hand, and the action and the related controls on the other hand.
- Use the text "Bold" for the
Having set up the standard action we add a menu item to the form's MainMenu. Double-click on the TMainMenu of the form to bring up the "Menu Editor". Since the menu is empty so far there is only a dummy item, "New item1". This will become our "Format" menu. Select the item, and type "Format" into the Caption
property field. Now the dummy item is re-labelled as "Format". Right-click on this "Format" item, and select "Create submenu" from the popup menu which brings up another new menu item, "New item2". Select it. In the dropdown list of the property Action
of the object inspector, pick the sFontStyle1
action - this is the action that we have just set up - and the menu item automatically shows the caption provided by the action component, "Bold".
Finally we add a toolbar button for the "bold" action. Right-click onto the TToolbar, and add a new toolbutton by selecting item "New button" from the popup menu. Go to the property Action
in the object inspector again, pick the sFontStyle1
item, and this is enough to give the tool button the ability to set a cell font to bold!
Repeat this procedure with two other buttons. Design them to set the font style to italic and underlined.
Test the program by compiling. Type some text into cells. Select one of them and click the "Bold" toolbutton - voila, the cell is in bold font. Select another cell. Note that the toolbutton is automatically drawn in the down state if the cell has bold font. Repeat with the other buttons.
Tiedoston tallentaminen
Saatuasi valmiiksi taulukkolaskenta datan niin varmasti haluat tallentaa sen taulukkolaskentatiedostoon.
Lazarus tarjoaa kaikki tarvittavat toiminnot tallentaa vakiotoiminnalla TFileSaveAs
.
Tämä toiminto avaa automaattisesti FileDialog tiedostonimen valitsemista varten.
Valitse TFileSaveAs
toiminta listasta vakiotoiminnan luokkista.
Huomaa, että se ei kuulu "FPSpreadsheet" kategoriaan, mutta kuuluu "File" ryhmään, koska se on LCL:n vakiotoimintaa.
Aluksi määritetään FileDialog:n ominaisuuksia. Valitse ominaisuus Dialog on TFileSaveAs toiminto oliomuokkaimessa. Se on kätevä tapa tallentamaan taulukkolaskenta eri tiedostomuodoissa;
anna tiedostomuodot dialogin Filter
omaisuuteen.
Liittämällä seuraava teksti tähän ominaisuuteen:
Excel XML spreadsheet (*.xlsx)|*.xlsx|Excel 97-2003 spreadsheets (*.xls)|*.xls|Excel 5 spreadsheet (*.xls)|*.xls|Excel 2.1 spreadsheets (*.xls)|*.xls|LibreOffice/OpenOffice spreadsheet (*.ods)|*.ods|Comma-delimited files (*.csv)|*.csv|WikiTable (WikiMedia-Format, *.wikitable_wikimedia)|*.wikitable_wikimedia
Kun klikkaat kolmea pistettä Filter
ominaisuudessa niin tiedostojen luettelo näkyy selvemmin järjestettynä. Siitä on kuva oikealla.
Valitse näistä yksi tiedostopääte, esim xlsx, oletukseksi. Liittämällä se FilterIndex omaisuuteen.
Xlsx tiedosto on ensimmäinen FilterIndex
luettelossa. Siksi se asetetaan ykköseksi.
Seuraavaksi määrittelemme mitä tapahtuu sen jälkeen kun tiedoston nimi on valittu tiedostontallennusikkunassa.
Tätä tarkoitusta varten, TFileSaveAs
toiminta tarjoaa tapahtuman OnAccept
. Tämä on yksi niistä harvoista paikoista, joissa täytyy kirjoittaa koodia tässä sovelluksessa ... Mutta koodi on lyhyt:
Se tarkistaa mikä tiedostomuoto on valittu formaattiluettelosta ja tallentaa vastaavan tiedostomuotoon
kutsumalla menetelmää SaveToSpreadsheetFile :
uses
..., fpspreadsheet, ...; // for TsSpreadsheetFormat
procedure TForm1.FileSaveAs1Accept(Sender: TObject);
var
fmt: TsSpreadsheetFormat;
begin
Screen.Cursor := crHourglass;
try
case FileSaveAs1.Dialog.FilterIndex of
1: fmt := sfOOXML; // Note: Indexes are 1-based here!
2: fmt := sfExcel8;
3: fmt := sfExcel5;
4: fmt := sfExcel2;
5: fmt := sfOpenDocument;
6: fmt := sfCSV;
7: fmt := sfWikiTable_WikiMedia;
end;
sWorkbookSource1.SaveToSpreadsheetFile(FileSaveAs1.Dialog.FileName, fmt);
finally
Screen.Cursor := crDefault;
end;
end;
Teemme FileSaveAs toiminnon saatavilla työkalupalkkiin ja valikkoon:
- Työkalurivi:Lisää TToolButton ensimmäiseksi työkaluriviin ja vedä se vasempaan reunaan. Määritä FileSaveAs toiminto sen
Action
omaisuuteen.. - Valikko: "Save" komento on yleensä alivalikkossa nimeltä "File". Siksi kaksoisnapsauta TMainMenu, klikkaa hiiren oikealla "Format" kohta ja lisätään uusi kohta "ennen" tämänhetkistä.
Nimeä se "File". Lisää se alavalikkoon. Klikkaa oletus valikkokohta ja anna FileSaveAs toiminto sen Action
omaisuuteen.
Tiedoston lukeminen
Se mitä on jäljellä on taulukkolaskentatiedoston lukeminen sovellukseen. Tietenkin FPSpreadsheet-kirjasto on hyvin varustautunut tähän toimintoon. Toiminnot ovat hyvin samanlaisia kuin tallentamisessa. Ei käytetä TFileSaveAs vakiotoimintoa, vaan sen sijaan käytetään TFileOpen vakiotoimintoa. Tähänkin vakiotoimintaan on sisäänrakennettu tiedostojen valintaikkuna, jossa asetetaan DefaultExtension (Todennäköisesti valitset ".xls" tai "Xlsx") ja tiedostosuodattimeksi
All spreadsheet files|*.xls;*.xlsx;*.ods;*.csv|All Excel files (*.xls, *.xlsx)|*.xls;*.xlsx|Excel XML spreadsheet (*.xlsx)|*.xlsx|Excel 97-2003 spreadsheets (*.xls)|*.xls|Excel 5 spreadsheet (*.xls)|*.xls|Excel 2.1 spreadsheets (*.xls)|*.xls|LibreOffice/OpenOffice spreadsheet (*.ods)|*.ods|Comma-delimited files (*.csv)|*.csv
(Kopioi tämä merkkijono Dialogin Filter
kenttään). Kuten huomataan niin Filter
sisältää valintoja, jotka kattavat eri tiedostomuotoja, kuten "Kaikki taulukkolaskenta tiedostot" tai "Kaikki Excel-tiedostot". Tämä on mahdollista, koska TsWorkbookSource komponentissa on ominaisuus AutoDetectFormat
joka automaattisesti havaitsee taulukkolaskenta tiedostomuodot. Muissa tapauksissa, kuten "Libre / OpenOffice", voimme määrittää muodon, sfOpenDocument
nimenmukaisesti. Oikean tiedostomuodon valinta ja lukeminen tehdään OnAccept
tapahtumakäsittelijän toiminnoissa:
{ Loads the spreadsheet file selected by the FileOpen standard action }
procedure TForm1.FileOpen1Accept(Sender: TObject);
begin
sWorkbookSource1.AutodetectFormat := false;
case FileOpen1.Dialog.FilterIndex of
1: sWorkbookSource1.AutoDetectFormat := true; // All spreadsheet files
2: sWorkbookSource1.AutoDetectFormat := true; // All Excel files
3: sWorkbookSource1.FileFormat := sfOOXML; // Excel 2007+
4: sWorkbookSource1.FileFormat := sfExcel8; // Excel 97-2003
5: sWorkbookSource1.FileFormat := sfExcel5; // Excel 5.0
6: sWorkbookSource1.FileFormat := sfExcel2; // Excel 2.1
7: sWorkbookSource1.FileFormat := sfOpenDocument; // Open/LibreOffice
8: sWorkbookSource1.FileFormat := sfCSV; // Text files
end;
sWorkbookSource1.FileName :=FileOpen1.Dialog.FileName; // This loads the file
end;
Jotta nähdään tämä toiminto työkalupalkissa ja valikossa, lisää TToolButton työkaluriviin ja liitä TFileOpenAction sen Action
omaisuuteen. Valikossa, lisää uuden kohdan ennen "Tallenna" kohtaa, ja liitä sen Action
sen mukaisesti.
Filenames
omaisuuteen. Mutta muista, että tiedosto todennäköisesti ei löydy suoritusaikana, jos se on määritetty suhteellisen polun avulla ja jos sovellus ajetaan toisessa tietokoneessa, jossa on eri kansiorakenne!Yhteenveto
Jos seurasit tätä ohjetta vaihe vaiheelta niin olet ohjelmoinut monimutkaisen graafisen taulukkolaskentaohjelma sovelluksen lähes kirjoittamatta koodirivejä (lukuun ottamatta lataus ja tallennusrutiinit). Jos et, vilkaise examples kansion demoa "fps_ctrls" FPSpreadsheet asennus; siinä tuloksena samanlainen opetusohjelma kuin tämäkin lisättynä joitakin lisäosia.