Entwickler-Ecke
Sonstiges (Delphi) - Jahreskalender
Bahade - Di 17.12.02 19:30
Titel: Jahreskalender
Hallo,
ich habe nun mal versucht einen Jahreskalender zu erstellen, der ähnlich funktionieren soll, wie der Windows-Kalender (Doppel-Klick auf Uhrzeit in der Taskleiste).
Leider funktioniert das ganze noch nicht so. Ich würde mich sehr freuen, wenn ihr meine Fehler beim Programmieren finden könntet und entsprechend Verbesserungen vornehmen würdet. Vielen Dank für euere Hilfe! Ich bin gespannt darauf!
Quelltext
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: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, Spin;
type TForm1 = class(TForm) SpinEdit1: TSpinEdit; StringGrid1: TStringGrid; ComboBox1: TComboBox; procedure FormCreate(Sender: TObject); procedure MonateChange(Sender: TObject); procedure JahrChange(Sender: TObject); private { Private-Deklarationen } Monatstage: Array[1..12] of Integer; function IstSchaltjahr(Jahr: Integer): Boolean; function Wochentag(Tag, Monat, Jahr: Integer): Integer; function Monatstage(Monat, Jahr: Integer): Integer; procedure leer; procedure ausfuellen;
public { Public-Deklarationen } end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject); begin with Tage do begin Cells[0,0]:= ' Mo'; Cells[1,0]:= ' Di'; Cells[2,0]:= ' Mi'; Cells[3,0]:= ' Do'; Cells[4,0]:= ' Fr'; Cells[5,0]:= ' Sa'; Cells[6,0]:= ' So'; end; Monate.ItemIndex:= 0; Monatstage[ 1]:= 31; Monatstage[ 2]:= 28; Monatstage[ 3]:= 31; Monatstage[ 4]:= 30; Monatstage[ 5]:= 31; Monatstage[ 6]:= 30; Monatstage[ 7]:= 31; Monatstage[ 8]:= 31; Monatstage[ 9]:= 30; Monatstage[10]:= 31; Monatstage[11]:= 30; Monatstage[12]:= 31; Zeigen; end;
function TForm1.Wochentag(Tag, Monat, Jahr: Integer): Integer; begin if Monat > 2 then begin Monat:= Monat - 2; Result:= (Tag + (13*Monat-1) div 5 + Jahr + Jahr div 4 - Jahr div 100 + Jahr div 400) mod 7; else then begin Monat:= 10 + Monat; Jahr:= Jahr - 1; end;
procedure TForm1.leer; Var i, j: Integer; begin for j:= 1 to 6 do for i:= 0 to 6 do Tage.Cells[i,j]:= ''; end;
procedure TForm1.ausfuellen; var i, j, Tag, Monat, Jahr, Wochentag, Woche: Integer; begin Loeschen; Jahr := Jahr.Value; Monat:= Monate.ItemIndex + 1; Tag := 1; Wochentag:= Wochentag(Tag, Monat, Jahr); If Wochentag = 0 then Wochentag:= 6 else Wochentag:= Wochentag - 1; Woche:= 1; for i:= 1 to Monatstage(Monat, Jahr) do begin if i < 10 then Tage.Cells[Wochentag, Woche]:= ' ' + IntToStr(i) else Tage.Cells[Wochentag, Woche]:= ' ' + IntToStr(i); Wochentag:= Wochentag + 1; If Wochentag = 7 then begin Wochentag:= 0; Woche:= Woche + 1; end; end; end;
function TForm1.Monatstage(Monat, Jahr: Integer): Integer; begin Result:= Monatstage[Monat]; If (Monat = 2) and IstSchaltjahr(Jahr) then Result:= Monatstage[2]+1 end;
procedure TForm1.MonateChange(Sender: TObject); begin ausfuellen; end;
procedure TForm1.JahrChange(Sender: TObject); begin ausfuellen; end;
end. |
Grüße & Danke,
Bahade
Wolff68 - Mi 18.12.02 00:01
Warum benutzt Du nicht einfach die Komponente TCalendar (unter Beispiele), oder ist die in Deiner Delphi-Version nicht drin?
Zu TCalendar könnte ich Die ein Beispiel senden. Komplett im Eigenbau hab ich das auch noch nicht gemacht.
(Und ehrlich gesagt momentan wenig Zeit Deinen Quelltext zu analysieren.)
LCS - Mi 18.12.02 09:54
Hi
also irgendwie sieht das aus als hättest du den Code nicht selber geschrieben sondern irgendwo kopiert. Oder bei dir ist was mächtig durcheinander geraten.
- Wo ist die Prozedur Zeigen?
- Wo ist die Prozedur Loeschen?
- Was ist das Objekt Jahr das in Ausfuellen verwendet wird?
- Was ist das Objekt Monate das in Ausfuellen verwendet wird?
- Was ist das Objekt Tage?
- Wofür setzt du SpinEdit1, StringGrid1 und Combox1 auf dein Formular, wenn sie nirgendwo verwendet werden?
Irgendwo hab ich mal gelesen: Programmieren ist mehr als Copy & Paste :mrgreen:
Also schreib mal genau wo dein Problem liegt.
Gruss Lothar
Bahade - Mi 18.12.02 14:30
Titel: Jahreskalender oder HILFE, ich weiß nicht mehr weiter.....
Hallo,
ja natürlich habe ich ihn irgendwo her kopiert, loeschen muss wohl durch leer und zeigen durch ausfuellen ersetzt werden?!
Habe leider nicht viel Ahnung davon, darum bitte ich euch, mir zu helfen....
Das ganze ist ja schon mal die richtige Richtung.
Jetzt muss ich nur noch die vielen Fehler beseitigen (...)
Aber dazu brauche ich unbedingt euere Hilfe.
Also, es wäre toll, wenn wir zusammen das hinkriegen könnten!!!
Danke & Grüße aus Düsseldorf,
Bahade
smiegel - Mi 18.12.02 14:44
Hallo,
in Delphi ist ein Kalender, der auf einem Stringgrid basiert dabei. Zu finden im Reiter "Beispiele". Wenn Du über die Prof.-Version verfügst, ist der Quellcode dazu im Verzeichnis "C:\Programme\Borland\Delphi5\Source\Samples" unter dem Namen "calendar.pas" zu finden.
Schau Dir diesen einmal an, ich denke, da kannst Du genügend Ideen für Deinen Kalender abschauen.
LCS - Mi 18.12.02 15:00
Hi
Als erstes solltest du jetzt mal versuchen herauszufinden, was wohl mit Jahr, Monate und Tage gemeint ist. Das scheinen ja wohl Steuerelemente zu sein. Also wäre der erste Schritt den Steuerelementen die du auf deinem Formular hast, die richtigen Namen zuzuweisen.
Gruss Lothar
Sledge_Hammer - Mi 18.12.02 21:30
wo ihr grad bei kalendern seid, ich hab da auch gleich mal ne frage: wie kann ich ermitteln, welcher tag ein samstag ist (natürlich nicht nur im aktuellen jahr)?
THX Benni
hansa - Mi 18.12.02 21:58
Hi,
ist das nicht die Funktion DayOfWeek ? Ich bin fast der letzte, der sagt, guck in der Delphi-Hilfe, denn die ist sehr beschi........eiden. Zu diesem Thema aber eigentlich nicht. Fast zu umfangreich.
Gruß
Hansa
Tino - Do 19.12.02 10:46
hansa hat folgendes geschrieben: |
Ich bin fast der letzte, der sagt, guck in der Delphi-Hilfe, denn die ist sehr beschi........eiden. |
Das finde ich nicht! Meistens liegt es nur daran das man nicht weiß wo
nach und
wo man suchen muss und wie man letzendlich die Informationen die die Delphi-Hilfe liefert anwendet!
Gruß
TINO
hansa - Do 19.12.02 12:43
Hi Tino,
nun, das stimmt auch wieder, aber ich finde es kommt zu oft vor, wenig aufschlußreiches zu finden. Wie ich aber sagte, in diesem Fall war meine Vermutung richtig. Habs probiert und dabei in der Hilfe noch etwas neues gefunden. DayOfTHEweek, das kenne ich auch nicht mal. Der Vollständigkeit halber sei noch etwas "selbstverständliches" erläutert. Der Cursor muß auf dem Wort stehen, dann erscheint hierzu mit F1 die passende Erläuterung. Weiß man dieses Wort halt nicht genau, kommt das von Tino beschriebene hinzu. Das müßte IMHO so laufen wie die Google-Suche. "Nicht gefunden. Meinten Sie vielleicht.... ?"
Gruß
Hansa
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!