Autor |
Beitrag |
LogoPie
Hält's aus hier
Beiträge: 12
|
Verfasst: Do 27.01.05 10:34
Hab was um Feiertage für NRW zu berechnen. Die Sache hat nur einen Haken das Jahr befindet sich im Quelltext. Würd es ganz gern über eine Editfeld eingeben. Hab aber immer wieder einen Konflikt mit (Word). Vielleicht hat jemand eine Idee.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; Edit1: TEdit; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
uses Unit2, Feiertage; {$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); i : Integer; begin hdays:=GetHolidayTable(2005); listbox1.items.Clear; for i:=0 to high(hdays)do listbox1.items.Add(DateToStr(hdays[i].date)+' '+hdays[i].name); end;
end. |
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80:
| unit Unit2;
interface
uses Windows, SysUtils;
type THoliday = Record Date: TDateTime; Name: String; End; THolidayTable = Array Of THoliday;
Function GetHolidayTable(Year: Word): THolidayTable;
implementation
Function GetHolidayTable(Year: Word): THolidayTable;
Procedure AddHoliday(DD, MM: Word; HDName: String); Overload; Begin SetLength(Result, High(Result) + 2); With Result[High(Result)] Do Begin Date := EncodeDate(Year, MM, DD); Name := HDName; End; End;
Procedure AddHoliday(HDDate: TDateTime; HDName: String); Overload; Begin SetLength(Result, High(Result) + 2); With Result[High(Result)] Do Begin Date := HDDate; Name := HDName; End; End;
Function GetEasterDate(YYYY: Word): TDateTime; Var A, B, C, D, E, F, G, H, I, K, L, M, N, P: Word; DD, MM: Word; Begin a := YYYY Mod 19; b := YYYY Div 100; c := YYYY Mod 100; d := b Div 4; e := b Mod 4; f := (b + 8) Div 25; g := (b - f + 1) Div 3; h := (19 * a + b - d - g + 15) Mod 30; i := c Div 4; k := c Mod 4; l := (32 + 2 * e + 2 * i - h - k) Mod 7; m := (a + 11 * h + 22 * l) Div 451; n := (h + l - 7 * m + 114) Div 31; p := (h + l - 7 * m + 114) Mod 31 + 1; DD := p; MM := n; Result := EncodeDate(YYYY, MM, DD); End; Var EDate: TDateTime; Begin AddHoliday(1, 1, 'Neujahr'); AddHoliday(1, 5, 'Tag der Arbeit'); AddHoliday(3, 10, 'Tag der deutschen Einheit'); AddHoliday(25, 12, '1. Weihnachtsfeiertag'); AddHoliday(26, 12, '2. Weihnachtsfeiertag'); AddHoliday(1, 11, 'Allerheiligen'); EDate := GetEasterDate(Year); AddHoliday(EDate + 60, 'Fronleichnam'); AddHoliday(EDate - 2, 'Karfreitag'); AddHoliday(EDate + 1, 'Ostermontag'); AddHoliday(EDate + 39, 'Christi Himmelfahrt'); AddHoliday(EDate + 50, 'Pfingstmontag'); End;
end. |
Moderiert von Tino: DF- durch Delphi-Tags ersetzt.
Moderiert von Tino: Überflüssige Absätze entfernt.
Zuletzt bearbeitet von LogoPie am Do 27.01.05 11:18, insgesamt 1-mal bearbeitet
|
|
MitschL
      
Beiträge: 211
Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
|
Verfasst: Do 27.01.05 10:56
Bitte editier dein Posting nochmal(Klammer mal in Delhi-Tags; mit Alt+d davor und danach). Soviel kann ich nicht 'suchen' wollen.
gegrüßt!
[edit] Habt Dank, edler Tino!
_________________ "Bloßes Ignorieren ist noch keine Toleranz." (Theodor Fontane)
|
|
MitschL
      
Beiträge: 211
Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
|
Verfasst: Do 27.01.05 11:16
Also,
ich würde zuerst den Text auslesen und die Zahl dazu übergeben.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var year: Integer; begin year := StrToInt( Edit1.Text ); hdays:=GetHolidayTable(year); |
Vorsichthalber würde ich die Eingabe des Editfeldes beschränken, so daß nur gültige Jahre eingegeben werden können (bzw. überhaupt nur Zahlen, die zudem nicht größer als 65535 werden können).
Dabei hilft dir try-Except, OnChange-Ereignis des Edit1, MaskEdit, SpinEdit, DateTimePicker, oder was anderes.
gegrüßt!
_________________ "Bloßes Ignorieren ist noch keine Toleranz." (Theodor Fontane)
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 27.01.05 21:32
Der Quelltext zu Unit2 stammt auf die Variablennamen genau von mir. Siehe www.swissdelphicente...opic.php?p=8249#8249 für das Original. Bitte diese Quelle beim Zitieren des Gesamtcodes mit angeben.
BTW: Eine Einschränkung des Osterdatums ist, dass dieser Algo erst für Jahre NACH 1583 gültig ist. Bitte beachte dies bei Deiner gültigkeitsprüfung.
THX.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|