Difference between revisions of "FPSpreadsheet tutorial: Writing a mini spreadsheet application/fi"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; deleted category included in page template)
 
(16 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{MenuTranslate| page=FPSpreadsheet tutorial: Writing a mini spreadsheet application}}
+
{{FPSpreadsheet tutorial: Writing a mini spreadsheet application}}
 
 
= FPSpreadsheet harjoitus: Tee oma pieni taulukkolaskentasovellus =
 
  
 
== Johdanto ==
 
== Johdanto ==
  
FPSpreadsheet on tehokas paketti eri taulukkolaskentatiedostojen lukemista ja kirjoittamista varten.  
+
[[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.
 
Päätarkoitus on tarjota rajapinta, joka pystyy natiiviisti tuomaan ja viemään tärkeimpiä taulukkolaskentaohjelmien tiedostomuotoja ilman että näitä taulukkolaskentasovelluksia on asennettu.
  
Line 42: Line 40:
 
=== TsWorkbookTabControl ===
 
=== TsWorkbookTabControl ===
 
[[file:TSWORKBOOKTABCONTROL.png]]
 
[[file:TSWORKBOOKTABCONTROL.png]]
Tämä on välilehtikomponentti joka tarjoaa välilehden jokaiselle laskentataulukolle taulukkolaskennassa. Välilehdet nimet ovat samat nimet kuin laskentataulukoissa.  
+
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.
 
Valitsemalla toisen välilehden  se viestitetään muille visuaalisille taulukkolaskentakomponenteille WorkbookSource-komponentin kautta.
  
Line 52: Line 50:
 
Tärkeimmät niistä kerrotaan jäljempänä.
 
Tärkeimmät niistä kerrotaan jäljempänä.
 
   
 
   
{{Note|TsWorksheetGrid voidaan käyttää myös ilman TsWorkbookSource-koponenttia. Tätä varten se tarjoaa omat menetelmät tiedoston lukemiseen ja kirjoittamiseen.}}
+
{{Note|TsWorksheetGrid voidaan käyttää myös ilman TsWorkbookSource-komponenttia. Tätä varten se tarjoaa omat menetelmät tiedoston lukemiseen ja kirjoittamiseen.}}
  
 
=== TsCellEdit ===
 
=== TsCellEdit ===
Line 62: Line 60:
 
=== TsCellIndicator ===
 
=== TsCellIndicator ===
 
[[file:TSCELLINDICATOR.png]]
 
[[file:TSCELLINDICATOR.png]]
This is a TEdit control which displays the address of the currently selected cell in Excel notation, e.g. 'A1' if the active cell is in the first row and first column (row = 0, column = 0). Conversely, if a valid cell address is entered into this control the corresponding cell becomes active.  
+
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 ===
 
=== TsCellCombobox ===
[[file:TSCELLCOMBOBOX.png]]This combobox can be used to modify various cell properties by selecting values from the dropdown list. The property affected is determined by the <code>CellFormatItem</code> of the combobox:
+
[[file:TSCELLCOMBOBOX.png]]Tällä ComboBox-tyylisellä komponentilla muokataan solujen ominaisuuksia valitsemalla arvot pudotusvalikosta. Se millaisia piirteitä valitaan määräytyy <code>CellFormatItem</code> ominaisuuden mukaan:
* <code>cfiFontName</code>: the list contains he names of all fonts available on the current system. If an item is selected the corresponding font is used to format the cell of the currently selected cells.
+
 
* <code>cfiFontSize</code>: the list contains the most typical font sizes used in spreadsheets. Selecting an item sets the font size of the currently selected cells accordingly.
+
* <code>cfiFontName</code>: luettelo sisältää nykyiseen järjestelmään saatavilla olevien kirjaisimien (fonttien) nimet. Jos fontti valitaan niin vastaava fonttia käytetään valituissa soluissa.
* <code>cfiFontColor</code>: the list contains all colors of the workbook's palette. The selected color is assigned to the font of the selected cells.
+
* <code>cfiFontSize</code>: luettelo sisältää tyypillisimmät kirjasinkoot joita käytetään taulukkolaskentaohjelmassa. Kohteen valitseminen muuttaa fontin koon valituissa soluissa vastaamaan fontin kokoa.
* <code>cfiBackgroundColor</code>: like <code>cfiFontColor</code> - the selected color is used as background fill color of the selected cells.
+
* <code>cfiFontColor</code>: luettelo sisältää workbook:n paletin kaikki värit.  
 +
Valittu väri on tulee käyttöön kaikissa valituissa soluissa.
 +
* <code>cfiBackgroundColor</code>: kuten <code>cfiFontColor</code> - valittua väriä käytetään taustavärinä valituissa soluissa.
 
   
 
   
 
=== TsSpreadsheetInspector ===
 
=== TsSpreadsheetInspector ===
 
[[file:TSSPREADSHEETINSPECTOR.png]]
 
[[file:TSSPREADSHEETINSPECTOR.png]]
Inherits from TValueListEditor and displays name-value pairs for properties of the workbook, the selected worksheet, and the content and formatting of the active cell. It's main purpose is to help with debugging.
+
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.
  
== Writing a spreadsheet application ==
+
== Tee taulukkolaskentaohjelma ==
Enough of theory, let's get started. Let's write a small spreadsheet application. Sure - it cannot compete with the spreadsheets of the main Office applications like Excel or Open/LibreOffice, but it has all the main ingredients due to FPSpreadsheet. And using the FPSpreadsheet controls allows to achieve this with minimum lines of code.
+
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ä.
  
=== Preparations ===
+
=== Esivalmistelut ===
 
[[file:fpspreadsheetcontrols_preparations.png‎|right|400px]]
 
[[file:fpspreadsheetcontrols_preparations.png‎|right|400px]]
Create a new project and store it in a folder of your liking.  
+
Luo uusi projekti ja tallenna se mieleiseen kansioon.  
  
Since Office applications have a menu and a toolbar add a '''TMainMenu''' and a '''TToolbar''' component to the form. (You could even mimic the ribbon user interface of the new Microsoft applications by adding a '''TSpkToolbar''' from [http://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/spktoolbar/ Lazarus Code and Components Repository], but be aware that this component does not yet provide all the features of a standard toolbar).
 
  
In fact, we will be needing '''another toolbar''' for the formula edit line. As you will see later, it will be resizable; as size control add a '''TSplitter''' to the form and top-align it such that it is positioned underneath the two toolbars. In order to keep a minimum size of the toolbar you should establish constraints: Look at the current height of the toolbar and enter this number into the <code>MinHeight</code> field of the <code>Constraints</code> property of the toolbar. To separate the formula toolbar from the rest of the main form, activate the option <code>ebBottom</code> of the <code>EdgeBorders</code> property of the second toolbar.
+
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).
  
Since menu and toolbars will have to handle same user actions it is advantageous to provide a '''TActionList''' to store all possible actions. If assigned to the menu items and toolbuttons both will react on user interaction in the same way without any additional coding. And: The FPSpreadsheet visual controls package contains a bunch of spreadsheet-related standard actions ready to use.
 
  
The toolbar of the completed application will contain a lot of of icons. Therefore, we need a '''TImageList''' component which has to be linked to the <code>Images</code> property of the TMainMenu, the TToolbars, and the TActionList. Where to get icons? You can have a look in the folder <code>images</code> of your Lazarus installation where you'll find standard icons for loading and saving etc. This is a subset of the [http://www.famfamfam.com/lab/icons/silk/ famfamfam SILK icon library]. Another huge icon set is the [http://p.yusukekamiyamane.com/ Fugue icon collection]. Both collections are licensed as "Creative commons" and are free even for commercial use, provided that appropriate reference is given in the created programs. When selecting icons prefer the png image format, and make sure to use always the same size, usually 16x16 pixels.
+
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.
 +
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 <code>Images</code> ominaisuus TMainMenu, TToolbars ja TActionList komponenteissa. Mistä kuvakkeet? Voit katsoa Lazaruksen asennuksen  <code>images</code> kansiota josta löytyy standardit kuvakkeet lataamiseen ja tallentamiseen jne.
 +
Nämä ovat osajoukko [http://www.famfamfam.com/lab/icons/silk/ famfamfam SILK kuvakekirjastosta]. Toinen laaja kuvakekirjasto on [http://p.yusukekamiyamane.com/ 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 ===
 
=== Setting up the visual workbook ===
  
 
==== TsWorkbookSource ====
 
==== TsWorkbookSource ====
As described in the introductory section the '''TsWorkbookSource''' component is the interface between workbook and controls on the user interface. Add this component to the form and give it a decent name (we'll keep the default name <code>sWorkbookSource1</code> here, though). As you will see shortly, this component will have to be assigned to the property <code>WorkbookSource</code> of all controls of the FPSpreadsheet_visual package.
+
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 <code>sWorkbookSource1</code>).Kuten pian huomaataan, tätä komponenttia osoitetaan kaikkien  FPSpreadsheet_visual paketin komponenttien omaisuudessa <code>WorkbookSource</code>.
 +
 
 +
 
 +
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:
 +
 
 +
 
  
The WorkbookSource is responsible for loading and writing data from/to file and for communicating with the workbook. Therefore, it owns a set of options that are passed to the workbook and control these processes:
+
<syntaxhighlight lang=pascal>
[[file:sTabControl.png|right|400px]]
 
<syntaxhighlight>
 
 
type
 
type
 
   TsWorkbookOption = (boVirtualMode, boBufStream, boAutoCalc, boCalcBeforeSaving, boReadFormulas);
 
   TsWorkbookOption = (boVirtualMode, boBufStream, boAutoCalc, boCalcBeforeSaving, boReadFormulas);
Line 103: Line 115:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
The most important ones are
+
[[file:sTabControl.png|right|400px]]
* <code>boAutoCalc</code>: activates automatic calculation of formulas whenever cell content changes.
 
* <code>boCalcBeforeSaving</code>: calculated formulas before a workbook is written to file
 
* <code>boReadFormulas</code>: if set full formulas are read from the file, otherwise only formula results.
 
* <code>boBufStream</code> and <code>boVirtualMode</code>: In non-visual programs, these options can help if running out of memory in case of large workbooks. <code>boVirtualMode</code>, in particular, is not usable for visual applications, though, because it avoids keeping data in the worksheet cells. See also [[FPSpreadsheet#Virtual_mode]].
 
  
In this tutorial, it is assumed that the options <code>boAutoCalc</code> and <code>boReadFormulas</code> are activated.
+
Tärkeimmät ovat:
 +
* <code>boAutoCalc</code>: aktivoi automaattisen laskennan kaavoissa aina kun solun sisältö muuttuu.
 +
* <code>boCalcBeforeSaving</code>: laskee kaavat ennen kuin työkirja tallennetaan tiedostoon
 +
* <code>boReadFormulas</code>: jos on asetettu niin kaavat luetaan tiedoston, muuten vain kaavojen tulokset.
 +
* <code>boBufStream</code> ja <code>boVirtualMode</code>:  Muissa kuin visuaalisissa ohjelmissa, nämä vaihtoehdot voivat auttaa, jos muisti on loppumassa  kun kyseessä on todella suuria työkirjoja.  <code>boVirtualMode</code>, 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 <code>boAutoCalc</code> ja <code>boReadFormulas</code> valitaan.
  
 
==== TsWorkbookTabControl ====
 
==== TsWorkbookTabControl ====
The first visual control used in the form is a '''TsWorkbookTabControl''' - click it onto the form (into the space not occupied by the toolbar). Client-align it within the form, this shows the TabControl as a bright rectangle only. Now link its <code>WorkbookSource</code> property to the TsWorkbookSource component that we have added just before. Now the TabControl shows a tab labelled "Sheet1". This is because the TsWorkbookSource has created a dummy workkbook containing a single worksheet "Sheet1". The WorkbookSource synchronizes this internal workbook with the TabControl (and the other visual controls to come) such that it displays this worksheet as a tab.
 
  
In Excel the worksheet tabs are at the bottom of the form - to achieve this effect you can set the property <code>TabPosition</code> of the TabControl to <code>tpBottom</code>; there are some painting issues of the LCL with this TabPosition, though, therefore, I prefer the default setting, <code>tpTop</code>.
+
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 <code>WorkbookSource</code> 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ä.
  
The screenshot shows how far we've got. <br clear="all" />
+
Excelissä laskentataulukon välilehdet ovat laskentataulukon alaosassa - tämä vaikutus voidaan saavuttaa asettamalla ominaisuus  <code>TabPosition</code>TabControl komponentissa , tilaan <code>tpBottom</code>. LCL:ssä on joitakin näytön piirtämishasteita TabPosition ominaisuudessa, siksi oletusasetus on <code>tpTop</code>.
 +
 
 +
Kuvakaappaus osoittaa, kuinka pitkälle on jo edetty. <br clear="all" />
  
 
==== TsWorksheetGrid ====
 
==== TsWorksheetGrid ====
[[file:sWorksheetGrid.png|right|400px]] Now we add a '''TsWorksheetGrid''' control. Click it somewhere into the space occupied by the TabControl such that it becomes a child a of the TabControl. You see a standard stringgrid-like component. Link its <code>WorkbookSource</code> property to the source added at the beginning, and the grid looks more like a spreadsheet: there are the column headers labelled by letters "A", "B", etc, and the row headers labelled by numbers "1", "2", etc; the active cell, A1, is marked by a thick border.  
+
[[file:sWorksheetGrid.png|right|400px]] 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 <code>WorkbookSource</code> 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 <code>TitleStyle</code> ominaisuuden <code>tsNative</code> joka ottaa huomioon aktiivisen teeman rivin ja sarakkeen otsikon näyttämisessä. Voit aktivoida monia <code>Options</code> ominaisuuksia laskentataulukkoon:
  
You may want to switch the grid's <code>TitleStyle</code> to <code>tsNative</code> in order to achieve themed painting of the row and column headers. And here is a good place to adapt the grid's <code>Options</code> in order to activate many features well-known to spreadsheets:
+
* <code>goEditing</code> on oltava aktiivinen, muuten sen sisältöä ei voi muuttaa.  
* <code>goEditing</code> must be active, otherwise the grid contents cannot be modified.  
+
* <code>goAlwaysShowEditor</code> pitäisi olla pois päältä, koska se häiritsee muokkaamista taulukkolaskentasovelluksissa.
* <code>goAlwaysShowEditor</code> should be off because it interferes with the editing convention of spreadsheet applications.
+
* <code>goColSizing</code> mahdollistaa muuttaa sarakkeen leveyttä vetämällä vierekkäisten sarakeotsikoiden rajaa. Vetäminen tapahtuu hiiren vasemman painikkeen ollessa painettuna.
* <code>goColSizing</code> enables changing of the column width by dragging the dividing line between adjacent column headers. Dragging occurs with the left mouse button pressed.
+
* <code>goRowSizing</code> tekee saman rivin korkeuteen.
* <code>goRowSizing</code> does the same with the row heights.
+
* <code>goDblAutoResize</code> 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
* <code>goDblAutoResize</code> activates the feature that optimum column width can be set by double-clicking in the header on its dividing line to the next column. The "optimum" column width is such that no cell content is truncated and no extra space is shown in the column.
+
* <code>goHeaderHotTack</code> antaa visuaalista palautetta, jos hiiri on sen otsikkosolun päällä.
* <code>goHeaderHotTack</code> gives visual feedback if the mouse is above a header cell.
+
* <code>goRangeSelect</code> (which is on by default) mahdollistaa suorakaiteen muotoisen solualueen valinnan vetämällä hiirellä vastakkaisten solujen kulmiin solujen välillä.  
* <code>goRangeSelect</code> (which is on by default) enables selection of a rectangular range of cells by dragging the mouse between cells at opposite corners of the rectangle. If you have Lazarus trunk you can even select multiple rectangles by holding the CTRL key down before the next rectangle is dragged - in the release version of Lazarus (1.2.6 at the time of this writing) only a single range can be selected.
+
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.
* <code>goThumbTracking</code> activates immediate scrolling of the worksheet if one of the scrollbars is dragged with the mouse. The Office applications usually scroll by lines; you can achieve this by turning off <code>goSmoothScroll</code>.
+
* <code>goThumbTracking</code> 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ä <code>goSmoothScroll</code> pois päältä.
  
In addition to these <code>Options</code> inherited from <code>TCustomGrid</code> there are some more properties specialized for spreadsheet operation:
+
Näiden lisäksi <code>Options</code> perii <code>TCustomGrid</code>:stä jossa on olemassa joitakin ominaisuuksia jotka onerikoistunut taulukkolaskenta toimintaan
* <code>ShowGridLines</code>, if <code>false</code>, hides the row and column grid lines.
+
* <code>ShowGridLines</code>, jos <code>false</code>, piilottaa rivin ja sarakkeen rivit.
* <code>ShowHeaders</code> can be set to <code>false</code> if the the column and row headers are to be hidden. (The same can be achieved also by the deprecated property <code>DisplayFixedColRow</code>).
+
* <code>ShowHeaders</code> voidaan aasettaa <code>false</code> jos niin sarake ja rivi otsikot ovat piilossa.
* The LCL grids normally truncate text at the cell border if it is longer than the cell width. If <code>TextOverflow</code> is set to <code>true</code> then text can overflow into adjacent empty cells.
+
* LCL grids yleensä katkaisee tekstin solun rajalla, jos se on pitempi kuin solun leveys. Jos <code>TextOverflow</code> on asetettu <code>true</code> niin sitten tekstiä voi vuotaa viereisiin tyhjiin soluihin.
  
The properties <code>AutoCalc</code> and <code>ReadFormulas</code> are meant for stand-alone usage of the WorksheetGrid (i.e. without a TsWorkbookSource). Please use the corresponding options of the WorkbookSource instead. (<code>AutoCalc</code> enables automatic calculation of formulas whenever cell content changes. <code>ReadFormulas</code> activates reading of formulas from files, otherwise the grid would display only the formula results).
+
Ominaisuudet <code>AutoCalc</code> ja <code>ReadFormulas</code> on tarkoitettu WorksheetGrid itsenäiseen käyttöön  (esim. ilman TsWorkbookSource komponenttia). Ole hyvä ja käytä vastaavia  WorkbookSource:n vaihtoehtoja sen sijaan. (<code>AutoCalc</code> mahdollistaa automaattisen kaavojen laskemisen aina kun solun sisältö muuttuu. <code>ReadFormulas</code> aktivoi kaavojen lukemisen tiedostosta, muuten taulukossa näytettäisiin vain kaavojen tulokset).
  
=== Editing of values and formulas, Navigating ===
+
=== Arvojen ja kaavojen muokkaus sekä navigointi ===
  
When you compile and run the program you'll already be able to enter data into the grid. Just select the cell that you want to edit by clicking or using the arrow keys - the active cell is highlighted by a thick border. Then begin typing. When finished select another cell or press the {{keypress|ENTER}} key. Using {{keypress|Enter}} automatically selects the next cell in the grid. The grid's property <code>AutoAdvance</code> defines what is understood as being the "next cell": by default, {{keypress|Enter}} moves the active cell down (<code>aaDown</code>), but you can also move it to the right (<code>aaRight</code>), or turn this feature off (<code>aaNone</code>) - see the type <code>TAutoAdvance</code> defined in the unit <code>grids.pas</code> for even more options.
+
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 {{keypress|ENTER}}-näppäintä. Painamalla {{keypress|ENTER}} niin siirrytään automaattisesti seuraavaan soluun ruudukossa. Gridin omaisuus AutoAdvance määrittelee, mitä ymmärretään olevan "seuraavaan soluun": oletuksena, {{keypress|ENTER}} siirtyy aktiivisen solun alaspäin (<code>aaDown</code>), mutta voit myös siirtää sitä oikealle (<code>aaRight</code>), tai poistaa tämän ominaisuuden käytöstä (<code>aaNone</code>) - katso tyyppi <code>TAutoAdvance</code> määritely käännösyksikön <code>grids.pas</code> lähdekoodista lisävaihtoehdot.
  
If - as assumed above - the WorkbookSource option <code>boAutoCalc</code> is enabled the worksheet automatically supports calculation of '''formulas'''. As an example, go to cell A1, and enter the number <code>10</code>. Then, go to cell A2 and enter the formula <code>=A1+10</code>. The formula is automatically evaluated, and its result, <code>20</code>, is displayed in cell A2.  
+
Jos - kuten edellä on arvioitu - WorkbookSource vaihtoehto <code>boAutoCalc</code> on käytössä niin laskentataulukko tukee automaattisesti '''kaavojen''' laskemista. Esimerkiksi siirry soluun A1 ja kirjoita numero <code>10</code>. Sitten mene soluun A2 ja syötä kaava <code>=A1+10</code>. Kaavan automaattisesti laskettiin ja
 +
sen seurauksena <code>20</code>, näkyy solussa A2.  
  
When you navigate in the grid you may notice that cell A2 only displays the formula result, it seems that there is no way to modify the formula once it has been entered. No need to worry - press the key {{keypress|F2}} or click into the cell a second time to enter '''enhanced edit mode''' in which formulas are visible in the cell.
+
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 {{keypress|F2}} tai klikkaa solua toisen kerran niin tullaan '''enhanced edit mode''' tilaan, jossa kaavat ovat näkyvissä solussa.
  
 
[[file:sCellIndicator_sCellEdit.png‎|right|400px]]
 
[[file:sCellIndicator_sCellEdit.png‎|right|400px]]
In order to edit formulas the Office applications offer a dedicated formula editor bar. Of course, fpspreadsheet has this feature, too. It is built into the '''TsCellEdit''' component which is set up such as to always show the full content of a cell. You remember the second toolbar from the "Preparations" section? This will house the TsCellEdit. But wait a minute - there's more to consider: Since formulas occasionally may get rather long the control should be capable of managing serval lines. The same with multi-lined text. TsCellEdit can do this since it is inherited from TCustomMemo which is a multi-line control. You also remember that we added a splitter to the form of the second toolbar? This is for height adjustment for the case that we want to use the multi-line feature of the TsCellEdit: just drag the splitter down to show more lines, or drag it upwards to stop at the height of a single line due to the MinHeight constraints that we had assigned to the toolbar.
+
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ä <code>Width</code> noin 100 pikseliin, poista sen  <code>Caption</code> teksti ja aseta sen <code>BevelOuter</code> ominaisuus <code>bvNone</code>:ksi.
 +
 
 +
Lisää TsCellIndicator tähän panel-komponenttiin ja laita sen align ominauus arvoon top eli se täyttää paneelin
 +
yläosan. Liitä sen <code>WorkbookSource</code> ominaisuuteen käytössä oleva TsWorkbookSource-komponentti,
 +
ja heti näet tekstin "A1" eli nykyisen valitun solun osoitteen.
  
The TsCellEdit will cover all available space in the second toolbar. Before we add the TsCellEdit we can make life easier if we think about what else will be in the second toolbar. In Excel, there is an indicator which displays the address of the currently active cell. This is the purpose of the '''TsCellIndicator'''. Since its height should not change when the toolbar is dragged down we first add a '''TPanel''' to the second toolbar; reduce its <code>Width</code> to about 100 pixels, remove its <code>Caption</code> and set its <code>BevelOuter</code> to <code>bvNone</code>.
+
Joskus on toivottavaa muuttaa tämän "laatikon" leveyttä suorituksen aikana. Joten, miksi ei lisätä splitter toisen työkaluriviin? Aseta sen <code>Align</code> ominaisuudeksi <code>alLeft</code>. 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 <code>Align</code> omaisuus paneelin <code>alLeft</code> samoin, ja vedä  splitter oikealle paneelissa. Nyt  splitter  on oikeassa paikassa.
  
Add the TsCellIndicator to this panel and align it to the top of the panel. Connect its <code>WorkbookSource</code> to the TsWorkbookSource control on the form, and immediately you'll see the text "A1", the address of the currenly selected cell.
 
  
Sometimes it is desirable to change the width of this box at runtime. So, why not add a splitter to the second toolbar? Set its <code>Align</code> property to <code>alLeft</code>. The result is a bit strange: the splitter is at the very left edge of the toolbar, but you'd expect to see it at the right of the panel. This is because the panel is not aligned by default. Set the <code>Align</code> property of the panel to <code>alLeft</code> as well, and drag the splitter to the right of the panel. Now the splitter is at the correct position.
+
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 <code>WorkbookSource</code> kohteeseen lomakkeella käytetty TsWorkbookSource komponentti.
  
Almost done now... We finally add a TsCellEdit component to the empty space of the toolbar. Client-align it so that it fills the entire rest of the toolbar. As usual, set its <code>WorkbookSource</code> property to the instance of the TsWorkbookSource on the the form.
+
Käännä ja aja. Käynnistä ohjelma:
  
Compile and run. Play with the program:
+
*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 {{keypress|Enter}}, ja katso mitä tapahtuu ...
 +
* Anna kaava. Siirry takaisin kaavasoluun - kaava näkyy CellEdit ja sitä voidaan muuttaa helposti.
  
* Enter some dummy data. Navigate in the worksheet. You'll see that the CellIndicator always shows the address of the active cell. The contents of the active cell is displayed in the CellEdit box. The CellIndicator is not just a passive display of the current cell, it can also be edited. Type in the address of a cell which you want to become active, press {{keypress|Enter}}, and see what happens...
+
* Anna monirivistä tekstiä - voit valvoa rivinloppuja CellEdit:ssä pitämällä {{keypress|Ctrl}}-näppäintä painettuna, kun painat {{keypress|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 <code>Option</code> <code>goRowSizing</code>. Sitten voit vetää alempaa jakolinjan riviä monirivisessa solussa alaspäin jolloin sen korkeus kasvaa - puuttuvat rivit näkyvät nyt solussa!
* Enter a formula. Navigate back into the formula cell - the formula is displayed in the CellEdit and can be changed there readily.
 
* Enter multi-lined text - you can enforce a lineending in the CellEdit by holding the {{keypress|Ctrl}} key down when you press {{keypress|ENTER}}. The cell displays only one line of the text. Drag the horizontal splitter underneath the second toolbar down - the CellEdit shows all lines. Another way to see all lines of the text, is to adjust the cell height. You must have activated the grid <code>Option</code> <code>goRowSizing</code>. Then you can drag the lower dividing line of the row with the multi-line cell down to increase the row height - the missing lines now appear in the cell!
 
  
=== Formatting of cells ===
+
=== Solujen muotoilu ===
  
In addition to entering data the user usually wants to apply some formatting to the cells in order to enhance or group them. The worksheet grid is set up in such a way that its cells display the formats taken from the workbook. In addition, the visual FPSpreadsheet controls are able to store formatting attributes into the cell. Because of the notification mechanism via the WorkbookSource these formats are returned to the WorksheetGrid for display.
+
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.
  
==== Adding comboboxes for font name, font size, and font color ====
+
 
 +
==== Comboboxien fontin nimen, koon ja värin lisääminen ====
 
[[file:sCellFontCombobox.png‎|right|400px]]
 
[[file:sCellFontCombobox.png‎|right|400px]]
In this section, we want to provide the possibility to modify the font of the cell texts by selecting its name, size and/or color. The visual FPSpreadsheet provide the flexible '''TsCellCombobox''' for this purpose. It has the property <code>CellFormatItem</code> which defines which attribute it controls:
+
Tässä osiossa kerromme mahdollisuuden muuttaa solun tekstien fonttia valitsemalla sen nimi, koko ja / tai väri.  
* <code>cfiFontName</code>: This option populates the combobox with all fonts found in the current system. The selected item is used for the type face in the selected cells.
+
Visuaalinen FPSpreadsheet tarjoavat joustavan '''TsCellComboBox'''-komponentin tätä tarkoitusta varten.  
* <code>cfiFontSize</code> fills the combobox with the mostly used font sizes (in points). Again, the selected item defines the font size of the selected cells.
+
Sen on ominaisuus <code> CellFormatItem </code> määrittelee mikä määrite kulloinkin muutetaan:
* <code>cfiFontColor</code> adds all pre-defined colors ("palette") of the workbook to the combobox to set the text color of the selected cells. The combobox items consist of a little color box along with the color name. If the <code>ColorRectWidth</code> is set to <code>-1</code> the color name is dropped.
+
* <code>cfiFontName</code>: Tämä vaihtoehto kertoo ComboBox:ssa kaikki fontit jotka löytyvät käytetystä järjestelmästä. Näyttää valitun fontin valituissa soluissa.
* <code>cfiBackgroundColor</code>, the same with the background color of the selected cells.
+
* <code>cfiFontSize</code> täyttää ComboBoxin enimmäkseen käytetyillä fontin koo-oilla (pisteinä). Näyttää valittua fonttikokoa valituissa soluissa.
* <code>cfiCellBorderColor</code>, the same with the border color of the selected cells - this feature is currently not yet supported.
+
* <code>cfiFontColor</code> 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  <code>ColorRectWidth</code> asetetaan <code>-1</code> värin nimi jätetään pois.
 +
* <code>cfiBackgroundColor</code>, sama kuin edellinen mutta nyt taustaväri valituissa soluissa.
 +
* <code>cfiCellBorderColor</code>, sama kuin edellinen mutta nyt solun reunaväri valituissa soluissa - tämä ominaisuus ei ole tällä hetkellä vielä tuettuna.
  
Add three TsCellComboboxes to the first toolbar and set their <code>CellFormatItem</code> to <code>cfiFontname</code>, <code>cfiFontSize</code>, and <code>cfiFontColor</code>, respectively. Link their <code>WorkbookSource</code> property to the TsWorkbookSource on the form. You may want to increase the width of the font name combobox such that the longest font names are not cut off; the other comboboxes may become narrower. You may also want to turn off the color names of the third combobox by setting its <code>ColorRechtWidth</code> to <code>-1</code>.
+
Lisää nämä kolme TsCellComboboxia ensimmäiseen työkalupalkkiin ja aseta niiden <code>CellFormatItem</code> ominaisuus vastaavasti <code>cfiFontname</code>, <code>cfiFontSize</code> ja <code>cfiFontColor</code>.  
 +
Linkitä <code>WorkbookSource</code> 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 <code>ColorRectWidth</code> arvoon <code>-1</code>.
  
That's all to modify fonts. Compile and run. Enter some text and play with these new features of the program.
+
Tässä kaikki mikä muuttaa fontteja. Käännä ja aja. Kirjoita testitekstiä ja kokeile näitä ohjelman ominaisuuksia.
  
==== Using standard actions ====
+
==== Vakiotoimintojen käyttäminen ====
 
[[file:sFontStyleAction_selected.png|right|300px]]
 
[[file:sFontStyleAction_selected.png|right|300px]]
FPSpreadsheet supports a lot of formats that can be applied to cells, such as text alignment, text rotation, text font, or cell borders or background colors. Typical gui applications contain menu commands and/or toolbar buttons which are assigned to each of these properties and allow to set them by a simple mouse click. In addition, the state of these controls often reflects the properties of the active cell. For example, if there is a button for using a bold type-face this button should be drawn as being pressed if the active cell is bold, but as released if it is not. To simplify the coding of these tasks a large number of standard actions has been added to the library.  
+
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''': adds an empty worksheet to the workbook. Specify its name in the <code>NameMask</code> property. The <code>NameMask</code> must contain the format specifier <code>%d</code> which is replaced at runtime by a number such that the worksheet name is unique.
+
* '''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''': deletes the active worksheet from the workbook after a confirmation dialog. The last worksheet cannot be deleted.
+
* '''TsWorksheetDeleteAction''': Poistaa aktiivisen laskentataulukon jos käyttäjä vahvistaa sen valintaikkunassa. Viimeistä laskentataulukkoa ei voi poistaa.
  
* '''TsWorksheetRenameAction''': renames the active worksheet.
+
* '''TsWorksheetRenameAction''': Uudelleen nimeää aktiivisen laskentataulukon.
  
* '''TsCopyAction''': Copies the currently selected cells to an internal list ("CellClipboard") from where they can be pasted back into the spreadsheet to another location. The process can occur in a clipboard-manner ("copy"/"cut", then "paste") or in the way of the "copy brush" of the Office applications. The property <code>CopyItem</code> determines whether the entire cell, or only cell values, cell formulas, or cell formats are transferred.  
+
* '''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''': Modifies the font style of the selected cells. The property <code>FontStyle</code> defines whether the action makes the font bold, italic, underlined or striked-out. Normally each font style is handles by its own action. See the example below.
+
* '''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''': Can be used to modify the horizontal alignment of text in the selected cells. Select <code>HorAlignment</code> to define which kind of alignment (left, center, right) is covered by the action. Like with the TsFontStyleAction, several actions should be provided to offer all available alignments. They are grouped in a mutually exclusive way like radiobuttons.
+
* '''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''': Changes the vertical alignment of text in the selected cells: the kind of alignment is defined by the <code>VertAlignment</code> property. Again, these actions work like radiobuttons.
+
* '''TsVertAlignmentAction''': Muuttaa valituissa soluissa tekstin keskitystä pystysuorassa. Määrittely on <code>VertAlignment</code> ominaisuudessa.
  
* '''TsTextRotationAction''': Allows to specify the text orientation in the selected cells as defined by the property <code>TextRotation</code> in a mutially exclusive way.
+
* '''TsTextRotationAction''': Määrittää tekstin suunnan valituissa soluissa. Määrittely on <code>TextRotation</code> ominaisuudessa.
  
* '''TsWordWrapAction''': Activates the word-wrapping feature for the selected cells: if text is longer than the width of the cell (or height, if the text is rotated) then it is wrapped into multiple lines.
+
* '''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''': Defines the number format to be used for the selected cells. The format to be used is defined by the properties <code>NumberFormat</code> (such as <code>nfFixed</code>) for built-in formats, and <code>NumberFormatStr</code> for specialized formatting.
+
* '''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''': Allows to increase or decrease the number of decimal places shown in the selected cells. The property <code>Delta</code> controls whether an increase (+1) or decrease (-1) is wanted.
+
* '''TsDecimalsAction''': Lisää tai vähentää lukuarvoa valituissa soluissa. Ominaisuudessa <code>Delta</code> on haluttu lisäys (+1) tai vähennys (-1).
  
* '''TsCellBorderAction''': Allows to specify if a border will be drawn around the selected cells. The subproperties <code>East</code>, <code>West</code>, <code>North</code>, <code>South</code>, <code>InnerHor</code>, <code>InnerVert</code> of <code>Borders</code> define what the border will look like at each side of the cell range. Note that each rectangular range of cells is considere as a single block; the properties <code>East</code>, <code>West</code>, <code>North</code> and <code>South</code> are responsible for the outer borders of the entire block, inner borders are defined by <code>InnerHor</code> and <code>InnerVert</code>. Using these properties, borders can be switched on and off (<code>Visible</code>), and in addition, the line style and line color can be changed.
+
* '''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''': If checked, the cells of each selected rectangular range are merge to a single block. Unchecking the action separates the block to individual cells. Note that the block's content and formatting is defined by the top-left cell of each block; content and formats of other cells will be lost.
+
* '''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" ====
+
* '''TsCellProtectionAction''': on kaksi eri versiota, toinen suojaa soluja muutoksilta ja toinen piilottaa kaavat riippuen ominaisuuden <tt> Protection </tt> arvosta. Huomaa, että tämä toiminta on tehokasta vain, jos laskentataulukon suojaus on käytössä (kutsu <tt> Workbooksource.Worksheet.Protect (true) </tt> ).
 +
 
 +
==== "Lihavointi", "kursiivi", ja "alleviivaus" painikkeiden lisääminen ====
 
[[file:sFontStyleAction_in_ActionListEditor.png|right|350px]]
 
[[file:sFontStyleAction_in_ActionListEditor.png|right|350px]]
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 <code>TsFontStyleAction</code>.  
+
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 <code>TsFontStyleAction</code>.  
  
* At first, we add this action to the form: Double-click on the '''TActionList''' to open the "ActionList Editor".  
+
* Aluksi lisäämme '''TActionList''':n lomakkeelle: Kaksoisnapsauta lomakkeella olevaa TActionList kuvaketta jokaa avaa "toimintolistan muokkaimen".  
* Click on the down-arrow next to the "+" button, and select the item "New standard action" from the drop-down menu.  
+
* Klikkaa alas-nuolta "+" -painiketta vieressä ja valitse kohde "Uusi perustoiminto" pudotusvalikosta.  
* This opens a dialog with the list of registered "Standard Action Classes".  
+
* Tämä avaa ikkunan, jossa luettelo rekisteröidyistä "Perustoimintoluokista".  
* Scroll down until you find a group named "FPSpreadsheet".  
+
* Selaa alaspäin, kunnes löydät ryhmän nimeltä "FPSpreadsheet"..  
* In this group, select the item "TsFontStyleAction" by double-clicking.  
+
* Tässä ryhmässä valitse kohde "TsFontStyleAction" kaksoisnapsauttamalla.  
* Now an item <code>sFontStyleAction1</code> appears in the ActionList Editor.  
+
* Nyt kohta  <code>sFontStyleAction1</code> näkyy toimintolistan muokkaimen toiminto-osiossa.  
* It should already be selected like in the screenshot at the right. If not, select <code>sFontStyleAction1</code> in the ActionList Editor to bring it up in the Object Inspector and to set up its properties:
+
*Sen pitäisi olla jo valittuna kuten kuvakaappaus oikealla. Jos ei, valitse  <code>sFontStyleAction1</code> toimintolistan muokkaimesta joka tuo sen komponenttimuokkaimeen ja näyttää sen ominaisuudet:
** Use the text "Bold" for the <code>Caption</code> - this is the text that will be assigned to the corresponding menu item.
+
** Kirjoita teksti "Bold" <code>Caption</code> ominaisuuteen - tämä on teksti, joka näytetään vastaavassa kohtaa valikossa.
** Similarly, assign "Bold font" to the <code>Hint</code> property.
+
** Samoin kirjoita "Bold font" <code>Hint</code> omaisuuteen.
** Set the <code>ImageIndex</code> to the index of the icon in the form's ImageList that you want to see in the toolbar.
+
** Aseta  <code>ImageIndex</code> osoittamaan kuvaketta lomakkeen ImageList indeksissä siihen mitä haluat nähdä työkalupalkissa.
** Make sure that the item <code>fssBold</code> is highlighted in the dropdown list of the property <code>FontStyle</code>. If not, select it. Since <code>TsFontStyleAction</code> can handle several font styles (bold, italic, underline, strikeout) we have to tell the action which font style it should be responsible of.  
+
** Varmista, että kohde <code>fssBold</code> korostuu pudotusvalikosta omaisuutta <code>FontStyle</code>. 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.
** Like with the visual controls, don't forget to assign the TsWorkbookSource to the corresponding property <code>WorkbookSource</code> 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.  
+
** Kuten muiden näiden visuaalinen komponenttien kanssa, älä unohda antaa TsWorkbookSource vastaavaa oliota, <code>WorkbookSource</code> omaisuuteen. Tämä toimii laskentataulukon / työkirja välisessä viestinnässä ja toiminnassa ja toisaalta se suorittaa siihen liittyvät tarkastukset.
 +
 +
Ota 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"  <code>Caption</code> 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 <code>Action</code> ominaisuuden pudotusvalikosta <code>sFontStyle1</code> toiminta - tähän kohtaan - ja valikkokohta näyttää automaattisesti action komponentin Caption kohtaan toimittamaa tekstiä; "Bold".
 +
 +
Lopuksi lisätään työkalurivipainike "Bold" toiminnalla. Napsauta hiiren kakkospainikkeella TToolbar päällä,
 +
ja lisää uusi toolbutton valitsemalla kohta "Uusi nappi" ponnahdusvalikosta. Mene komponenttimuokkaimessa <code>Action</code> ominaisuuteen, poimia sFontStyle1 kohde alasvetovalikosta, ja tämä riittää antamaan toolbutton:lle kyvyn lihavoimaan (Bold) solun fontin!
  
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 <code>Caption</code> 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 <code>Action</code> of the object inspector, pick the <code>sFontStyle1</code> 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".  
+
Toista tämä kahdelle muulle napille. Muunna ne asettamaan fontin tyyliksi kursivoitu ja alleviivattu.
  
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 <code>Action</code> in the object inspector again, pick the <code>sFontStyle1</code> item, and this is enough to give the tool button the ability to set a cell font to bold!
+
Testaa 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.
  
Repeat this procedure with two other buttons. Design them to set the font style to '''italic''' and '''underlined'''.
+
=== Tiedoston tallentaminen ===
  
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.
+
Saatuasi valmiiksi taulukkolaskenta datan niin varmasti haluat tallentaa sen taulukkolaskentatiedostoon.  
 +
Lazarus tarjoaa kaikki tarvittavat toiminnot tallentaa vakiotoiminnalla <code>TFileSaveAs</code>.  
 +
Tämä toiminto avaa automaattisesti '''FileDialog''' tiedostonimen valitsemista varten.
  
=== Saving to file ===
+
Valitse <code>TFileSaveAs</code> toiminta listasta vakiotoiminnan luokkista.
 +
Huomaa, että se ei kuulu "FPSpreadsheet" kategoriaan, mutta kuuluu "File" ryhmään, koska se on LCL:n vakiotoimintaa.
  
After having entered data into the grid you will certainly want to '''save the grid to a spreadsheet file'''. Lazarus provides all the necessary infrastructure for saving available in the standard action <code>TFileSaveAs</code>. This action automatically opens a '''FileDialog''' for entering the file name.
+
[[file:sFileFormatsForSaving.png‎|right|400px]]
 
 
Select the <code>TFileSaveAs</code> standard action from the list of standard action classes. Note that it cannot be found in the "FPSpreadsheet" category, but in the "File" group since it is a standard action of the LCL.
 
  
[[file:sFileFormatsForSaving.png‎|right|400px]]
+
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 <code>Filter</code> omaisuuteen.
 +
Liittämällä seuraava teksti tähän ominaisuuteen:
  
At first, let us specify the properties of the FileDialog. Select the property <code>Dialog</code> of the <code>TFileSaveAs</code> action in the object inspector. It is convenient to be able to store the workbook in various file formats; this can be prepared by providing a file format list in the <code>Filter</code> property of the dialog. Paste the following text into this property:
 
  
 
:<code>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</code>
 
:<code>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</code>
  
When you click on the ellipsis button next to <code>Filter</code> the file list appears in a more clearly arranged dialog shown at the right.
+
Kun klikkaat kolmea pistettä <code>Filter</code> ominaisuudessa niin tiedostojen luettelo näkyy selvemmin järjestettynä. Siitä on kuva oikealla.
  
Make one of these file extensions, e.g. xlsx, the default of the file dialog by assigning its list index to the <code>FilterIndex</code> property. The xlsx file is the first format in the filter list. <code>FilterIndex</code>, therefore, must be set to 1.  
+
Valitse näistä yksi tiedostopääte, esim xlsx, oletukseksi. Liittämällä se FilterIndex omaisuuteen.
 +
Xlsx tiedosto on ensimmäinen <code>FilterIndex</code> luettelossa. Siksi se asetetaan ykköseksi.  
  
{{Note|The indexes in the filter list are 1-based, in contrast to the convention of Lazarus and FPC using 0-based indexes.}}
+
{{Note|Indeksit alkaa ykkösestä FilterIndex:ssä, toisin kuin muissa joissa aika usein käytetään nollapohjaisia indeksejä.}}
  
Next, we define what happens after a file name has been selected in the file dialog. For this purpose, the <code>TFileSaveAs</code> action provides the event <code>OnAccept</code>. This is one of the few places where we have to write code in this project... But it is short: We check which file format has been selected in the format list and write the corresponding spreadsheet file by calling the method <code>SaveToSpreadsheetFile</code> of the TWorkbookSource:
+
Seuraavaksi määrittelemme mitä tapahtuu sen jälkeen kun tiedoston nimi on valittu tiedostontallennusikkunassa.  
 +
Tätä tarkoitusta varten, <code>TFileSaveAs</code> toiminta tarjoaa tapahtuman <code>OnAccept</code>. 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 :
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
uses
 
uses
 
   ..., fpspreadsheet, ...;  // for TsSpreadsheetFormat
 
   ..., fpspreadsheet, ...;  // for TsSpreadsheetFormat
Line 281: Line 338:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
We will make the FileSaveAs action available in the toolbar and in the menu:
+
Teemme FileSaveAs toiminnon saatavilla työkalupalkkiin ja valikkoon:
* '''Toolbar''': Add a TToolButton to the first toolbar and drag it to its left edge. Assign the FileSaveAs action to its <code>Action</code> property.
+
* '''Työkalurivi''':Lisää TToolButton ensimmäiseksi työkaluriviin ja vedä se vasempaan reunaan. Määritä FileSaveAs toiminto sen  <code>Action</code> omaisuuteen..
* '''Menu''': The "Save" command is usually in a submenu called "File". Therefore, double click on the TMainMenu, right-click on the "Format" item and insert a new item "before" the current one. Name it "File". Add a submenu to it. Click at the default menu item and assign the FileSaveAs action to its <code>Action</code> property.
+
* '''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  <code>Action</code> omaisuuteen.
  
=== Reading from file ===
+
=== 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
  
What is left is '''reading of a spreadsheet file''' into our application. Of course, FPSpreadsheet is well-prepared for this task. The operations are very similar to saving. But instead of using a TFileSaveAs standard action, we use a '''TFileOpen''' standard action. Again, this standard action has a built-in file dialog where we have to set the <code>DefaultExtension</code> (".xls" or ".xlsx", most probably) and the format <code>Filter</code>:
 
  
 
:<code>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</code>
 
:<code>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</code>
  
(Copy this string into the field <code>Filter</code> of the action's <code>Dialog</code>). As you may notice the <code>Filter</code> contains selections which cover various file formats, such as "All spreadsheet files", or "All Excel files". This is possible because the TsWorkbookSource has a property <code>AutoDetectFormat</code> for automatic detection of the spreadsheet file format. In the other cases, like "Libre/OpenOffice", we can specify the format, <code>sfOpenDocument</code>, explicitly. Evaluation of the correct file format and reading of the file is done in the <code>OnAccept</code> event handler of the action:
 
  
<syntaxhighlight>
+
(Kopioi tämä merkkijono Dialogin <code>Filter</code> kenttään). Kuten huomataan niin <code>Filter</code> sisältää valintoja, jotka kattavat eri tiedostomuotoja, kuten "Kaikki taulukkolaskenta tiedostot" tai "Kaikki Excel-tiedostot". Tämä on mahdollista, koska TsWorkbookSource komponentissa on ominaisuus <code>AutoDetectFormat</code> joka automaattisesti havaitsee taulukkolaskenta tiedostomuodot. Muissa tapauksissa, kuten "Libre / OpenOffice", voimme määrittää muodon, <code>sfOpenDocument</code> nimenmukaisesti. Oikean tiedostomuodon valinta ja lukeminen tehdään <code>OnAccept</code> tapahtumakäsittelijän toiminnoissa:
 +
 
 +
 
 +
<syntaxhighlight lang=pascal>
 
{ Loads the spreadsheet file selected by the FileOpen standard action }
 
{ Loads the spreadsheet file selected by the FileOpen standard action }
 
procedure TForm1.FileOpen1Accept(Sender: TObject);
 
procedure TForm1.FileOpen1Accept(Sender: TObject);
Line 312: Line 376:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
In order to see this action in the toolbar and menu, add a TToolButton to the '''toolbar''' and assign the TFileOpenAction to its <code>Action</code> property. In the '''menu''', add a new item before the "Save as" item, and assign its <code>Action</code> accordingly.
+
Jotta nähdään tämä toiminto työkalupalkissa ja valikossa, lisää TToolButton työkaluriviin ja liitä TFileOpenAction sen  <code>Action</code> omaisuuteen. Valikossa, lisää uuden kohdan ennen "Tallenna" kohtaa, ja liitä sen  <code>Action</code> sen mukaisesti.
 +
 
  
{{Note|You can see a spreadsheet file even at designtime if you assign its name to the <code>Filename</code> property of the TsWorkbookSource. But be aware that the file probably cannot be found at runtime if it is specified by a relative path and if the application is to run on another computer with a different directory structure! }}
+
{{Note|Näet taulukkolaskentatiedoston jopa suunnitteluaikana jos annat tiedostonimen  TsWorkbookSource <code> Filenames </code> 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!}}
  
== Summary ==
+
== Yhteenveto ==
If you followed us through the steps of this tutorial you have programmed a complex spreadsheet gui application almost without having written any line of code (with the exception of the loading and saving routines). If you did not, have a look at the demo "fps_ctrls" in the ''examples'' folder of the FPSpreadsheet installation; it shows the result of this tutorial with some add-ons.
 
  
[[Category:Tutorials]]
+
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.
[[Category:Data import and export]]
 
[[Category:fpspreadsheet]]
 

Latest revision as of 05:40, 16 February 2020

English (en) español (es) suomi (fi)

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

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ä.

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

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.


TsWorksheetGrid

TSWORKSHEETGRID.png 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ä.

Light bulb  Huomaa: TsWorksheetGrid voidaan käyttää myös ilman TsWorkbookSource-komponenttia. Tätä varten se tarjoaa omat menetelmät tiedoston lukemiseen ja kirjoittamiseen.

TsCellEdit

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.

TsCellIndicator

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.


TsCellCombobox

TSCELLCOMBOBOX.pngTä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: kuten cfiFontColor - valittua väriä käytetään taustavärinä valituissa soluissa.

TsSpreadsheetInspector

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.

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

fpspreadsheetcontrols preparations.png

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;
sTabControl.png

Tärkeimmät ovat:

  • boAutoCalc: aktivoi automaattisen laskennan kaavoissa aina kun solun sisältö muuttuu.
  • boCalcBeforeSaving: laskee kaavat ennen kuin työkirja tallennetaan tiedostoon
  • boReadFormulas: jos on asetettu niin kaavat luetaan tiedoston, muuten vain kaavojen tulokset.
  • 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#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 TabPositionTabControl 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

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.


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 sarakkeessa
  • goHeaderHotTack 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, jos false, piilottaa rivin ja sarakkeen rivit.
  • ShowHeaders voidaan aasettaa false 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 asetettu true 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).

Arvojen ja kaavojen muokkaus sekä navigointi

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.

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 .

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

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:

  • 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. Jos ColorRectWidth 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 ColorRectWidth arvoon -1.

Tässä kaikki mikä muuttaa fontteja. Käännä ja aja. Kirjoita testitekstiä ja kokeile näitä ohjelman ominaisuuksia.

Vakiotoimintojen käyttäminen

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.

  • 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 ja NumberFormatStr 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 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.
  • 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.
  • 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) ).

"Lihavointi", "kursiivi", ja "alleviivaus" painikkeiden lisääminen

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.

  • Aluksi lisäämme TActionList:n lomakkeelle: Kaksoisnapsauta lomakkeella olevaa TActionList kuvaketta jokaa avaa "toimintolistan muokkaimen".
  • Klikkaa alas-nuolta "+" -painiketta vieressä ja valitse kohde "Uusi perustoiminto" pudotusvalikosta.
  • Tämä avaa ikkunan, jossa luettelo rekisteröidyistä "Perustoimintoluokista".
  • Selaa alaspäin, kunnes löydät ryhmän nimeltä "FPSpreadsheet"..
  • Tässä ryhmässä valitse kohde "TsFontStyleAction" kaksoisnapsauttamalla.
  • Nyt kohta sFontStyleAction1 näkyy toimintolistan muokkaimen toiminto-osiossa.
  • Sen pitäisi olla jo valittuna kuten kuvakaappaus oikealla. Jos ei, valitse sFontStyleAction1 toimintolistan muokkaimesta joka tuo sen komponenttimuokkaimeen ja näyttää sen ominaisuudet:
    • Kirjoita teksti "Bold" Caption ominaisuuteen - tämä on teksti, joka näytetään vastaavassa kohtaa valikossa.
    • Samoin kirjoita "Bold font" Hint omaisuuteen.
    • Aseta ImageIndex osoittamaan kuvaketta lomakkeen ImageList indeksissä siihen mitä haluat nähdä työkalupalkissa.
    • 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.
    • 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.

Ota 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".

Lopuksi 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!

Toista tämä kahdelle muulle napille. Muunna ne asettamaan fontin tyyliksi kursivoitu ja alleviivattu.

Testaa 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.

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.

sFileFormatsForSaving.png

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.

Light bulb  Huomaa: Indeksit alkaa ykkösestä FilterIndex:ssä, toisin kuin muissa joissa aika usein käytetään nollapohjaisia indeksejä.

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.


Light bulb  Huomaa: 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!

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.