CalLite: Usage/fi: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: CalLite: Usage/fi
| Old | New | Line | |
|---|---|---|---|
| 1 | + |  | |
| 2 | + | ||
| 3 | + | # Käyttö | |
| 4 | + | ||
| 5 | + | Yksinkertaisesti pudota [[CalLite/fi|TCalendarLite]]-komponentti lomakkeelle ja näin saadaan toiminnallinen kuukausikalenteri. | |
| 6 | + | ||
| 7 | + | ## Värien vaihtaminen | |
| 8 | + | ||
| 9 | + | Kalenterin ominaisuus `Colors` Kerää kaikki asetukset, jotka vaikuttavat eri kohteisiin käytettäviin väreihin: | |
| 10 | + | ||
| 11 | + | - **ArrowBorderColor**: Kalenterin yläpuolella olevien nuolten reunan väri (oletus: clSilver) | |
| 12 | + | - **ArrowColor**: Kalenterin yläpuolella olevien nuolien täyttöväri (oletus: clSilver) | |
| 13 | + | - **BackgroundColor**: Koko kalenterin taustaväri (oletus: clWhite) | |
| 14 | + | - **BorderColor**: Valinnaisen reunuksen väri kalenterin ympärillä (oletus: clSilver). Lisäämällä kalentarin `Options` ominaisuuden `coShowBorder` arvo true:ksi niin näytetään reunus. | |
| 15 | + | - **DayLineColor**: Valinnaisen erotuslinjan väri ylimmän navigointiruudun ja kalenterin päiväalueen välillä (oletus: clSilver). Lisää kalenterin `Options` kohdasta `coDayLine` päälle jos halutaan näyttää tämä rivi | |
| 16 | + | - **HolidayColor**: Tekstin väri, jota käytetään lomapäivien esittämiseen (oletus: clRed). Lisää tapahtumakäsittelijä kohteeseen `OnGetHolidays` määrittelemään, mitkä päivät ovat lomapäiviä. | |
| 17 | + | - **PastMonthColor**: Tekstin väri, jolla näytetään edellisen tai seuraavan kuukauden päivät (oletus: clSilver). | |
| 18 | + | - **SelectedDateColor**: Valitun päivän täyttöväri (oletus: clMoneyGreen) | |
| 19 | + | - **TextColor**: Tavallisien kalenteripäivien tekstin väri (oletus: clBlack) | |
| 20 | + | - **TodayFrameColor**: Väri, jota käytetään suorakulman viivan värinä tämän päivän päivämäärän ympärille (oletus: clLime) | |
| 21 | + | - **TopRowColor**: Yläriville käytettävä taustaväri (oletus: clHighlight) | |
| 22 | + | - **TopRowTextColor**: Tekstin väri, jota käytetään ylärivillä (oletus: clHighlightText) | |
| 23 | + | - **WeekendColor**: Tekstin väri, jota käytetään esittämään viikonlopun päiviä (default: clRed) | |
| 24 | + | ||
| 25 | + | ## Kalenterin erilaisten asetusten (Options) käyttö | |
| 26 | + | ||
| 27 | + | Kalenterin näyttöä voidaan muuttaa muuttamalla kalenterin erilaisia asetuksia (Options): | |
| 28 | + | ||
| 29 | + | ``` pascal | |
| 30 | + | type | |
| 31 | + | TCalOption = (coBoldDayNames, coBoldHolidays, coBoldToday, coBoldTopRow, | |
| 32 | + | coBoldWeekend, coDayLine, coShowBorder, coShowHolidays, | |
| 33 | + | coShowTodayFrame, coShowTodayName, coShowTodayRow, | |
| 34 | + | coShowWeekend, coUseTopRowColors); | |
| 35 | + | ``` | |
| 36 | + | ||
| 37 | + | - **coBoldDayNames**: Päivien nimet näytetään käyttäen niiden nimissä lihavoituja (bold) kirjaimia | |
| 38 | + | - **coBoldHolidays**: Lomapäivät näytetään käyttäen lihavoituja (bold) kirjaimia. Lomapäiviä ei normaalisti näytetä, mutta lisäämällä tapahtumakäsittelijä `OnGetHolidays` voidaan määritellä lomapäivät. | |
| 39 | + | - **coBoldToday**: Tämän päivän päivämäärän näytetään käyttäen lihavoituja (bold) kirjaimia | |
| 40 | + | - **coBoldTopRow**: Kuukauden nimi ja vuosi näytetään käyttäen lihavoituja (bold) kirjaimia | |
| 41 | + | - **coBoldWeekend**: Viikonlopun päivät näytetään käyttäen lihavoituja (bold) kirjaimia | |
| 42 | + | - **coDayLine**: Lisätään erotuslinja ylimmän navigointiruudun ja kalenterin päiväalueen välille | |
| 43 | + | - **coShowBorder**: Näytetään suorakulmainen kehys kalenterin ympärillä | |
| 44 | + | - **coShowHolidays**: Aktivoi korostamaan lomapäivät. Huomaa että täytyy olla myös ohjelmoitu tapahtumankäsittelijä `OnGetHolidays` joka määrittää lomapäivät. | |
| 45 | + | - **coShowTodayFrame**: Näytetään suorakulmainen kehys tämän päivän päivämäärän ympärillä | |
| 46 | + | - **coShowTodayName**: Lisää päivän nimen riville, joka näyttää tämän päivän päivämäärän (katso myös: `coShowTodayRow`) | |
| 47 | + | - **coShowTodayRow**: Näyttää kalenterin alareunassa olevan rivin joka näyttää tämän päivän päivämäärän (katso myös: `coShowTodayName`). | |
| 48 | + | - **coShowWeekend**: Korostaa viikonlopun päivät (katso myös: `Colors.WeekendColor`). | |
| 49 | + | - **coUseTopRowColors**: Maalaa yläreunan rivin taustat ja tekstit väreillä `Colors.TopRowColor` ja `Colors.TopRowTextColor` | |
| 50 | + | ||
| 51 | + | ## Kielen vaihtaminen | |
| 52 | + | ||
| 53 | + | Komponentin käyttämät merkkijonot voidaan helposti muuntaa eri kielille muuttamalla ominaisuuden `Languages` arvoa: | |
| 54 | + | ||
| 55 | + | ``` pascal | |
| 56 | + | type | |
| 57 | + | TLanguage = (lgEnglish, lgFrench, lgGerman, lgHebrew, lgSpanish, lgItalian, | |
| 58 | + | lgPolish, lgFinnish); | |
| 59 | + | ``` | |
| 60 | + | ||
| 61 | + | ## Tapahtumat | |
| 62 | + | ||
| 63 | + | Tavallisten tapahtumien lisäksi TCalendarLite käynnistää seuraavat tapahtumat. Jotkin tapahtumat saavat sillä hetkellä valittujen solujen vuosi, kuukausi ja päivämäärät parametriksi. Joukko tilalippuja ilmoittaa, onko tämä päivä valittu vai kuuluuko edelliseen tai seuraavaan kuukauteen: | |
| 64 | + | ||
| 65 | + | ``` pascal | |
| 66 | + | type | |
| 67 | + | TCalCellState = (csSelectedDay, csToday, csOtherMonth); | |
| 68 | + | TCalCellStates = set of TCalCellState; | |
| 69 | + | ``` | |
| 70 | + | ||
| 71 | + | - **OnDateChange**: Käynnistyy kun kalenterissa valitaan toinen päivämäärä. | |
| 72 | + | - **OnDrawCell**: Tällä voidaan ohittaa vakio päivän solun maalausprosessi kokonaan tai osittain. Jos Boolean parametri `AContinueDrawing` on asetettu oikeaksi, normaali maalausprosessi jatkuu tästä tapahtumasta poistuttaessa; jos se on false niin jätetään oletusprosessi tekemättä kyseiselle päivälle. Tapahtumaa voidaan käyttää esimerkiksi lisäämään syntymäpäivä- tai lomakuvakkeita päiväkohtaisiin soluihin. | |
| 73 | + | - **OnGetDayText**: Voidaan käyttää muokataksesi tekstinäyttöä määritetylle päivälle. Oletus on merkkijono, joka näyttää päiväarvon. Tämän tapahtuman avulla lomien nimet voidaan lisätä esimerkiksi kalenteriin. | |
| 74 | + | - **OnGetHolidays**: Määrittää, mitkä päivät kuluvan kuukauden aikana ovat vapaapäiviä. Juhlapäivien päivämäärät koodataan asetetuiksi biteiksi 32-bittisessä kokonaisluvussa. | |
| 75 | + | - **OnHint**: Määrittää vihjeen, joka voidaan näyttää ponnahdusikkunassa kyseisenä päivänä. Voidaan hyödyntää esimerkiksi näyttää lomapäivien nimi, jos hiiri "lepää" lomapäivän kohdalla. | |
| 76 | + | - **OnMonthChange**: Käynnistyy aina kun uusi kuukausi näkyy kalenterissa. Voidaan käyttää tehokkaampaan lomapäivien laskentaan. | |
| 77 | + | - **OnPrepareCanvas**: Tapahtuu välittömästi ennen kuin solu on maalataan. Voidaan käyttää esimerkiksi Brush- ja Pen-ominaisuuksien ohittamiseen erilaisten taustojen tekemiseksi nimeämisiin ja tärkeisiin tapahtumiin. | |
| 78 | + | ||
| 79 | + | ## Lomapäivien määrittäminen | |
| 80 | + | ||
| 81 | + | Kalenteri ei "tiedä" mitään lomapäivistä. Joten täytyy kirjoittaa tapahtumakäsittelijä määrittelemään, mitkä päivät ovat kuluvan kuukauden aikana lomapäiviä. Kuluvan kuukauden kuukausi ja vuosi-arvot välitetään parametreina. Tiedot siitä, että päivä on lomapäivä tai ei, on koodattu bittijoukoksi 32-bittisessä kokonaisluvussa. Käännösyksikkö *callite* yksinkertaistaa tätä tarjoamalla seuraavat yleisluonteiset aliohjelmat: | |
| 82 | + | ||
| 83 | + | - procedure **AddHoliday**(ADay: Integer; var AHolidays: THolidays): Lisää määritetyn päivän holiday bitti listaan parameterissä `AHolidays`. | |
| 84 | + | - function **IsHoliday**(ADay: Integer; AHolidays: THolidays): Boolean: Tarkistaa onko kyseinen päivä listattu parametrissä `AHolidays` | |
| 85 | + | - **ClearHolidays**(var AHolidays: THolidays): Tyhjentää holiday listan | |
| 86 | + | ||
| 87 | + | Tässä on yksinkertainen esimerkki uudenvuoden, joulun, pääsiäisen ja whit sunnuntain lomapäivien määrittelemisestä: | |
| 88 | + | ||
| 89 | + | ``` pascal | |
| 90 | + | function Easter(year:integer): TDateTime; | |
| 91 | + | var | |
| 92 | + | Day, Month : integer; | |
| 93 | + | a,b,c,d,e,m,n : integer; | |
| 94 | + | begin | |
| 95 | + | case Year div 100 of | |
| 96 | + | 17 : begin m := 23; n := 3; end; | |
| 97 | + | 18 : begin m := 23; n := 4; end; | |
| 98 | + | 19,20 : begin m := 24; n := 5; end; | |
| 99 | + | 21 : begin m := 24; n := 6; end; | |
| 100 | + | else raise Exception.Create('Only years after 1700 supported.'); | |
| 101 | + | end; | |
| 102 | + | a := Year mod 19; | |
| 103 | + | b := Year mod 4; | |
| 104 | + | c := Year mod 7; | |
| 105 | + | d := (19*a + m) mod 30; | |
| 106 | + | e := (2*b + 4*c + 6*d + n) mod 7; | |
| 107 | + | day := 22 + d + e; | |
| 108 | + | Month := 3; | |
| 109 | + | if Day>31 then begin | |
| 110 | + | Day := d + e - 9; | |
| 111 | + | Month := 4; | |
| 112 | + | if (d=28) and (e=6) and (a>10) then begin | |
| 113 | + | if day=26 then day := 19; | |
| 114 | + | if day=25 then day := 18; | |
| 115 | + | end; | |
| 116 | + | end; | |
| 117 | + | result := EncodeDate(year, month, day); | |
| 118 | + | end; | |
| 119 | + | ||
| 120 | + | procedure TForm1.CalendarLite1GetHolidays(Sender: TObject; AMonth, AYear: Integer; | |
| 121 | + | var Holidays: THolidays); | |
| 122 | + | var | |
| 123 | + | d, m, y: Word; | |
| 124 | + | e: TDate; | |
| 125 | + | begin | |
| 126 | + | ClearHolidays(Holidays); | |
| 127 | + | if not FNoHolidays then | |
| 128 | + | begin | |
| 129 | + | // Fixed holidays | |
| 130 | + | case AMonth of | |
| 131 | + | 1: AddHoliday(1, Holidays); // Uusi vuosi | |
| 132 | + | 12: AddHoliday(25, Holidays); // Joulupäivä | |
| 133 | + | end; | |
| 134 | + | // Pääsiäinen | |
| 135 | + | e := Easter(AYear); | |
| 136 | + | DecodeDate(e, y,m,d); | |
| 137 | + | if m = AMonth then | |
| 138 | + | AddHoliday(d, Holidays); | |
| 139 | + | // Helluntai --> 49 päivää pääsiäisen jälkeen | |
| 140 | + | DecodeDate(e+49, y,m,d); | |
| 141 | + | if m = AMonth then | |
| 142 | + | AddHoliday(d, Holidays); | |
| 143 | + | end; | |
| 144 | + | end; | |
| 145 | + | ``` | |
| 146 | + | ||
| 147 | + | Varmista, että kalenterissa on valittu vaihtoehto `coShowHolidays`, jonka avulla voit korostaa kalenterin lomapäiviä. | |
| 148 | + | ||
| 149 | + | ### Lomapäivien näyttö vihjeenä | |
| 150 | + | ||
| 151 | + | Jos halutaan näyttää lomapäivän nimi hint- ponnahdusikkunana kun hiiri "lepää" päivän päällä niin asetetaan kalenterin `ShowHint` arvoon `true` ja lisätään tapahtumakäsittelijä `OnHint`: | |
| 152 | + | ||
| 153 | + | ``` pascal | |
| 154 | + | procedure TForm1.CalendarLite1Hint(Sender: TObject; AYear, AMonth, ADay: Word; | |
| 155 | + | var AText: String); | |
| 156 | + | var | |
| 157 | + | dt, e: TDate; | |
| 158 | + | begin | |
| 159 | + | AText := ''; | |
| 160 | + | case AMonth of | |
| 161 | + | 1: if ADay = 1 then AText := 'New Year'; // Uusi vuosi | |
| 162 | + | 12: if ADay = 25 then AText := 'Christmas';// Joulupäivä | |
| 163 | + | else | |
| 164 | + | e := Easter(AYear); | |
| 165 | + | dt := EncodeDate(AYear, AMonth, ADay); | |
| 166 | + | if (dt = e) then | |
| 167 | + | AText := 'Easter' // Pääsiäinen | |
| 168 | + | else if (dt = e + 49) then | |
| 169 | + | AText := 'Whit Sunday'; // Helluntai | |
| 170 | + | end; | |
| 171 | + | end; | |
| 172 | + | ``` | |
| 173 | + | ||
| 174 | + | ### Lomapäivien nimet kalenteriristikkoon | |
| 175 | + | ||
| 176 | + | Voidaan myös lisätä lomapäivien nimet suoraan kalenteriristikkoon. Lisäämällä `OnGetDayText` tapahtumakäsittelijä. On huomattava, että kalenterin koon on oltava riittävän suuri, jotta lisätilaa voidaan käyttää tekstille: | |
| 177 | + | ||
| 178 | + | ``` pascal | |
| 179 | + | procedure TForm1.CalendarLite1GetDayText(Sender: TObject; AYear, AMonth, ADay: Word; | |
| 180 | + | var AText: String); | |
| 181 | + | var | |
| 182 | + | s: String; | |
| 183 | + | begin | |
| 184 | + | GetHintText(Sender, AYear, AMonth, ADay, s); | |
| 185 | + | if s <> '' then | |
| 186 | + | AText := IntToStr(ADay) + LineEnding + s; | |
| 187 | + | end; | |
| 188 | + | ``` | |
| 189 | + | ||
| 190 | + | ### Lomapäivät ponnahdusvalikossa | |
| 191 | + | ||
| 192 | + | Jos kalenterin `PopupMenu` ominaisuus on tyhjä, siinä on sisäänrakennettu ponnahdusvalikko, joka näyttää kaikki valitun vuoden lomia. Kuten tavallista, tämä ponnahdusikkuna avautuu klikkaamalla sitä hiiren kakkospainikkeella komponenttia. | |
| 193 | + | ||
| 194 | + | ## Kuvakkeet tietyille päiville | |
| 195 | + | ||
| 196 | + | Seuraavassa esimerkissä kuvataan syntymäpäiväkuvake kunkin vuoden marraskuun 11. päivän soluun. Kuvake tallennetaan kuvaluetteloon ([[TImageList]]) indeksissä 0: | |
| 197 | + | ||
| 198 | + | ``` pascal | |
| 199 | + | procedure TForm1.CalendarLite1DrawCell(Sender: TObject; ACanvas: TCanvas; | |
| 200 | + | AYear,AMonth,ADay: Word; AState: TCalCellStates; var ARect: TRect; | |
| 201 | + | var AContinueDrawing: Boolean); | |
| 202 | + | var | |
| 203 | + | bmp: TBitmap; | |
| 204 | + | begin | |
| 205 | + | if (AMonth = 11) and (ADay = 11) and not (csOtherMonth in AState) then begin | |
| 206 | + | bmp := TBitmap.Create; | |
| 207 | + | try | |
| 208 | + | ImageList1.GetBitmap(0, bmp); | |
| 209 | + | ACanvas.Draw(ARect.Left, (ARect.Top + ARect.Bottom - bmp.Height) div 2, bmp); | |
| 210 | + | inc(ARect.Left, bmp.Width + 2); | |
| 211 | + | // Not changing AContinueDrawing from its default value (true) means | |
| 212 | + | // that the day text is drawn by the built-in procedure into the reduced rectangle | |
| 213 | + | finally | |
| 214 | + | bmp.Free; | |
| 215 | + | end; | |
| 216 | + | end; | |
| 217 | + | end; | |
| 218 | + | ``` | |
| 219 | + | ||
| 220 | + | ## Monivalinta | |
| 221 | + | ||
| 222 | + | Jos ominaisuus `MultiSelect` on asetettu `true` kalenteriin voidaan valita useita päiviä. Kaikki valitut päivät piirretään korostetulla taustalla. Monivalinta ohjataan pitämällä erikoisnäppäimiä alhaalla, kun valitset päivän joko hiiren klikkauksella tai näppäimen painalluksella: | |
| 223 | + | ||
| 224 | + | - **CTRL**: Jos painetaan `CTRL`-näppäintä niin kun valitaan toinen päivä niin päiväys lisätään valintaan. Tällä tavoin voidaan valita päivämäärät, jotka eivät ole vierekkäisiä. | |
| 225 | + | - **SHIFT**: Jos `SHIFT`-näppäintä pidetään alhaalla päivänvalinnan aikana niin valintaan lisätään kaikki päivät aikaisemmin valitun ja nykyisen päivän välillä. | |
| 226 | + | - **Kaksoisklikkaus**: Työpäivän kaksoisklikkaus valitsee kaikki työpäivät samalla viikolla. Painamalla `CTRL`- tai `SHIFT`-näppäintä alhaalla valita laajenee yhden tai useamman viikon työpäivien valinnaksi. | |
| 227 | + | - Valintaa voidaan laajentaa naapurikuukausiksi, jos näppäimistön nuolinäppäimiä painetaan `CTRL`-näppäimen ollessa alhaalla. | |
| 228 | + | - Valinta poistetaan, jos jokin päivämäärä on valittu ilman, että painat mitään näistä näppäimistä tai jos yläpalkin nuolia tai pudotusvalikkoja käytetään. | |
| 229 | + | - Jos aiemmin valitut päivät lisätään toisen kerran, niin ne poistetaan valituista. | |
| 230 | + | ||
| 231 | + | --- | |
| 232 | + | *From the Free Pascal wiki, page "CalLite: Usage/fi", as it stood on 2019-10-24 after a change by Djzepi, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
