MonthCalendar -- einzelne Tage fett markieren



  • Hallo zusammen,

    setze eine monthcalendar-Komponente als Datumsauswahl ein.
    Da kann man ja einiges einstellen.
    Ich hätte aber gerne, dass bestimmte Tage (von mir definiert) (zB. Feiertage etc.) fett gedruckt oder in einer anderen Farbe sind.
    Gibt es da irgendwie eine Möglichkeit?

    Vielleicht über einen Handle der Kompo eine Veränderung erwirken???

    Danke im Voraus für eure schlauen Tipps.

    Gruß
    Riese



  • Mit der Eigenschaft BoldDays soll es funktionieren, aber bei mir ging das damit nicht (BCB 6 Enterprise). Da scheint ein Bug drin zu sein.

    Lösungsvorschlag:

    kopiere folgenden Code ins onGetMonthInfo-Ereignis

    unsigned bolddays[11] = {2,4,9,12,15,19,22,23,24,27,29};
    MonthBoldInfo = 0;
    for(int i=0; i<sizeof(bolddays)/4; i++) MonthBoldInfo += Power(2,bolddays[i]-1);
    

    das ereignis wird immer dann ausgelöst, wenn ein neuer monat gezeichnet werden soll. in der methode bekommst du als "Month" den Monat übergeben, der neu gezeichnet werden soll
    in bolddays kannst du nun die Tage angeben, die fett dargestellt werden sollen



  • Cooler Tipp!!
    Danke!

    Kann man auch die Farbe ändern?

    Gruß
    Riese



  • man kann nur allgemein die farbe der schrift ändern.
    es ist nicht möglich die farbe der normalen und die der fettgedruckten unterschiedlich zu deklarieren.



  • Jester2000 schrieb:

    Da scheint ein Bug drin zu sein.

    Aber nur ein ganz kleiner. 😉

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


  • trotzdem hat das einen bug
    bei mir zeichnet er mehr fette zahlen als er eigentlich soll

    z.B.: im Septermber markiert er die 9 Fett
    im Juli markiert er die 7 Fett
    im November markiert er die 11 Fett
    .
    .
    .

    hab das Beispiel von dir übernommen (sprich nur die Zahlen 2, 4, 6, 8, 10 angegeben)



  • wie gesagt, im september tritt der fehler auch auf und so weit ich weiß, haben wir gerade september 😉
    aber die dicke 9 fällt zwischen der 8 und der 10 auch nicht so schnell auf



  • Du hast recht.
    Aber wie hätte ich auch auf die Idee kommen sollen, das mit einem anderen als dem aktuellen Monat zu testen? 😉
    Und die 9 habe ich voll übersehen, weil ich meine Tests fast ausschliesslich mit deinem Zahlenset durchgeführt hatte. 😮 🙂



  • stimmt, ich hatte ja die 9 mit drin
    was für ein glück, dass ich mit deinen zahlen getestet hab, sonst wär mir der bug auch nicht ins auge gefallen



  • Hallo!

    Habe rausgefunden dass das bei mir auch immer so ist.
    Also immer genau die Zahlen werden fett gemacht die angegeben sind UND immer die Zahl des Monats (zB. 9 für Sep.) wird auch fett gemacht.

    Hhhmmm.
    Seltsamer Effekt.

    Verwende BCB5. Hat jemand noch Erfahrungen, Tipps?

    Gruß
    Riese



  • Bei mir ist das auch so.

    Hat jemand in der Zwischenzeit Abhilfe für dieses Problem entdeckt?

    Gruß
    Franzi



  • N'Abend zusammen.
    Ich brauche im Moment auch einen TMonthCalendar, hatte den thread gesehen, mich an einen Tip hier aus dem Forum gehalten (thx an akari) 👍 und ein wenig herumexperimentiert (und die BCB-Hilfe genommen).
    Und siehe da, ich habe eine Lösung gefunden:

    ( ⚠ kopierter/falscher Text nur zu Veranschaulichung der Unterschiede:)

    So kamen immer auch die "Monatsnummern" fett hervor: 👎

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

    Mit folgendem Code bleiben die "Monatsnummern" normal dick: 👍

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

    Und nun kommt das beste: mit diesem Code bleiben die "Monatsnummern" ebenfalls normal dick: 👍

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

    Fazit:Fazit:
    Es spielt also anscheinend keine Rolle, ob ich den gecasteten Calendar nehme oder trotz dynamic_cast direkt auf die
    MonthCalandar1->BoldDays Methode zugreife 😮.
    Bei mir war das einzig entscheidende Kriterium, dass ich den dynamic_cast aufrufe.
    Klingt nicht nur komisch, ist auch so! 😕

    Hocherhobenem Hauptes werde ich mich nun zurücklehnen und die Lorbeeren ernten....... 😃
    Alles Gute, Mouse

    P.S.: Die blöde Warnung, die im letzten Bsp kommt, wegen des "assigned but unused Calendar" die
    muss man einfach ignorieren 🕶 , oder die Variable einfach mal irgendwie benutzen...



  • D@ngermouse schrieb:

    N'Abend zusammen.
    mich an einen Tip hier aus dem Forum gehalten (thx an akari) 👍 und ein wenig herumexperimentiert (und die BCB-Hilfe genommen).

    ah, es doch schon, wenn man geachtet wird (du bekommst einen Schleimpunkt) 🙂

    Wenn deine zweite Variant funktioniert, ist das gut, war sicher auch so von Borland gedacht, oder?

    P.S.: Die blöde Warnung, die im letzten Bsp kommt, wegen des "assigned but unused Calendar" die
    muss man einfach ignorieren 🕶 , oder die Variable einfach mal irgendwie benutzen...

    Du könntest auch einfach die Variable komplett rausnehmen.

    bis bald
    akari



  • akari schrieb:

    Du könntest auch einfach die Variable komplett rausnehmen.

    ...Test...

    Das klappt leider nicht: 👎
    Nur den dynamic_cast ausgeführt ohne die Zuweisung an die Variable sind wieder auch die "Monatsnummern" fett.

    Mouse.

    P.S. Im obigen Bsp kann man es am besten beim Wechsel zwischen Feb und März erkennen...



  • akari schrieb:

    Wenn deine zweite Variant funktioniert, ist das gut, war sicher auch so von Borland gedacht, oder?

    Das glaube ich weniger, denn die Help-files von borland machen das auch ohne den dynamic-cast, sondern "einfach so",
    da die BoldDays-Methode von TCommonCalendar ist.
    Auf den dynamic cast bin ich gekommen, um aus dem TMonthCalendar einen TCommonCalendar zu machen...

    Wie geschrieben: Ich habe halt ein wenig "herumexperimentiert"
    Gruß, Mouse



  • Hat noch jemand etwas dazu zu sagen, oder gar eine Erklärung für das seltsame Verhalten?
    Ansonsten kommt der Thread in die FAQ.



  • 😉


Anmelden zum Antworten