Autor Beitrag
Bahade
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 17.12.02 19:30 
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!

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: 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.)

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
Bahade Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: 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.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
Sledge_Hammer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32

Win 98 SE, Win XP
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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