StringGrid farben ändern



  • Hi,

    Wie bekomm ich das hin das nach drücken eines buttons sich sie Frabe einer einzelenen Zelle (z.B. Col 5 Row 6) ändert.

    Mit DrawCell bekomm ich es zwar hin das sich die farbe direkt nach starten des Programms ändert aber es will einfach nicht so wie ich es will 😞

    Danke im vorraus.



  • Bei Druck auf den Button ein boolschen Wert setzen.

    Im Draw Cell diesen Abfragen und dann die Farbe entsprechend setzen



  • Also das funktioniert so aber nicht.

    erstens übermalt der mir meinen text der da drin steht und zweitens verschwindet die farbe wieder sobald der boolsche wert wieder auf 0 ist. hinzu kommt noch das die farbe erst angenommen wird wenn ich das feld anklicke dass die farbe ändern soll.

    ich hab folgenden quelltest:

    void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
          int ARow, TRect &Rect, TGridDrawState State)
    {
    
            if(gedrueckt)
            {
                    if (ACol == 2 && ARow == 2)
                    {
                            StringGrid1->Canvas->Brush->Color = clYellow;
                            StringGrid1->Canvas->Font->Color = clBlack;
                    }
    
                    StringGrid1->Canvas->FillRect(Rect);
                    gedrueckt=false;
            }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::BitBtn1Click(TObject *Sender)
    {
    gedrueckt=true;
    }
    //---------------------------------------------------------------------------
    

    Gibts noch ne andere möglichkeit oder ist mein listing falsch??



  • Hallo

    die Draw-methode sollte ungefähr so aussehen, um insbesondere alle Zustände und Überzeichnungen korrekt abzuarbeiten.
    Um sofort nach dem ButtonClick die Veränderung zu sehen, must du noch nach dem setzen des Bool-Wertes StringGrid1->Update() ausführen.

    bis bald
    akari



  • Wenn du auch gedrückt gleich wieder auf false setzt.....

    Im Onclick-Ereignis musst du auch nach dem gedruckt=true das neu zeichnen des Grids veranlassen bsp mit Grid->Update();



  • Wenn ich StringGrid->Update(); in ButtonClick eingebe, sagt mir der Compiler:

    E2247 Zugriff auf '_fastcall TStringGrid::Update(int,int)' nicht möglich



  • Dann nimm Refresh oder Repaint



  • oder Invalidate()


Anmelden zum Antworten