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()