Kalenderdaten im StringGrid (war: Hilfe zu Borland)



  • In der Hilfe steht das DaysInMonth(Year,Month); eine globale Funktion ist. Was kann ich daraus schließen???



  • nimm folgende funktion, die berechnet dir die tage im monat (unter berücksichtigung der Schaltjahre)

    int DaysInMonth(int Year, int Month)
    { int monatstage[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
      if(Month == 2)
       { if(!(Year % 4))
          if (Year % 100)
            monatstage[1] = 29;
           else if (!(Year % 400))
            monatstage[1] = 29;
       }
      return monatstage[Month - 1];
    }
    


  • Sonnenschein84 schrieb:

    In der Hilfe steht das DaysInMonth(Year,Month); eine globale Funktion ist. Was kann ich daraus schließen???

    1. Daß Du die Funktion von überall aus aufrufen kannst.
    2. Daß Du Dich umbedingt über das Thema "Gültigkeitsbereich" bzw. "Scope" schlau machen solltest.



  • Ok das funktioniert nun, aber ich nun hab ich eher ein optisches Problem und zwar muß ich die Wochentage (Mo-So) alle in eine Zeile bekommen und dann die 1-31 in eine andere. Kann man das in deinem Quellcode umändern???
    Und mein zweites optisches Problem liegt darin, dass ich bei der Anzeige immer die 1 in der ersten Spalte stehen haben möchte und somit soll der Tag ihr zugeordnet werden. Verständlich oder spreche ich wieder in Rätsel???
    Wäre lieb wenn du mir dabei auch noch helfen könntest, denn bisher hast du mir verdammt viel mit deinem Quellcode geholfen. Ich brauch das nämlich um das Programm noch weiterzuentwickeln und das muß jetzt ziemlich schnell passieren und an dem Kalender hängts bei mir. Wäre also ganz lieb wenn du mir noch weiterhelfen könntest.

    DANKE



  • meintest du so?:

    void __fastcall TForm1::ShowCalendar(int Year, int Month)
    { for(int i=0; i<31; i++)
       for(int j=0; j<2; j++)
        StringGrid1->Cells[i][j] = "";
      int FirstDayOfMonth = (DayOfWeek(EncodeDate(Year, Month, 1)) - 1) % 7;
      for(int i=0; i<DaysInMonth(Year, Month); i++)
       { StringGrid1->Cells[i][0] = ShortDayNames[(FirstDayOfMonth + i) % 7];
         StringGrid1->Cells[i][1] = IntToStr(i+1);
       }
    }
    

    musst dann aber in der Header-datei die zeile

    void __fastcall ShowCalendar(int FirstDayOfWeek, int Year, int Month);
    

    in

    void __fastcall ShowCalendar(int Year, int Month);
    

    verändern
    und dein Stringgrid sollte dann mind. 31 Spalten haben



  • Sonnenschein84 schrieb:

    In der Hilfe steht das DaysInMonth(Year,Month); eine globale Funktion ist.

    In der Hilfe zum BCB3 steht etwas über DaysInMonth, und du benutzt jetzt DaysInMonth im BCB3!?
    Nach allem was ich weiss gibt's das erst ab BCB6, deshalb habe ich ganz bewusst die DateUtils-Funktionen nicht vorgeschlagen.



  • Danke so meinte ich das. Ich danke dir für deine Hilfe. Mal noch eine Frage könnte man das jetzt noch variabel machen mit den Tagen, dass sich das StringGrid mit den Cols an die Tage genau anpaßt??



  • Ok die Frage hat sich erledigt hab das allein hinbekommen mit:

    StringGrid1->ColCount=(DaysInMonth(Year,Month))+1;
    

    War ja auch logisch. Ich danke dir dafür das du das mit dem Kalender mir gesagt hast. Danke für deinen Code!!!



  • Was ist denn nun mit DaysInMonth und BCB3?



  • Gibts da nicht, muß man als Funktion selbst schreiben. Nur in der Hilfe von BCB3 steht was dazu, aber man kann das nicht einbinden.


Anmelden zum Antworten