StringGrid markierte Zellen



  • jup, du verstehst da was falsch

    du sollst einfach die DaysInMonth-Funktion aus deinem quelltext rauskopieren und über der StringGrid1SelectCell-Methode wieder einfügen

    da du die DaysInMonth-Funktion innerhalb der StringGrid1SelectCell-Methode verwendest, mußt du sie logischerweise vor der StringGrid1SelectCell-Methode deklarieren.



  • Das hab ich jetzt noch nicht so ganz verstanden, kannst du mir das irgendwie mal an dem Stück Code zeigen?



  • Die Funktion ist aber doch in meiner Headerdatei deklariert!!!



  • ups, ich seh grad, dass ich einen ganz schönen schrott geschrieben hab

    der kennt Year und Month nicht, und ich dachte er kennt die DaysInMonth-Funktion nicht.
    sorry

    deklarier einfach zwei globale variablen Year und Month und setzt deren inhalt wenn das jahr oder der monat geändert wird (du hast ja schon die beiden ereignisse abgefangen)

    dann kennt er auch die beiden variablen
    hier nochmal zu veranschauung:

    int Year, Month;
    .
    .
    .
    void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int Col, int Row, bool &CanSelect) 
    { ...
    }
    
    void __fastcall TForm1::ComboBoxChange(TObject *Sender) 
    { Year = StrToInt(Edit->Text);
    } 
    
    void __fastcall TForm1::EditChange(TObject *Sender) 
    { Month = ComboBox->ItemIndex + 1;
    }
    

    musst halt deine namen von der combobox und dem editfeld einsetzen, da ich nicht weiß, wie sie bei dir heißen



  • Hab das nun anders gelöst. Jetzt habe ich allerdings noch ein Problem:

    Ich muß um das auszurechnen immer 2 Mal auf den Monat klicken, was hab ich da noch falsch gemacht????



  • wie soll man dass erraten, was du falsch gemacht hast
    du hast nur geschrieben dass du es anders gelöst hast
    dass läßt viel raum für spekulationen 😃
    zeig mal deinen code, was du bisher gemacht hast (aber nur den teil, der für das problem relevant ist, nich das du hier dein komplettes projekt postest)



  • void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int Col,
          int Row, bool &CanSelect)
    {
     int Year=ComboBox1->ItemIndex + 1 ;
        int Month=StrToInt(Edit6->Text) ;
        for(int i=0; i<31; i++)
        Monatsstunden(DaysInMonth(Year,Month),StringGrid1->Cells[i+1][6]);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::UpDown1Click(TObject *Sender, TUDBtnType Button)
    {
        ShowCalendar(StrToInt(Edit6->Text), ComboBox1->ItemIndex + 1);
    
        for(int i=0; i<31; i++)
        {
          if((StringGrid1->Cells[i+1][1]=="Sa")||(StringGrid1->Cells[i+1][1]=="So"))
          {
             StringGrid1->Cells[i+1][2]="XXX";
             StringGrid1->Cells[i+1][3]="XXX";
             StringGrid1->Cells[i+1][4]="XXX";
             StringGrid1->Cells[i+1][5]="XXX";
             StringGrid1->Cells[i+1][6]="XXX";
          }  // schließt den ganzen Samstag und Sonntag aus
          else
          {
             StringGrid1->Cells[i+1][2]="";
             StringGrid1->Cells[i+1][3]="";
             StringGrid1->Cells[i+1][4]="";
             StringGrid1->Cells[i+1][5]="";
             StringGrid1->Cells[i+1][6]="";
          }
       }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ComboBox1Change(TObject *Sender)
    {
        ShowCalendar(StrToInt(Edit6->Text), ComboBox1->ItemIndex + 1);
    
        for(int i=0; i<31; i++)
        {
          if((StringGrid1->Cells[i+1][1]=="Sa")||(StringGrid1->Cells[i+1][1]=="So"))
          {
             StringGrid1->Cells[i+1][2]="XXX";
             StringGrid1->Cells[i+1][3]="XXX";
             StringGrid1->Cells[i+1][4]="XXX";
             StringGrid1->Cells[i+1][5]="XXX";
             StringGrid1->Cells[i+1][6]="XXX";
          }  // schließt den ganzen Samstag und Sonntag aus
          else
          {
             StringGrid1->Cells[i+1][2]="";
             StringGrid1->Cells[i+1][3]="";
             StringGrid1->Cells[i+1][4]="";
             StringGrid1->Cells[i+1][5]="";
             StringGrid1->Cells[i+1][6]="";
          }
       }
    }
    //---------------------------------------------------------------------------
    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+1][j] = "";
        int FirstDayOfMonth = (DayOfWeek(EncodeDate(Year, Month, 1)) - 1) % 7;
        for(int i=0; i<DaysInMonth(Year, Month); i++)
        {
            StringGrid1->Cells[i+1][1] = ShortDayNames[(FirstDayOfMonth + i) % 7];
            StringGrid1->Cells[i+1][0] = IntToStr(i+1);
        }
    
        StringGrid1->ColCount=(DaysInMonth(Year,Month))+1; //Anzahl d. Spalten nach Monatstagen setzen
    
        for(int i=0; i<31; i++)
        Monatsstunden(DaysInMonth(Year,Month),StringGrid1->Cells[i+1][6]);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Monatsstunden(int tage, AnsiString kreuze )
    {
        //Monatsstunden bei 8 Stundentag
        int Anzahl=StringGrid1->ColCount-1;
        for(int i=0; i<StringGrid1->ColCount-1; i++)
            Anzahl -= StringGrid1->Cells[i+1][6].LowerCase().Pos("xxx") >0;
    
        Edit1->Text = IntToStr(Anzahl);
    }
    //---------------------------------------------------------------------------
    

    Und mein Problem liegt darin, dass wenn ich das Programm starte und auf einen Monat klicke, dann kommt immer erst die Gesamtzahl der Monatstage und beim zweiten Mal auf den selben Monat klicken kommt die richtige Anzahl der Monatsstunden (krank und Sa/So abgezogen)!! Ich habe keine ahnung was da nun falsch ist. Weiß das vielleicht jemand???

    Das was du in deinem Beitrag vorhins geschrieben hast, hatte ich derweil selbst herausgefunden und auch so gelöst!!! *fg*



  • Es funktioniert, ich mußte nur die Monatsstunden()-Funktionen auch in dei ComboBox1Change und die UpDown1Click-Methoden eintragen. Und jetzt gehts!!!!



  • puhh, endlich, ich war schon langsam am verzweifeln 😉



  • Ich auch, doch ich Depp bin auch nicht gleich auf diese Idee gekommen!!! Bin froh das das jetzt funktioniert, denn so hab ich das Programm fast fertig.

    Ich danke dir!!!


Anmelden zum Antworten