Wiki-kopiopeilipalvelin

Tämä on pascal.chatin wikin peilipalvelin. Muokkaus, historia ja kirjautuminen ovat siellä.

CalLite: Usage/fi

English · Suomi · Русский

Käyttö

Yksinkertaisesti pudota TCalendarLite-komponentti lomakkeelle ja näin saadaan toiminnallinen kuukausikalenteri.

Värien vaihtaminen

Kalenterin ominaisuus Colors Kerää kaikki asetukset, jotka vaikuttavat eri kohteisiin käytettäviin väreihin:

Kalenterin erilaisten asetusten (Options) käyttö

Kalenterin näyttöä voidaan muuttaa muuttamalla kalenterin erilaisia asetuksia (Options):

pascal
type
  TCalOption = (coBoldDayNames, coBoldHolidays, coBoldToday, coBoldTopRow,
                coBoldWeekend, coDayLine, coShowBorder, coShowHolidays,
                coShowTodayFrame, coShowTodayName, coShowTodayRow,
                coShowWeekend, coUseTopRowColors);

Kielen vaihtaminen

Komponentin käyttämät merkkijonot voidaan helposti muuntaa eri kielille muuttamalla ominaisuuden Languages arvoa:

pascal
type
  TLanguage = (lgEnglish, lgFrench, lgGerman, lgHebrew, lgSpanish, lgItalian,
               lgPolish, lgFinnish);

Tapahtumat

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:

pascal
type
  TCalCellState = (csSelectedDay, csToday, csOtherMonth);
  TCalCellStates = set of TCalCellState;

Lomapäivien määrittäminen

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:

Tässä on yksinkertainen esimerkki uudenvuoden, joulun, pääsiäisen ja whit sunnuntain lomapäivien määrittelemisestä:

pascal
function Easter(year:integer): TDateTime; 
var
  Day, Month    : integer;
  a,b,c,d,e,m,n : integer;
begin
  case Year div 100 of
    17    : begin m := 23; n := 3; end;
    18    : begin m := 23; n := 4; end;
    19,20 : begin m := 24; n := 5; end;
    21    : begin m := 24; n := 6; end;
    else    raise Exception.Create('Only years after 1700 supported.');
  end;
  a := Year mod 19;
  b := Year mod 4;
  c := Year mod 7;
  d := (19*a + m) mod 30;
  e := (2*b + 4*c + 6*d + n) mod 7;
  day := 22 + d + e;
  Month := 3;
  if Day>31 then begin
    Day := d + e - 9;
    Month := 4;
    if (d=28) and (e=6) and (a>10) then begin
      if day=26 then day := 19;
      if day=25 then day := 18;
    end;
  end;
  result := EncodeDate(year, month, day);
end;

procedure TForm1.CalendarLite1GetHolidays(Sender: TObject; AMonth, AYear: Integer;
  var Holidays: THolidays);
var
  d, m, y: Word;
  e: TDate;
begin
  ClearHolidays(Holidays);
  if not FNoHolidays then
  begin
    // Fixed holidays
    case AMonth of
      1: AddHoliday(1, Holidays);          // Uusi vuosi
     12: AddHoliday(25, Holidays);         // Joulupäivä
    end;
    // Pääsiäinen
    e := Easter(AYear);
    DecodeDate(e, y,m,d);
    if m = AMonth then
      AddHoliday(d, Holidays);
    // Helluntai --> 49 päivää pääsiäisen jälkeen
    DecodeDate(e+49, y,m,d);
    if m = AMonth then
      AddHoliday(d, Holidays);
  end;
end;

Varmista, että kalenterissa on valittu vaihtoehto coShowHolidays, jonka avulla voit korostaa kalenterin lomapäiviä.

Lomapäivien näyttö vihjeenä

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:

pascal
procedure TForm1.CalendarLite1Hint(Sender: TObject; AYear, AMonth, ADay: Word;
  var AText: String);
var
  dt, e: TDate;
begin
  AText := '';
  case AMonth of
    1: if ADay = 1 then AText := 'New Year'; // Uusi vuosi
   12: if ADay = 25 then AText := 'Christmas';// Joulupäivä
   else
       e := Easter(AYear);
       dt := EncodeDate(AYear, AMonth, ADay);
       if (dt = e) then
         AText := 'Easter'    // Pääsiäinen
       else if (dt = e + 49) then
         AText := 'Whit Sunday'; // Helluntai
  end;
end;

Lomapäivien nimet kalenteriristikkoon

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:

pascal
procedure TForm1.CalendarLite1GetDayText(Sender: TObject; AYear, AMonth, ADay: Word;
  var AText: String);
var
  s: String;
begin
  GetHintText(Sender, AYear, AMonth, ADay, s);
  if s <> '' then
    AText := IntToStr(ADay) + LineEnding + s;
end;

Lomapäivät ponnahdusvalikossa

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.

Kuvakkeet tietyille päiville

Seuraavassa esimerkissä kuvataan syntymäpäiväkuvake kunkin vuoden marraskuun 11. päivän soluun. Kuvake tallennetaan kuvaluetteloon (TImageList) indeksissä 0:

pascal
procedure TForm1.CalendarLite1DrawCell(Sender: TObject; ACanvas: TCanvas;
  AYear,AMonth,ADay: Word; AState: TCalCellStates; var ARect: TRect;
  var AContinueDrawing: Boolean);
var
  bmp: TBitmap;
begin
  if (AMonth = 11) and (ADay = 11) and not (csOtherMonth in AState) then begin
    bmp := TBitmap.Create;
    try
      ImageList1.GetBitmap(0, bmp);
      ACanvas.Draw(ARect.Left, (ARect.Top + ARect.Bottom - bmp.Height) div 2, bmp);
      inc(ARect.Left, bmp.Width + 2);
      // Not changing AContinueDrawing from its default value (true) means
      // that the day text is drawn by the built-in procedure into the reduced rectangle
    finally
      bmp.Free;
    end;
  end;
end;

Monivalinta

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:


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.

Versio 3, viimeksi muokannut WikiArchive .