Sign in Join
Wiki copytemporary

FPSpreadsheet tutorial: Writing a mini spreadsheet application/fi: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Johdanto
22
33[[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.
44
55Pian 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.
66
77Tämän ohjeen tarkoituksena olla oppaana miten tehdä yksinkertaisesti taulukkolaskentaohjelma käyttäen näitä komponentteja.
88
99Vaikka 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.
1010
1111## Visuaaliset FPSpreadsheet komponentit
1212
1313FPSpreadsheet sisältää paljon ei-visuaalisia luokkia, kuten TsWorkbook, TsWorksheet jne. Nämä pitää kirjaston yleiskäyttöisenä kaikenlaisia ​​Pascal ohjelmia varten.
1414
1515### TsWorkbookSource
1616
1717![](/wiki-images/e/e0/TSWORKBOOKSOURCE.png) 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ä.
1818
1919Kaikilla 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.
2020
2121Workbook 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.
2222
2323### TsWorkbookTabControl
2424
2525![](/wiki-images/c/cc/TSWORKBOOKTABCONTROL.png) 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.
2626
2727### TsWorksheetGrid
2828
2929![](/wiki-images/0/0b/TSWORKSHEETGRID.png%E2%80%8E) 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ä.
3030
3131> **Note:** TsWorksheetGrid voidaan käyttää myös ilman TsWorkbookSource-komponenttia. Tätä varten se tarjoaa omat menetelmät tiedoston lukemiseen ja kirjoittamiseen.
3232
3333### TsCellEdit
3434
3535![](/wiki-images/f/fa/TSCELLEDIT.png) 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.
3636
3737### TsCellIndicator
3838
3939![](/wiki-images/e/eb/TSCELLINDICATOR.png) 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.
4040
4141### TsCellCombobox
4242
4343![](/wiki-images/3/3c/TSCELLCOMBOBOX.png)Tällä ComboBox-tyylisellä komponentilla muokataan solujen ominaisuuksia valitsemalla arvot pudotusvalikosta. Se millaisia piirteitä valitaan määräytyy `CellFormatItem` ominaisuuden mukaan:
4444
4545- `cfiFontName`: luettelo sisältää nykyiseen järjestelmään saatavilla olevien kirjaisimien (fonttien) nimet. Jos fontti valitaan niin vastaava fonttia käytetään valituissa soluissa.
4646- `cfiFontSize`: luettelo sisältää tyypillisimmät kirjasinkoot joita käytetään taulukkolaskentaohjelmassa. Kohteen valitseminen muuttaa fontin koon valituissa soluissa vastaamaan fontin kokoa.
4747- `cfiFontColor`: luettelo sisältää workbook:n paletin kaikki värit.
4848
4949Valittu väri on tulee käyttöön kaikissa valituissa soluissa.
5050
5151- `cfiBackgroundColor`: kuten `cfiFontColor` - valittua väriä käytetään taustavärinä valituissa soluissa.
5252
5353### TsSpreadsheetInspector
5454
5555![](/wiki-images/b/b8/TSSPREADSHEETINSPECTOR.png) 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.
5656
5757## Tee taulukkolaskentaohjelma
5858
5959Siinä 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ä.
6060
6161### Esivalmistelut
6262
63-<img src="fpspreadsheetcontrols_preparations.png‎" title="fpspreadsheetcontrols_preparations.png‎" width="400" alt="fpspreadsheetcontrols_preparations.png‎" /> Luo uusi projekti ja tallenna se mieleiseen kansioon.
63+![](/wiki-images/8/86/Fpspreadsheetcontrols_preparations.png%E2%80%8E) Luo uusi projekti ja tallenna se mieleiseen kansioon.
6464
6565Koska 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](http://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/spktoolbar/), mutta ole tietoinen siitä, että tämä ei vielä tarjoa kaikkia vakiotyökalurivin ominaisuuksia).
6666
6767Itse 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ä.
6868
6969Koska 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.
7070
7171Tä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](http://www.famfamfam.com/lab/icons/silk/). Toinen laaja kuvakekirjasto on [Fugue kuvakekokoelma](http://p.yusukekamiyamane.com/). 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.
7272
7373### Setting up the visual workbook
7474
7575#### TsWorkbookSource
7676
7777Kuten 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`.
7878
7979WorkbookSource 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:
8080
8181``` pascal
8282type
8383 TsWorkbookOption = (boVirtualMode, boBufStream, boAutoCalc, boCalcBeforeSaving, boReadFormulas);
8484 TsWorkbookOptions = set of TsWorkbookOption;
8585```
8686
87-<img src="sTabControl.png" title="sTabControl.png" width="400" />
87+![](/wiki-images/0/03/STabControl.png)
8888
8989Tärkeimmät ovat:
9090
9191- `boAutoCalc`: aktivoi automaattisen laskennan kaavoissa aina kun solun sisältö muuttuu.
9292- `boCalcBeforeSaving`: laskee kaavat ennen kuin työkirja tallennetaan tiedostoon
9393- `boReadFormulas`: jos on asetettu niin kaavat luetaan tiedoston, muuten vain kaavojen tulokset.
9494- `boBufStream` ja `boVirtualMode`: 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|FPSpreadsheet#Virtual_mode]].
9595
9696Tässä opetusohjelmassa, oletetaan, että vaihtoehtot `boAutoCalc` ja `boReadFormulas` valitaan.
9797
9898#### TsWorkbookTabControl
9999
100100Ensimmä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ä.
101101
102102Excelissä 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`.
103103
104104Kuvakaappaus osoittaa, kuinka pitkälle on jo edetty.\
105105
106106#### TsWorksheetGrid
107107
108-<img src="sWorksheetGrid.png" title="sWorksheetGrid.png" width="400" alt="sWorksheetGrid.png" /> 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.
108+![](/wiki-images/7/73/SWorksheetGrid.png) 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.
109109
110110Voit halutessasi vaihtaa ruudukon `TitleStyle` ominaisuuden `tsNative` joka ottaa huomioon aktiivisen teeman rivin ja sarakkeen otsikon näyttämisessä. Voit aktivoida monia `Options` ominaisuuksia laskentataulukkoon:
111111
112112- `goEditing` on oltava aktiivinen, muuten sen sisältöä ei voi muuttaa.
113113- `goAlwaysShowEditor` pitäisi olla pois päältä, koska se häiritsee muokkaamista taulukkolaskentasovelluksissa.
114114- `goColSizing` mahdollistaa muuttaa sarakkeen leveyttä vetämällä vierekkäisten sarakeotsikoiden rajaa. Vetäminen tapahtuu hiiren vasemman painikkeen ollessa painettuna.
115115- `goRowSizing` tekee saman rivin korkeuteen.
116116- `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 sarakkeessa
117117- `goHeaderHotTack` antaa visuaalista palautetta, jos hiiri on sen otsikkosolun päällä.
118118- `goRangeSelect` (which is on by default) mahdollistaa suorakaiteen muotoisen solualueen valinnan vetämällä hiirellä vastakkaisten solujen kulmiin solujen välillä.
119119
120120uusimmilla 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.
121121
122122- `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ä.
123123
124124Näiden lisäksi `Options` perii `TCustomGrid`:stä jossa on olemassa joitakin ominaisuuksia jotka onerikoistunut taulukkolaskenta toimintaan
125125
126126- `ShowGridLines`, jos `false`, piilottaa rivin ja sarakkeen rivit.
127127- `ShowHeaders` voidaan aasettaa `false` jos niin sarake ja rivi otsikot ovat piilossa.
128128- LCL grids yleensä katkaisee tekstin solun rajalla, jos se on pitempi kuin solun leveys. Jos `TextOverflow` on asetettu `true` niin sitten tekstiä voi vuotaa viereisiin tyhjiin soluihin.
129129
130130Ominaisuudet `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).
131131
132132### Arvojen ja kaavojen muokkaus sekä navigointi
133133
134134Kun 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.
135135
136136Jos - 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.
137137
138138Kun 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.
139139
140-<img src="sCellIndicator_sCellEdit.png‎" title="sCellIndicator_sCellEdit.png‎" width="400" alt="sCellIndicator_sCellEdit.png‎" /> 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 .
140+![](/wiki-images/1/1a/SCellIndicator_sCellEdit.png%E2%80%8E) 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 .
141141
142142TsCellEdit 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.
143143
144144Lisää 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.
145145
146146Joskus 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.
147147
148148Se 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.
149149
150150Käännä ja aja. Käynnistä ohjelma:
151151
152152- 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 ...
153153- Anna kaava. Siirry takaisin kaavasoluun - kaava näkyy CellEdit ja sitä voidaan muuttaa helposti.
154154
155155- 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!
156156
157157### Solujen muotoilu
158158
159159Tietojen 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.
160160
161161#### Comboboxien fontin nimen, koon ja värin lisääminen
162162
163-<img src="sCellFontCombobox.png‎" title="sCellFontCombobox.png‎" width="400" alt="sCellFontCombobox.png‎" /> 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:
163+![](/wiki-images/c/ce/SCellFontCombobox.png%E2%80%8E) 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:
164164
165165- `cfiFontName`: Tämä vaihtoehto kertoo ComboBox:ssa kaikki fontit jotka löytyvät käytetystä järjestelmästä. Näyttää valitun fontin valituissa soluissa.
166166- `cfiFontSize` täyttää ComboBoxin enimmäkseen käytetyillä fontin koo-oilla (pisteinä). Näyttää valittua fonttikokoa valituissa soluissa.
167167- `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. Jos `ColorRectWidth` asetetaan `-1` värin nimi jätetään pois.
168168- `cfiBackgroundColor`, sama kuin edellinen mutta nyt taustaväri valituissa soluissa.
169169- `cfiCellBorderColor`, sama kuin edellinen mutta nyt solun reunaväri valituissa soluissa - tämä ominaisuus ei ole tällä hetkellä vielä tuettuna.
170170
171171Lisää 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 `ColorRectWidth` arvoon `-1`.
172172
173173Tässä kaikki mikä muuttaa fontteja. Käännä ja aja. Kirjoita testitekstiä ja kokeile näitä ohjelman ominaisuuksia.
174174
175175#### Vakiotoimintojen käyttäminen
176176
177-<img src="sFontStyleAction_selected.png" title="sFontStyleAction_selected.png" width="300" alt="sFontStyleAction_selected.png" /> 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.
177+![](/wiki-images/3/39/SFontStyleAction_selected.png) 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.
178178
179179- **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.
180180
181181- **TsWorksheetDeleteAction**: Poistaa aktiivisen laskentataulukon jos käyttäjä vahvistaa sen valintaikkunassa. Viimeistä laskentataulukkoa ei voi poistaa.
182182
183183- **TsWorksheetRenameAction**: Uudelleen nimeää aktiivisen laskentataulukon.
184184
185185- **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.
186186
187187- **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.
188188
189189- **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).
190190
191191- **TsVertAlignmentAction**: Muuttaa valituissa soluissa tekstin keskitystä pystysuorassa. Määrittely on `VertAlignment` ominaisuudessa.
192192
193193- **TsTextRotationAction**: Määrittää tekstin suunnan valituissa soluissa. Määrittely on `TextRotation` ominaisuudessa.
194194
195195- **TsWordWrapAction**: Mahdollistaa monirivisen tekstin valituissa soluissa. Jos teksti on pidempi kuin solun leveyden (tai korkeus, jos teksti käännetty), niin se jakautuu useille riveille.
196196
197197- **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 ja `NumberFormatStr` erikoismuotoilussa.
198198
199199- **TsDecimalsAction**: Lisää tai vähentää lukuarvoa valituissa soluissa. Ominaisuudessa `Delta` on haluttu lisäys (+1) tai vähennys (-1).
200200
201201- **TsCellBorderAction**: Määrittää millainen kehys piirretään valittujen solujen ympärille. Aliominaisuudet `East`, `West`, `North`, `South`, `InnerHor` ja `InnerVert` määrittelee `Borders`:ssa miltä rajat näyttää solualue kummallakin puolella. Huomaa, että jokainen suorakaiteen solualue on yhtätuumainen; ominaisuudet `East`, `West`, `North` ja `South` vastaavat koko solualueen ulkorajoja. Sisemmät rajat määritellään `InnerHor` ja `InnerVert`. 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.
202202
203203- **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.
204204
205205- **TsCellProtectionAction**: on kaksi eri versiota, toinen suojaa soluja muutoksilta ja toinen piilottaa kaavat riippuen ominaisuuden `Protection` arvosta. Huomaa, että tämä toiminta on tehokasta vain, jos laskentataulukon suojaus on käytössä (kutsu `Workbooksource.Worksheet.Protect (true)` ).
206206
207207#### "Lihavointi", "kursiivi", ja "alleviivaus" painikkeiden lisääminen
208208
209-<img src="sFontStyleAction_in_ActionListEditor.png" title="sFontStyleAction_in_ActionListEditor.png" width="350" alt="sFontStyleAction_in_ActionListEditor.png" /> Jos et ole koskaan työskennellyt vakio actions parissa tässä on yksityiskohtaiset ​​askel-askeleelta ohjeet. Seurataan tätä esimerkkiä joka antaa mahdollisuuden vaihtaa fontin tyyli valittuissa soluissa **bold**:ksi (lihavointi). vakiotoiminta, joka on vastuussa tästä ominaisuudesta on `TsFontStyleAction`.
209+![](/wiki-images/d/d0/SFontStyleAction_in_ActionListEditor.png) Jos et ole koskaan työskennellyt vakio actions parissa tässä on yksityiskohtaiset ​​askel-askeleelta ohjeet. Seurataan tätä esimerkkiä joka antaa mahdollisuuden vaihtaa fontin tyyli valittuissa soluissa **bold**:ksi (lihavointi). vakiotoiminta, joka on vastuussa tästä ominaisuudesta on `TsFontStyleAction`.
210210
211211- Aluksi lisäämme **TActionList**:n lomakkeelle: Kaksoisnapsauta lomakkeella olevaa TActionList kuvaketta jokaa avaa "toimintolistan muokkaimen".
212212- Klikkaa alas-nuolta "+" -painiketta vieressä ja valitse kohde "Uusi perustoiminto" pudotusvalikosta.
213213- Tämä avaa ikkunan, jossa luettelo rekisteröidyistä "Perustoimintoluokista".
214214- Selaa alaspäin, kunnes löydät ryhmän nimeltä "FPSpreadsheet"..
215215- Tässä ryhmässä valitse kohde "TsFontStyleAction" kaksoisnapsauttamalla.
216216- Nyt kohta `sFontStyleAction1` näkyy toimintolistan muokkaimen toiminto-osiossa.
217217- Sen pitäisi olla jo valittuna kuten kuvakaappaus oikealla. Jos ei, valitse `sFontStyleAction1` toimintolistan muokkaimesta joka tuo sen komponenttimuokkaimeen ja näyttää sen ominaisuudet:
218218 - Kirjoita teksti "Bold" `Caption` ominaisuuteen - tämä on teksti, joka näytetään vastaavassa kohtaa valikossa.
219219 - Samoin kirjoita "Bold font" `Hint` omaisuuteen.
220220 - Aseta `ImageIndex` osoittamaan kuvaketta lomakkeen ImageList indeksissä siihen mitä haluat nähdä työkalupalkissa.
221221 - Varmista, että kohde `fssBold` korostuu pudotusvalikosta omaisuutta `FontStyle`. Jos ei, valitse se. Koska TsFontStyleAction pystyy käsittelemään useita fontin tyylejä (lihavoitu, kursivoitu, alleviivaus, yliviivaus) meidän on kerrottava toimista, mistä fontin tyyli olisi vastuussa.
222222 - Kuten muiden näiden visuaalinen komponenttien kanssa, älä unohda antaa TsWorkbookSource vastaavaa oliota, `WorkbookSource` omaisuuteen. Tämä toimii laskentataulukon / työkirja välisessä viestinnässä ja toiminnassa ja toisaalta se suorittaa siihen liittyvät tarkastukset.
223223
224224Ota käyttöön lisää vakiotoimintoja joten lisää valikko eli tuo **TMainMenu** komponentti lomakkeelle. Kaksoisnapsauta TMainMenu komponenttia lomakkeella. Se tuo esiin "Valikkomuokkaimen". Koska valikko on tyhjä toistaiseksi niin siinä on vain malli kohta, "New item1". Tästä tulee "Format" -valikko. Valitse kohde ja kirjoita "Format" `Caption` ominaisuuteen. Nyt tässä malli kohteessa lukee "Format" (aiemmin siinä oli siis "New item1"). Napsauta hiiren kakkospainikkeella tätä "Format" kohtaa ja valitse "Luo alivalikko" ponnahdusvalikosta, joka tuo esille toisen uuden kohdan, "New item2". Valitse se. Valitse komponenttimuokkaimessa `Action` ominaisuuden pudotusvalikosta `sFontStyle1` toiminta - tähän kohtaan - ja valikkokohta näyttää automaattisesti action komponentin Caption kohtaan toimittamaa tekstiä; "Bold".
225225
226226Lopuksi lisätään työkalurivipainike "Bold" toiminnalla. Napsauta hiiren kakkospainikkeella TToolbar päällä, ja lisää uusi toolbutton valitsemalla kohta "Uusi nappi" ponnahdusvalikosta. Mene komponenttimuokkaimessa `Action` ominaisuuteen, poimia sFontStyle1 kohde alasvetovalikosta, ja tämä riittää antamaan toolbutton:lle kyvyn lihavoimaan (Bold) solun fontin!
227227
228228Toista tämä kahdelle muulle napille. Muunna ne asettamaan fontin tyyliksi kursivoitu ja alleviivattu.
229229
230230Testaa ohjelman kääntämällä. Kirjoita tekstiä soluihin. Valitse yksi niistä ja klikkaa "Bold" toolbutton - voila, solussa on lihavoitu fontti. Valitse toinen solu. Huomaa, että toolbutton automaattisesti menee oikeaan tilaan, jos solu on lihavoituna. Toista sama toisilla painikkeilla.
231231
232232### Tiedoston tallentaminen
233233
234234Saatuasi 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.
235235
236236Valitse `TFileSaveAs` toiminta listasta vakiotoiminnan luokkista. Huomaa, että se ei kuulu "FPSpreadsheet" kategoriaan, mutta kuuluu "File" ryhmään, koska se on LCL:n vakiotoimintaa.
237237
238-<img src="sFileFormatsForSaving.png‎" title="sFileFormatsForSaving.png‎" width="400" />
238+![](/wiki-images/7/76/SFileFormatsForSaving.png%E2%80%8E)
239239
240240Aluksi 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:
241241
242242
243243`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`
244244
245245Kun klikkaat kolmea pistettä `Filter` ominaisuudessa niin tiedostojen luettelo näkyy selvemmin järjestettynä. Siitä on kuva oikealla.
246246
247247Valitse 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.
248248
249249> **Note:** Indeksit alkaa ykkösestä FilterIndex:ssä, toisin kuin muissa joissa aika usein käytetään nollapohjaisia indeksejä.
250250
251251Seuraavaksi 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 :
252252
253253``` pascal
254254uses
255255 ..., fpspreadsheet, ...; // for TsSpreadsheetFormat
256256
257257procedure TForm1.FileSaveAs1Accept(Sender: TObject);
258258var
259259 fmt: TsSpreadsheetFormat;
260260begin
261261 Screen.Cursor := crHourglass;
262262 try
263263 case FileSaveAs1.Dialog.FilterIndex of
264264 1: fmt := sfOOXML; // Note: Indexes are 1-based here!
265265 2: fmt := sfExcel8;
266266 3: fmt := sfExcel5;
267267 4: fmt := sfExcel2;
268268 5: fmt := sfOpenDocument;
269269 6: fmt := sfCSV;
270270 7: fmt := sfWikiTable_WikiMedia;
271271 end;
272272 sWorkbookSource1.SaveToSpreadsheetFile(FileSaveAs1.Dialog.FileName, fmt);
273273 finally
274274 Screen.Cursor := crDefault;
275275 end;
276276end;
277277```
278278
279279Teemme FileSaveAs toiminnon saatavilla työkalupalkkiin ja valikkoon:
280280
281281- **Työkalurivi**:Lisää TToolButton ensimmäiseksi työkaluriviin ja vedä se vasempaan reunaan. Määritä FileSaveAs toiminto sen `Action` omaisuuteen..
282282- **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ä.
283283
284284Nimeä se "File". Lisää se alavalikkoon. Klikkaa oletus valikkokohta ja anna FileSaveAs toiminto sen `Action` omaisuuteen.
285285
286286### Tiedoston lukeminen
287287
288288Se 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
289289
290290
291291`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`
292292
293293(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:
294294
295295``` pascal
296296{ Loads the spreadsheet file selected by the FileOpen standard action }
297297procedure TForm1.FileOpen1Accept(Sender: TObject);
298298begin
299299 sWorkbookSource1.AutodetectFormat := false;
300300 case FileOpen1.Dialog.FilterIndex of
301301 1: sWorkbookSource1.AutoDetectFormat := true; // All spreadsheet files
302302 2: sWorkbookSource1.AutoDetectFormat := true; // All Excel files
303303 3: sWorkbookSource1.FileFormat := sfOOXML; // Excel 2007+
304304 4: sWorkbookSource1.FileFormat := sfExcel8; // Excel 97-2003
305305 5: sWorkbookSource1.FileFormat := sfExcel5; // Excel 5.0
306306 6: sWorkbookSource1.FileFormat := sfExcel2; // Excel 2.1
307307 7: sWorkbookSource1.FileFormat := sfOpenDocument; // Open/LibreOffice
308308 8: sWorkbookSource1.FileFormat := sfCSV; // Text files
309309 end;
310310 sWorkbookSource1.FileName :=FileOpen1.Dialog.FileName; // This loads the file
311311end;
312312```
313313
314314Jotta 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.
315315
316316> **Note:** Näet taulukkolaskentatiedoston jopa suunnitteluaikana jos annat tiedostonimen TsWorkbookSource `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!
317317
318318## Yhteenveto
319319
320320Jos 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.
321321
322322---
323323*From the Free Pascal wiki, page "FPSpreadsheet tutorial: Writing a mini spreadsheet application/fi", as it stood on 2020-02-16 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history