TSRCalendar (C)opyright 2000 Version 1.35
Autor : Simon Reinhardt
eMail : reinhardt@picsoft.de
Internet : http://www.picsoft.de

  Die Komponente TSRCalendar ist eine Weiterentwicklung der
  TCalendar-Komponente aus den Beispielkomponenten der Delphi-VCL.
  Sie enthlt viele Zusatzinformationen, wie Feiertage,
  Sternzeichen und verschiedene astronomische Daten.

  Die Routinen aus der Unit TimeFunc stammen aus der TMoon-Komponente
  von Andreas Hrstemeier : http://www.westend.de/~hoerstemeier/index_d.htm
  Andreas hat die Routinen aus dem Buch "Astronomical Algorithms" von Jean Meeus.

  Die GetWeekOfYear-Funktion, die die Wochennummer nach DIN 1355 ermittelt,
  stammt von Christoph Kremer, Aachen.

  Vielen Dank auch an:
  - Edmund Matzke <edmund_matzke@gmx.de> fr die Korrektur der
    Schleswig-Holsteinischen Feiertage,
  - Matthias Frey <info@Matthias-Frey.de> fr die Korrektur der
    Advents-Berechnung.
  - Robert Rossmair fr seine rrColors-Unit!

  TSRClock ist die zum Kalender passende Uhr..

  Diese Komponenten sind Public Domain, das Urheberrecht liegt aber beim Autor.}


Dateiumfang:
------------

SRCal.txt 	- Diese Datei
SRCal.pas	- Quelltext der Komponente
SRCal.d16	- Resourcendatei der 16Bit-Komponente fr Delphi 1
SRCal.d32	- Resourcendatei der 32Bit-Komponente fr Delphi 2 bis 5
TimeFunc.pas	- Quelltext der Unit mit Zeitroutinen
SRDefine.inc
rr.inc		- Inculdedateien fr die Komponente
rrColors.pas	- Funktionen zur RGB-HSL-Umrechnung
SRUtils.pas	- verschiedende Prozeduren und Funktionen fr die Komponente
                  (Eine Beschreibung findet man im Interface der Unit)  
	
Ordner	KalDemo		- TSRCalendar-Demo-Projekt fr Delphi 2 bis 5
	KalMain.dfm	- Formulardatei der MainForm
	KalMain.pas	- Quelltext der MainForm-Unit
	KalDemo.dof	- Compileroptionen des Demo-Projekts
	KalDemo.dpr	- Quelltext des Demo-Projekts
	KalDemo.res	- Resourcendatei des Demo-Projekts


Installation:
-------------

In Delphi 1:
------------
1. Alle Dateien in das Delphi-Komponenten-Verzeichnis entpacken.
2. Men Optionen : Komponente installieren
3. Schaltflche Hinzufgen / Durchsuchen
4. Datei SRCal.pas im Delphi-Komponenten-Verzeichnis suchen und mit
   OK besttigen.
5. Die Komponente erscheint in der Komponenten-Gruppe "Simon"

In Delphi 2:
------------
1. Alle Dateien in das Delphi-Komponenten-Verzeichnis entpacken.
2. Men Komponente :  installieren
3. Schaltflche Hinzufgen / Durchsuchen
4. Datei SRCal.pas im Delphi-Komponenten-Verzeichnis suchen und mit
   OK besttigen.
5. Die Komponente erscheint in der Komponenten-Gruppe "Simon"

Ab Delphi 3:
------------
1. Alle Dateien in das Delphi-Komponenten-Verzeichnis entpacken.
2. Men Komponente :  Komponente installieren
3. Schaltflche Durchsuchen (hinter dem Eingabefeld fr den Unit-Namen)
4. Datei SRCal.pas im Delphi-Komponenten-Verzeichnis suchen und mit
   OK besttigen.
5. Die Rckfrage nach dem Neukompilieren des Packages besttigen.
6. Die Komponente erscheint in der Komponenten-Gruppe "Simon"
   (Evtl. mu eine bereits installierte, ltere Version der Komponente
    zuvor entfernt werden)



TSRCalendar:
------------

Die Komponente funktioniert genauso, wie die Delphi-Beispielkomponente TCalendar 
mit folgenden Erweiterungen:

Neue Eigenschaften:
-------------------

I. Published:

1. Nur wenn die Eigenschaft "AstronomicalData" den Wert "true" hat, werden die astronmischen
   Daten (Mond- und Sonnendaten) bei einem Datumswechsel berechnet. Wenn die Eigenschaft den 
   Wert "false" hat, beschleunigt sich der Datumswechsel.
2. Wenn die Eigenschaft "AutoDeleteMarks" den Wert "true" hat, werden alle Markierungen in der 
   Eigenschaft "Marks" bei einem Monats- oder Jahreswechsel gelscht.
3. "BGColorHoliday" ist die Hintergrundfarbe fr Feiertage.
4. "BGColorMarked" ist die Hintergrundfarbe fr in der Eigenschaft "Marks" markierte Tage.
4. "BGColorSelected" ist die Hintergrundfarbe fr das ausgewhlte Datum.
5. "BGColorToday" ist die Hintergrundfarbe fr das aktuelle Systemdatum.
6. "BGColorWeekend" ist die Hintergrundfarbe fr Sonntage.
7. Die Eigenschaft "Bundesland" ist fr die korrekte Berechnung der Feiertage und der 
   astronomischen Daten auf das gewnschte Bundesland zu setzen.
8. "DrawStyle" kann folgende Werte annehmen:
   - cdsColorGrid: Feiertage, Wochenenden, etc. werden in den Farben gezeichnet, die in den 
     entsprechenden Eigenschaften festgelegt sind.
   - cdsMonoGrid: Alle Tage im Kalender werden mit der in der Eigenschaft "Color" angegebenen 
     Hintergrundfarbe und mit der Textfarbe der Eigenschaft "Font" gezeichnet. 
   - cdsButtons: Die Tage im Kalender werden als anklickbare Buttons gezeichnet.
9. "FrameColorSelected" ist die Schriftfarbe fr Feiertage.
10.Die Berechnung und Anzeige der deutschen Feiertage erfolgt nur, wenn die Eigenschaft 
   "ShowHolidays" den Wert "true" hat.
11.Die in der Eigenschaft "Marked" als markierte gespeicherten Tage werden nur dann farbig 
   angezeigt, wenn die Eigenschaft "ShowMarks" den Wert "true" hat.
12."TextColorHoliday" ist die Schriftfarbe fr Feiertage.
13."TextColorMarked" ist die Schriftfarbe fr in der Eigenschaft "Marks" markierte Tage.
14."TextColorStandard" ist die Schriftfarbe fr normale Tage.
15."TextColorToday" ist die Schriftfarbe fr das aktuelle Systemdatum.
16."TextColorWeekend" ist die Schriftfarbe fr Sonntage.

II. Public:

1. "DayOfYear" gibt an, der wievielte Tag im Jahr das in der Eigenschaft "Date"
   angegebene Datum ist.
2. Falls das in der Eigenschaft "Date" gespeicherte Datum ein Feiertag oder ein Sondertag ist, 
   enthlt die Eigenschaft "Holiday" den Namen des Feier- oder Sondertages.
3. Falls das in der Eigenschaft "Date" gespeicherte Datum ein Feiertag oder ein Sondertag ist, 
   enthlt die Eigenschaft "HolidayNr" die Nummer des Feier- oder Sondertages. Dieser Wert kann 
   folgende Werte annehmen:
    0 : Kein Feier- oder Sondertag
   >0 : Feiertag
   <0 : Sondertag
4. Die Eigenschaft "Holidays" ist ein array[0..31] of integer, in dem alle Feiertags- und 
   Sondertagsnummern des aktuellen Monats gespeichert werden.
5. Die Eigenschaft "Marks" ist deklariert als "array[1..31] of boolean" und speichert 
   markierte Tage.
6. "MoonDistance" gibt die Entfernung des Mondes zur Erde in Kilometern an.
7. "MoonPhase" gibt die Mondphase an und kann folgende Werte annehmen:
   (Neumond, Zunehmend, Vollmond, Abnehmend)
8. "MoonRise" gibt die Uhrzeit des Mondaufganges im Format TDateTime an.
9. "MoonSet" gibt die Uhrzeit des Mondunterganges im Format TDateTime an.
10."MoonTransit" gibt die Uhrzeit des Mondhchststandes im Format TDateTime an.
11."SunDistance" gibt die Entfernung der Sonne zur Erde in Kilometern an.
12. "SunRise" gibt die Uhrzeit des Sonnenaufganges im Format TDateTime an.
13."SunSet" gibt die Uhrzeit des Sonnenunterganges im Format TDateTime an.
14."SunTransit" gibt die Uhrzeit des Sonnenhchststandes im Format TDateTime an.
15."Sternzeichen" gibt den Namen des Sternzeichens eines am in der Eigenschaft "Date"
   angegebenen Datum geborenen an.
16."SternzeichenNr" gibt die Nummer des Sternzeichens eines am in der Eigenschaft "Date"
   angegebenen Datum geborenen an:
   0  : Wassermann
   ..
   11 : Steinbock
17."WeekOfYear" gibt an, in der wievielten Woche im Jahr (nach DIN 1355) das in der Eigenschaft 
   "Date" angegebene Datum ist.
18.Die Eigenschaft CalendarDate wurde umbenannt in "Date". Diese Eigenschaft speichert
   das Datum im Format TDateTime.


Ereignisse:
-----------

1. "OnBeforeChange" tritt vor der nderung der Eigenschaft "Date" auf.
2. Das Ereignis "OnMonthChange" tritt bei einem Wechsel des Monats oder des Jahres auf, die
   in den Eigenschaften "Month" und "Year" bzw. "Date" gespeichert sind.
3. OnMouseDown - wie bei TPanel
4. OnMouseMove - wie bei TPanel
5.OnMouseUp - wie bei TPanel

Methoden:
---------

1. DaysThisMonth gibt die Anzahl der Tage im Monat zurck, der in der Eigenschaft "Month"
   gespeichert ist.
2. GetHoliday ermittelt, ob das in "WhatDate" bergebene Datum im der Varaibalen "Land" ber-
   gebenen Bundesland ein Feier- oder Sondertag ist und gibt als Ergebnis dessen Nummer oder 
   null zurck:
   function GetHoliday(WhatDate:TDateTime;Land:integer):integer;
2. Mit der Methode "MouseToCell"  ermittelt man die Spalte und Zeile des Kalenders, ber der
   der Mauszeiger steht:
   procedure MouseToCell(X, Y: Integer; ACol, ARow: longint);
3. Mit der Methode "MouseToDate"  ermittelt man das Datum der Kalenderzelle, ber der
   der Mauszeiger steht:
   function MouseToDate(X, Y: Integer):TDateTime;
4. NextMonth setzt das Kalenderdatum auf den gleichen Tag im folgenden Monat.
5. NextYear setzt das Kalenderdatum auf den gleichen Tag und den gleichen Monat im folgenden 
   Jahr.
6. PrevMonth setzt das Kalenderdatum auf den gleichen Tag im vorhergehenden Monat.
7. PrevYear setzt das Kalenderdatum auf den gleichen Tag und den gleichen Monat im 
   vorhergehenden Jahr.

Neue Funktionen:
----------------

1. Die Navigation durch den Kalender per Tastatur wurde verbessert: 
   -Falls die letzte Zelle einer Zeile gewhlt ist und die [Pfeil-nach-rechts]-Taste 
    gedrckt wird, wird der folgende Tag in der ersten Spalte der nchsten Zeile markiert.
   -Falls die erste Zelle einer Zeile gewhlt ist und die [Pfeil-nach-links]-Taste 
    gedrckt wird, wird der vorherige Tag in der letzten Spalte der vorherigen Zeile markiert.
   -Falls der letzte Tag im Monat gewhlt ist und die [Pfeil-nach-rechts]-Taste 
    gedrckt wird, wird das Datum auf den ersten Tag des folgenden Monats gesetzt.
   -Falls der erste Tag im Monat gewhlt ist und die [Pfeil-nach-links]-Taste 
    gedrckt wird, wird das Datum auf den letzten Tag des vorherigen Monats gesetzt.
   -Falls ein Tag in der letzten Zeile des Kalenders gewhlt ist und die [Pfeil-nach-unten]-Taste 
    gedrckt wird, wird das Datum auf den ersten Tag des folgenden Monats gesetzt.
   -Falls ein Tag in der ersten Zeile des Kalenders gewhlt ist und die [Pfeil-nach-oben]-Taste 
    gedrckt wird, wird das Datum auf den letzten Tag des vorherigen Monats gesetzt.

Alle anderen Eigenschaften und Ereignisse entsprechen denen der TCalendar-Komponente
und sind in der Online-Hilfe nachzulesen. Die Funktion der Komponente lt sich auerdem
sehr schn im beigefgten Demo-Programm im Ordner "KalDemo" sehen.

TSRClock
--------

Eigenschaften:
--------------

I. Published:

1. Align - wie bei TPanel
2. Anchors - wie bei TPanel
2. AutoUpdate - Wenn  AutoUpdate=true, wird die angezeigte Uhrzeit periodisch aus der Systemzeit 
   ausgelesen. Diese Funktion benutzt einen Timer, der in einem eigenen Thread luft. Falls 
   bereits ein anderer Timer im Projekt benutzt wird, kann man diesen zur Aktualisierung der 
   Zeitanzeige nutzen und diese Eigenschaft auf false setzen. Der interne Timer wird dann 
   deaktiviert.
3. BorderWidth - Breite des Randes um die Uhr in Pixeln.
4. ColorBackground - Hintergrundfarbe des Ziffernblattes.
5. ColorBorder - Farbe des Randes der Uhr
6. ColorHands - Farbe der Stunden- und Minutenzeiger
7. ColorNumbers - Farbe der Ziffern und des Sekundenzeigers
8. Cursor - wie bei TPanel
9. DigitLineWidth - Die Dicke der Anzeigesegmente fr Style=csDigital in Pixeln.
10.Enabled - wie bei TPanel. Falls Enabled=false, wird auch der Timer fr die AutoUpdate-Funktion
   deaktivuiert.
11.FadingColor - Wenn FadingColor=true, ndert sich die Farbe des Stunden-/Minutenzeigers 
   abhngig von der Minutenzahl. Je nher die Minutenzahl an die volle Stunde (also >59 Minuten) 
   rckt, desto heller wird die Zeigerfarbe. Bei der vollen Stunde (also 0 Minuten) entspricht 
   die Zeigerfarbe der in der Eigenschaft "ColorHands" angegebenen Farbe. Bei 1 Minute wird diese 
   Farbe um 60% abgedunkelt. Diese Funktion ist nur aktiv, wenn ClockStyle<>csClassic.
12.Font - wie bei TPanel
13.Height - wie bei TPanel
14.Hint - wie bei TPanel
15.Kind - 
   - ckRealTime: Die Uhr zeigt die Systemzeit an.
   - ckStopWatch: Die Uhr funktioniert als Stopuhr. Zur Steuerung der Stopuhrfunktionen dienen
     dann die Methoden Reset, Start und Stop.
16.LEDContrast - Kontrast zwischen leuchtender und abgeschalteter LED
                 0: Kein Helligkeitsunterschied ..
		 9: Maximaler Helligkeitsunterschied
16.Left - wie bei TPanel
17.Name - wie bei TPanel
18.Priority - Prioritt des Timer-Threads, kann folgende Werte annehmen:
   - Higher
   - Highest
   - Idle
   - Lower
   - Lowest
   - tpNormal
   - TimeCritical Je hher die Prioritt, desto sicherer wird die Uhrzeit regelmig 
     aktualisiert.
19.ShowNumbers - kann folgende Werte annehmen:
   - snAll: Alle Ziffern von 1..12 werden angezeigt
   - snNone: Es werden keine Ziffern angezeigt
   - snQuarters: Nur die Ziffern 3, 6, 9 und 12 werden angezeigt
   Ziffern werden generell nur bei ClockStyle=csClassic angezeigt.
20.ShowSeconds - Nur wenn ShowSeconds=true, wird eine Sekundenzwiger angezeigt.
21.ShowTicks - Nur wenn ShowTicks=true und ClockStyle=csClassic, werden Stundenmarken am 
   Uhrenrand angezeigt
22.Style - bestimmt das Aussehen der Uhr und kann folgende Werte annehmen:
   - csClassic: Eine "klassische" analoge Uhr mit drei Zeigern
   - csDigital: Eine Digitaluhr mit Sieben-Segment-LED-Anzeige
   - csMovingPoints: Stunden und Minuten werden von einem Symbol angezeigt, dessen Winkel die
     Stunden und dessen Abstand zum Uhrenmittelpunkt die Minuten reprsentieren. Die Sekunden
     werden durch einen wandernden Punkt symbolisiert.
   - csPieslice: Stunden und Minuten werden von einem "Kuchenstck" angezeigt, dessen Winkel die
     Stunden und dessen Breite die Minuten reprsentieren. Die Sekunden werden durch einen 
     wandernden Punkt symbolisiert.
23.Tag - wie bei TPanel
24.Top - wie bei TPanel
25.UpdateInterval - Bestimmt das Intervall, nach dem die Uhrzeit durch den internen Timer 
   aktualisiert wird, wenn AutoUpdate=true.
26.Visible - wie bei TPanel
27.Width - wie bei TPanel

II. Public:

1. Hour - Die aktuelle Stunde der Eigenschaft "Time" (nur lesen).
2. Minute - Die aktuelle Minute der Eigenschaft "Time" (nur lesen).
3. Second - Die aktuelle Sekunde der Eigenschaft "Time" (nur lesen).
4. Summertime - Gibt an, ob die angezeigte Zeit Sommerzeit darstellt (nur lesen).
5. Time - Die angezeigte Uhrzeit im Format TTime. Die Zeit wird als ein 24tel eines Tages 
   angegeben. 
   Um die Uhr z.B. auf zehn Uhr zu stellen, kann man angeben: Time:=10/24
   Um die Uhr z.B. auf zehn Uhr dreiig zu stellen, kann man angeben: Time:=10.5/24

Ereignisse:
-----------

1. OnClick - wie bei TPanel
2. OnDblClick - wie bei TPanel
3. OnDragDrop - wie bei TPanel
4. OnDragOver - wie bei TPanel
5. OnEndDrag - wie bei TPanel
6. OnMouseDown - wie bei TPanel
7. OnMouseEnter - wird ausgelst, wenn die Maus ber das Control bewegt wird.
8. OnMouseExit - wird ausgelst, wenn die Maus das Control verlsst.
9. OnMouseMove - wie bei TPanel
10.OnMouseUp - wie bei TPanel
11.OnStartDrag - wie bei TPanel
12.OnTimer - wird bei jedem Timer-Ereignis des SRClock-Timers ausgelst (wie bei TTimer).

Methoden:
---------

1. Reset
2. Start
3. Stop

Auerdem wurden folgende Funktionen in der Unit verffentlicht:

function GetWeekOfYear(Datum:TDateTime):byte;
{ liefert die Kalenderwoche nach DIN }
function GetDayOfYear(Datum:TDateTime):word;
{ liefert den Tag im Jahr }
function IsSummertime(Datum:TDateTime):boolean;
{ liefert "true", wenn das Datum in der Sommerzeit liegt }

Einige Eigenschaften und Ereignisse sind in Delphiversionen<5 evtl.
nicht verfgbar.

Die Funktion der Komponente lt sich auerdem sehr schn im beigefgten Demo-Programm im 
Ordner "KalDemo" sehen.
