W poradzie
Określanie koloru dla wybranej komórki StringGrid jest tak:
- Kod: Zaznacz cały
-
- void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
- int ARow, TRect &Rect, TGridDrawState State)
- {
- if(ARow == 2)
- {
- if(ACol == 1) StringGrid1->Canvas->Brush->Color = clYellow;
- if(ACol == 2) StringGrid1->Canvas->Brush->Color = clRed;
- if(ACol == 3) StringGrid1->Canvas->Brush->Color = clBlue;
- if(ACol == 4) StringGrid1->Canvas->Brush->Color = clGreen;
- StringGrid1->Canvas->FillRect(Rect);
- StringGrid1->Canvas->TextOut(Rect.Left, Rect.Top, StringGrid1->Cells[ACol][ARow]);
- }
- }
-
Odrysowaniem koloru steruje zdarzenie OnDrawCell, które jest wywoływane każdorazowo, gdy zachodzą jakieś zmiany w obiekcie StringGrid.
Zastanów się jak można sterować kolorem komórki? Przecież to banalnie proste, wystarczy zdefiniować zmienną globalną typu TColor i to za jej pomocą zmieniać kolor komórki:
plik nagłówkowy np. Unit1.h
- Kod: Zaznacz cały
plik źródłowy np. Unit1.cpp
- Kod: Zaznacz cały
-
- void __fastcall TForm1::Button1Click(TObject *Sender)
- {
- kolor = clRed;
- StringGrid1->Repaint();
- }
- //-----------------------------------------------------------------------------------
- void __fastcall TForm1::Button2Click(TObject *Sender)
- {
- kolor = clYellow;
- StringGrid1->Repaint();
- }
- //-----------------------------------------------------------------------------------
- void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
- int ARow, TRect &Rect, TGridDrawState State)
- {
- if(ARow == 2)
- {
- if(ACol == 1) StringGrid1->Canvas->Brush->Color = kolor; // tutaj zmienna steruje kolorem
- StringGrid1->Canvas->FillRect(Rect);
- StringGrid1->Canvas->TextOut(Rect.Left, Rect.Top, StringGrid1->Cells[ACol][ARow]);
- }
- }
-
Ten prosty przykład powinien dać Tobie ogląd na sprawę, a jeżeli nie zrozumiałeś, to już nie pomogę.