Kalender mit Termineintrag



  • Hallo,

    ich möchte das in meinem Programm ein Kalender ist, wo ich an bestimmten Tagen Termine eintragen kann; z.B: für Datum 01.06.2009: 19 Uhr Traning.
    Im Kalender sollen die Termine dann farbig oder fett markiert sein.
    Bei jedem Programmstart sollen die Daten wieder geladen werden.

    Ich weiß leider nicht wo ich anfangen soll und überhaupt sowas möglich ist. Ich habe mir schonmal den TMonthCalender angeschaut, der sieht auch super aus,
    nur weiß ich nicht wie ich Termine dort eintragen kann.



  • Hi,

    in diese Komponente kannst du auch nichts eintragen. Aber du kannst Tage markieren/fett darstellen/einkreisen etc. als Zeichen dafür, dass für diesen Tag eine Notiz da ist.
    Sie ist in deinem Fall sozusagen der Übersichtskalender.

    Mit einem Mausklick in den Kalender

    void __fastcall TForm1::MonthCalendarClick(TObject *Sender)
    {
       TDateTime dt    = MonthCalendar->Date;
       Label1->Caption = DateToStr(dt);
    }
    //---------------------------------------------------------------------------
    

    bekommst du den angeklickten Tag zurück.

    Nun brauchst du einen etwas grösseren Kalender, in den du Notizen schreiben kannst. Ein StringGrid o. DrawGrid geht dazu.
    In die Zeilen die Uhrzeit, in die Spalten die Monatstage.

    Abspeichern könnte man die Daten in eine Datenbank, in ein IniFile oder
    in eine ICS-Datei (Outlook- und Handy- Kalender werden damit gefüttert, das Proggen ist aber eher anspruchsvoll).

    Hoffe, du kommst weiter.

    mfg
    kpeter



  • wie kann ich denn im Kalender ein Datum auswählen und dann in die mit der Maus ausgwewählte Zelle vom StringGrid eintragen?

    so habe ich das bereits, aber da schreibe ich nur in eine bestimmte Zelle

    StringGrid1->Cells[0][i] = MonthCalendar1->Date.DateString();
    


  • Hallo

    TStringGrid bietet entsprechende Eigenschaften an, mit denen man den Index der aktuell ausgewählte Zeile bzw. Spalte auslesen kann. Weiteres kannst du in der BCB-Hilfe nachlesen.

    bis bald
    akari



  • akari schrieb:

    Hallo

    TStringGrid bietet entsprechende Eigenschaften an, mit denen man den Index der aktuell ausgewählte Zeile bzw. Spalte auslesen kann. Weiteres kannst du in der BCB-Hilfe nachlesen.

    bis bald
    akari

    ich durchsuche schon die ganze zeit das forum, du könntest doch mal nen code tipp geben, anstatt immer auf die hilfe zu verweisen



  • Hallo

    Wenn du in der BCB-Hilfe nachgeschaut hättest, dann hättest du die Eigenschaften TStringGrid::Col und TStringGrid::Row auch selber gefunden.

    bis bald
    akari



  • ok habs folgermaßen gelöst, für andere, die es eventuell auch brauchen könnten:

    void __fastcall TForm1::MonthCalendar1DblClick(TObject *Sender)
    {
    if (StringGrid1->Col == 0) {
    // ausgewaehltes Datum in die Zelle schreiben
    StringGrid1->Cells[StringGrid1->Col][StringGrid1->Row] =
    MonthCalendar1->Date.FormatString("dd.mm.yyyy");
    }
    else {
    MessageDlg("Bitte Spalte \"Datum\" zuerst anklicken!", mtWarning, TMsgDlgButtons() << mbOK, 0);
    }
    }
    


  • Wo kann ich denn einstellen, dass wenn die Zeilen im StringGrid voll sind, dass zusätzliche Zeilen angezeigt werden?



  • StringGrid->RowCount++;



  • das gind aber schnell, vielen dank.

    weißt du denn auch wenn das letzte feld belegt ist, dass automatisch eine zeile hinzugefügt wird

    hat sich erledigt, ich mach dies einfach auf knopfdruck:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    StringGrid1->RowCount += 1;
    }
    


  • Nun möchte ich, wie ganz oben geschildert, die Daten (also das jeweilige Datum) im Kalender fett oder farbig markiert haben.

    ich habe mir schonmal den folgenden Code aus dem Forum angeguckt:

    void __fastcall TForm1::MonthCalendar1GetMonthInfo(TObject *Sender, DWORD Month,
    	  DWORD &MonthBoldInfo)
    {
    TCommonCalendar *Calendar = dynamic_cast <TCommonCalendar *> (Sender);
    unsigned bdays[5] = {2,4,6,8,10};
    unsigned int x = MonthBoldInfo;
    Calendar->BoldDays(bdays, sizeof(bdays)/sizeof(bdays[4]), x);
    MonthBoldInfo = x;
    }
    

    Ich weiß jetzt leider nicht wie ich die Daten vom StringGrid im Kalender darstellen kann



  • Mit sowas:

    StringGrid1->RowCount += 1;
    //oder
    StringGrid->RowCount++;
    

    Wäre ich vorsichtig. Die Member der VCL-Objekte sind oft "versteckte" Funktionen (bsp. GetRowCount(), SetRowCount()). In dem Fall funktioniert die Zuweisung nicht. Richtig wäre dann:

    StringGrid1->RowCount = StringGrid1->RowCount + 1;
    

    aufgelöst wäre das nämlich:

    StringGrid1->SetRowCount(StringGrid1->GetRowCount() + 1);
    

    mfg
    xXx



  • -=]xXx[=- schrieb:

    Die Member der VCL-Objekte sind oft "versteckte" Funktionen (bsp. GetRowCount(), SetRowCount()). In dem Fall funktioniert die Zuweisung nicht.

    Doch, tut sie; es hängt auch nicht davon ab, ob der Zugriff über Getter- und Setter-Funktionen oder direkt über das Feld erfolgt. Vielmehr ist der Typ entscheidend - bei skalaren Typen geht es, bei allen anderen nicht.

    In einem Nachbarthread hatte ich schon einmal auf meine Zusammenfassung der Property-Regeln verwiesen.



  • @ -=]xXx[=- und audacia
    Vielen Dank für den Hinweis. Werde es in Zukunft beachten.

    Hättet ihr auch ne Lösung wie ich die Datumseingaben im StringGrid im Kalender fett darstellen kann?



  • Hallo

    Siehe FAQ hier im BCB-Forum, Abschnitt StringGrid, Thread farbige Zellen/Zeilen

    bis bald
    akari



  • akari schrieb:

    Hallo

    Siehe FAQ hier im BCB-Forum, Abschnitt StringGrid, Thread farbige Zellen/Zeilen

    bis bald
    akari

    Hallo akari,

    ich habe mich glaub ich bissl undeutlich ausgedrückt:
    Ich möchte, das die Termine, die im StringGrid sind IM KALENDER (also im TMonthCalendar) fett dargestellt werden. Ich möchte NICHT die Zellen vom StringGrid farbig markieren oder ähnliches.
    Gibt es da ne Möglichkeit?



  • Hi,

    dafür gibt es im TMonthCalendar dieses Ereignis (Beispiel):

    void __fastcall TForm1::MonthCalendar1GetMonthInfo(TObject *Sender, DWORD Month, DWORD &MonthBoldInfo)
    
    {
       unsigned bolddays[7] = {1, 2, 5, 11, 18, 19, 20};
       unsigned Buffer = MonthBoldInfo;
       MonthCalendar1->BoldDays(bolddays,6,Buffer);
       MonthBoldInfo = Buffer;
    }
    //---------------------------------------------------------------------------
    

    mfg
    kpeter



  • damit kann ich aber nur die vorgegebenen 7 Daten fett darstellen.

    Ich möchte aber die Datumseinträge, die sich im StringGrid befinden, im Kalender fett darstellen!



  • Hi,

    die Lösung sticht doch ins Auge!

    Du musst halt den Monat als DWORD und die zu markierenden Tage als Array dieser Funktion übergeben.
    Wo ist da das Problem?

    mfg
    kpeter



  • mir sticht gar nichts ins auge 🙂

    danke kpeter für deinen lösungsansatz, doch ich komm wirklich nicht weiter. ich habe es schon so oft versucht, sogar mit string in unsingned int umzuwandeln und dann reinzuschreiben, doch es klappt nicht.
    wäre Dir und den anderen echt dankbar, wenn Ihr mir das mal zeigen könntet


Anmelden zum Antworten